/**************************************************************************/
/* array checkDate(String)                                                */
/**************************************************************************/
/* Funcion auxiliar para utilizar en funciones propias. 		  */
/* Nos permite comprovar si una fecha es correcta y devuelve el mensaje   */
/* de error adecuado.                                                     */
/**************************************************************************/
function checkDate (sDia,sMes,sAny,sNomCamp) 
{
        var sData = sDia + "/" + sMes + "/" + sAny;
	aResultats =new Array ();
        aResultats[0]="";
        aResultats[1]="";

        if (sDia != "-1" & sMes != "-1" & sAny != "-1"){

		if (isDate (sData) == false){
		     aResultats[0] = "-2";
		     aResultats[1] = "\nLa Fecha " + sNomCamp + " es Incorrecta.";	     
		}
	}else {
		
		if (sDia != "-1" || sMes != "-1" || sAny != "-1"){
		     aResultats[0] = "-2";
		     aResultats[1] = "\nLa Fecha " + sNomCamp + " es Incorrecta.";	     			
	        }	
		
        }	
        return aResultats;	
}
/**************************************************************************/
/* array checkDate(String)                                                */
/**************************************************************************/
/* Funcion auxiliar para utilizar en funciones propias. 		  */
/* Nos permite comprovar si dadas dos fechas en la que una es la inicial  */
/* y otra la final esta ultima sea mayor que la primera.                  */
/**************************************************************************/
function checkTwoDates (sDiaInici,sMesInici,sAnyInici,sDiaFi,sMesFi,sAnyFi,sNomDataInici,sNomDataFi) 
{
        var sDataInici = sMesInici + "/" + sDiaInici + "/" + sAnyInici;
        var sDataFi = sMesFi + "/" + sDiaFi + "/" + sAnyFi;
        dDataInici = new Date (sDataInici);
        dDataFi = new Date (sDataFi);
                
	aResultats =new Array ();
        aResultats[0]="";
        aResultats[1]="";
        if (sDiaInici != "-1" & sMesInici != "-1" & sAnyInici != "-1" & sDiaFi != "-1" & sMesFi != "-1" & sAnyFi != "-1"){
        
		if (dDataFi < dDataInici ){
		     aResultats[0] = "-2";
		     aResultats[1] = "\nLa Fecha de " + sNomDataFi + " no puede ser inferior a la Fecha " +sNomDataInici;	     
		}
	}
        return aResultats;	
}

/**************************************************************************/
/* boolean isDate(String)                                                 */
/**************************************************************************/
/* Permite comprobar si la fecha introducida por el usuario 			  */
/* tiene una estructura correcta.                                         */
/**************************************************************************/
function isDate (sFecha) 
{

	var bError = 0;
	var sDia = "";
	var sMes = "";
	var sAnyo = "";
	var i = 0;
	sMensaje = "Se han encontrado los siguientes errores:\n";
	aMensajeError = new Array ();
	aMensajeError[0] = '';
	aMensajeError[1] = 'Error en el formato de la fecha.';
	aMensajeError[2] = 'El dia "dd" es incorrecto';
	aMensajeError[3] = 'El mes "mm" es incorrecto';
	aMensajeError[4] = 'El año "aa" o "aaaa" es incorrecto';
	aMensajeError[5] = 'El número de dias de Febrero no es correcto'; 
	aMensajeError[6] = 'El número de dias en este mes no es correcto';
	aMensajeError[7] = 'Error en el formato de la fecha. Separador incorrecto.';

	var daysInMonth = new Array (31,29,31,30,31,30,31,31,30,31,30,31);
	
	aFecha = sFecha.split ("/");
	
	if (aFecha.length == 3) {
		sDia = aFecha[0];
		sMes = aFecha[1];
		sAnyo = aFecha[2];
	}
	else {
		aFecha = sFecha.split ("-");
		if (aFecha.length == 3) {
			sFecha= sFecha.replace (/-/g, "/");
			sDia = aFecha[0];
			sMes = aFecha[1];
			sAnyo = aFecha[2];

		}
		else {
			sMensaje += aMensajeError[7] + "\n";
			bError = 1;
		}
	}
	
	if (aFecha.length == 3) {	
		if (sDia != "" && sMes != "" && sAnyo != "") {
			if (isNum (sDia)) {
				if (( parseInt (sDia,10) > 31 ) || ( parseInt (sDia,10) < 1 ) || sDia < "0" || sDia > "9") {
					sMensaje += aMensajeError[2] + "\n"
					bError = 1;
				}
			} else {
				sMensaje += aMensajeError[2] + "\n"
				bError = 1;
			}
			
			if (isNum (sMes)) {
				if (( parseInt (sMes,10) > 12 ) || ( parseInt (sMes,10) < 1 ) || sMes < "0" || sMes > "9") {
					sMensaje += aMensajeError[3] + "\n"
					bError = 1;
				}
			} else {
				sMensaje += aMensajeError[3] + "\n"
				bError = 1;
			}
			
			if (( parseInt (sMes,10) == 2) && ( parseInt (sDia,10) > daysInFebruary (parseInt (sAnyo,10)) )) {
				sMensaje += aMensajeError[5] + "\n";
				bError = 1;
			}
			else {
				//Control "Dia del Mes" correcto, menos febrero
				if (daysInMonth[parseInt (sMes,10) - 1] < parseInt (sDia,10)) {
					sMensaje += aMensajeError[6] + "\n";
					bError = 1;
				}
			}
		
			if (isNum (sAnyo)) {
				if ( (sAnyo.length != 2) && (sAnyo.length != 4) ) {
					sMensaje += aMensajeError[4] + "\n"; 
					bError = 1;
				}
			} else {
				sMensaje += aMensajeError[4] + "\n"
				bError = 1;
			}
		}
		else {
			sMensaje += aMensajeError[1] + "\n"; 
			bError = 1;
		}
	}
		
		if ( bError != 0 ) {
			// Este alert mostraria el mensaje concretando el error en caso de ser necesario
			return false;
		}
		else return true;

}

/**************************************************************************/
/* boolean daysInFebruary (year)                                          */
/**************************************************************************/
/* Permite comprobar si el año introducido por el usuario 			  	  */
/* es bisiesto.                                         				  */
/**************************************************************************/

function daysInFebruary (year)
{   
	// Febrero tiene 29 dias en cualquier año divisible por 400 excepto los siglos
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}	



/**************************************************************************/
/* boolean isMail(String)                                                 */
/**************************************************************************/
/* Permite comprobar si la dirección de correo introducida por el usuario */
/* tiene una estructura correcta.                                         */
/**************************************************************************/

function isMail (sCadena) {

	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(sCadena)) 
		return (true)
	return (false)

}



/******************************************************************************/
/* boolean isNum(String)                                                      */
/******************************************************************************/
/* Devuelve true si el parametro que se le pasa esta formado solo por numeros */
/* en otro caso devuelve false.                                               */
/******************************************************************************/
function isNum(valor) {
	valor = valor.toString();
	ret = true

	if (valor.length == 0) ret = false;
	
	for (var i = 0; i < valor.length; i++)
		if ((( (valor.substring(i, i+1) < "0") && (valor.substring(i, i+1) != ",") && (valor.substring(i, i+1) != ".") ) || ( (valor.substring(i, i+1) > "9") && (valor.substring(i, i+1) != ",") && (valor.substring(i, i+1) != ".") ) ) )
			ret = false;

	return ret
}



/******************************************************************************/
/* boolean isAlphaNum(String)                                                 */
/******************************************************************************/
/* Devuelve true si el parametro que se le pasa esta formado por caracteres   */
/* alfanumericos, en otro caso devuelve false.                                */
/******************************************************************************/
function isAlphaNum(valor) {
	valor = valor.toString();
	ret = true;
	
	aNoValid = new Array ("<", ">", "\\", "{", "}", "[", "]", "†", "ˆ", "?", "¶")
	
	for (var i = 0; i < valor.length; i++) {
	  if (isInChar(valor.substring(i, i+1) , aNoValid)) {
  		ret = false
		}
	}
	
	return ret
}



/**************************************************************************/
/* String javaTrim(String)                                                */
/**************************************************************************/
/* Simula el comportamiento del TRIM. Recibe como parametro una cadena y  */
/* devuelve la cadena sin espacios en blanco.                             */
/**************************************************************************/

function javaTrim(cadena) {
	sResultado=""

	for (i=0;i<cadena.length;i++) {
		if (cadena.charAt(i)!=" ") {
			sResultado = sResultado + cadena.charAt(i)
		}
	}

	return sResultado
}



/**************************************************************************/
/* int posicionForm(Form, String)                                         */
/**************************************************************************/
/* Devuelve la posicion de un campo dentro del array de elementos de un   */
/* formulario. En caso de que no pertenezca devuelve -1.                  */
/**************************************************************************/
function posicionForm(frm, sCampo) {
  for (n = 0; n < frm.elements.length; n++) {
     if (frm.elements[n].name == sCampo) return n;
  }
  return -1;
}



/**************************************************************************/
/* boolean isIn(char, *char)                                              */
/**************************************************************************/
/* Devuelve true en caso de que el caracter sea uno de los que forman el  */
/* array. En caso de que no sea ninguno, devuelve false.                  */
/**************************************************************************/
function isInChar(sChar, aCharNoValid) {

  for (mm = 0; mm < aCharNoValid.length; mm++) {
    if (sChar == aCharNoValid[mm]) {
      return true;
    }
  }
  
  return false;

}


/**************************************************************************/
/* int inFrm(Form)                                                        */
/**************************************************************************/
/* Devuelve la posicion de un formularion dentro del array de elementos   */
/* de una pagina. En caso de que no pertenezca devuelve -1.               */
/**************************************************************************/
function inFrm(sFrmName) {

  for (index = 0; index < document.forms.length; index++) {
     if (document.forms[index].name == sFrmName) return index;
  }
  return -1;
}




