/*Validaciones*/
var _BCValidate = {};
	
	_BCValidate.cnf = {};
	_BCValidate.cnf.ps = "CL";
	
	_BCValidate.cnf.znHrUsr = "GMT-04 Pacific";
	_BCValidate.cnf.clsCtrlErr = "__bcErrCtrl";
	_BCValidate.cnf.clsDivErr = "__bcErrTxt";
	
	_BCValidate.cnf.errores = [
								{id:"noEmpty",nm:"Obligatorio",ds:"Dato debe ser completado"},
								{id:"isNumber",nm:"Numerico",ds:"Dato debe ser numerico"},
								{id:"isMail",nm:"Mail invalido",ds:"Dato debe tener un Mail valido"},
								{id:"isAlphaNum",nm:"Alfanumerico",ds:"Dato debe ser alfanumerico"},
								{id:"isRut",nm:"Rut invalido",ds:"Dato debe tener un rut valido. Ej: 15.246.326-K"},
								{id:"isDate",nm:"Fecha invalida",ds:"Dato debe tener un rut valido. Ej: 31-12-2008 o 31-12-2008 14:59:00"},
								{id:"isPorc",nm:"Porcentaje invalido",ds:"Dato debe tener un porcentaje válido"}
							];
	
	
	_BCValidate.isPorc=function(value){
		var pattern=new RegExp("^[0-9]+(\\.[0-9]+){0,1}$");
		return value.match(pattern);
	}
	
	_BCValidate.noEmpty=function(value){
		var pattern=new RegExp("^[ ]*$");
	    if(value.match(pattern) || value.length==0)
		return false;else return true;
	}
	_BCValidate.isNumber=function(value){
		var pattern=new RegExp("^[0-9]+(\\.[0-9]+){0,1}$");
		return value.match(pattern);
	}
	_BCValidate.isAlphaNum=function(value){
		var pattern=new RegExp("^[á-úÁ-Úà-ùÀ-Ùa-zA-ZñÑ0-9']+$");
    	return value.match(pattern);
	}
	_BCValidate.isDate=function(value){
		var response = true;
		/*
		var pattern1=new RegExp("^(0[0-9]|[1-2][0-9]|30|31)-(0[13-9]|1[0-2])-[1-9][0-9][0-9][0-9]");
	    var pattern2=new RegExp("^(0[0-9]|[1-2][0-9])-(0[0-9]|1[0-2])-[1-9][0-9][0-9][0-9]");
		var pattern3=new RegExp("^(0[0-9]|[1-2][0-9]|30|31)-(0[13-9]|1[0-2])-[1-9][0-9][0-9][0-9] [ 0-2][0-9]:[0-5][0-9]:[0-5][0-9]");
	    var pattern4=new RegExp("^(0[0-9]|[1-2][0-9])-(0[0-9]|1[0-2])-[1-9][0-9][0-9][0-9] [ 0-2][0-9]:[0-5][0-9]:[0-5][0-9]");

		if (value.match(pattern1) || value.match(pattern2)) {
	        if (parseInt(value.substr(6,4))%4!=0 && parseInt(value.substr(3,2))==2 && parseInt(value.substr(0,2))==29) {
	            response = false;
	        }
	    }
		if (value.match(pattern3) || value.match(pattern4)) {
	        if (parseInt(value.substr(6,4))%4!=0 && parseInt(value.substr(3,2))==2 && parseInt(value.substr(0,2))==29) {
	            response = false;
	        } 
	    }
		else {
			response = false
		};
		*/
		return response;
	}
	_BCValidate.isHarmfulHtml=function(texto){
	return true;
	}
	_BCValidate.isMail=function(value){
		var pattern=new RegExp("^([a-zA-Z0-9_\\-]+\\.{0,1})+@([a-zA-Z0-9_\\-]+\\.)+[a-zA-Z0-9_\\-]+$");
		return value.match(pattern);
	}
	_BCValidate.isRut=function(value,o){
		switch(_BCValidate.cnf.ps){

		case "CL":
			
			var pattern=new RegExp("^(([0-9]{1,2}\\.[0-9]{3}\\.[0-9]{3})|([0-9]{7,8}))\\-([0-9K])$", "i");
		    var pattern_point=new RegExp("\\.", "g");
		    var pattern_dv=new RegExp("([0-9]+)\\-([0-9K])", "i");

		    value=Trim(value);
		    if (value.match(pattern)) {
		        value=value.replace(pattern_point, "");
		        if (value.match(pattern_dv)) {
		            number=new String(RegExp.$1);
		            dv=new String(RegExp.$2);
		            sum = 0;
		            mul = 2;
		            for (i = number.length - 1 ; i >= 0; i--) {
		                sum += number.charAt(i) * mul;
		                mul == 7 ? mul = 2:mul++;
		            }
		            rest = sum % 11;
		            if (rest == 1) dvr = 'K';
		            else if (rest == 0) dvr = '0';
		            else  {
		                dvr = 11-rest;
		            }
		            return dvr==dv.toUpperCase();

		        }
		    }
		break;
			
		default:
			return true;
		break;
		
		}
	}

	/*
		@param: o. Type ArrayObj JS. Cada item de este arreglo debe ser un objeto {  } con la sgte strcutura
			value: Valor. Debe tener un atributo value (como en los objetos html nativos) o un metodo getValue(),
			list:  Arreglo de ids de errores (o validaciones) a aplicar. Usar ids de _BCValidate.cnf.errores
			idHtml: id de Div contenedor de feedback	
		
	*/
	_BCValidate.getError = function(id){
		for(var i=0;i<_BCValidate.cnf.errores.length;i++){
			if(id == _BCValidate.cnf.errores[i].id) return _BCValidate.cnf.errores[i];
		}
		return null;
	}
	
	_BCValidate._do = function(o){
		
		var aValidar = new Array();
		//alert("Limpiamos las divs de errores")
		for(var i=0;i<o.length;i++){
			var element = document.getElementById(o[i].idHtml);
			element.innerHTML = "";
		}
		//alert("Sacamos una lista total de los que hay que validar")
		for(var i=0;i<o.length;i++){		
			var fg = false;
			//Llenamos los obligatorios
			for(var j=0; j<o[i].list.length; j++){
				if(fg == false && o[i].list[j].id=="noEmpty"){
					aValidar.push(o[i]);
					fg = true;
				}
			}
			//Llenamos los no obligatorios que tienen valores
			if(fg == false && aValidar[i] == undefined && _BCValidate.noEmpty(o[i].value)){
				aValidar.push(o[i]);
			}
		}
		
		//alert("validamos y sacamos del arreglo aValidar.list las validaciones que sí se estan cumpliendo")
		for(var i=0;i<aValidar.length;i++){
			for(var j=0; j<aValidar[i].list.length; j++){
				var result = false;
				switch(aValidar[i].list[j].id){
					case "noEmpty":
						result = _BCValidate.noEmpty(aValidar[i].value);
					break;
					case "isPorc":
						result = _BCValidate.isPorc(aValidar[i].value);
					break;
					case "isNumber":
						result = _BCValidate.isNumber(aValidar[i].value);
					break;
					case "isMail":
						result = _BCValidate.isMail(aValidar[i].value);
					break;
					case "isAlphaNum":
						result = _BCValidate.isAlphaNum(aValidar[i].value);
					break;
					case "isRut":
						result = _BCValidate.isRut(aValidar[i].value,o);
					break;
					case "isDate":
						result = _BCValidate.isDate(aValidar[i].value,o);
					break;
					
					case "isHarmfulHtml":
						result = _BCValidate.isHarmfulHtml(aValidar[i].value,o);
					break;
					
				}
				//alert("["+aValidar[i].idHtml.split('_')[2]+"] Resulado de "+aValidar[i].list[j].id+": "+result)
				if(result){
					//alert("Entra a NULEAR la validacion "+aValidar[i].list[j].id)
					aValidar[i].list[j]=null;
				}
			}
		}
		var fgr = true;
		for(var i=0;i<aValidar.length;i++){
			var element = document.getElementById(aValidar[i].idHtml);
			element.innerHTML += '';
			for(var j=0; j<aValidar[i].list.length; j++){
				//alert("Lista de validaciones del "+i+"°: "+aValidar[i].list[j]+"\n"+JSON.stringify(aValidar[i].list))
				if(aValidar[i].list[j]==undefined || aValidar[i].list[j]==null){}else{
					fgr = false;
					try{
						var error = _BCValidate.getError(aValidar[i].list[j].id);
						YAHOO.util.Dom.setStyle(element.id, 'opacity', 0.2); 
						var fade = new YAHOO.util.Anim(element.id,{ opacity: { to: 1 } }, 0.8,YAHOO.util.Easing.easeIn); 
						fade.animate();
						element.innerHTML += '<div class="'+_BCValidate.cnf.clsDivErr+'"><span class="h">'+error.nm+'.</span><span class="b">'+error.ds+'</span></div>';
						
					}catch(e){
						//alert(e);
					}
				}
			}
		}
		
		return fgr;
	}
