var codIdiomaGeral = document.getElementsByTagName("html")[0].lang.toUpperCase();
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:true,
	tipoAlerta:"capa",
	aspectoAlerta:"f_mens_error",
	f:null,
	layErrorStr:"layErrors",	
	datos:[],
	correcto:true,
	esp:true,
	expecial:[],
	cumpleDependencias:true,
	dependencias:[],
	edadMax:120,
	rutaIdiomas:"StaticFiles/ENAGAS/js/idiomas/",
	strAlertaContinua:"",
	idsAlertaContinua:[],
	controlError:true,
	ids:null,
	esCorrecto:[],
	msgInicial:true,
	W3CDOM:(document.createElement && document.getElementsByTagName),
	cuentaErr:0,
	cpErrColor:["FFF","FFF"],	
	letras: new Array("t","r","w","a","g","m","y","f","p","d","x","b","n","j","z","s","q","v","h","l","c","k","e"),
	cargaIdioma:function(){
		var codIdioma=document.getElementsByTagName("html")[0].lang.toUpperCase();
		var htmlHead=document.getElementsByTagName("head")[0]
		var eleScript=document.createElement("script")
		eleScript.src=valida.rutaIdiomas+'lang'+codIdioma;
		htmlHead.appendChild(eleScript)		
	},		
	
	captura:function(){
		if(arguments.length>0){
			valida.obj=arguments[0]
			var cform =arguments[0].id
		}else{
			valida.obj=(this.id)? this : window.event.srcElement;
			var cform = (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();
		
		if(valida.correcto) {
			if(valida.esp && valida.cumpleDependencias){
				valida.esCorrecto[valida.ids]=true;
				if(arguments.length==0){
					cform.submit()
				}else {
					return true;
				}
			}
		}	
		return false;
	},
	rf:function(id,cp_esp){
		var cp=(isNaN(parseInt(id)))? id:los_datos[id][0];
		if(cp_esp)return eval("document."+valida.f+ "." +cp+"[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]]},
	addEspecial:function(){valida.expecial[valida.ids][valida.expecial[valida.ids].length]=[arguments[0],arguments[1],arguments[2]]},	
	dotarDeAspecto:function (node,reset){
		if(node && node.type!="radio" && node.type!="checkbox"){
			var color=(reset)? "CCC":"FFF";
			valida.cpErrColor[0]
			var color=(reset)?valida.cpErrColor[0]:valida.cpErrColor[1];
			if (campoAct[3] == "obligatorio") { }
		}
	}, 
	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/>");

				var arrErrs=err.split("<br/>")
				
				var theLi=""
				for(var x=0;x<arrErrs.length-1;x++){
					theLi+="<li>"+arrErrs[x]+"</li>"
				}
				/*
				si existe la capa de error 
					relleno capa error con listado errores 
				si no existe capa error 
					creacion dom de capa error 
						relleno capa error con listado errores
				*/
				if(document.getElementById("capaValidaErr")){
					//document.getElementById("capaValidaErr").parentNode.removeChild(document.getElementById("capaValidaErr"))
					document.getElementById("capaValidaErr").innerHTML="<div class='f_mens_error' id='f_mens_error'><ul>"+theLi+"</ul></div>" 
				}else {
					/*var capaErr=document.createElement("div");
					capaErr.id="capaValidaErr"
					capaErr.className=valida.aspectoAlerta
					
					this.obj.insertBefore(capaErr)
					document.getElementById("capaValidaErr").innerHTML="<div id='capaValidaErr' class='"+valida.aspectoAlerta+"'><div class='tit'></div><ul>"+theLi+"</ul></div><br/>" 
					
					//this.obj.innerHTML=ancla+"<div id='capaValidaErr' class='"+valida.aspectoAlerta+"'><div class='tit'></div><ul>"+theLi+"</ul></div><br/>" +this.obj.innerHTML 				
				*/
				}				
				
				return false;
				
				location.href="#anclaValidaErr"
						
				break
				
		    default:explica="";
		}
		
	},
	
	ejecuta:function(){
		valida.correcto=true;
		valida.cumpleDependencias=true;
		valida.esp=true;
		valida.strAlertaContinua="";
		valida.idsAlertaContinua=[];
		valida.cuentaErr=0
		
		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, "\"");
				valida.dotarDeAspecto(valida.rf(xx),true)
			}else{
				valida.dotarDeAspecto(valida.rf(xx,true),true)
			}
			if(campoAct[3]=="obligatorio" || campoAct[3]=="forced" || valida.rf(xx).value!=""){
				var compVal=false;
				//en el caso de que exista una tilde
				valida.rf(xx).value = valida.rf(xx).value.replace("'","´");
				//en el caso de que exista dos tildes
				valida.rf(xx).value = valida.rf(xx).value.replace("'","´");
				//en el caso de que exista tres tildes
				valida.rf(xx).value = valida.rf(xx).value.replace("'","´");
				if(campoAct[2].indexOf(",")==-1){
					if(campoAct[2]=="esCheck"){
						compVal=eval("valida."+campoAct[2]+"('"+campoAct[0]+"')")
					}else{
						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,valida.idsAlertaContinua)
		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.cuentaErr+=1
					valida.errorDeValidacionEspecial(pp)
					break;
				}
			}
		}
	},
	errorDeValidacionEspecial:function(id){
		valida.esp=false;
		valida.idsAlertaContinua[valida.idsAlertaContinua.length]=eval("document."+valida.f+"."+valida.expecial[valida.ids][id][2])
		valida.muestraError(valida.expecial[valida.ids][id][1])
	},
	error:function(id,maxmin){
		var explica="";
		var strAlerta="";
		valida.correcto=false;
		var cpObligatorio=(los_datos[id][3]=="obligatorio")? "(campo obligatorio)" :""
		switch (los_datos[id][2]){
		    case "esCadena":explica=literal["Recuerde_caracteres"];break;
		    case "esNumero":explica=literal["Recuerde_numero"];break;
			case "esAlfabetico":explica=literal["Recuerde_caracteres"];break;
		    case "esAlfanumerico":explica=literal["Recuerde_alfa"];break;
		    case "esNumeroDecimal":explica=literal["Recuerde_numeroDecimal"];break;
		    case "esLista":explica=literal["debeSelecionarOpcion"];break;
		    //case "esLista":explica=literal["debeSelecionarOpcion"];break;
		    //case "esRadio":explica="Debe seleccionar al menos un elemento";break;
		    case "esRadio":explica=literal["debeSelecionarUnAlMenos"];break;
		    case "esCheck":explica=literal["Recuerde chequear el campo "];break;
		    case "esCodigoPostal":explica=literal["codigoNoEspaniol"];break;
			case "esDNI":explica=literal["noEsCorrecto"];break;
			case "esNIF":explica=literal["recuerdaQueEl"] +" " +literal["elFormatoCorrectoEs"]   + " 00000000L (" + literal["num8CifrasYletra"]+")";break;
			case "esNIE":explica=literal["recuerdaQueEl"] +" " +literal["elFormatoCorrectoEs"]   + " L00000000L (" + literal["num8CifrasYletra"]+")";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"
			valida.cuentaErr+=1
			valida.idsAlertaContinua[valida.idsAlertaContinua.length]=(los_datos[id][2]=="esRadio")? valida.rf(id,true):valida.rf(id)
		}
		return false;
	},
	esCadena:function(c){ return /^[0-9A-Za-z-\\-\\.\\/\\/ÑñÁÉÍÓÚáéíóúÜüÄäËëÏïÖöºª!"'´·$%&/()=?¿^*¨Ç;:_,/\\t\n\r ]+$/.test(c);},
	esAlfabetico:function(c){return /^[A-Za-z-\\-\\.\\/\\/ÑñÁÉÍÓÚáéíóúÜüÄäËëÏïÖöºª,/\\t\n\r ]+$/.test(c);},
	esAlfanumerico:function(c){return /^[0-9A-Za-z-\\-\\.\\/\\/ÑñÁÉÍÓÚáéíóúÜüÄäËëÏïÖöºª,/\\t\n\r ]+$/.test(c);},
	esNumero:function(c){return /^[0-9]+$/.test(c);},
	esNumeroDecimal:function(c){return (valida.esNumero(c) || /^[0-9]\.{1}[0-9]+$/.test(c));},
	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);},
	esLista:function(c) { return !((campoAct[3]=="obligatorio") &&  (c=="-1" ||c=="")) },
	esCheck:function(idObject){return document.getElementById(idObject).checked},
	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;
	},
	esDNI:function(c){
		if ((c.length > 7) && (c.length < 10)){
			var dni = parseInt(c.substring(0,c.length-1),10);
			var letra = c.charAt(c.length-1);
			letra = letra.toLowerCase();
			letraCorrecta = valida.letras[ dni % 23];
			if (letra!=letraCorrecta) return false;
			if (dni > 99999999) return false;
			return true;
		}
	},
	esNIF:function(c){
		if (c.length < 9) { 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)) ;
	},
	esComprobarNIE:function(c){
		if(!/^[0-9]{7}([A-Za-z]{1})$/.test(c)) return false
		var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';		
		return (c.substr(7,8).toUpperCase()==letras.charAt(c.substr(0,7)%23)) ;
	},
	esNIE:function(c){
		if(c.charAt(0).toUpperCase()!="X") return false	
		return valida.esComprobarNIE(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;
	}
}


var Fecha = {
	
	esFecha_ddmmaaaa: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
		};
		return true;
	},
	
	esFecha_mmddaaaa: function(c){
		if(!/^(0[1-9]{1}|10|11|12)\/([0-2]{1}[1-9]{1}|10|20|30|31)\/([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[1]>diasMes[fch[0]-1]) return false;
		return true;
		/*
			return false
		};
		return true;
		*/
	},
	
	/*
	esFecha: function(c){
		if(Fecha.esMesCorrecto(c)){
			return true
		}else{
			ventanaModal.showErr(stringErrs["el_mes_no_es_correcto"]);
			return false; 
		}		
		if(Fecha.valida(c)){
			return true
		}

		return true;
	},
	*/
	
	esMesCorrecto: function(c){
		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[1]>diasMes[fch[0]-1]) return false;
		return true;
	}, 
	
	cadena2fecha: function(c){
		var lang = Utils.getLang();
		if(Fecha.valida(c)){

			var datosFecha = c.split("/");
			var year  = datosFecha[2];
			var month = (lang === "es")? datosFecha[1]:datosFecha[0];
			var day   = (lang === "es")? datosFecha[0]:datosFecha[1];
			
			return new Date(year, month, day );
			
		}
		return false;
	},
		
	mayorQue: function(c1,c2){
		
		var fecha1 = Fecha.cadena2fecha(c1);
		var fecha2 = Fecha.cadena2fecha(c2);
		return (fecha1>=fecha2);
		
	},
	
	valida: function(c){
		if(Utils.getLang() === "es"){
			return Fecha.esFecha_ddmmaaaa(c)
		}
		return Fecha.esFecha_mmddaaaa(c)

	},
	
	fueraDeMaximos: function(fechaInicio,fechaFin){
		if(rini === null || rfin === null){
			return true; // si no estan definidos los limites maximos no se valida
		}
		var fInicioMax = Fecha.cadena2fecha(rini);	
		var fFinMax = Fecha.cadena2fecha(rfin);
		var fIni = Fecha.cadena2fecha(fechaInicio);
		var fFin = Fecha.cadena2fecha(fechaFin);
		
		if((fInicioMax>fIni) || (fFinMax<fFin)){
			return true;
		}

		return false;
		
	},
	
	validaRangoDeFechas: function(fechaInicio,fechaFin){
		 var mensajeError = {
			incorrectafecha :  stringErrs["fecha_incorrecta"],
			formato:     stringErrs["fecha_incorrecta"] + stringErrs["el_formato_fecha_debe_ser"],
			maximos:     stringErrs["las_fechas_estan_fuera_de_rango"],
			mayorQ:      stringErrs["la_fecha_ini_mayor_q_fin"],
			FPM:      	 stringErrs["la_fpm_mayor_q_fin"],
			sinDatos:    stringErrs["noDatos"]
		};
			
		if(Utils.getLang() === "es" ){
			if(!valida.esFecha(fechaInicio)){
				ventanaModal.showErr(mensajeError.incorrectafecha +fechaInicio);
				return false;
			} else	if(!valida.esFecha(fechaFin)){
				ventanaModal.showErr(mensajeError.incorrectafecha +fechaFin);
				return false;
			}	
		}else{
			if(!Fecha.esFecha_mmddaaaa(fechaInicio)){
				ventanaModal.showErr(mensajeError.incorrectafecha +fechaInicio);
				return false;
			} else	if(!Fecha.esFecha_mmddaaaa(fechaFin)){
				ventanaModal.showErr(mensajeError.incorrectafecha +fechaFin);
				return false;
			}	
		}
		
		if(Utils.isempty(fechaFin)){
			if(Fecha.valida(fechaInicio)){
				return true;
			}else {
				ventanaModal.showErr(mensajeError.formato);
				return false;
			}
		
		}else {
			var sonFechasValidas= (Fecha.valida(fechaInicio) && Fecha.valida(fechaFin));
			if(sonFechasValidas){
				var isFechaFinMayorFechaIni = Fecha.mayorQue(fechaFin,fechaInicio);
				if(!isFechaFinMayorFechaIni){
					ventanaModal.showErr(mensajeError.mayorQ);							
					return false;
				}else if(Fecha.fueraDeMaximos(fechaInicio,fechaFin)){
					ventanaModal.showErr(mensajeError.maximos + "<br /><br />\nM"+'\u00ed'+"n: " + rini + "<br />\nM"+'\u00e1'+"x: " + rfin)	;
					return false;
				}else if($("#fechaPuestaMarcha")){
					var fpm = $("#fechaPuestaMarcha").val()
					var isFPMMayorFechaFin = Fecha.mayorQue(fpm,fechaFin);
					if(isFPMMayorFechaFin){
						ventanaModal.showErr("Fecha de puesta en marcha: "+fpm+"<br />\n <br />\n"+mensajeError.FPM+" ("+fechaFin+") ");							
						return false;
					}	
				}
				return true;
			
			}else{
				ventanaModal.showErr(mensajeError.formato);
				return false;
			}		
		}
	}	
}

valida.cargaIdioma()
