
function ValidarFormulario(oFormulario){

	 estado = true;

		  //valido los tipos text y textarea
      for (j=0;j<oFormulario.elements.length && estado == true;j++){

      	// valido los input

      	if (oFormulario.elements[j].type=='text' || oFormulario.elements[j].type=='password'){
		estado = validaInput(oFormulario.elements[j]);
	 }

      	if (oFormulario.elements[j].type=='textarea'){
      	 	estado = validaTextArea(oFormulario.elements[j]);
      	}
      	
      	if (oFormulario.elements[j].type=='checkbox'){
      		 estado = validaCheckbox(oFormulario.elements[j]);
      	}     	
      
    }

      return estado;

}


function ValidarBoletin(oFormulario){
	estado = true;

	//valido los tipos text y textarea
      for (j=0;j<oFormulario.elements.length && estado == true;j++){

	      	// valido los input
	
	      	if (oFormulario.elements[j].type=='text' || oFormulario.elements[j].type=='password'){
				estado = validaInput(oFormulario.elements[j]);
		    	}
	
	      	if (oFormulario.elements[j].type=='textarea'){
	      	 	estado = validaTextArea(oFormulario.elements[j]);
	      	}
	      	
	      	if (oFormulario.elements[j].type=='checkbox'){
	      		 estado = validaCheckbox(oFormulario.elements[j]);
	      		}
	      	if (oFormulario.elements[j].name=='colectivo'){
	      		estado = validaCombo(oFormulario.elements[j]);	
	      		}
      }
          

      return estado;

}

//==============================================================================
// Funcion: EsMail(mail)
// Parametros: mail -> Direccion de correo a validar
// Salida: Devuelve True si la direccion de email es valida y False si no lo es
// Descripcion: Comprueba que una dirección de email está bien formada
//==============================================================================
function EsMail(mail)
{
   // Formato de dirección de correo electrónico
   var Template = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/

   if (mail != "")
   {
     return (Template.test(mail))
   }
   return true
}

//==============================================================================
// Funcion: EsFecha(fecha)
// Parametros: fecha -> Fecha a validar en formato dd/mm/aaaa
// Salida: Devuelve True si la fecha es valida y False si no lo es
// Descripcion: Comprueba que una fecha es válida
//==============================================================================

function EsFecha(fecha)
{ 
   
   if (fecha != "")
   {  
      fOk = true;
      if ((fecha.substr(2,1) == "/") && (fecha.substr(5,1) == "/"))
      {      
       for (i=0; i<10; i++)
	     {	
         if (((fecha.substr(i,1)<"0") || (fecha.substr(i,1)>"9")) && (i != 2) && (i != 5))
			   {
           fOk = false;
           break;  
			   }  
       }
	     if (fOk)
	     { 
	       a = fecha.substr(6,4);
		     m = fecha.substr(3,2);
		     d = fecha.substr(0,2);
   		   fOk = validarFecha(d,m,a);  
   		 }
      }
	    else
	    {
	      fOk = false;
	    }
   }
   else
   {
   	 fOk = false;
   }
   
	 return (fOk);	 
	 
}   

//==============================================================================
// Descripcion: elimina espacios en blanco anteriores y posteriores a una
// cadena los espacios en blanco internos permanecen
// Salida:     la cadena sin blancos por delante ni por detrás, y en mayúsculas
//==============================================================================

function miTrim(cadena)	{
	var seguir = true;
	var oStr = new String(cadena);
	//Calcular el índice por delante
	var iInic = 0;
	while (seguir)
	{
		if (oStr.charAt(iInic) == " ") iInic++;
		else seguir = false;
	}
	//Calcular el índice por detrás
	seguir = true;
	var iFin = oStr.length - 1;
	while (seguir)
	{
		if (oStr.charAt(iFin) == " ") iFin--;
		else seguir = false;
	}
	//Caso especial: la cadena de entrada es una sucesión de blancos
	if(iInic > iFin)
		return "";
	else
		return oStr.substring(iInic, iFin + 1).toString();

}

function validaInput(elemento){
  var sEmail = new String()

	if ((elemento.getAttribute("requerido")=='si') && (miTrim(elemento.value)=='')){
	 switch (elemento.getAttribute("tipovalidacion")){
	  case "fecha":
	   alert("Por favor, introduzca su " + elemento.getAttribute("titulo") +".")
	   return false;
	  break;
	  default:
	   alert("Por favor, introduzca su " + elemento.getAttribute("titulo") +".")
	   return false
    }
	 }

	if ((elemento.getAttribute("requerido")=='si') || (elemento.value!='')){
		switch (elemento.getAttribute("tipovalidacion")){
			case "email":
				//var sEmail = miTrim(elemento.value)
				var sEmail = new String(elemento.value)
				if (!EsMail(sEmail.toString())) {
						alert("Por favor, rellene el campo " + elemento.getAttribute("titulo") +" correctamente.");
		   			return false;
				}
			  return true;
				break;
			case "euro":
				if (isNaN(Number(elemento.value))){
					alert("El campo '" + elemento.getAttribute("titulo") + "' debe ser un número.");
					return false;
				}
				elemento.value = Number(elemento.value) * 100
				break;
			case "fecha":
				if (!EsFecha(elemento.value)) {
				 	alert("Por favor, rellene el campo " + elemento.getAttribute("titulo") +" correctamente.");
		   		return false;			
		   	}
				break;
			case "numerico":
				if (isNaN(Number(elemento.value))){
					alert("El campo '" + elemento.getAttribute("titulo") + "' debe ser un número.");
					return false;
				}
				break;
			case "entero":
				if (isNaN(Number(elemento.value))){
					alert("El campo '" + elemento.getAttribute("titulo") + "' debe ser un número sin decimales.");
					return false;
				}
				else{
					if (parseInt(elemento.value,10)!=elemento.value){
						alert("El campo '" + elemento.getAttribute("titulo") + "' debe ser un número sin decimales.");
						return false;
					}
				}
				break;
			case "dni":

				if ((elemento.value.length < 8) || (elemento.value.indexOf("-",8)==-1)){
					alert("Por favor, introduzca su NIF correctamente.");
					return false;
				}else{
				 if(!validarLetraDNI(miTrim(elemento.value))){
				  alert("Por favor, introduzca la letra de su NIF correctamente.");
				  return false;
				 }
				}
				break;
			case 	"alfanumerico":
				break;
			case 	"imagen":
				break;
			case 	"adjunto":
				break;
			case 	"documento":
				break;
			case 	"undefined":
				break;
			default:
		    }
	    }

      return true;

}


function validaHidden(elemento){
	if ((elemento.getAttribute("requerido")=='si')){
		switch (elemento.getAttribute("tipovalidacion")){
		case 	"contenido":
	    		if (eval("document.forms[0]."+elemento.name+"_contenido.value")==""){
	    			alert("Por favor, rellene el campo " + elemento.getAttribute("titulo") + " correctamente.");
	    			return false;
	    		}
			break;
		}
	}

	return true;

}

function validaCombo(elemento)
{
  if (elemento.value== '0'){
		alert ("Debe seleccionar un elemento en el desplegable")
		return false;	
	}	
   return true
}

function validaTextArea(elemento)
{
	if ((elemento.getAttribute("requerido")=='si') && (miTrim(elemento.value)=='')){
		alert("Por favor, introduzca sus " + miTrim(elemento.getAttribute("titulo")) + ".");
		return false;
	}
	if ((elemento.getAttribute("max_car")!='') && ((elemento.value).length > elemento.getAttribute("max_car"))){
		alert("La longitud del campo '" + elemento.getAttribute("titulo") + "' no puede sobrepasar los " + elemento.getAttribute("max_car") +" caracteres.");
		return false;
	}
	return true;
}


function validarLetraDNI(dni){

	var letra = dni.substr(dni.length-1,dni.length);
	var valorDNI = dni.substr(0,dni.length-2);
	var resto=(valorDNI % 23);
  var letra_NIF;

        switch(resto){
            case 0:
                letra_NIF = "T";
		break;
            case 1:
                letra_NIF = "R";
		break;
            case 2:
                letra_NIF = "W";
		break;
            case 3:
                letra_NIF = "A";
		break;
            case 4:
                letra_NIF = "G";
		break;
            case 5:
                letra_NIF = "M";
		break;
            case 6:
                letra_NIF = "Y";
		break;
            case 7:
                letra_NIF = "F";
		break;
            case 8:
                letra_NIF = "P";
		break;
            case 9:
                letra_NIF = "D";
		break;
            case 10:
                letra_NIF = "X";
		break;
            case 11:
                letra_NIF = "B";
		break;
            case 12:
                letra_NIF = "N";
		break;
            case 13:
                letra_NIF = "J";
		break;
            case 14:
                letra_NIF = "Z";
		break;
            case 15:
                letra_NIF = "S";
		break;
            case 16:
                letra_NIF = "Q";
		break;
            case 17:
                letra_NIF = "V";
		break;
            case 18:
                letra_NIF = "H";
		break;
            case 19:
                letra_NIF = "L";
		break;
            case 20:
                letra_NIF = "C";
		break;
            case 21:
                letra_NIF = "K";
		break;
            case 22:
                letra_NIF = "E";
		break;
        }
	if(letra.toUpperCase()!=letra_NIF){
		return false;
	}
	return true;
}


function validaCheckbox(elemento){
	
	if ((elemento.getAttribute("requerido")=='si') && (elemento.checked==false)){
		alert("Por favor, debe aceptar el AVISO LEGAL.");
		return false;
	}
	return true;
}

/*Función para validar la fecha*/

function validarFecha(dia, mes, anno){

var leap = 0;
var err = 0;
var i;
err = 0;

   /* Se comprueba que el año no sea igual a 0000 */
   if (anno == 0) {
      err = 20;
   }
   /* Validación del mes */
   if ((mes < 1) || (mes > 12)) {
      err = 21;
   }
   /* Validación del dia */
   if (dia < 1) {
     err = 22;
   }
   /* Validación de febrero en función de si es año bisiesto */
   if ((anno % 4 == 0) || (anno % 100 == 0) || (anno % 400 == 0)) {
      leap = 1;
   }
   if ((mes == 2) && (leap == 1) && (dia > 29)) {
      err = 23;
   }
   if ((mes == 2) && (leap != 1) && (dia > 28)) {
      err = 24;
   }
   /* Validación de los otros meses */
   if ((dia > 31) && ((mes == "01") || (mes == "03") || (mes == "05") || (mes == "07") || (mes == "08") || (mes == "10") || (mes == "12"))) {
      err = 25;
   }
    if ((dia > 31) && ((mes == "1") || (mes == "3") || (mes == "5") || (mes == "7") || (mes == "8") || (mes == "10") || (mes == "12"))) {
      err = 25;
   }
   if ((dia > 30) && ((mes == "04") || (mes == "06") || (mes == "09") || (mes == "11"))) {
      err = 26;
   }
    if ((dia > 30) && ((mes == "4") || (mes == "6") || (mes == "9") || (mes == "11"))) {
      err = 26;
   }
   if ((dia == 0) && (mes == 0) && (anno == 00)) {
      err = 0; dia = ""; mes = ""; anno = "";
   }

   if (err == 0) {
      return true;
   }
   else {
      return false;
   }
}


function ComparaFechas( oInicio, oFin, iIdioma) {

	var f1, f2;
	
	f1 = document.getElementById(oInicio).value;
	f2 = document.getElementById(oFin).value;

	// Comprobar solo en el caso de que se hayan introducido ambas fechas o solo la fecha fin
	if ((f1 == "") && (f2 != "")) {
 			alert("Por favor, rellene el campo " + document.getElementById(oInicio).getAttribute("titulo") + " correctamente.");
 			return false;
	}
  else if ((f1 != "") && (f2 != "")) {
		
 	  if (!EsFecha(f1)) {
 			alert("Por favor, rellene el campo " + document.getElementById(oInicio).getAttribute("titulo") + " correctamente.");
 			return false;
	  }
	  if (!EsFecha(f2)) {
 			alert("Por favor, rellene el campo " + document.getElementById(oFin).getAttribute("titulo") + " correctamente.");
 			return false;
	  }
		
		f1 = new Date(f1);
		f2 = new Date(f2);
				
		if(f2<f1){
   		switch (iIdioma){
   			case 0:
   				alert("Beginning date must be the same or lower than end date");
   				break;
   			case 1: 
   				alert("La fecha de inicio ha de ser anterior o igual a la fecha de fin");
   				break;
   		}
   		return false;
   	}else{
   		return true; 
   	}
  }	

	return true;

}