//Funciones javascript para comprobar los campos de un formulario
//Versión 1.0 Víctor J. Chamorro Ipdea.com 07/02/2007
//Versión 1.1 Víctor J. Chamorro Ipdea.com 23/02/2007 -- Incluida comprobación de correos electrónicos
//Versión 1.2 Víctor J. Chamorro Ipdea.com 22/04/2007 -- Incluida comprobación de campos sin caracteres especiales, solo letras y números y la comprobación de URLs http
//___________________________________________________________________________________________

var GLOBAL_formulario;


function CompruebaCamposNumericos(campos){
	
	var numericos = campos['numericos'];
	
	if (typeof(numericos) != "object") return true;
	
	for(var i=0;i<numericos.length;i++){
		if (typeof(eval("GLOBAL_formulario."+numericos[i])) == "object"){
			var campo = eval("GLOBAL_formulario."+numericos[i]);
	
			if (campo.value.length > 0){
				var tmp = (campo.value / 1);
				if (tmp != campo.value){
					var title = "";
					if (campo.title.length > 0) title = campo.title+" ";
					alert("El campo "+title+"debe ser numérico");
					campo.focus();
					return false;
				}
			}
		
		}else{
			alert("ERROR. CompruebaCamposNumericos:\n "+numericos[i]+" no es un campo válido para su comprobación");	
		}
	}
	return true;
}
//___________________________________________________________________________________________

function CompruebaCamposFecha(campos){
	
	var fechas = campos['fechas'];
	
	if (typeof(fechas) != "object") return true;
	
	for(var i=0;i<fechas.length;i++){
		if (typeof(eval("GLOBAL_formulario."+fechas[i])) == "object"){
			var campo = eval("GLOBAL_formulario."+fechas[i]);
	
			if (campo.value.length > 0 && !valFecha(campo)){
				var title = "";
				if (campo.title.length > 0) title = campo.title+" ";
				alert("El campo "+title+"contiene un formato de fecha incorrecto");
				campo.value = "DD/MM/AAAA";
				campo.focus();
				return false;
			}
		
		}else{
			alert("ERROR. CompruebaCamposFecha:\n "+fechas[i]+" no es un campo válido para su comprobación");	
		}
	}
	return true;
}
//___________________________________________________________________________________________

function CompruebaCamposEMail(campos){
	
	var emails = campos['emails'];
	
	if (typeof(emails) != "object") return true;
	
	for(var i=0;i<emails.length;i++){
		if (typeof(eval("GLOBAL_formulario."+emails[i])) == "object"){
			var campo = eval("GLOBAL_formulario."+emails[i]);
	
			if (campo.value.length > 0 && !valMail(campo)){
				var title = "";
				if (campo.title.length > 0) title = campo.title+" ";
				alert("El campo "+title+"contiene un formato de correo incorrecto");
				campo.focus();
				return false;
			}
		
		}else{
			alert("ERROR. CompruebaCamposEMail:\n "+emails[i]+" no es un campo válido para su comprobación");	
		}
	}
	return true;
}
//___________________________________________________________________________________________

function CompruebaCamposObligatorios(campos){
	var obligatorios = campos['obligatorios'];
	
	if (typeof(obligatorios) != "object") return true;
	
	for(var i=0;i<obligatorios.length;i++){
		if (typeof(eval("GLOBAL_formulario."+obligatorios[i])) == "object"){
			var campo = eval("GLOBAL_formulario."+obligatorios[i]);
	
			if (campo.value.length < 1 || campo.value == '-1'){				
				var title = "";
				if (campo.title.length > 0) title = campo.title+" ";
				alert("El campo "+title+"es obligatorio");
				campo.focus();
				return false;				
			}
		
		}else{
			alert("ERROR. CompruebaCamposObligatorios:\n "+obligatorios[i]+" no es un campo válido para su comprobación");	
		}
	}
	return true;
}
//___________________________________________________________________________________________

function CompruebaCamposCaracteresEspeciales(campos){
	var noespeciales = campos['especiales'];
	
	if (typeof(noespeciales) != "object") return true;
	
	for(var i=0;i<noespeciales.length;i++){
		if (typeof(eval("GLOBAL_formulario."+noespeciales[i])) == "object"){
			var campo = eval("GLOBAL_formulario."+noespeciales[i]);
				
			var regexp = /^([a-z]|[0-9]|_)+$/i;
			
			if (!regexp.test(campo.value)){			
				var title = "";
				if (campo.title.length > 0) title = campo.title+" ";
				alert("El campo "+title+" contiene caracteres especiales");
				campo.focus();
				return false;				
			}
		
		}else{
			alert("ERROR. CompruebaCamposCaracteresEspeciales:\n "+obligatorios[i]+" no es un campo válido para su comprobación");	
		}
	}
	return true;
}
//___________________________________________________________________________________________

function CompruebaCamposURL(campos){
	var urls = campos['urls'];
	
	if (typeof(urls) != "object") return true;
	
	for(var i=0;i<urls.length;i++){
		if (typeof(eval("GLOBAL_formulario."+urls[i])) == "object"){
			var campo = eval("GLOBAL_formulario."+urls[i]);
			
			if (campo.value.length == 0) return true;
			
			var regexp = new RegExp("^http[s]?://([a-z]|[0-9]|_|.|-)+$", "i");
			
			if (!regexp.test(campo.value)){			
				var title = "";
				if (campo.title.length > 0) title = campo.title+" ";
				alert("El campo "+title+" no es una url correcta");
				campo.focus();
				return false;				
			}
		
		}else{
			alert("ERROR. CompruebaCamposURL:\n "+obligatorios[i]+" no es un campo válido para su comprobación");	
		}
	}
	return true;
}
//___________________________________________________________________________________________

function CompruebaCampos(campos, formulario){
	
	if (typeof(formulario) != "object" || typeof(campos) != "object"){
		alert("ERROR. CompruebaCampos:\n  no se han pasado los datos corretos");	
		return false;
	}

	GLOBAL_formulario = formulario;
	var ok = false;
	
	if (CompruebaCamposNumericos(campos))
		if (CompruebaCamposFecha(campos))
			if (CompruebaCamposEMail(campos))
				if (CompruebaCamposObligatorios(campos))
					if (CompruebaCamposCaracteresEspeciales(campos))
						if (CompruebaCamposURL(campos))
							ok = true;
	
	return ok;
}
//___________________________________________________________________________________________

function PosicionaSelect(ddl, seleccion){

	if (typeof(ddl) != "object" || typeof(seleccion) != "string"){
		alert("ERROR. PosicionaSelect:\n  no se han pasado los datos corretos");	
		return false;
	}
	
	
	for(i=0;i<ddl.options.length;i++){
		if (ddl.options[i].value == seleccion){
			ddl.options[i].selected = true;
			break;
		}
	}	

}
//___________________________________________________________________________________________
//
//Funciones auxiliares
//___________________________________________________________________________________________
	
	function valSep(oTxt){
		var bOk = false;
		var sep1 = oTxt.value.charAt(2);
		var sep2 = oTxt.value.charAt(5);
		bOk = bOk || ((sep1 == "-") && (sep2 == "-"));
		bOk = bOk || ((sep1 == "/") && (sep2 == "/"));
		return bOk;
	}
	//___________________________________________________________________________________________
	
	function finMes(oTxt){
		var nMes = parseInt(oTxt.value.substr(3, 2), 10);
		var nAno = parseInt(oTxt.value.substr(6), 10);
		var nRes = 0;
		switch (nMes){
			case 1: nRes = 31; break;
			case 2: nRes = 28; break;
			case 3: nRes = 31; break;
			case 4: nRes = 30; break;
			case 5: nRes = 31; break;
			case 6: nRes = 30; break;
			case 7: nRes = 31; break;
			case 8: nRes = 31; break;
			case 9: nRes = 30; break;
			case 10: nRes = 31; break;
			case 11: nRes = 30; break;
			case 12: nRes = 31; break;
		}
		return nRes + (((nMes == 2) && (nAno % 4) == 0)? 1: 0);
	}
	//___________________________________________________________________________________________
	
	function valDia(oTxt){
		var bOk = false;
		var nDia = parseInt(oTxt.value.substr(0, 2), 10);
		bOk = bOk || ((nDia >= 1) && (nDia <= finMes(oTxt)));
		return bOk;
	} 
	//___________________________________________________________________________________________
	
	function valMes(oTxt){
		var bOk = false;
		var nMes = parseInt(oTxt.value.substr(3, 2), 10);
		bOk = bOk || ((nMes >= 1) && (nMes <= 12));
		return bOk;
	}
	//___________________________________________________________________________________________
	
	function valAno(oTxt){
		var bOk = true;
		var nAno = oTxt.value.substr(6);
		bOk = bOk && ((nAno.length == 2) || (nAno.length == 4));
		if (bOk){
			for (var i = 0; i < nAno.length; i++){
				bOk = bOk && esDigito(nAno.charAt(i));
			}
		}
		return bOk;
	}
	//___________________________________________________________________________________________
	
	function esDigito(a){
		return (a == 1 || a == 2 || a == 3 || a == 4 || a == 5 || a == 6 || a == 7 || a == 8 || a == 9 || a == 0);
	}
	//___________________________________________________________________________________________
	
	function valFecha(oTxt){		
		var bOk = true;
		if (oTxt.value != ""){
			bOk = bOk && (valAno(oTxt));
			bOk = bOk && (valMes(oTxt));
			bOk = bOk && (valDia(oTxt));
			bOk = bOk && (valSep(oTxt));
		}
		return bOk;
	}
	//___________________________________________________________________________________________
	
	function valMail(mail){
		var cont,ind1,ind2,ind3,ind4;
		mail = mail.value;
		cont=mail.length;
		ind1=mail.indexOf('@');
		ind2=mail.indexOf('.');
		ind3=mail.lastIndexOf('@');
		ind4=mail.lastIndexOf('.');
		if ((ind1<=0)||(ind3>ind4)||(ind3!=ind1)||(ind4+2>cont)||(ind4+5<cont)||(ind3==ind4-1)){
			return false;
		}else{
			return true;
		}
	}
	//___________________________________________________________________________________________