﻿
	var CapturaObj = '';


String.prototype.trim=function (){
	s=this;
	while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r')){s=s.substring(1,s.length);}
	while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r')){s = s.substring(0,s.length-1);}
	return s;
}
var valida={

	alertaContinua:false,
	tipoAlerta:"alerta",
	aspectoAlerta:"bloqueError",

	f:null,
	datos:[],
	correcto:true,
	esp:true,
	expecial:[],
	cumpleDependencias:true,
	dependencias:[],
	edadMax:120,
	strAlertaContinua:"",
	controlError:true,
	ids:null,
	esCorrecto:[],
	
	cargaIdioma:function(){
		//var codIdioma=document.getElementsByTagName("html")[0].lang;
		var htmlHead=document.getElementsByTagName("head")[0]
		var codIdioma=document.getElementsByTagName("meta")[0].content;
		var eleScript=document.createElement("script")
		var idiomas = codIdioma.split("-");
		var idioma = "es";
		if (idiomas.length > 0)
		   idioma = idiomas[0];
		   
		eleScript.src="/WebPortal/Repository/Visionlab/Recursos/js/idiomas/lang_"+idioma+".js"
		htmlHead.appendChild(eleScript)	
	
	},		
	captura:function(){
		valida.obj=(this.id)? this : window.event.srcElement;
		valida.f=valida.obj.name;
		valida.nforms+=1;
		valida.ids=valida.obj.id.toString();
		var dts=new Array();
		dts[valida.ids]=(valida.datos[valida.ids])?  valida.datos[valida.ids]:valida.datos;
		valida.esCorrecto[valida.ids]=false;
		los_datos=dts[valida.ids];
		valida.ejecuta();
	
		var cform = (this.id)? this : window.event.srcElement;
		if(valida.correcto) {if(valida.esp && valida.cumpleDependencias){valida.esCorrecto[valida.ids]=true;/*cform.submit()*/}}		
		return false;
	},
	
	captura2:function(){
		valida.obj=CapturaObj;
		valida.f=valida.obj.name;
		valida.nforms+=1;
		valida.ids=valida.obj.id.toString();
		var dts=new Array();
		dts[valida.ids]=(valida.datos[valida.ids])?  valida.datos[valida.ids]:valida.datos;
		valida.esCorrecto[valida.ids]=false;
		los_datos=dts[valida.ids];
		valida.ejecuta();
	
		var cform = CapturaObj;
		if(valida.correcto) {if(valida.esp && valida.cumpleDependencias){valida.esCorrecto[valida.ids]=true;/*cform.submit()*/}}		
		return false;
	},

	rf:function(id){
		var cp=(isNaN(parseInt(id)))? id:los_datos[id][0];
		return eval("document."+valida.f+ "." +cp);
	},
	setId:function(id){
		valida.ids=id;
		if(!valida.datos[id])valida.datos[id]=[];
		if(!valida.dependencias[id])valida.dependencias[id]=[];
		if(!valida.expecial[id])valida.expecial[id]=[];
	},
	addValidacion:function(){valida.datos[valida.ids][valida.datos[valida.ids].length]=[arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]]},
	addDependencia:function(){valida.dependencias[valida.ids][valida.dependencias[valida.ids].length]=[arguments[0],arguments[1],arguments[2]]},	
	addEspecial:function(){valida.expecial[valida.ids][valida.expecial[valida.ids].length]=[arguments[0],arguments[1],arguments[2]]},	
	muestraError:function(err){
		switch (valida.tipoAlerta){
		    case "alerta":alert(err);break
		    case "capa":
			var ancla="<a name='anclaValidaErr'></a>"
			if(err.indexOf("\n"))err=err.replace(/\n/gi, "<br>");
			if(document.getElementById("capaValidaErr"))document.getElementById("capaValidaErr").innerHTML=ancla+err
			else this.obj.innerHTML=ancla+"<div id='capaValidaErr' class='"+valida.aspectoAlerta+"'>" +err+"</div><br/>" +this.obj.innerHTML 
			location.href="#anclaValidaErr"
			break
		    default:explica="";
		}
		
	},
	ejecuta:function(){
	
		valida.correcto=true;
		valida.cumpleDependencias=true;
		valida.esp=true;
		valida.strAlertaContinua="";
		
		var idFoco=null;
		for(var xx=0;xx<los_datos.length;xx++){		
			campoAct=los_datos[xx]
			campoEsp=(campoAct[2]=="esRadio" || campoAct[2]=="esCheck" )
			if(!campoEsp) valida.rf(xx).value=valida.rf(xx).value.trim().replace(/\'/gi, "\"");
			if(campoAct[3]=="obligatorio" || valida.rf(xx).value!=""){
				var compVal=false;
				if(campoAct[2].indexOf(",")==-1){
					compVal=eval("valida."+campoAct[2]+"('"+valida.rf(xx).value+"')")
				}else{
					arrValAux=campoAct[2].split(",")
					for(var dd in arrValAux){
						if(eval("valida."+arrValAux[dd]+"('"+valida.rf(xx).value+"')")){compVal=true;break;}
					}
				}
				if(compVal){	
					if(!campoEsp){
						if(valida.rf(xx).value.length<campoAct[4]){
							if(idFoco==null) idFoco=xx; valida.error(xx,"min");if(!valida.alertaContinua)break; 
						}else if(valida.rf(xx).value.length>campoAct[5]){
							if(idFoco==null) idFoco=xx; valida.error(xx,"max");if(!valida.alertaContinua)break;
						}
					}
				}else{							
					if(idFoco==null) idFoco=xx;
					valida.error(xx);
					if(!valida.alertaContinua)break;
				}
			}
		}
		if(valida.strAlertaContinua!=""){
			valida.muestraError(valida.strAlertaContinua)
			if(!campoEsp) {valida.rf(idFoco).focus();}
		}
		if(valida.dependencias[valida.ids]!=null && valida.dependencias[valida.ids].length>0 && valida.correcto){			
			for(var pp=0;pp<valida.dependencias[valida.ids].length;pp++){
				if(!valida.depende(valida.dependencias[valida.ids][pp][0],valida.dependencias[valida.ids][pp][1])){
					valida.errorDeDependencia(pp)
					break;
				}
			}
		}
		if( valida.expecial[valida.ids]!=null && valida.expecial[valida.ids].length>0 && valida.correcto){			
			for(var pp=0;pp<valida.expecial[valida.ids].length;pp++){
				if(!eval("window." + valida.expecial[valida.ids][pp][0])){
					valida.errorDeValidacionEspecial(pp)
					break;
				}
			}
		}
	},
	errorDeValidacionEspecial:function(id){
		valida.esp=false;
		valida.muestraError(valida.expecial[valida.ids][id][1])
		eval("document."+valida.f+"."+valida.expecial[valida.ids][id][2]+".focus()")
	},
	errorDeDependencia:function(id){
		valida.cumpleDependencias=false;
		var condDep=valida.dependencias[valida.ids][id][0]
		if(condDep.indexOf(" ")!=-1) {condDep=condDep.split(" ");condDep=condDep[0];}
		valida.muestraError(valida.dependencias[valida.ids][id][2])
		eval("document."+valida.f+"."+condDep+".focus()")
	},	
	error:function(id,maxmin){	
		var explica="";
		var strAlerta="";
		valida.correcto=false;
		
		var cpObligatorio=(los_datos[id][3]=="obligatorio")? "" :""
		switch (los_datos[id][2]){
		    case "esEdad":explica=literal["recuerdaQueEl"]+" " + literal["limiteDeEdadEs"]   + " " +valida.edadMax + " " +literal["anios"];break;
		    case "esFecha":explica=literal["recuerdaQueEl"] +" " +literal["elFormatoCorrectoEs"]   + " DD/MM/AAAA";break;
		   // case "esNif":explica=literal["recuerdaQueEl"] +" " +literal["elFormatoCorrectoEs"]   + " 00000000L (" + literal["num8CifrasYletra"]+")";break;
		    case "esLista":explica=literal["debeSelecionarOpcion"];break;
		    case "esRadio":explica="Debe seleccionar al menos un elemento";break;
		    case "esCodigoPostal":explica=literal["codigoNoEspaniol"];break;
		    default:explica="";
		}
		if(!maxmin || maxmin==null){
			strAlerta= literal["debesIntroducirUn"]+ " '" + los_datos[id][1] + "'"+cpObligatorio+" "+literal["valido"]+  ". " + explica
		}else{
			if((los_datos[id][4]==los_datos[id][5]) && (los_datos[id][4] !=null))
				strAlerta=literal["elCampo"] +" '"+los_datos[id][1]+"'"+cpObligatorio+" "+literal["debeTenerExactamente"] +" "+los_datos[id][4]+" " +literal["caracteres"]
			else if(maxmin=="min" && valida.rf(id).value.length<los_datos[id][4])
				strAlerta=literal["elCampo"] +" '"+los_datos[id][1]+"'"+cpObligatorio+" "+literal["esDemasiado"]+ " " +literal["corto"]+ ", "+literal["suLongMinimaEsDe"]+"  "+los_datos[id][4]+" " + literal["caracteres"]
			else if(maxmin=="max" && valida.rf(id).value.length>los_datos[id][5])
				strAlerta=literal["elCampo"]  +" '"+los_datos[id][1]+"'"+cpObligatorio+" "+literal["esDemasiado"]+ " " +literal["largo"]+ ", "+literal["suLongMaximaEsDe"]+"  "+los_datos[id][5]+" " + literal["caracteres"]
		}
		if(!valida.alertaContinua){
			valida.muestraError(strAlerta);
			if(!campoEsp) valida.rf(id).focus();
		}
		else valida.strAlertaContinua+=strAlerta +" \n"
		return false;
	},
	addError:function(error,foco){
		valida.muestraError(error)
		if(foco!=null) foco.focus();
		valida.correcto=false;
	},
	esCadena:function(c){ 
	return /^[0-9A-Za-z-\/ÑñÁÉÍÓÚáéíóúÜüÄäËëÏïÖö´,'/\\t\n\r ]+$/.test(c);
	},
	esNumero:function(c){return /^[0-9]+$/.test(c);},
	esEdad:function(c){return (valida.esNumero(c) && c<valida.edadMax) ;},
	esMail:function(c){return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(c)},
	esCodigoPostal:function(c){return /^([0-4]{1}[1-9]{1}|10|20|30|40|50|51|52)([0-9]{3})+$/.test(c);},
	esTelefono:function(c){return /^[0-9\s\+\-)(]+$/.test(c)},
	esHora:function(c){return /^([0-1]{1}[0-9]{1}|20|21|22|23|24):[0-5][0-9]$/.test(c)},
	esLista:function(c) { return !((campoAct[3]=="obligatorio") &&  (c=="-1" ||c=="")) },
	esRadio:function(c){
		var rdb=(c!="undefined")? c:campoAct[0]
		var obl=(c)? "obligatorio":campoAct[3]
		var radio=valida.rf(rdb);
		if(obl=="obligatorio"){
			if(radio.length>0) {
				for(var uu=0;uu<radio.length;uu++){
					if(radio[uu].checked)return true 
				}
			}else {return radio.checked}
			return false;
		}return true;
	},
	esFecha:function(c){
		if(!/^([0-2]{1}[1-9]{1}|10|20|30|31)\/(0[1-9]{1}|10|11|12)\/([0-9]{4})+$/.test(c))return false;
		var fch=c.split("/")
		var bisiesto=((fch[2] % 4 == 0 && fch[2] % 100 != 0) || (fch[2] % 400 == 0))? 29 : 28;
		var diasMes=[31,bisiesto,31,30,31,30,31,31,30,31,30,31];
		if(fch[0]>diasMes[fch[1]-1]) return false;
		return true;
	},
	esNif:function(c){
		/*    if (c.length < 9){
	      for (var i=c.length;i<9;i++){
	         c = "0"+c;
	      }
	    }
		if(!/^[0-9]{8}([A-Za-z]{1})$/.test(c)) return false
		var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';		
		return (c.substr(8,9).toUpperCase()==letras.charAt(c.substr(0,8)%23)) ;*/
		return c;
	},
	esNie:function(c){
		if(c.charAt(0).toUpperCase()!="X") return false
		return valida.esNif(c.substr(1,c.length))
	},				
	esCif:function(c){
		if (!/^[A-Za-z0-9]{9}$/.test(c) || !/^[ABCDEFGHKLMNPQS]/.test(c)) return false;
		var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
		var digCrtl=c.charAt(c.length-1);
		var temp = 0;
		for(i=2;i<=6;i+=2 ) {
		      temp = temp + v1[ parseInt(c.substr(i-1,1)) ];
		      temp = temp + parseInt(c.substr(i,1));
		};
		temp = temp + v1[ parseInt(c.substr(7,1)) ];                   
		temp = (10 - ( temp % 10));
		if( temp == 10 ){if(!(digCrtl=="J" || digCrtl=="0")) return false;
		}else{if(digCrtl!=temp) return false; }
		return true;
	},
	comparaFechas:function(c1,c2){
		var f1=c1.split("/");
		var f2=c2.split("/");
		var fecha1=new Date();
		var fecha2=new Date();
		fecha1.setFullYear(f1[2],f1[1]-1,f1[0]);
		fecha2.setFullYear(f2[2],f2[1]-1,f2[0]);
		return (fecha2-fecha1)/1000/60/60/24;
	},
	crearRegla:function(id){
		var regla=id.trim().replace(/\(/gi, "( ").replace(/\)/gi, " )").replace(/ o /gi, " || ").replace(/ y /gi, " && ")
		
		regla=regla.split(" ")
		var reglaFinal=[];
		var negacion="";
		for(var aa=0;aa<regla.length;aa++){
			if(regla[aa]==")" ||  regla[aa]=="(" || regla[aa]=="o" || regla[aa]=="y" || regla[aa]=="&&" || regla[aa]=="||" ){
				reglaFinal[aa]=regla[aa]
			}else{
				if(regla[aa].charAt(0)=="!"){
					negacion="!";
					regla[aa]=regla[aa].substr(1,regla[aa].length)
				}

				ObjF=eval("document."+valida.f+"."+regla[aa]);
				if(ObjF.type) {}
				else{
					if(ObjF[0]) ObjF.type="radio"					
				}
				switch (ObjF.type){
				    case "text": reglaFinal[aa]=negacion +"document."+valida.f+"."+regla[aa]+".value!=''";break;
				    case "select-multiple": reglaFinal[aa]=negacion +"document."+valida.f+"."+regla[aa]+".value!=''";break;
				    case "select-one":reglaFinal[aa]=negacion +"document."+valida.f+"."+regla[aa]+".value!='-1'";break;
				    case "checkbox":reglaFinal[aa]=negacion +"valida.esRadio('"+regla[aa]+"')";break;
				    case "radio":reglaFinal[aa]=negacion +"valida.esRadio('"+regla[aa]+"')";break;
				    default:alert("Mesaje para Desarrollo******:\nEl tipo de obj de formulario que se esta intentado validar su dependencia no esta contemplado en el script de validacion : validar.js");explica="";
				}
			}
			negacion="";
		}
		return eval(reglaFinal.join(" "))
	},
	
	depende:function(c,d){
		var r1=valida.crearRegla(c)
		if(d!=null){ 
			var r2=valida.crearRegla(d)
			if(r1) return r2
		}else{return r1}
		return true;
	}, 
	
	generacionAutomatica:function(){	
	
		var separadorPrincipal="#"
		var separadorSecundario="~"
		var raizNombreValidacion="datosValidacion"
		var raizNombreDependencia="datosDependencias"
		var raizNombreEspecial="datosEspeciales"
		
		var totalFormularios=document.forms.length
		var data;	
		for(var tt=0;tt<totalFormularios;tt++){
			var objF1=document.getElementById(raizNombreValidacion+parseInt(tt+1))
			if(objF1){
				valida.setId(objF1.parentNode.id)
				data=objF1.value.split(separadorPrincipal);
				for(var xx=0;xx<data.length;xx++){
					var subData=data[xx].split(separadorSecundario);
					subData[3]=(parseInt(subData[3])==1)? "obligarorio":"opcional"				
					valida.addValidacion(subData[0],subData[1],subData[2],subData[3],subData[4],subData[5])		
				}
			}
			var objF2=document.getElementById(raizNombreDependencia+parseInt(tt+1))
			if(objF2){
				if(!objF1)valida.setId(objF2.parentNode.id)
				data=objF2.value.split(separadorPrincipal);
			
				for(var xx=0;xx<data.length;xx++){
					var subData=data[xx].split(separadorSecundario);	
					subData[1]=(subData[1]=="null")? null:subData[1]		
					valida.addDependencia(subData[0],subData[1],subData[2])		
				}
			}
			
			var objF3=document.getElementById(raizNombreEspecial+parseInt(tt+1))
			if(objF3){
				if(!objF1 && objF2)valida.setId(objF3.parentNode.id)
				data=objF3.value.split(separadorPrincipal);
				for(var xx=0;xx<data.length;xx++){
					var subData=data[xx].split(separadorSecundario);			
					valida.addEspecial(subData[0],subData[1],subData[2])		
				}
			}
			
			if(objF1){
				alert("tt " + objF1.parentNode.name)
				objF1.parentNode.onsubmit=valida.captura;	
			}
		}
	}
}

//valida.generacionAutomatica()
valida.cargaIdioma()


//******Validaciones especiales***************************************************
var fechas={
	menorQ:function(f1,f2){
		var dif=valida.comparaFechas(f1,f2)
		if(dif<0){valida.addError(literal["fechaAnterior"],valida.obj.fecha);return false;}
		return true;
	},
	almenos:function(f1,f2,anios){
		var dif=valida.comparaFechas(f1,f2)/365
		if(dif<anios){valida.addError(literal["fechaAlmenosXanios"] ,valida.obj.fecha);return false;}
		return true;
	}
}

//e.addEvent(window, 'load',valida.generacionAutomatica,false);