 

var validateArray = new Array();

function isInteger (id) {
	var i;
	var s = document.getElementById(id).value;
	if ((s != null) || (s.length != 0)) {
			for (i = 0; i < s.length; i++) {
				var c = s.charAt(i);
				if (!((c >= "0") && (c <= "9"))) return false;
			}
	}
	return true;
}
	
function isValidTfnoUnSoloCampo( id ) {
	var obj = document.getElementById(id);
	//alert("id: "+ obj.value);
	if(obj != null && obj.value.length > 0 && obj.value.length <= 15) { //&& isInteger(id)
		return true;
	}
	return false;
}
 
function laValidacionFalla( id ) {
	return false;
}

function laValidacionEstaOk( id ) {
	return true;
}

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 isLengthMaximum8AndMustBe( id ) {

      var obj = document.getElementById(id);
      if( obj.value.length <= 8 &&  obj.value.length != 0 ) {
            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);
      

	if(  obj.value != null && obj.value != "0" && obj.value != "dd/mm/aaaa" && obj.value!="mm/dd/aaaa" && 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 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;
      var patronEmail=/(^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*)@([0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\.[0-9a-zA-Z]{2,3})$/;
      return patronEmail.test(str);
      //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);


      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: "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: "13,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", 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;
}

/**** Validacion inline *******/
			var validateArrayInline = new Array();
			
			function resetValidation() {
				validateArrayInline = new Array();
			}
			
			function contieneDatos( id ) {
    			var obj = document.getElementById(id);
    			if( obj == null ) {
    				return false;
    			}
				if( obj.value != null && obj.value != "0" && obj.value != "dd/mm/aaaa" && obj.value!="mm/dd/aaaa" && obj.value !="" ) {
            		return true;
    			}
    			return false;
			}
			
			
			
			function addValidationInline(idp, funcp, msgp, errorDivp, hayQueHacerValidacionp) {
				var o = {
            		func : funcp,
            		id : idp,
            		msg : msgp,
            		errorDiv : errorDivp,
            		hayQueHacerValidacion : hayQueHacerValidacionp,
            		hanRealizadoOnBlur : false
				};
				
				validateArrayInline[ validateArrayInline.length ] = o;

				$( '#' + o.id ).unbind('blur');
				$( '#' + o.id ).blur(
					function(){
						o.hanRealizadoOnBlur = true;
						validateFieldInline( o );	
						putErrors();
					}
				);
			}
			
			var avisosInline = "";
			var arraysInlineError = new Array();
			
			var TIPO_VALIDACION_SHOW_ALL_ERROR = 1;
			var TIPO_VALIDACION_SHOW_ON_NOT_VOID = 2;
			var TIPO_VALIDACION_SHOW_ON_USER_INPUT = 3;
			
			// Existen tres tipos de validacions
			// TIPO_VALIDACION_SHOW_ALL_ERROR -> Mostramos todos los errores
			// TIPO_VALIDACION_SHOW_ON_NOT_VOID -> Solo validamos si esta relleno con informacion
			// TIPO_VALIDACION_SHOW_ON_USER_INPUT -> Validamos solo cuando el usuario ha pasado por el campo
			function validateAllInline( tipoValidacion, tridionIntegration ) {
			
				if( tipoValidacion == null ) {
					tipoValidacion = TIPO_VALIDACION_SHOW_ON_USER_INPUT;
				}
				
				var ok = true;
				for( i=0; i < validateArrayInline.length; i++) {
					var currentOk = validateFieldInline( validateArrayInline[i], tipoValidacion, tridionIntegration);	
					if( !currentOk ) {		
						
						ok = false;
					}
				}
				putErrors( tipoValidacion );
				return ok;
			}
			
			//campo solo utilizado para usabilidad
			var validateField;
			
			function validateFieldInline( o, tipoValidacion, tridionIntegration ) {
				if( tipoValidacion == null ) {
					tipoValidacion = TIPO_VALIDACION_SHOW_ON_USER_INPUT;
				}
				
				
				if( document.getElementById(o.id) == null ) {
					return true;
				}
				validateField = o.id;
				var el = $('#' + o.id);
				var idJquery = '#' + o.id;
				
	
				$('#show-tooltip-text-for-' + o.id).remove();
				
				
				//Si no hay que hacer validacion no la realizo
				hayQueValidar = true;
				if( o.hayQueHacerValidacion != null && !o.hayQueHacerValidacion()) {
					hayQueValidar = false;	
				}
				
				if( tipoValidacion == TIPO_VALIDACION_SHOW_ON_NOT_VOID && !contieneDatos( o.id ) ) {
					hayQueValidar = false;	
				}
				
				
				if( hayQueValidar == false ) {
					return true;
				}
				
				$(idJquery).after(
					$('<div/>').attr('class', 'show-tooltip-icon-think').attr('id', 'show-tooltip-text-for-' + o.id ).html( 
						''
					)
				);
				
						
				if( o != null && !o.func(o.id) ) {
					$('#show-tooltip-text-for-' + o.id).remove();
					$(idJquery).after(
						$('<div/>').attr('class', 'show-tooltip-icon-error').attr('id', 'show-tooltip-text-for-' + o.id ).html( 
							''
						)
					);
					
					//empresa usabiliada
					
					if( tipoValidacion == TIPO_VALIDACION_SHOW_ALL_ERROR && tridionIntegration ) {
						pageTracker._trackEvent("Formulario: confirmarReserva.do", "errores_submit", o.msg);
					}
					if( tipoValidacion == TIPO_VALIDACION_SHOW_ON_USER_INPUT && tridionIntegration ) {
						pageTracker._trackEvent("Formulario: confirmarReserva.do", "errores_inline", o.msg);
					}
					$('#'+o.id).addClass('errorInline');
					if (o.id == 'num-targeta-client-4'){
						$('#num-targeta-client-1').addClass('errorInline');
						$('#num-targeta-client-2').addClass('errorInline');
						$('#num-targeta-client-3').addClass('errorInline');
						$('#num-targeta-client-4').addClass('errorInline');
					}
					//$('#'+o.id).focus();		
					
					return false;
				} else if(o != null) {
					$('#show-tooltip-text-for-' + o.id).remove();
					$(idJquery).after(
						$('<div/>').attr('class', 'show-tooltip-icon-ok').attr('id', 'show-tooltip-text-for-' + o.id ).html( 
							''
						)
					);
					$('#'+o.id).removeClass('errorInline');
					if (o.id == 'num-targeta-client-4'){
						$('#num-targeta-client-1').removeClass('errorInline');
						$('#num-targeta-client-2').removeClass('errorInline');
						$('#num-targeta-client-3').removeClass('errorInline');
						$('#num-targeta-client-4').removeClass('errorInline');
					}
					return true;
				}
			}
			
			function putErrors( tipoValidacion ) {
				
				if( tipoValidacion == null ) {
					tipoValidacion = TIPO_VALIDACION_SHOW_ON_USER_INPUT;
				}
				
				avisosInline = "";
				arraysInlineError = new Array();
			
				for( i=0; i < validateArrayInline.length; i++) {
					var o =  validateArrayInline[i];
					
					//Si no han pasado por aqui no valido, en el caso de que se pida una validacion de que el usuario ha pasado por aqui
					if( tipoValidacion == TIPO_VALIDACION_SHOW_ON_USER_INPUT && o.hanRealizadoOnBlur == false ) {
						continue;
					}
									
					
					//Si no hay que hacer validacion no la realizo
					hayQueValidar = true;
					if( o.hayQueHacerValidacion != null && !o.hayQueHacerValidacion() ) {
						hayQueValidar = false;	
					}
					
					//si el tipo validacion es validar todos los no vacios y esta vacio no valido
					if( tipoValidacion == TIPO_VALIDACION_SHOW_ON_NOT_VOID && !contieneDatos( o.id ) ) {
						hayQueValidar = false;	
					}
					
				
					if( hayQueValidar && o != null && !o.func(o.id)  ) {
						var o = validateArrayInline[i] 
						var element = document.getElementById(o.id);
						if( element == null ) {
							continue;
						}
						avisoLocal = "<li>" +o.msg + "</li>";
						if( o.errorDiv ) {
							itemError = getDivFromArrayById(arraysInlineError, o.errorDiv );
							itemError.msg += "<li>" + o.msg + "</li>";
							
						} else {
							avisosInline += avisoLocal;
						}
					} else if(o != null) {
						//Esto lo hago para dar de alta los ids y poder limpiar despues
						itemError = getDivFromArrayById(arraysInlineError, o.errorDiv );
						
						var strHTML = "";
					}
				}
			
								
				for( i=0; i < arraysInlineError.length; i++) {
					var o = arraysInlineError[i];
					if( o.msg != "" ) {
						$( "#"+ o.idDiv ).html("<ul>" + o.msg + "<\/ul>"); 
						//para usabilidad 
						//pageTracker._trackEvent("Formulario: "+o.idDiv, "errores", validateField);					
					} else {
						$( "#"+ o.idDiv ).html(""); 
					}
				}
												
				var elem = document.getElementById(validateArrayInline[0].id);
								
				if ( avisosInline != "") {
					$("#"+elem.form.id + 'E').html("<ul>" + avisosInline + "<\/ul>"); 
				} else {
					$("#"+elem.form.id + 'E').html(""); 
				}
			}
			

/**** End Validacion inline *******/

