
var aCamposUnicos = new Array();	// campos únicos [array de objetos]
var iCamposUnicos;				// indice para el array de campos únicos
var objFormulario; 			// formulario que se chekea [objeto]
var tmpValor;			// para guardar el valor de un campo, luego se compara con otro si es necesario


// VALIDA un formulario
// -----------------------------------------------------------------------------------------------
function validarFormulario(obj){
	var seguir = true;

	if(seguir == true){
		seguir = chekea(obj);
	}

	return seguir;
}

// función GENÉRICA para cualquier formulario
//------------------------------------------------------------------------------------------------
function chekea(cual) {
	var i, tipoCampo, tipoDato, valor, campo, maximo, minimo, obligatorio, accionFoco;
	var aux;
	
	accionFoco = "";
	tmpValor = ""; // variable global, almacena el valor de un campo
	
	if (cual.elements) {
		for (i=0; i<cual.elements.length; i++) {
			if (cual.elements[i].name != null && cual.elements[i].disabled != true && cual.elements[i].type != "hidden" && cual.elements[i].name.substr(0,4) == "chk|") {

// ACCION para colocar el foco				
				accionFoco = "window.document."+cual.name+".elements["+i+"].focus();"
				
// VALIDAMOS el campo
				error = chekeaCampo(cual.elements[i]);
				
				if(error != ""){
					window.scrollTo(0,0);
					muestraAlerta(error, "alert", accionFoco);
					return false;
				}
			}
		}
	}
	if(aCamposUnicos.length == 0){
		return true;
	}else{
		return chekeaValoresUnicos(cual);
	}
}

// VALIDA un email
// -----------------------------------------------------------------------------------------------
function esMail(texto){
    var valido = true;             
    var cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890@._-";
    var arroba = texto.indexOf("@", 0);
    if ((texto.lastIndexOf("@")) != arroba) arroba = -1;
    var punto = texto.lastIndexOf(".");
	var i;
    for (i=0 ;i<texto.length;i++){
		if (cadena.indexOf(texto.substr(i, 1),0) == -1){
			valido = false;
			break;
    	}
    }
	if ((arroba > 1) && (arroba + 1 < punto) && (punto + 1 < (texto.length)) && (valido == true) && (texto.indexOf("..",0) == -1)){
    	valido = true;
	}else{
		valido = false;
	}
    return valido;
}

// VALIDA un texto de tipo alfanumerico
// -----------------------------------------------------------------------------------------------
function esNumerico(valor, esEntero){
    var valido 	= true; 
	var decimal	= false;
	var negativo = false;
	
    var cadena = "-1234567890";

	var i;
    for (i=0;i<valor.length;i++){

		caracter=valor.substr(i, 1);
		switch(caracter){		// la "," es el símbolo decimal
		case "-":
			if(negativo==false){
				negativo=true;
			}else{
				negativo=false;	// se encontro mas de una coma
				break;
			}
			break;
		case ",":
			if(decimal==false && esEntero==false){
				decimal=true;
			}else{
				valido=false;	// se encontro mas de una coma
				break;
			}
			break;
		case ".":				// el "." es el separador de miles
			var posComa = valor.indexOf(",");
			var posPunto = i;
			
			if(posComa>0){
				posPunto = posComa - i;
			}else{
				posPunto = valor.length - i;
			}
			
			if((posPunto % 4) != 0){	// el "." no está en la posición correcta
				valido = false;
				break;
			}
			break;
		default:
			if (cadena.indexOf(caracter, 0) == -1){
				valido=false;
				break;
			}
			break;
		}
    }
    return valido;
}

// COMPRUEBA que una fecha y hora sean correctas
//------------------------------------------------------------------------------------------------
function validaFechaHora(dato){
	var fecha, hora, aux, formato

	fecha	= dato.substr(0, 10);
	hora	= dato.substr(11, 5);

	aux		= "DD/MM/AAAA"+dato.substr(10, 1)+"hh:mm";
	formato	= "DD/MM/AAAA hh:mm";	// formato de fecha y hora
	
//	comprobamos si el formato recibido es el correcto
	if(aux==formato && dato.length==formato.length){
		aux=validaFecha(fecha);
		if(aux=="ok"){
			aux=validaHora(hora);
		}
	}else{
		aux="'"+dato+"'";
	}
	return aux;
}

// COMPRUEBA que una fecha sea correcta
//------------------------------------------------------------------------------------------------
function validaFecha(dato){
	var fecha, dia, mes, ano, aux, formato;

	dia 	= dato.substr(0, 2);
	mes 	= dato.substr(3, 2);
	ano 	= dato.substr(6, 4);

	aux		= "DD"+dato.substr(2, 1)+"MM"+dato.substr(5, 1)+"AAAA";
	formato	= "DD/MM/AAAA";	// formato de fecha y hora
	
//	comprobamos si el formato recibido es el correcto
	if(isNaN(dia+mes+ano)==false && aux==formato && dato.length==formato.length){
		fecha=new Date(ano, mes-1, dia);
		
		if(fecha.getDate() != dia){
			aux=mIdiJS(14);
		}else if(fecha.getMonth() != (mes-1)){
			 aux=mIdiJS(15);
		}else if(fecha.getFullYear() != ano){
			aux=mIdiJS(16);
		}else{
			aux="ok"; // la fecha es correcta
		}
	}else{
		aux="'"+dato+"'";
	}
	return aux;
}

// COMPRUEBA que una hora sea correcta
//------------------------------------------------------------------------------------------------
function validaHora(dato){
	var fecha, hoy, hora, minuto, aux, formato;
	
	hoy		= new Date();
	hora	= dato.substr(0, 2);
	minuto	= dato.substr(3, 2);

	aux		= "hh"+dato.substr(2, 1)+"mm";
	formato = "hh:mm";	// formato de hora
	
//	comprobamos si el formato recibido es el correcto
	if(isNaN(hora+minuto)==false && aux==formato && dato.length==formato.length){
		fecha=new Date(hoy.getFullYear(), hoy.getMonth(), hoy.getDate(), hora, minuto);
		if(fecha.getMinutes()!=minuto){
			aux = mIdiJS(22);
		}else if(fecha.getHours()!=hora){
			aux = mIdiJS(23);
		}else{
			aux="ok";
		}
	}else{
		aux="'"+dato+"'";
	}
	return aux;
}

// CONVIERTE una FECHA
// -----------------------------------------------------------------------------------------------
function convierteFecha(quien) {
	var fecha_split;	
	var tdia, tmes, tano;
	fecha_split = quien.split("/");
	tdia = parseInt(fecha_split[0],10);
	tmes = parseInt(fecha_split[1],10);
	tano = parseInt(fecha_split[2],10);
	return date = new Date(tano,tmes-1,tdia);
}

// COMPRUEBA los valores únicos de un formulario
// -----------------------------------------------------------------------------------------------
function chekeaValoresUnicos(frm){
	objFormulario = frm;	
	iCamposUnicos = 0;
	validaCamposUnicos("bien");
	return false;
}

// COMPRUEBA si dato es único o ya está en la base de datos
// -----------------------------------------------------------------------------------------------
function validaCamposUnicos(resultadoAjax){
	var tabla, identificador, valorIdentificador, aux, campo, valorCampo, indice, accionFoco, accion, info;		
	
	switch(resultadoAjax){
	case "bien":
		if(iCamposUnicos < aCamposUnicos.length){
			tabla = objFormulario.elements["tabla"].value;
			identificador = objFormulario.elements["identificador"].value;
			valorIdentificador = objFormulario.elements[identificador].value;
			aux = aCamposUnicos[iCamposUnicos].name.split("|");
			campo = aux[1];
			valorCampo = aCamposUnicos[iCamposUnicos].value;
			iCamposUnicos ++;

			ejecutaAjax("validaCamposUnicos.php?tabla="+tabla+"&identificador="+identificador+"&valorIdentificador="+valorIdentificador+"&campo="+campo+"&valorCampo="+valorCampo, "validaCamposUnicos");
		
		}else{
			objFormulario.submit();
		}
		break;
	case "mal":
		indice = iCamposUnicos - 1;
		campo = aCamposUnicos[indice].title;
				
		if (aCamposUnicos[indice].type!="hidden"){
			accionFoco = "window.document."+objFormulario.name+".elements['"+aCamposUnicos[indice].name+"'].focus();";
			accionFoco+= "window.document."+objFormulario.name+".elements['"+aCamposUnicos[indice].name+"'].style.color='#FF0000';";
		}
		muestraAlerta(mIdiJS(1)+" \""+campo+"\" "+mIdiJS(26), "alert", accionFoco);
				
		break;

	default:
		alert("-->" + resultadoAjax);
		break;
	}
}

// VALIDA 2 campos de claves, para ver que son iguales.
// -----------------------------------------------------------------------------------------------
function chekeaClaves(clave1, clave2) {
	var valor1,valor2; 
	valor1 = clave1.value; 
	valor2 = clave2.value;
	if (valor1 != valor2){
		alert(mIdiJS(21));
		return(false);
	}
	return (true);
}

// función GENÉRICA para cualquier buscador
// -----------------------------------------------------------------------------------------------
function chekeaBuscador(cual) {
	if (cual.elements){
		var i, valor, accionFoco, campo;
		for (i=0; i<cual.elements.length; i++) {
			if (cual.elements[i].name != null) {
				// Comprobamos que no sea un campo oculto
				if (cual.elements[i].type != "hidden"){
				// Comprobamos el formato si es de tipo FECHA
					if (cual.elements[i].name.indexOf("fecha") != -1) {
						valor = cual.elements[i].value;
						campo = cual.elements[i].title;
					// Después compruebo que sea FECHA
						if (validaFecha(valor) != "ok" && valor != "") {
							accionFoco = "window.document."+cual.name+".elements["+i+"].focus();"
							muestraAlerta(mIdiJS(1)+" \""+campo+"\" "+mIdiJS(7), "alert", accionFoco);
							return false;
						}
					}
				}
			}
		}
	}
	return true;
}

// VALIDA un campo de formulario, devuelve el error si lo hay
//------------------------------------------------------------------------------------------------
function chekeaCampo(obj) {
	var i, tipoCampo, tipoDato, valor, maximo, minimo, obligatorio, error;
	var aux;
	
	error = "";

	aux = obj.name.split("|");
	tipoDato = aux[2];
	minimo = aux[3];
	maximo = aux[4];
	obligatorio = aux[5];

	tipoCampo = obj.type;
	valor = obj.value;	

// COMPROBAMOS si es obligatorio RELLENARLO
	if((tipoCampo == "text" || tipoCampo == "password" || tipoCampo == "textarea") && valor == "" && obligatorio == "true"){
		error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(2);
	}else{
// COMPROBAMOS otras restricciones particulares
		switch (tipoDato) {
		case "str":	// alfanumérico
			// Veo si es menor que el mínimo
			if (obligatorio == "true" && valor.length < parseInt(minimo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3)+" \""+minimo+"\" "+mIdiJS(4);
				break;
			}
			// Veo si es mayor que el máximo
			if (valor.length > parseInt(maximo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5)+" \""+maximo+"\" "+mIdiJS(4);
				break;
			}
			break;
		case "strNum":	// string de numeros
			// Después compruebo que sea NUMÉRICO
			if (!(esNumerico(valor, true))) {
					error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(34);
				break;
			}		
			// Veo si es menor que el mínimo
			if (obligatorio == "true" && valor.length < parseInt(minimo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3)+" \""+minimo+"\" "+mIdiJS(33);
				break;
			}
			// Veo si es mayor que el máximo
			if (valor.length > parseInt(maximo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5)+" \""+maximo+"\" "+mIdiJS(33);
				break;
			}
			break;			
		case "int":		// numerico entero
		case "float":	// numérico decimal
			// Después compruebo que sea NUMÉRICO
			if (!(esNumerico(valor, tipoDato=="int"))) {
				if(tipoDato == "int"){
					error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(25);
				}else{
					error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(6);
				}
				break;
			}
			// Después veo si es menor que el mínimo
			if (minimo != "x" && cNumero(valor) < cNumero(minimo)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3)+" "+minimo;
				break;
			}
			// Y por último si es mayor que el máximo
			if (maximo != "x" && cNumero(valor) > cNumero(maximo)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5)+" "+maximo;
				break;
			}
			break;
		case "date":	// fecha
			// Compruebo que sea FECHA
			if (valor != "" && validaFecha(valor) != "ok") {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(7);
				break;
			}
			// Después veo si es menor que el mínimo
			if (convierteFecha(valor) < convierteFecha(minimo)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3);
				break;
			}
			// Después veo si es mayor que el máximo
			if (convierteFecha(valor) > convierteFecha(maximo)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5);
				break;
			}
			break;
		case "datetime":
			// Compruebo que sea FECHA y HORA
			if (valor != "" && validaFechaHora(valor) != "ok") {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(12);
				break;
			}
			break;
		case "time":
			// Compruebo que sea HORA
			if (valor != "" && validaHora(valor) != "ok") {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(30);
				break;
			}
			break;
		case "email":	//E-mail
			// Después compruebo que sea EMAIL válido
			if ((esMail(valor)!=true) && (valor!="")){
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(9);
				break;
			}
			break;
		case "file":	// archivo
			// comprobamos si es obligatorio RELLENARLO
			if((obligatorio == "true") && (valor == "")) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(2);
				break;								
			}
			break;
		case "combo": // Combo
			// comprobamos si es obligatorio RELLENARLO
			if((obligatorio == "true") && (valor == "")) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(2);
				break;								
			}
			break;
		case "chkb"://checkbox
			if (obligatorio == "true" && obj.checked == false){
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(2);
				break;
			}
			break;
		case "unico": // comprueba que ese valor no exista en la base de datos
			// Después veo si es menor que el mínimo
			if (obligatorio == "true" && valor.length < parseInt(minimo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3)+" \""+minimo+"\" "+mIdiJS(4);
				break;
			}
			// Luego si es mayor que el máximo
			if (valor.length > parseInt(maximo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5)+" \""+maximo+"\" "+mIdiJS(4);
				break;
			}
			if(enArray(obj, aCamposUnicos)==false){
				aCamposUnicos.push(obj);
			}
			break;
		case "unicoMail": // comprueba que ese valor no exista en la base de datos
			// Después compruebo que sea EMAIL válido
			if ((esMail(valor)!=true) && (valor!="")){
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(9);
				break;
			}
			// Después veo si es menor que el mínimo
			if (obligatorio == "true" && valor.length < parseInt(minimo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3)+" \""+minimo+"\" "+mIdiJS(4);
				break;
			}
			// Luego si es mayor que el máximo
			if (valor.length > parseInt(maximo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5)+" \""+maximo+"\" "+mIdiJS(4);
				break;
			}
			if(enArray(obj, aCamposUnicos)==false){
				aCamposUnicos.push(obj);
			}
			break;
		case "igual":
			// Veo si es menor que el mínimo
			if (obligatorio == "true" && valor.length < parseInt(minimo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(3)+" \""+minimo+"\" "+mIdiJS(4);
				break;
			}
			// Veo si es mayor que el máximo
			if (valor.length > parseInt(maximo,10)) {
				error = mIdiJS(1)+" \""+obj.title+"\" "+mIdiJS(5)+" \""+maximo+"\" "+mIdiJS(4);
				break;
			}
			if(tmpValor == ""){
				tmpValor = valor;
			}else if(tmpValor != valor){
				error = mIdiJS(21);
				break;
			}
			break;
		default:
			alert(mIdiJS(11)+" \""+tipoDato+"\"");
			break;
		}
	}
	return error;
}


//validacion de campos unicos, q no haya duplicados en diferentes tablas con ajax 
// aqui cif y dni
// ---------------------------------------------------------------	
function validarDuplicadosForm_Ajax(frm,accion){
	if( chekea(frm) ){
		new Ajax.Request( "ajaxValidaciones.php", { 
			parameters:"accion="+accion+"&"+Form.serialize(frm) ,
			onComplete:
				function (respuesta){
					var resultado = respuesta.responseText.split("/");
					if(resultado[0] == "bien"){ 						
						frm.submit();						
					}else{
						var info = resultado[1].split("|"); 
						accionFoco = "window.document."+frm.name+".elements['"+resultado[1]+"'].focus()";
						muestraAlerta("El campo \""+info[1].toUpperCase()+"\" ya existe en la base de datos", "alert", accionFoco);
						return false;
					}
				}
		});
		//return true;
	}	
	return false;
}

//validacion de campos unicos, q no haya duplicados en diferentes tablas con ajax 
// aqui dni de un socio
// ---------------------------------------------------------------	
function validarDniSocioForm_Ajax(frm,accion){
	if (chekeaSocios(frm)) {
		new Ajax.Request( "ajaxValidaciones.php", { 
			parameters:"accion="+accion+"&"+Form.serialize(frm) ,
			onComplete:
				function (respuesta){
					var resultado = respuesta.responseText.split("/");
					
					if(resultado[0] == "bien"){
						if ((!window.document.getElementById("cntAccionesSuperior")) || (window.document.getElementById("cntAccionesSuperior").style.display != "none")) {
							window.document.getElementById("cntAccionesSuperior").style.display = "none";
							window.document.getElementById("cntAccionesInferior").style.display = "none";
							frm.submit();
						}
					}else{
						var info = resultado[1].split("|"); 
						accionFoco = "window.document."+frm.name+".elements['"+resultado[1]+"'].focus();";
						accionFoco+= "window.document."+frm.name+".elements['"+resultado[1]+"'].style.color='#FF0000';";
						muestraAlerta("El campo \""+info[1].toUpperCase()+"\" ya existe en la base de datos", "alert", accionFoco);
						return false;
					}
				}
		});
	} else {
		return false;
	}
}

function chekeaSocios(frm) {
	fechaNacimiento = frm.elements['chk|fechaNacimiento|date|x|x|false'].value;
	dni = frm.elements['chk|dni|str|1|9|false'].value;
	
	if (chekea(frm)) {
/*		fechaActual = new Date();
		anhoActual = fechaActual.getFullYear();
		mesActual = fechaActual.getMonth()+1;
		diaActual = fechaActual.getDate();
		
		fechaSplit = fechaNacimiento.split("/");		
		anho = fechaSplit[2];
		mes = fechaSplit[1];
		dia = fechaSplit[0];
		
		
		if (((anhoActual - anho) < 18) 
			|| (((anhoActual - anho) == 18) && (mesActual < mes)) 
			|| (((anhoActual - anho) == 18) && (mesActual == mes) && (diaActual < dia))) {
			return true;
		} else {
			if (dni != "") {
				return true;
			} else {
				muestraAlerta(mIdiJS(32), "alert", "");
				return false;
			}
		}*/
		return true; // No comprobamos obligacion de dni
	} else {
		return false;
	}
}
