//validacion elementos de formulario
//añadido 02/07/2004
var defaultEmptyOK = false
var digits = "0123456789";
var digitsReverse = "9876543210";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var uppercaseLettersReverse = "ÑÚÓÍÉÁZYXWVUTSRQPONMLKJIHGFEDCBA"
var whitespace = " \t\n\r";

var phoneChars = "()-+ ";

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetter (c)
{	c=c.toUpperCase()
	return ((c >= "A") && (c <= "Z"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c)) }

function ValidBlanks(frmField, strFldName)
{
    /*Aqui se debería comprobar desde qué páginas se llama a ValidBlanks y quitar el segundo parámetro ya que no se usa*/
    if (frmField.value == "" || frmField.value == null || frmField.value == " ") return false;
	else return true;
}
//CAMBIO añadir esta funcion
function BusqCaracteres(texto)
{
	var txt = texto.toString()
	var valido = true
	for(var i = 0;i < texto.length;i++)
	{
		var oneChar = txt.charAt(i)
//		if (oneChar == "<" || oneChar == ">"  || oneChar == "#" || oneChar == "/" || oneChar == '\"'  || oneChar == "\'" || oneChar == "\\"  )
		if (oneChar == "<" || oneChar == ">"  || oneChar == "#" || oneChar == '\"'  || oneChar == "\'" || oneChar == "\\"  )
		{
			valido = false
		}
	}
	if (!valido)
		return false
	else
		return true
	
}

function ValidField(strFldName,frmField,intLength,strDtType,obligatorio)
{	
	switch (strDtType)
		{

	        case 'digitoControl' :
	            no_digit = frmField.value.length;
	            oddoeven = no_digit & 1;
	        	sum = 0;
                for (count = 0; count < no_digit; count++) {
    	            digit = 0;
                    digit = frmField.value.charAt(count);
                    if (((count & 1) ^ oddoeven) == 0) {
		  	            // not
                        digit *= 2;
                        if (digit > 9) {
            	            digit -= 9;
                        }
                    }
                    sum = eval(sum)+eval(digit);
			    }
                if (sum == 0) {
        		    return (false);
                }
                if (sum % 10 == 0) {
        			return (true);
                }
			    return (false);

		    break;

			case 'string' : 					
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);

					if (frmField.value != "")
						//CAMBIO añadir esta primera condicion
						if(!BusqCaracteres(frmField.value))
							{
							//alert("el campo " + strFldName + " contiene caracteres extranios")
							//frmField.focus();
							return (false);				
							}
						if (frmField.value.length > intLength)
							{
							//alert("La longitud del campo " + strFldName + " no debe ser superior a " + intLength + " caracteres");
							//frmField.focus();
							return (false);
							}						
				break;
			case 'mail': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					
					if (frmField.value != "")
						if (!isEmail(frmField.value))
							{
							//alert("El contenido del campo " + strFldName + " no es correcto");
							//frmField.focus();
							return (false);
							}	
				break;	
			case 'nif': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					
					if (frmField.value != "")
						if (!isNif(frmField.value))
							{
							//alert("El contenido del campo " + strFldName + " no es correcto");
							//frmField.focus();
							return (false);
							}	
				break;
			case 'cif': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					if (frmField.value != "")
					{	frmField.value=frmField.value.toUpperCase();
						if (!isCif(frmField.value))
						{		///alert("El contenido del campo '"+strFldName+"' no es correcto");
								frmField.focus();
								return (false);
						}	
					}
				break;
			case 'number': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					
					if (frmField.value != "")
						if (!isNumber(frmField.value))
							{
							//alert("El contenido del campo " + strFldName + " debe ser numerico");
							//frmField.focus();
							return (false);
							}	
				break;
			case 'hour': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
								
					if (frmField.value != "")
						if (!isHour(frmField.value))
							{
							//alert("El contenido del campo " + strFldName + " no es una hora correcta.El formato correcto es 00:00.");
							//frmField.focus();
							return (false);
							}	
				break;	
			case 'date': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					
					if (frmField.value != "")
						if (isDate(frmField.value)== false)
							{
							//alert("El contenido del campo " + strFldName + " no es una fecha correcta. El formato correcto es DD/MM/AAAA.");
							//frmField.focus();
							return (false);
							}
				break;
			case 'list' : 
                    if ((obligatorio) && (frmField.selectedIndex==0))
                    {
                            //alert("Debe seleccionar algún valor de la lista " + strFldName );
                            //frmField.focus();
                            return (false);
                    }
				break;

			case 'positivo' : 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					
					if (frmField.value != "")
						if ((!isNumber(frmField.value))||(frmField.value<0))
							{
							//alert("El contenido del campo " + strFldName + " debe ser positivo.");
							//frmField.focus();
							return (false);
							}	
				break;	
			
			case 'phone' : 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);					
					if (frmField.value != "")
						if ((frmField.value.length<9)||(frmField.value.length>11) )
							{
							//alert("El contenido del campo " + strFldName + " debe tener entre 9-11 caracteres.");
							//frmField.focus();
							return (false);
							}	
				break;

			case 'alphabetic' :
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName))) return (false);
					if (frmField.value != "")
						if (isAlphabetic(frmField.value) )
							{
							return (false);
							}
				break;
								
		}
	return (true);
}


function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isNumber (s)
{   
    var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "," ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && c != ".") return false;
        } else { 
            if ( c == "," ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c))
        return false;
    }
    return true;
}


function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
		
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }
    return true;
}

function isName (s)
{	if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
	return( isAlphanumeric( stripCharsInBag( s, whitespace ) ) );
}


letras = new Array("t","r","w","a","g","m","y","f","p","d","x","b","n","j","z","s","q","v","h","l","c","k","e");
function isNif(nif)
{	nif=nif.toLowerCase();
	nifcorrecto = true;
	dni=nif.substring(0,nif.length-1);
	dni=parseInt(dni,10);
	letra=nif.charAt(nif.length-1);	
	letraCorrecta = letras[ dni % 23];	
	if (dni > 99999999)
		nifcorrecto = false;
	if(letra!=letraCorrecta)
		nifcorrecto = false;
	if (nifcorrecto) 
		return true;
	else
		return false;
}

function isCif(cif)
{	cif=cif.toUpperCase();
	
	var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
	var digCrtl=cif.charAt(cif.length-1);
	var temp = 0; 
	var temp1;
	
	if(!/^[A-Za-z0-9]{9}$/.test(cif)) 
		return false
	else if (!/^[ABCDEFGHKLMNPQS]/.test(cif))
		return false
	else{  		  	
		for(i=2;i<=6;i+=2 ) {
		      temp = temp + v1[ parseInt(cif.substr(i-1,1)) ];
		      temp = temp + parseInt(cif.substr(i,1));
		 };
		
		temp = temp + v1[ parseInt(cif.substr(7,1)) ];		
		temp = (10 - ( temp % 10));
		
		if( temp == 10 ){
		    if(!(digCrtl=="J" || digCrtl=="0"))
			return false		    	
		  }
		else{		  	
		   if(digCrtl!=temp)
			return false	    	
		}		
				
	}
	return true;
}

function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
      if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
      else return (isPhoneNumber.arguments[1] == true);			 
    	modString = stripCharsInBag( s, phoneChars );				
			return (isInteger(modString))
}

function isEmail (s) 
{	if (isEmpty(s))
		return false; 
	var i = 1; var sLength = s.length; 
	while ((i < sLength) && (s.charAt(i) != "@")) 
	{ 
		i++;
	}
	if ((i >= sLength) || (s.charAt(i) != "@")) 
		return false; 
	else 
		i += 2;
	
	while ((i < sLength) && (s.charAt(i) != ".")) 
	{
		i++; 
	}
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) 
	 	return false; 

	
	else return true; 
} 
function isHour(s)
{	var Horacorrecta=true
	var horas,min
	horas=parseInt(s.substring(0,2),10)
	min=parseInt(s.substring(3,5),10)
	
	if(s.length!=5) Horacorrecta=false;
	if(s.indexOf(':')==-1) Horacorrecta=false;
	if(horas>24|| horas<0) Horacorrecta=false;
	if(min>60 || min<0) Horacorrecta=false;
	if(isNaN(horas))Horacorrecta=false;
	if(isNaN(min))Horacorrecta=false;
		
	if(Horacorrecta)
		return true
	else
		return false
}


function isDate(s)
{	var day,month,year,mod,chr;
	if (s==null || s.length==0)
        return true
		
	/* no borrarlo*/	
	/*	if (s.length!=10) return false
	
	for (var ij=0;ij<10;ij++)
    {	chr=s.charAt(ij)
        if (ij!=2 && ij!=5)
        {	if (chr<"0"||chr>"9") return false }
        else
        {	if (chr!="/") return false }
    }
	*/
		
	tempoDate=s.split("/");
	day=parseInt(tempoDate[0],10);
    month=parseInt(tempoDate[1],10);
    year=parseInt(tempoDate[2],10);

    return isARealDate(day, month, year);
}

function isARealDate(day, month, year){
    if (1>day || day>31) return false
    if (1>month || month>12) return false
    if ((1>year)&&(year.length!=4)) return false
    if ((month==4 || month==6 || month==9 || month==11) && day==31) return false
	
    if (month==2)
    {	mod=year%4
    	if (mod==0)
    	{	mod=year%100;
			if(mod==0)
			{	var mod2=year%400;
                if(mod2==0 &&  day>29) return false
                else if(mod2!=0 && day>28) return false
            }
		    else if(day>29) return false
        }
        else if (day>28) return false
    }
    return true
}

// Función que valida que una fecha sea correcta
//
// Parámetros:
// ==========
//	mesanyo	Cadena representando el mes y el año en formato yyyymm
//	día     Cadena que representa el día
function isDate2(mesanyo, day)
{	var day,month,year,mod,chr;
	if (mesanyo==null || mesanyo.length!=6)
        return false;
	if (day==null || day.length==0)
        return false;

    month=mesanyo.substring(4, 6);
    year=mesanyo.substring(0, 4);

    return isARealDate(day, month, year);
}

function compDates(s1, s2)
{	var f1, f2	

    f1 = s1.substring(6,10) + "/";    
    f1 = f1 + s1.substring(3,5) + "/";
    f1 = f1 + s1.substring(0,2);

    f2 = s2.substring(6,10) + "/";    
    f2 = f2 + s2.substring(3,5) + "/";
    f2 = f2 + s2.substring(0,2);
	if (f1 == f2) 
		return 0
	else	
    	return (f1 < f2) + 1
}

function stripCharsInBag(origen, filtro){	
	re = new RegExp("["+filtro+"]","gi")
	var resultado = "";
  resultado = origen.replace(re,""); 	
	return resultado;
}

//funciones realcionadas con validacion de PIN


function isValidPin(str){			
	str = str.toUpperCase();
	numStr = digits.indexOf(str)	
	numRevStr = digitsReverse.indexOf(str)	
	mayStr = uppercaseLetters.indexOf(str)	
	mayRevStr = uppercaseLettersReverse.indexOf(str)	
	
	if(str.length < 6) return "0";
	if(numStr!=-1) return "1";	
	if(numRevStr!=-1) return "1";
	if(mayStr!=-1) return "2";
	if(mayRevStr!=-1) return "2";
	if(isAlphanumeric(str)!= true) return "3"
	if (repeatChar(str)!=true) return "4"
	else{return "correcto"}
}

function repeatChar(s)
{	var repeat=true;
	for (i = 1; i < s.length; i++)
	{	var c1 = s.charAt(i-1);
		var c2 = s.charAt(i);
		if(c1!=c2){repeat=true;break;}
		else{repeat=false }
	}	 
	 return repeat;
}

//completa con ceros el numero de IberiaPlus hsta una longitud de 8
function completaIBP(ibPlusValue){	
	for(i=ibPlusValue.length; i<8; i++){
		ibPlusValue = "0"+ibPlusValue
	}	
	return ibPlusValue;
}


function CompruebaNumeroVuelo(numero)
{
  var caracteresValidos = "0123456789";

  if (numero.length<4)
  {	
		for(i=numero.length; i<4; i++){
		numero = "0"+numero
	}	
		
  }
  for(var i=0;i<numero.length;i++)
  {
    caracter = numero.charAt(i);
    if(caracteresValidos.indexOf(caracter)<0)
    {
      return false;
    }
  }
  return true;
} 

/*validaciones BOOKING (Home)*/
function isBisiesto(yYear)
{	mod = (yYear%4);
	if (mod == 0)	/* es bisiesto */
		return true;
	return false;
}
var tMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
function isDestiny(origen,destino,txt)
{	var error = "";
	if (origen == destino)
	{	error = txt+"\n"; }
	return error;
}
function CompararFechas(f_salida,f_regreso,txt)
{	var error = "";
	if (f_salida > f_regreso)
	{	error = txt+"\n"; }
	return error;
}

function CompPasajeros(n_adt,n_chd,n_inf,txt1,txt2,txt3)
{	var error = "";
	//alert("n_adt: " + n_adt + " - n_chd: " + n_chd + " - n_inf: " + n_inf)
	if (n_inf > n_adt) { error += txt1+"\n"; }
	if ((n_adt+n_chd) > 9) { error += txt2+"\n"; }	
	if((n_inf+n_chd)>(n_adt*2)){error += txt3+"\n";}
	
	return error;
}

//expresiones regulares
var alphaRegexp = new RegExp("^[a-zA-Z \\-\\.\\'\\àÀáÁâÂãÃäÄåÅæÆçÇèÈéÉêÊëËìÌíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖøØùÙúÚûÛüÜýÝþÞÿß]*$");
var numericRegexp = new RegExp("^[0-9]+$");
var spanishfirstNameRegexp = new RegExp("^[a-zA-Z \\-\\.\\'\\àÀáÁâÂãÃäÄåÅæÆªçÇèÈéÉêÊëËìÌíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖøØùÙúÚûÛüÜýÝþÞÿß]*$");
var emailRegexp = new RegExp("^([a-zA-Z0-9_\\-]+\\.)*[a-zA-Z0-9_\\-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
var phoneRegexp = new RegExp("^[a-zA-Z0-9\\ +\\(\\)\\-\\.]*[0-9][a-zA-Z0-9\\ +\\(\\)\\-\\.]*[0-9][a-zA-Z0-9\\ +\\(\\)\\-\\.]*[0-9][a-zA-Z0-9\\ +\\(\\)\\-\\.]*[0-9][a-zA-Z0-9\\ +\\(\\)\\-\\.]*$");
var businessCompanyNameRegexp = new RegExp("^[a-zA-Z0-9 \\-\\.\\'\\àÀáÁâÂãÃäÄåÅæÆªçÇèÈéÉêÊëËìÌíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖøØùÙúÚûÛüÜýÝþÞÿß&]*$");
var alphaNumericSpecialCharRegexp = new RegExp("^[a-zA-Z0-9 \\-\\.\\/\\àÀáÁâÂãÃäÄåÅæÆçÇèÈéÉêÊëËìÌíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖøØùÙúÚûÛüÜýÝþÞÿß]+$");


function validarRE(expresionRegular, campo, error)
{
    campo.value=Trim(campo.value);
    if (!expresionRegular.test(campo.value)){
       //alert(error);
       campo.select();
       campo.focus();
       return false;
    }

    return true;
}


function Trim(cad)
{
	var aux="";
	var i,lg = cad.length;
	for (;lg>0 && cad.charAt(lg-1)<=' ';lg--);
	for (i=0;i<lg && cad.charAt(i)<=' ';i++);
	for (;i<lg;i++)
		aux = aux + cad.charAt(i);
	return aux;
}
function validateMaxPreferences(checkBox,maxPref){
   	  var checkedButton = "";
          var count = 0;
          //var lastChecked;
          if (checkBox != null) {
            var size =  checkBox.length;
	          for (var i=0;i<size;i++) {
        	       if (checkBox[i].checked) {
                	   count = count + 1 ;
                           //lastChecked = i;
                	}
          	  }
          }
          if (count > maxPref){
             //alert(msgError);
             //checkBox[lastChecked].focus();
             return false;
          }
          return true;
}

/* Función encargada de validar la Tarjeta de Residencia.
La estructura de la T. Residencia puede ser:
X-7cifras-letra (esta ultima debe pasar la validacion del NIF)
letraletra-8cifras-letra(esta ultima debe pasar la validacion del NIF) */
function validaTResidencia(campoNif)
{
    var valoresPrimerCaracter= new Array("K","L","T","X");
    var correcto=false;
    var cadenaNif = campoNif.value;
    var nif = "";

    if (cadenaNif.length == 0) return false;
    else if ( !(cadenaNif.length == 11 || cadenaNif.length == 9) ) 	return false;

    primerCaracter=cadenaNif.substring(0,1).toUpperCase();
    if(cadenaNif.length == 11)
    {
        segundoCaracter=cadenaNif.substring(1,2).toUpperCase();
        tercerCaracter=cadenaNif.substring(2,4).toUpperCase();
        nif=cadenaNif.substring(2,11).toUpperCase();
        for (i=0;i<valoresPrimerCaracter.length;i++)
        {
            if (valoresPrimerCaracter[i]==primerCaracter) correcto=true;
        }
        if(!isLetter(segundoCaracter))
        {
            correcto=false;
        }
        if(tercerCaracter=='00')
        {
            correcto=false;
        }
        if( correcto && !isNif(nif))
        {
            return false;
        }
    }
    else if(cadenaNif.length == 9)
        {
            if (primerCaracter=='X')
            {
                correcto=true;
            }
            nif= cadenaNif.substring(1,9).toUpperCase();
            if( correcto && !isNif(nif))
            {
                return false;
            }
        }

    if(correcto) campoNif.value = cadenaNif.toUpperCase();

    return correcto;
}

/*Significado del valor entero devuelto por isCorrectDocument:
    0 - No se ha producido ningún error por lo que no se ha de mostrar nada al usuario
    1 - Error en la validación del tipo de documento
    2 - Error en la validación del número de documento
    3 - Error en la validación del número de la tarjeta Iberia Plus
    4 - Error en la validación del dígito de control de la tarjeta Iberia Plus
    5 - Error por ser un tipo de documento que requiere que la cadena introducida sea alfanumérica
    6 - Error en la validación del nif
    7 - Error en la validación de la tarjeta de residencia
  Además de estos valores de retorno los valores "FF" y "NI" son para las páginas que manejan cibertickets
*/
function isCorrectDocument(documentType, documentNumber)
{
    //validación TIPO DOCUMENTO
    if (!ValidField("",documentType,25,"list",true))
    {
        return 1;
    }
    //validación NUMERO DOCUMENTO
    else if (!ValidField("",documentNumber,25,"string",true))
         {
            return 2;
         }
         //Primero se comprueba que no es Iberia Plus ya que se trata de una validación distinta a la alfanumérica del resto
         //validación para IBDAPE
         //validación para IBTRPP e IPTRPP
         else if(documentType.value == "3" || documentType.value == "FF")
              {/*validación del FF de iberia plus*/
                if (!ValidField("",documentNumber,8,"number",true))
                {
                    return 3;
                }
                else if (!ValidField("",documentNumber,8,"digitoControl",true))
                     {
                        return 4;
                     }
             }
             else /*if(!isAlphanumeric(documentNumber.value)) //validación de si son número y/o letras
                  {
                       return 5;
                  }
                  else*/
                  //validación para el resto y para IBTRPP, IPTRPP y OHINFO (antes NI ahora con value)
                  //validación para IBAIRP e IPAIRP
                   if(documentType.value == "4"
                     || documentType.value == "DN" || documentType.value == "CR" || documentType.value == "MR") //Validaciones en función del tipo de documento
                   {	/*valido el nif*/
                        if (!ValidField("",documentNumber,25,"nif",true))
                        {
                            return 6;
                        }
                   }
                   //validación para IBDAPE
                   else if(documentType.value == "6" && !validaTResidencia(documentNumber))
                        {/*valido la tarjeta de residencia*/
                            return 7;
                        }
    return 0;
}
