//--------------------------------------------
// Franc. 2004
//--------------------------------------------

/*--------------------------Ultima modificación---------------------------------*/
/* Permite anyadir texto descriptivo desde las funciones  a las validaciones    */
/*                                                                              */
/* Marzo 2005                                                                   */
/* R. Bellés                                                                    */
/*---------------------------------------------------------------------------   */

/*----------------------------Funciones disponibles para validar-------------*/

//function valida_importe(formfield,txtError)
//function validateString(formfield, fieldname,txtError)
//function validateStringLen(formfield,len,objTitulo,classTitulo,classError,txtError)
//function valida_no_nulo(formfield,objTitulo,classTitulo,classError,txtError)
//function confirma_password(formfield1,formfield2,objTitulo,classTitulo,classError,txtError)
//function valida_numero(formfield,objTitulo,classTitulo,classError,txtError)
//function valida_Float(campo, valor,txtError)
//function valida_fecha(formfield,objTitulo,classTitulo,classError,txtError)
//function valida_hora(formfield,txtError)
//function valida_horaT(formfield,txtError)

/*------------------------------------------------------------------------------*/

var decallowed = 3;  // Cuantos decimales están permitidos
var texto_validacion_importe= "El valor introducido no es un importe válido.";
var texto_validacion_entero = "El valor introducido no es numérico.";
var texto_validacion_decimal = "El valor introducido no es decimal.";
var texto_validacion_fecha  = " no es una fecha valida. Por Favor use el formato dd/mm/yy.";
var texto_validacion_hora  = " no es una hora valida. Por Favor use el formato hh:mm.";
var texto_validacion_email  = "El valor introducido no es un email valido.";
var texto_validacion_no_nulo= "El valor introducido no puede ser nulo.";
var texto_no_real= "El valor introducido no es válido, recuerde que sólo se permiten " + decallowed + " decimales.";
var texto_confirma_password = "La comprobacion del password no es correcta";
var error = 0;


/*********************************************************************/
/* DESCRIPTION: Pone una mascara de importe con puntos y comas.      */
/* PARAMETERS:                                                       */
/*********************************************************************/    
function num_comas()
{            
  if ( !(event.keyCode >= 48 && event.keyCode <= 57))
  {
    if (event.keyCode != 44)
    {
      event.keyCode=0;
    }           
  }
}                      

function checkNum(data) {      
  var valid = "0123456789,";   
  var ok = 1; var checktemp;
  for (var i=0; i<data.length; i++) {
    checktemp = "" + data.substring(i, i+1);
    if (valid.indexOf(checktemp) == "-1") return 0; 
  }
  return 1;
}

function Mascara(field,val,n) { 

  if (val == null)            
    Num = field.value;            
  else
    Num = val;            

  if (n == null){
    Decimales = 2;
  }else{  
    if (!isInteger(n)){
      Decimales = 2;		
	}else{
      Decimales = n;
	}
  }

  if (Num.indexOf(".") == -1){            
    dec = Num.indexOf(",");
    end = ((dec > -1) ? "" + Num.substring(dec,Num.length) : ",00");
	// Caso en que solo tiene un decimal.
	if (end.length == 2) end = end + "0";
    // Redondeo de decimales.
    if (end.length > 3){
     var redondeo = parseInt(end.substr(2,1));
         redondeo = (redondeo >=5)?redondeo+1:redondeo;
		 if (redondeo == 10){
		   var sum = parseInt(end.substr(1,1))+1;
           end = ","+sum+ "0";
		 }else{		 
           end = end.substr(0,2) + "" + redondeo;
		 }
    }

	
    Num = "" + parseInt(Num);
    var temp1  = "";
    var temp2  = "";
    var v_cont = 0;         

    if (checkNum(Num+end) == 0)
    {
      null; //alert("error");
    }            
    else 
    { 
      var total = Num.length - 1;
      for (var i=total;i>=0;i=i-1)
      {
        if (v_cont == 3)
        {
          temp1+="."+Num.charAt(i); 
          v_cont = 0;
        }
        else
        {
          temp1+=Num.charAt(i);
        }                
        v_cont++;
      }                        
      // damos la vuelta
      for (var i=temp1.length;i>=0;i=i-1)
      {
        temp2+= temp1.charAt(i);
      }

      if (val == null)
        field.value = temp2+end;
      else
        return temp2+end.substr(0,Decimales+1);
    }
  }
}

//============================================
// Valida el NIF       =======================
//============================================
function validaNIF(formfield,objTitulo,classTitulo,classError,txtError)
{
  var pos;
  var pos2;	

  //Comprobamos que tenga 9 digitos
	if (formfield.value.length != 9)
	{
		formfield.select();
		if (objTitulo != null) document.getElementById(objTitulo).className = classError;
		error = error + 1;
		
		 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
		  if (txtError!= null){
			  alert(txtError);
		  }else {
			  alert("Longitud incorrecta, un NIF consta de 9 dígitos.");
		  }
		
		
		formfield.focus();
		formfield.value = "";
		return false;
	}

  //Comprobamos que los 8 últimos digitos sean numericos.
	for (var i=0; i<8 ;i++)
	{
		pos = formfield.value.substr(i,1);
		if ((pos < "0") || (pos > "9"))
		{
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;					
			
			//si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Formato de NIF incorrecto. Consta de 8 números y una letra al final.");
			  }
			  
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
	}	
	
  //Comprobamos que el ultimo caracter es una letra
	pos = formfield.value.substr(8,1); 
	pos2 = pos.toUpperCase ();
	if (isNaN(pos2) == false)
	{
		formfield.select();
		if (objTitulo != null) document.getElementById(objTitulo).className = classError;
		error = error + 1;				
		
		//si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
		  if (txtError!= null){
			  alert(txtError);
		  }else {
			  alert("Formato de NIF incorrecto. Consta de 8 números y una letra al final.");
		  }
		
		formfield.focus();
		formfield.value = "";
		return false;
	}
		
  //Comprobamos que la letra sea la correcta
	var numero = formfield.value.substr(0,8);
	var letra  = formfield.value.substr(8,1).toUpperCase();
	var d =(numero/23);
	d = Math.floor(d);
	var e = d*23;
	var r = numero - e;

	switch (r)
	{
		case 0:
		if (letra != "T") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;
			
			//si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 1:
		if (letra != "R") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 2:
		if (letra != "W") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;
			
		
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 3:
		if (letra != "A") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;		
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 4:
		if (letra != "G") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 5:
		if (letra != "M") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 6:
		if (letra != "Y") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 7:
		if (letra != "F") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 8:
		if (letra != "P") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 9:
		if (letra != "D") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 10:
		if (letra != "X") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 11:
		if (letra != "B") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 12:
		if (letra != "N") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 13:
		if (letra != "J") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 14:
		if (letra != "Z") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 15:
		if (letra != "S") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 16:
		if (letra != "Q") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 17:
		if (letra != "V") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 18:
		if (letra != "H") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 19:
		if (letra != "L") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 20:
		if (letra != "C") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 21:
		if (letra != "K") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
		case 22:
		if (letra != "E") {
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			
			
			 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
			  if (txtError!= null){
				  alert(txtError);
			  }else {
				 alert("Letra de NIF incorrecta.");
			  }
			
			
			formfield.focus();
			formfield.value = "";
			return false;
		}
		break;
	}		
	// En caso de que el NIF sea valido 
  if (objTitulo != null) document.getElementById(objTitulo).className = classTitulo;
	return true;
}


//============================================
// Valida el CIF       =======================
//============================================
function validaCIF(formfield,objTitulo,classTitulo,classError) 
{
  var temp = formfield.value.toUpperCase(); // pasar a mayúsculas
  var temp1 = 0; 	
	var temp2 = temp.substr(8,1);
	var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
	var i = 0; 
	
  if (!/^[A-Za-z0-9]{9}$/.test(temp)) {  // Son 9 dígitos? 
		formfield.select();
		if (objTitulo != null) document.getElementById(objTitulo).className = classError;
		error = error + 1;				
		alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
		formfield.focus();		
		formfield.value = "";
		return false;		
	}
	
  if (!/^[ABCDEFGHKLMNPQS]/.test(temp)) { // Es una letra de las admitidas?
		formfield.select();
		if (objTitulo != null) document.getElementById(objTitulo).className = classError;
		error = error + 1;
		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 ");
		formfield.focus();		
		formfield.value = "";
		return false;		 
	}
 
	for( i = 2; i < 7; i = i + 2 ) { // Se comprueba si el digito de control (ultimo digito) es correcto
		temp1 = temp1 + v1[ parseInt(formfield.value.substr(i-1,1)) ];
		temp1 = temp1 + parseInt(formfield.value.substr(i,1));
	}
	
	temp1 = temp1 + v1[ parseInt(formfield.value.substr(7,1)) ];
	temp1 = (10 - ( temp1 % 10));
	
	if( temp1 == 10 ) {
		if ((temp2 != "J") && (temp2 != "O")){
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			alert( "El dígito de control es incorrecto." );
			formfield.focus();			
			formfield.value = "";
			return false;					
		}
	}
	else { 
		switch(temp2)
		{
			case 'A': 
				temp2 = 1;
				break;
			case 'B': 
				temp2 = 2;
				break;
			case 'C': 
				temp2 = 3;
				break;
			case 'D': 
				temp2 = 4;
				break;
			case 'E': 
				temp2 = 5;
				break;
			case 'F': 
				temp2 = 6;
				break;
			case 'G': 
				temp2 = 7;
				break;
			case 'H': 
				temp2 = 8;
				break;
			case 'I': 
				temp2 = 9;
				break;
			case 'J': 
				temp2 = 0;
				break;
		}
		if (temp2 != temp1){
			formfield.select();
			if (objTitulo != null) document.getElementById(objTitulo).className = classError;
			error = error + 1;				
			alert( "El dígito de control es incorrecto." );
			formfield.focus();			
			formfield.value = "";
			return false;					
		}			
	}	
	// En caso de que el CIF sea valido 
  if (objTitulo != null) document.getElementById(objTitulo).className = classTitulo;
	return true;
}


//============================================
// Validation Routines =======================
//============================================

function validarEmail(formfield,objTitulo,classTitulo,classError,txtError) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(formfield.value)){
		document.getElementById(objTitulo).className = classTitulo;
	} 
	else {
		formfield.select();
		document.getElementById(objTitulo).className = classError;
		error = error + 1;
		
		//si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
		  if (txtError!= null){
			  alert(txtError);
		  }else {
			 alert(texto_validacion_email);
		  }
		
		formfield.focus();
		formfield.value ="";
	}
}

function notNull(sent) {
  if(!sent)return false;
  return (sent.length != 0);
}
//--------------------------------------------
function isInteger(sent) {
  if(!sent)return false;
  if(!String(sent).match(/\d{1,}/)) return false;
  return sent == String(sent).match(/\d{1,}/)[0];
}
//--------------------------------------------
function isFloat(sent) {
  if(!sent)return false;
  //return sent == String(sent).match(/\d*\,{0,1}\d*/)[0];
  return sent == String(sent).match(/\d*\,{0,1}\d*\.{0,1}/)[0];  
}
//--------------------------------------------
function isMoney(sent) {
  return sent == String(sent).match(/^\${0,1}\d*\.{0,1}\d{0,2}/)[0];
}
//--------------------------------------------
function isStateCode(sent) {
  sent = trim(String(sent).toUpperCase());
  return (STATECODES.indexOf(sent) != -1 && sent.indexOf("/") == -1);
}
//--------------------------------------------
function trim(sent) {
  var S = new String(sent);
  S = S.replace(/^\s+/,"");
  return S.replace(/\s+$/,"");
}
//--------------------------------------------
function filterChars(sent,chars) {
  var reg= new RegExp();
  reg.compile(chars,"gi");
  return String(sent).replace(reg,"");
}
//--------------------------------------------
function filterNonDigits(sent) {
  return String(sent).replace(/[^\d\.]/g," ");
}
//--------------------------------------------
function padZeros(sent,num) {
  sent=String(sent);
  while(sent.length<num)sent="0"+sent;
  return sent;
}
//--------------------------------------------
function formatFloat(sent,num){
  if(!isFloat(sent))return sent;
  var result=Math.round(sent*Math.pow(10,num));
  return result/Math.pow(10,num);
}

//============================================
// date routines =============================
//============================================

function makeFourDigitYear(sent) { // takes yy and tries to output yyyy
  if (sent.length>2) return sent;
  if (sent<50) return "20"+padZeros(sent,2);
  else return "19"+sent;
}
//--------------------------------------------
function getMonthLength(month,year) { // 1=jan
  year=makeFourDigitYear(year);  // year must be yyyy
  var monthlength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  // leap year - any year divisible by 4 or 400 - add one day to february
  if (month==2 && (year/4==Math.floor(year/4) || year/400==Math.floor(year/400))) return 29;
  else return monthlength[month-1];
}
//--------------------------------------------
function addDaysToDate(date,days) {
  date=new Date(date);
  days=Math.floor(days); // forces a cast to integer
  var month=date.getMonth();
  var day  =date.getDate();
  var year =date.getFullYear();
  var tempday=day+days;
  if (tempday<1) {
    month--;
    if (month<0) month=11;
    tempday=getMonthLength(month,year)-tempday;
  }
  if (tempday>getMonthLength(month,year)) {
    tempday=getMonthLength(month,year)-tempday;
    month++;
    if (month>11) month=0;
  }
  return createDate(year,month,tempday);
}
//--------------------------------------------
function formatDate(date) { // converts date to m/d/yyyy format
  var month=date.getMonth();
  var day  =date.getDate();
  var year =date.getFullYear();
  return (month+1)+"/"+day+"/"+year;
}
//--------------------------------------------
function isDate(sent) {
  var dateArray=String(sent).split("/");
  if (dateArray.length != 3) return false;
  d=trim(dateArray[0]);
  m=trim(dateArray[1]);
  y=trim(dateArray[2]);
   
  if ((isInteger(m)==false) || (isInteger(d)==false) || (isInteger(y)==false)) return false;
  if (m<1 || m>12) return false;
  if (y.length != 4) y=makeFourDigitYear(y);
  if (y.length != 4) return false;
  if (d<1 || d>getMonthLength(m,y)) return false;
  return true;
}
//-------------------------------------------------
function isHora(hora)
{
  var hh = hora.substr(0,2);
  var mm = hora.substr(3,2);
  var err_hora = false;
                  
  if (hh.substr(0,1) == ":" || hh.substr(1,1) == ":")
  { 
    err_hora = true; 
  }
  else
  {
    if (mm.substr(0,1) == ":" || mm.substr(1,1) == ":")
    { 
      err_hora = true; 
    }
    else
    {
      if (hora.substr(2,1) != ":")
      { 
        err_hora = true; 
      }                      
    }
  }
  
  if (parseInt(hh,10)>=0 && parseInt(hh,10)<=23 && !err_hora)
  {
    if (parseInt(mm,10)>=0 && parseInt(mm,10)<=59)
    {                   
      return true;
    }
  }
  return false;
}  

//-------------------------------------------------
function isHoraT(hora)
{
  var hh = hora.substr(0,2);
  var mm = hora.substr(3,2);
  var err_hora = false;
                  
  if (hh.substr(0,1) == ":" || hh.substr(1,1) == ":")
  { 
    err_hora = true; 
  }
  else
  {
    if (mm.substr(0,1) == ":" || mm.substr(1,1) == ":")
    { 
      err_hora = true; 
    }
    else
    {
      if (hora.substr(2,1) != ":")
      { 
        err_hora = true; 
      }                      
    }
  }
  
  if (parseInt(hh,10)>=0 && !err_hora)
  {
    if (parseInt(mm,10)>=0 && parseInt(mm,10)<=59)
    {                   
      return true;
    }
  }
  return false;
} 

//--------------------------------------------
function getStartDay(month,year) { // returns day of week the first day of the month falls on
	var tempdate= new Date();
	tempdate.setDate(1);
	tempdate.setMonth(month);
	tempdate.setFullYear(year);
	return tempdate.getDay(); //0 to 6
}
//--------------------------------------------
function createDate(m,d,y) {
  return formatDate(new Date(parseInt(y),parseInt(m),parseInt(d)));
}

//============================================
// form validation routines ==================
//============================================

function valida_importe(formfield,txtError) {
  formfield.value=trim(formfield.value);
  if (notNull(formfield.value) && isMoney(formfield.value) ) return true;
  formfield.select();
  formfield.focus();
  error = error + 1;
  
	  //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
	  if (txtError!= null){
		  alert(txtError);
	  }else {
		 alert(texto_validacion_importe);
	  }
 
  return false;
}
//--------------------------------------------
function validateString(formfield, fieldname,txtError) {
  formfield.value=trim(formfield.value);
  if (notNull(formfield.value)) return true;
  formfield.select();
  formfield.focus();
  error = error + 1;
  
  //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
  if (txtError!= null){
	  alert(txtError);
  }else {
	 alert("You must provide a "+fieldname);
  }
 
  return false;
}
//--------------------------------------------
function validateStringLen(formfield,len,objTitulo,classTitulo,classError,txtError) {
  if (formfield.value.length <= len) {
		if (objTitulo != null) document.getElementById(objTitulo).className = classTitulo;
		return true;
	}
  formfield.select();
	if (objTitulo != null) document.getElementById(objTitulo).className = classError;
  error = error + 1;
  
  //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
  if (txtError!= null){
	  alert(txtError);
  }else {
	  alert("La longitud del texto no puede ser mayor de" + len + "caracteres.");
  }
 
  formfield.focus();
	return false;
}
//--------------------------------------------
//function valida_no_nulo(formfield,objTitulo,classTitulo,classError) {
function valida_no_nulo(formfield,objTitulo,classTitulo,classError,txtError) {
  formfield.value=trim(formfield.value);
  if (notNull(formfield.value)) 
	{
		if (objTitulo != null) document.getElementById(objTitulo).className = classTitulo;
		return true;
	}
  formfield.select();
	if (objTitulo != null) document.getElementById(objTitulo).className = classError;
  error = error + 1;
  
 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
  if (txtError!= null){
	  alert(txtError);
  }else {
	  alert(texto_validacion_no_nulo);
  }
  
  formfield.focus();
	return false;
}
//--------------------------------------------
function confirma_password(formfield1,formfield2,objTitulo,classTitulo,classError,txtError) {
  if (formfield1.value == formfield2.value)   
	{
		document.getElementById(objTitulo).className = classTitulo;
		return true;
	}
  formfield2.select();
  if (objTitulo != null) document.getElementById(objTitulo).className = classError;
  error = error + 1;
  
  //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
  if (txtError!= null){
	  alert(txtError);
  }else {
	  alert(texto_confirma_password);
  }
  
 
  formfield2.focus();
  return false;
}
//--------------------------------------------
function valida_numero(formfield,objTitulo,classTitulo,classError,txtError) {
  formfield.value = trim(formfield.value);
  if (formfield.value=="") return true;
	else {
  	if (isInteger(formfield.value) ) {
			if (objTitulo != null) document.getElementById(objTitulo).className = classTitulo;
			return true;
		}
		formfield.select();
		if (objTitulo != null) document.getElementById(objTitulo).className = classError;
		error = error + 1;
		

		 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
		  if (txtError!= null){
			  alert(txtError);
		  }else {
			 alert(texto_validacion_entero);
		  }
		  
		formfield.focus();
		formfield.value ="";
		return false;
	}
}
//--------------------------------------------
function valida_Float(campo, valor,txtError) {
  valor=trim(valor);
  if (valor=="") return true;
  fieldName  = campo.Name;
  fieldValue = valor
  if (fieldValue.indexOf(',') == -1) fieldValue += ",";
  dectext = fieldValue.substring(fieldValue.indexOf(',')+1, fieldValue.length);
  if (dectext.length <= decallowed) return true;
  campo.select();
  campo.focus();
  
	 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
	  if (txtError!= null){
		  alert(txtError);
	  }else {
		alert (texto_no_real);
	  }
  
  error = error + 1;    
  return false;
}

//--------------------------------------------
function valida_fecha(formfield,objTitulo,classTitulo,classError,txtError) {
  formfield.value=trim(formfield.value);
  if (formfield.value=="") return true;
  else {
		if (isDate(formfield.value)) {
			if (objTitulo != null) document.getElementById(objTitulo).className = classTitulo;
			return true;
		}
		formfield.select();
		if (objTitulo != null) document.getElementById(objTitulo).className = classError;
		error = error + 1;
		
		 //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
		  if (txtError!= null){
			  alert(txtError);
		  }else {
			 alert("'" + formfield.value + "'" + texto_validacion_fecha);
		  }
		
		
		formfield.focus();
		formfield.value ="";
		return false;
  }
}
//--------------------------------------------
function valida_hora(formfield,txtError) {
  formfield.value=trim(formfield.value);
  if (formfield.value=="") return true;
  else {
  if (isHora(formfield.value)) return true;
  formfield.select();
  formfield.focus();
  error = error + 1;
  
   //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
  if (txtError!= null){
	  alert(txtError);
  }else {
	alert("'" + formfield.value + "'" + texto_validacion_hora);
  }
  
  return false;
  }
}

//--------------------------------------------
function valida_horaT(formfield,txtError) {
  formfield.value=trim(formfield.value);
  if (formfield.value=="") return true;
  else {
  if (isHoraT(formfield.value)) return true;
  formfield.select();
  formfield.focus();
  error = error + 1;
  
   //si le pasamos un texto de error (txtError) lo muestra , si no le pasamos nada muestra el texto por defecto
  if (txtError!= null){
	  alert(txtError);
  }else {
	  alert(formfield.value+texto_validacion_hora);
  }
 
  return false;
  }
}

//--------------------------------------------
// Funciones propias del campo TEXTAREA
//--------------------------------------------
function amplia_textarea(formfield,filas){
 formfield.rows=filas;
}

function reduce_textarea(formfield){
 formfield.rows=1;
}
    var cadena=new String();
 // CONTADOR DE CARACTERES
    var varicontador=0;
 // FUNCION QUE CUENTA EL NUMERO DE CARACTERES MOSTRADOS ENM EL TEXTAREA
 // CUANDO SE PULSA UNA TECLA
   function KEYDOWN(CAMPO, MAX_CARAC)
          {
            varicontador= MAX_CARAC - CAMPO.value.length;
          	if (varicontador>=0)
          	{
          	  cadena=CAMPO.value
          	}
          	else
          	{
          	  comprobar=CAMPO.value.length;

              if (comprobar>MAX_CARAC-1)
              {
                CAMPO.value=cadena;
              }

              CAMPO.value=cadena;
          	}
          }

          function KEYUP(CAMPO, MAX_CARAC)
          {
          	varicontador=MAX_CARAC- (CAMPO.value.length);
          	if (varicontador>=0)
          	 {
            	 cadena=CAMPO.value
          	 }
          	else
          	 {
            	 comprobar=CAMPO.value.length;
               if (comprobar>MAX_CARAC-1)
               {
                 CAMPO.value=cadena;
               }

               CAMPO.value=cadena;
          	 }
          }


//--------------------------------------------
        function solo_numeros_coma(campo)
	{
	  if (!((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode == 44) || (event.keyCode == 43) || (event.keyCode == 45) ))
          {
            event.keyCode=0;
          }
	  if ((event.keyCode == 44) && (campo.value.indexOf(",") > -1))
	  {
            event.keyCode=0;
	  }
	  if (((event.keyCode == 43) || (event.keyCode == 45)) && ((campo.value.indexOf("+") > -1) || (campo.value.indexOf("-") > -1)))
	  {
            event.keyCode=0;
	  }
        }

        function formato_hora(campo)
	{
          if (!((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode == 58)))
          {
            event.keyCode=0;
          }
	  if ((event.keyCode == 58) && (campo.value.indexOf(":") > -1))
	  {
            event.keyCode=0;
	  }
        }

        function solo_numeros()
	{
          if (!(event.keyCode >= 48 && event.keyCode <= 57))
          {
            event.keyCode=0;
          }
        }

        function solo_mayusculas()
	{
	  if ((event.keyCode >= 97 && event.keyCode <= 122))
          {
            event.keyCode= event.keyCode-32;
          }
        }

        function solo_minusculas()
	{
	  if ((event.keyCode >= 65 && event.keyCode <= 90))
          {
            event.keyCode= event.keyCode+32;
          }
        }

//-----------------------------------------------------
// Funcion que valida todos los campos de un formulario
//-----------------------------------------------------

var error = 0;

function valida_campos()
{
	// inicializamos el contador de errores
	error = 0;

	// recorremos todos los elementos del documento
	for(i = 0; i < document.all.length; i++)
	{
		 // si no hay error comprobamos el elemento, sino nos ahorramos
		 // las comprobaciones
		 if (error == 0)
		 {
			 try
			 {
				 if ((document.all(i).tagName == "INPUT") ||
						(document.all(i).tagName == "TEXTAREA"))
				 {
					 document.all(i).onerrorupdate();
				 }
			 }
			 catch(e)
			 {
			 // evitamos el error producido por los elementos que no tengan este evento
			 }
		 }
		 else
		 {
			 return false;
		 }
	}
	if (error == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}