var form
var bgColor="red";
var color="white";
var bgColorOriginal="white";
var colorOriginal="black";
var i=0;

function validaFormulario(form){
	this.form = form;
	for(i=0;i<form.length;i++){		
		tipo = form[i].className;
		if (form[i].type)
		{
			if (i == 0){ //para mantener el color original de los input
				bgColorOriginal = form[i].style.backgroundColor;
				colorOriginal = form[i].style.color;
			}
			if (tipo.indexOf(" ") >= 0){
				tipo = tipo.substring(0, tipo.indexOf(" "));
			}			
			arrTipos = tipo.split("_");
			
			if (arrTipos.length == 1)
			{
				arrTipos = new Array(1);
				arrTipos[0] = form[i].className;
								
				//alert("Nombre: '" + form[i].name + "' , '" + arrTipos[0] + "' valor: " + arrTipos[0].indexOf(" "));
				if (arrTipos[0].indexOf(" ") >= 0){
					arrTipos[0] = arrTipos[0].substring(0, arrTipos[0].indexOf(" "));
				}
			}

			for(j=0;j<arrTipos.length;j++){
				if (arrTipos[j] != "")
				{	
//alert(arrTipos[j]);
					try{
						resultado = eval(arrTipos[j] + "()");	
					}catch(err){
						resultado = false;
					}
				
					if (resultado)
					{
						return false;
					}
				}
							
			}
			if (form[i].type != "button" && form[i].type != "checkbox" && form[i].type != "radio"){
				form[i].style.color=colorOriginal;
				form[i].style.backgroundColor=bgColorOriginal;
			}
		}
	}

	//OPCIONAL:	todos validados, justo antes de enviar, duplicamos las comillas simples "'" para los insert de sql
	for(i=0;i<form.length;i++){
		if (form[i].type) form[i].value = form[i].value.replace(/'/g, "''");
	}

	//form.submit();

	return true
}

function error(){
	alert(form[i].alt);
	try{
		//para evitar el error de poner el foco en campos hidden y ocultos
		form[i].focus();
	}catch(err){
	
	}
	
	form[i].style.color=color;
	form[i].style.backgroundColor=bgColor;

	return 1;
}

function obligatorio(){
	if (form[i].value == "" || form[i].value == "0")
	{	
		return error();
	}
	return 0;	
}

function numero(){
	form[i].value = form[i].value.replace(",", ".");
	if (isNaN(form[i].value))
	{
		//primero miramos el alt y si está vacio, le ponemos el mensaje por defecto
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir un número correcto";
		}
		return error();
	}
	form[i].value = form[i].value.replace(".", ","); //por compatibilidad con oracle en los insert y update
	return 0;	
}
function numeropositivo(){
	if (isNaN(form[i].value))
	{
		return error();
	}
	if (form[i].value<1)
	{
		return error();
	}
	return 0;	
}

function seleccion(){
	if (form[i].selectedIndex == 0)
	{
		return error();
	}
	return 0;
	
}

function contrasena(){
	if (form[i].value.indexOf(" ")>0)
	{
		return error();
	}
	if (form[i].value.indexOf("'")>0)
	{
		return error();
	}
	if (form[i].value.indexOf("/")>0)
	{
		return error();
	}
	if (form[i].value.indexOf("\\")>0)
	{
		return error();
	}
	return 0;
	
}

function email(){
	if (form[i].value == "")
	{
		return 0;
	}

	if (form[i].value.indexOf(" ")>0)
	{
		return error();
	}
	if (form[i].value.indexOf("@")<0)
	{
		return error();
	}
	if (form[i].value.indexOf(".")<0)
	{
		return error();
	}
	
	arrCadenas = form[i].value.split("@");
	
	if (arrCadenas.length != 2)
	{
		return error();
	}	

	arrCadenas2 = form[i].value.split(".");

	if (arrCadenas2.length < 2)
	{
		return error();
	}

	if (arrCadenas2[arrCadenas2.length - 1].length < 2)
	{
		return error();
	}

	return 0;
}

function decimal(){
	if (form[i].value == "")
	{
		return 0;
	}
	if(!parseFloat(form[i].value)){
		return error();
	}

	return 0;
}
arrLetras = 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');
function nif(){
	
	if (form[i].value == "")
	{
		return 0;
	}
	
	letra = form[i].value.charAt(form[i].value.length - 1);
	
	numeroNif = form[i].value.substring(0, form[i].value.length - 1);
	
	if (isNaN(numeroNif))
	{
		return error();
	}
	if(arrLetras[numeroNif%23] != letra.toUpperCase()){
		return error();
	}

	return 0;
}
function cif(){

	if (form[i].value == "")
	{
		return 0;
	}
	
    temp = form[i].value.toUpperCase(); // pasar a mayúsculas

    if (!/^[A-Za-z0-9]{9}$/.test(temp)){ // Son 9 dígitos? 
		//alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
		return error();

    }else if (!/^[ABCDEFGHKLMNPQS]/.test(temp)){ // Es una letra de las admitidas ?
		//alert("El primer dígito es incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S ");
		return error();
    }

    
    v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
    temp2 = 0; 
    var temp1;


    for( j = 2; j <= 6; j += 2 ) 
    {
      temp2 = temp2 + v1[ parseInt(form[i].value.substr(j-1,1)) ];
      temp2 = temp2 + parseInt(form[i].value.substr(j,1));
    };

    temp2 = temp2 + v1[ parseInt(form[i].value.substr(7,1)) ];

    temp2 = (10 - ( temp2 % 10));

    if( temp2 == 10 ){
		//alert( "El dígito de control es: J ó 0" );
		if (form[i].value.charAt(form[i].value.length - 1) != "J" && form[i].value.charAt(form[i].value.length - 1) != "0" )
		{
			return error();
		}	
    }else{
      //alert( "El dígito de control es: "+temp2 ); 
		if (temp2 != form[i].value.charAt(form[i].value.length - 1))
		{
			return error();
		}
	}

    return 0;
}

function radio(){
	longitud = eval(form.name + "." + form[i].name  + ".length");
	
	var chequeado = false;

	if (!longitud)
	{		
		if (!form[i].checked)
		{
			return error();
		}
	}else{
		for (j=0;j< longitud;j++ )
		{
			if (eval(form.name + "." + form[i].name  + "[" + j + "].checked"))
			{
				chequeado = true;
			}
		}
		if (!chequeado)
		{
			return error();
		}
	}
}

function check(){
	longitud = eval(form.name + "." + form[i].name  + ".length");
	
	var chequeado = false;

	if (!longitud)
	{		
		if (!form[i].checked)
		{
			return error();
		}
	}else{
		for (j=0;j< longitud;j++ )
		{
			if (eval(form.name + "." + form[i].name  + "[" + j + "].checked"))
			{
				chequeado = true;
			}
		}
		if (!chequeado)
		{
			return error();
		}
	}
}

function fecha(){
	var cadenaFechaNumerica = "";
	var anio = "";
	var mes = "";
	var dia = "";
	var bisiesto=0;
	var separador = "/";
	var flag=1;
	var longuitud=0;
	var inicio=0;
	var fin=0;
	
	var fecha = form[i].value;
	
	//fecha vacia
	if(fecha==""){	 
		return 0;
	}
	 
	/*******************************************************************************************************************/
	/*******************************************************************************************************************/
	/*******************************************************************************************************************/
	while((flag==1) && (longuitud<fecha.length)){
		if(isNaN(fecha.substring(longuitud,longuitud+1))!=0){
			separador = fecha.substring(longuitud,longuitud+1);
			flag = 0;
		}
		longuitud++;
	}
	 
	if(flag==1){
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
	}
	 
	fin = fecha.indexOf(separador,inicio);
	if(fin!=0){
		dia = fecha.substring(inicio,fin);
		inicio = fin + 1;
	}
	else{
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
	}
	 
	fin = fecha.indexOf(separador,inicio);
	if(fin > 0){
		mes = fecha.substring(inicio,fin);
		inicio = fin +1;
	}else{
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();	 
	}
	 
	fin=fecha.length; 
	anio = fecha.substring(inicio,fin);
	 
	if (isNaN(anio) || isNaN(mes) || isNaN(dia))
	{	
		return error();
	}
	 
	if((anio.length<2) || (anio.length>4) || (anio.length==3)){ 
		return error();
	}
	 
	 
	if((dia.length<2) && (eval(dia)<=9)){
		dia = "0" + dia;
	}
	 
	if((mes.length<2) && (eval(mes)<=9)){
		mes = "0" + mes;
	}
	 
	if(anio.length==2){
		anio = "20" + anio;
	}
 
 
 /*******************************************************************************************************************/
 /*******************************************************************************************************************/
 /*******************************************************************************************************************/
 
 
 
    /* Validacion del mes*/ 
    if ((eval(mes) < 1) || (eval(mes) > 12)) {
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
    }
            
    /* Validacion del día*/
    if (eval(dia) < 1) {
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
    }
    
    /* Validacion anio bisiesto / febrero / di */
    if ((eval(anio) % 4 == 0) || (eval(anio) % 100 == 0) || (eval(anio) % 400 == 0)) {
        bisiesto = 1;
    }
    if ((eval(mes) == 2) && (bisiesto == 1) && (eval(dia) > 29)) {
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
    }
    
    if ((eval(mes) == 2) && (bisiesto != 1) && (eval(dia) > 28)) {
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
    }
    
    /* Validacion of otros meses */
    if ((eval(dia) > 31) && ((eval(mes) == 1) || (eval(mes) == 3) || (eval(mes) == 5) || (eval(mes) == 7) || (eval(mes) == 8) || (eval(mes) == 10) || (eval(mes) == 12))) {
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
    }
    if ((eval(dia) > 30) && ((eval(mes) == 4) || (eval(mes) == 6) || (eval(mes) == 9) || (eval(mes) == 11))) {
		if (form[i].alt == "")
		{
			form[i].alt = "Debe introducir una fecha correcta";
		}
		return error();
    }
    form[i].value = dia + separador + mes + separador + anio;

}

function tarjeta(){
	var Num = form[i].value;
	var DC = "";
	var Sum = 0;
	var AuxNum = "";
	var Digit = 0;
	var Resto = 0;
	var Check = 0;
	DC = Num.substr(Num.length - 1);
	AuxNum = Num.substr(0, Num.length - 1);
	do {
		Digit = parseInt(AuxNum.substr(AuxNum.length - 1, 1)) * 2;
		Digit = Digit.toString();
		if(Digit.length > 1)
			Sum = Sum + (parseInt(Digit.substr(0, 1)) +	parseInt(Digit.substr(1, 1)));
		else
			Sum = Sum + parseInt(Digit);
		if(AuxNum.length > 2)
			AuxNum = AuxNum.substr(0, AuxNum.length - 2);
		else
			AuxNum = AuxNum.substr(0, AuxNum.length - 1);
	}while(AuxNum.length > 0);
	AuxNum = Num.substr(0, Num.length - 2);
	do {
		Sum = Sum + parseInt(AuxNum.substr(AuxNum.length - 1, 1));
		if(AuxNum.length >= 2)
			AuxNum = AuxNum.substr(0, AuxNum.length - 2);
		else
			AuxNum = AuxNum.substr(0, AuxNum.length - 1);
	}while(AuxNum.length > 0);
	Resto = Sum % 10;
	if (Resto == 0)
		Check = 0;
	else
		Check = 10 - Resto;

	Check = Check.toString();
	if(DC == Check)
		return 0;
	else 
		return error();
}

//para poder poner al los botones la clase botón
function boton(){
	return 0;
}

function str_replace(busca, repla, orig){
	str     = new String(orig);

	rExp    = "/"+busca+"/g";
	rExp    = eval(rExp);
	newS    = String(repla);

	str = new String(str.replace(rExp, newS));

	return str;
}

function identificacion(){
	if (form[i].value == ""){
		return 0;
	}
	
	cif = form[i].value.toUpperCase(); // pasar a mayúsculas	
	var cif= cif.toUpperCase();
	num = new Array();
	for (j = 0; j < 9; j ++){
		num[j] = cif.substr(j, 1);
	}
	var regular = new RegExp("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)");
	//si no tiene un formato valido devuelve error
	if (!regular.test(cif)){
		return error();
	}

	//comprobacion de NIFs estandar
	regular = new RegExp("(^[0-9]{8}[A-Z]{1}$)");
	if (regular.test(cif)){
		cadena = "TRWAGMYFPDXBNJZSQVHLCKE";
		if (num[8] == cadena.substr(cif.substr(0,8)%23,1))
			return 0;
		else
			return error();
	}
	//algoritmo para comprobacion de codigos tipo CIF
	suma = num[2]*1 + num[4]*1 + num[6]*1;
	for (j = 1; j < 8; j += 2){
		cadena = new String(2 * num[j]);
		suma += cadena.substr(0,1)*1 + cadena.substr(1,1)*1;
	}
	sum = new String(suma);
	n = 10 - parseInt(sum.substr(sum.length - 1, 1));

	//comprobacion de NIFs especiales (se calculan como CIFs)
	regular = new RegExp("^[KLM]{1}");
	if (regular.test(cif))
		if (num[8] == String.fromCharCode(64 + n))
			return 0;
		else
			return error();

	//comprobacion de CIFs
	regular = new RegExp("^[ABCDEFGHJNPQRSUVW]{1}");
	if (regular.test(cif))
		if (num[8] == String.fromCharCode(64 + n) || num[8] == n.substr(n.length - 1, 1))
			return 0;
		else
			return error();

	//comprobacion de NIEs
	//T
	regular = new RegExp("^[T]{1}");
	if (regular.test(cif)){
		regular = new RegExp("^[T]{1}[A-Z0-9]{8}$");
		if (num[8] == regular.test(cif))
			return 0;
		else
			return error();
	}

	//XYZ
	regular = new RegExp("^[XYZ]{1}");
	if (regular.test(cif)){
		cadena1 = "TRWAGMYFPDXBNJZSQVHLCKE";
		cadena2 = str_replace('X','0', cif);
		cadena2 = str_replace('Y','1', cadena2);
		cadena2 = str_replace('Z','2', cadena2);
		if (num[8] == cadena1.substr( cadena2.substr(0,8)%23,1))
			return 0;
		else
			return error();
	}
	
	//si todavia no se ha verificado devuelve error
	return error();


}







/*

Poner las funciones de validación por encima de el código de abajo

*/
var mensaje = "";

function muestraMensaje(mensaje, e){
	if (!e)var e = window.event;

	document.getElementById("mensaje").innerHTML=mensaje;
	document.getElementById("mensaje").style.top = e.clientY + document.body.scrollTop + 25;
	document.getElementById("mensaje").style.left = e.clientX + 10;
	
	document.getElementById("mensaje").style.visibility="";
}
function ocultaMensaje(){
	document.getElementById("mensaje").style.visibility="hidden";
}
function anadeBocadillo(formato, mensaje){
	for(i=0;i<document.body.getElementsByTagName("input").length;i++){
		if (document.body.getElementsByTagName("input")[i].className.indexOf(formato) >=0 ){			
			document.body.getElementsByTagName("input")[i].onclick = function(e){muestraMensaje(mensaje, e);};
			document.body.getElementsByTagName("input")[i].onblur = function(e){ocultaMensaje();};
		}
	}
}

function inicializaCampos(){
	//aquí se podrán añadir eventos en un futuro para cualquier tipo de campo
	//empezamos con los campos numéricos
	mensaje = "Formato numérico:<br>11222333,44 (sin '.' para los miles y con ',' para los decimales)";
	formato = "numero";
	anadeBocadillo(formato, mensaje);
	mensaje = "Formato fecha:<br>dd/mm/yyyy";
	formato = "fecha";
	anadeBocadillo(formato, mensaje);
}
//window.onload = inicializaCampos