 

var validateArray = new Array();

 

function isInformed( id ) {

      var obj = document.getElementById(id);
      if( obj != null && obj.value.length > 0 ) {
            return true;
      }
      return false;
}


function isChecked( id ) {

      var obj = document.getElementById(id);
      if( obj != null && obj.checked == true ) {
            return true;
      }
      return false;
}

function isInformedTelefono12( id ) {

      var obj = document.getElementById(id);

      if( obj.value.length <= 12 ) {

            return true;

      }

      return false;

}

function isInformedTelefono3( id ) {

      var obj = document.getElementById(id);

      if( obj.value.length <= 3 ) {

            return true;

      }

      return false;

}

/*
	A.Carreras: A�adida funcion para controlar campos no informados en la busqueda de la Home
*/
function isInformedHome( id ) {

      var obj = document.getElementById(id);
//alert(obj.value);
      if(  obj.value != null && obj.value != "0" && obj.value != "dd/mm/yyyy" && obj.value != "mm/dd/yyyy" && obj.value !="" ) {

            return true;

      }

      return false;

}

function isCodUsuario ( id ) {

      var obj = document.getElementById(id);

      if( obj != null && obj.value.length == 0 ) {
			return true;
      }
      if( obj != null && obj.value.length > 0 && obj.value.length != 4 && obj.value.length != 8) {
            return true;
      }
      return false;
}
 
function isInformedPlus( id ) {

      var obj = document.getElementById(id);

      

      if(obj != null && obj.disable) { return true; }

      

      if( obj != null && obj.value.length > 0 ) {

            return true;

      }

      

      return false;

}

 function isValidDateUS( id ) {

/************************************************

DESCRIPTION: Validates that a string contains only

    valid dates with 2 digit month, 2 digit day,

    4 digit year. Date separator can be ., -, or /.

    Uses combination of regular expressions and

    string parsing to validate date.

    Ex. dd/mm/yyyy or dd-mm-yyyy or dd.mm.yyyy

 

RETURNS:

   True if valid, otherwise false.

*************************************************/

  var strValue = document.getElementById(id).value;

  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

 

  //check to see if in correct format

  if(!objRegExp.test(strValue))

    return false; //doesn't match pattern, bad date

  else{

    var strSeparator = strValue.substring(2,3) 

    var arrayDate = strValue.split(strSeparator); 

    //create a lookup for months not equal to Feb.

    var arrayLookup = { '01' : 31,'03' : 31, 

                        '04' : 30,'05' : 31,

                        '06' : 30,'07' : 31,

                        '08' : 31,'09' : 30,

                        '10' : 31,'11' : 30,'12' : 31}

    var intDay = parseInt(arrayDate[1],10); 

 

    //check if month value and day value agree

    if(arrayLookup[arrayDate[1]] != null) {

      if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)

        return true; //found in lookup table, good date

    }

    

    //check for February (bugfix 20050322)

    //bugfix  for parseInt kevin

    //bugfix  biss year  O.Jp Voutat

    var intMonth = parseInt(arrayDate[0],10);

    if (intMonth == 2) { 

       var intYear = parseInt(arrayDate[2]);

       if (intDay > 0 && intDay < 29) {

           return true;

       }

       else if (intDay == 29) {

         if ((intYear % 4 == 0) && (intYear % 100 != 0) || 

             (intYear % 400 == 0)) {

              // year div by 4 and ((not div by 100) or div by 400) ->ok

             return true;

         }   

       }

    }

  }  

  return false; //any other values, bad date

}

 


function isValidDate( id ) {

/************************************************

DESCRIPTION: Validates that a string contains only

    valid dates with 2 digit month, 2 digit day,

    4 digit year. Date separator can be ., -, or /.

    Uses combination of regular expressions and

    string parsing to validate date.

    Ex. dd/mm/yyyy or dd-mm-yyyy or dd.mm.yyyy

 

RETURNS:

   True if valid, otherwise false.

*************************************************/

  var strValue = document.getElementById(id).value;

  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

 

  //check to see if in correct format

  if(!objRegExp.test(strValue))

    return false; //doesn't match pattern, bad date

  else{

    var strSeparator = strValue.substring(2,3) 

    var arrayDate = strValue.split(strSeparator); 

    //create a lookup for months not equal to Feb.

    var arrayLookup = { '01' : 31,'03' : 31, 

                        '04' : 30,'05' : 31,

                        '06' : 30,'07' : 31,

                        '08' : 31,'09' : 30,

                        '10' : 31,'11' : 30,'12' : 31}

    var intDay = parseInt(arrayDate[0],10); 

 

    //check if month value and day value agree

    if(arrayLookup[arrayDate[1]] != null) {

      if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)

        return true; //found in lookup table, good date

    }

    

    //check for February (bugfix 20050322)

    //bugfix  for parseInt kevin

    //bugfix  biss year  O.Jp Voutat

    var intMonth = parseInt(arrayDate[1],10);

    if (intMonth == 2) { 

       var intYear = parseInt(arrayDate[2]);

       if (intDay > 0 && intDay < 29) {

           return true;

       }

       else if (intDay == 29) {

         if ((intYear % 4 == 0) && (intYear % 100 != 0) || 

             (intYear % 400 == 0)) {

              // year div by 4 and ((not div by 100) or div by 400) ->ok

             return true;

         }   

       }

    }

  }  

  return false; //any other values, bad date

}

 

function isChecked( id ) {

      var obj = document.getElementById(id);

      if( obj != null && obj.checked ) {

            return true;

      }

      return false;

}

 

function isEmail( id ) {

      var obj = document.getElementById(id);

      if( obj == null && obj.value.length == 0 ) {

            return true;

      }

      var str = obj.value;

      return (str.lastIndexOf(".") > 2) && (str.indexOf("@") > 0) && (str.lastIndexOf(".") > (str.indexOf("@")+1));

}


function isList( id ) {

      var obj = document.getElementById(id);
      if( obj != null && obj.value != "" ) {

      		return true;

      }

      return false;

}

/* 

* O tienen 8 dÃ­gitos o esta vacÃ­o

*/

function checkRiuClassNumber( id ) {

      var obj = document.getElementById(id);

      //console.log("checkRiuClassNumber::" + obj.value);

      if( obj != null && obj.value.length == 0 ) {

            return true;

      }

      if( obj != null && obj.value.length == 8 ) {

            return true;

      }

      return false;

}

/* 
*  Password iguales con mas de 6 y menos de 10 digitos
*/

function checkPasswordRiuClass( id ) {
	var obj1 = document.getElementById(id);
	if (id == "psw1"){
		var obj2 = document.getElementById("psw2");
	}
	if (id == "psw2"){
		var obj2 = document.getElementById("psw1");
	}
    if( obj1.value.length >= 6 && obj1.value.length <= 10 && obj1.value == obj2.value) {
		return true;
    }
    return false;
}

 

 

/* ErrorDivp -> resultado del error */
function addValidation(idp, funcp, msgp, errorDivp) {
      var o = {
            func : funcp,
            id : idp,
            msg : msgp,
            errorDiv : errorDivp
      };

      validateArray[ validateArray.length ] = o;
}

function getDivFromArrayById( arr, idDivp) {
	for( j=0; j < arr.length; j++) {
		if( arr[j].idDiv == idDivp ) {
			return arr[j];
		}
	}
	
	var o = {
            idDiv : idDivp,
            msg : ""
	};
	
	arr[ arr.length ] = o;
	return o;
}

 

/*
	Cambio validame para que un campo pueda elegir donde mostrar sus errores
	Se cambia para que se pueda elegir en que div mostrar los errores
*/
function validame() {
      var ok = true;
      var msg = "";
	  var elem = document.getElementById(validateArray[0].id);
	  //var textError = document.getElementById(elem.form.id + 'E');
	  var avisos = "";
	  
	  var arraysError = new Array();
      
      for( i=0; i < validateArray.length; i++) {
		var avisoLocal = "";
		var o = validateArray[i];
		if( o != null && !o.func(o.id) ) {
			var element = document.getElementById(o.id);
 			if( element != null ) {
			fieldFocusOn(element);
			ok = false;             
			var strHTML = o.msg;
			avisoLocal = "<li>" +o.msg + "</li>";
			if( o.errorDiv ) {
				itemError = getDivFromArrayById(arraysError, o.errorDiv );
				itemError.msg += "<li>" +o.msg + "</li>";
			} else {
				avisos += avisoLocal;
			}
                        }
		} else {
			if (o!=null) {                  
				//Esto lo hago para dar de alta los ids y poder limpiar despues
				itemError = getDivFromArrayById(arraysError, o.errorDiv );
				
				var strHTML = "";
				fieldFocusOff(document.getElementById(o.id));
			} 
		} 
      }
      
	  for( i=0; i < arraysError.length; i++) {
	  	var o = arraysError[i];
	  	if( o.msg != "" ) {
			$( "#"+ o.idDiv ).html("<ul>" + o.msg + "<\/ul>"); 
	  	} else {
	  		$( "#"+ o.idDiv ).html(""); 
	  	}
	  }
      
      if ( avisos != "") {
			$("#"+elem.form.id + 'E').html("<ul>" + avisos + "<\/ul>"); 
	  } else {
			$("#"+elem.form.id + 'E').html(""); 
	  }
      if( !ok ) {
            return false;
      }
      return true;
}
 
function fieldFocusOn ( obj, message )
{
 //     obj.focus ();
      obj.style.borderColor = '#CE081F';
      obj.style.borderWidth = '2px';
      obj.style.backgroundColor='#FFCCCC';        
}
      
function fieldFocusOff ( obj )
{
  //    obj.focus ();
      obj.style.borderColor = '#C3BDBF';
	  obj.style.borderWidth = '1px';
	  obj.style.backgroundColor='#FFFFFF';
}


/* Validacion obtenida de http://www.evolt.org/node/24700 */

/**
* cardType : mastercard, visa, amex
*/
function isValidCreditCard(cardNumber, cardType) {
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3[4,7]/;
        break;

      case "diners":
      	lengthIsValid = (cardNumberLength == 15);
      	prefixRegExp = /^3[0,6,8]/;
      	break;
      
      case "discover":
      	lengthIsValid = (cardNumberLength == 16);
    	prefixRegExp = /^6011-?/;
    	break;
      	
      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}

/**
 * Validador de tarjetas, para muchas tarjetas y casuistica 
 */
function isValidCreditCardV2(cardNumber, cardType) {
	var cardName = cardType;
	var value = cardNumber;
	
	var cards = new Array();
	cards [0] = {cardName: "Visa", lengths: "13,16", prefixes: "4", checkdigit: true};
	cards [1] = {cardName: "MasterCard", lengths: "16", prefixes: "51,52,53,54,55", checkdigit: true};
	cards [2] = {cardName: "DinersClub", lengths: "14,16", prefixes: "300,301,302,303,304,305,36,38,55", checkdigit: true};
	cards [3] = {cardName: "CarteBlanche", lengths: "14", prefixes: "300,301,302,303,304,305,36,38", checkdigit: true};
	cards [4] = {cardName: "AmEx", lengths: "15", prefixes: "34,37", checkdigit: true};
	cards [5] = {cardName: "Discover", lengths: "16", prefixes: "6011,650", checkdigit: true};
	cards [6] = {cardName: "JCB", lengths: "15,16", prefixes: "3,1800,2131", checkdigit: true};
	cards [7] = {cardName: "enRoute", lengths: "15", prefixes: "2014,2149", checkdigit: true};
	cards [8] = {cardName: "Solo", lengths: "16,18,19", prefixes: "6334, 6767", checkdigit: true};
	cards [9] = {cardName: "Switch", lengths: "16,18,19", prefixes: "4903,4905,4911,4936,564182,633110,6333,6759", checkdigit: true};
	cards [10] = {cardName: "Maestro", lengths: "16,18", prefixes: "5020,6", checkdigit: true};
	cards [11] = {cardName: "VisaElectron", lengths: "16", prefixes: "417500,4917,4913", checkdigit: true};
	cards [12] = {cardName: "SwitchSolo", lengths: "16,18,19", prefixes: "4903,4905,4911,4936,564182,633110,6333,6759,6334,6767", checkdigit: true};
	
	var cardType = -1;
	for (var i=0; i<cards.length; i++) {
		if (cardName.toLowerCase() == cards[i].cardName.toLowerCase()) {
			cardType = i;
			break;
		}
	}
	if (cardType == -1) { return false; } // card type not found

	value = value.replace (/[\s-]/g, ""); // remove spaces and dashes
	if (value.length == 0) { return false; } // no length

	var cardNo = value;
	var cardexp = /^[0-9]{13,19}$/;
	if (!cardexp.exec(cardNo)) { return false; } // has chars or wrong length
	
	cardNo = cardNo.replace(/\D/g, ""); // strip down to digits

	if (cards[cardType].checkdigit){
		var checksum = 0;
		var mychar = "";
		var j = 1;

		var calc;
		for (i = cardNo.length - 1; i >= 0; i--) {
			calc = Number(cardNo.charAt(i)) * j;
			if (calc > 9) {
				checksum = checksum + 1;
				calc = calc - 10;
			}
			checksum = checksum + calc;
			if (j ==1) {j = 2} else {j = 1};
		} 

		if (checksum % 10 != 0) { return false; } // not mod10
	}  

	var lengthValid = false;
	var prefixValid = false; 
	var prefix = new Array ();
	var lengths = new Array ();

	prefix = cards[cardType].prefixes.split(",");
	for (i=0; i<prefix.length; i++) {
		var exp = new RegExp ("^" + prefix[i]);
		if (exp.test (cardNo)) prefixValid = true;
	}
	if (!prefixValid) { return false; } // invalid prefix

	lengths = cards[cardType].lengths.split(",");
	for (j=0; j<lengths.length; j++) {
		if (cardNo.length == lengths[j]) lengthValid = true;
	}
	if (!lengthValid) { return false; } // wrong length

	return true;
}

/*
How-To usar las Validacion:

1r Paso:
	Identificar los campos del formulario que queremos que se validen, coger su id y el tipo de validacion que precisaran (isInformed,isValidDate, isChecked, isEmail)
	
2o Paso:
	Crear la funcion de validacion para cada uno de los campos de este formulario, ejemplo:
	
		function Enviar_Busqueda(form) {
		      validateArray = new Array(); //Este codigo siempre tiene que estar
			  
			  //Aqui se añaden las validaciones de este formulario, con el id del campo, el tipo de validacion y el mensaje de error a mostrar
		      addValidation("fechaEntrada", isValidDate, "Debe informar correctamente la fecha de Entrada");
		      addValidation("fechaSalida", isValidDate, "Debe informar correctamente la fecha de Salida");
			  
		      var valida = validame();      //Este codigo siempre tiene que estar
		      if (valida) //Este codigo siempre tiene que estar
		            document.getElementById(form).submit();//Este codigo siempre tiene que estar
		}

3r Paso:

	En el boton de submit del formulario se pone la funcion creada en el anterior paso, pasandole por parametro el formulario, ejemplo:
		<input type="button"  id="buscar" name="buscar" value="Buscar" onclick="Javascript:Enviar_Busqueda('busqueda');"/>
		
4o Paso:

	Crear la capa de mensaje de error del formulario. Ha de tener el id del formulario añadiendole 'E' al final, ejemplo:
	
		<form action="registro.jsp" style="width: 354px;" id="registrar">
                      <div id="registrarE" class="Error"></div>  

*/
 

