var defaultEmptyOK = false
var digits = "0123456789";
var digitsReverse = "9876543210";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var uppercaseLettersReverse = "ÑÚÓÍÉÁZYXWVUTSRQPONMLKJIHGFEDCBA"
var whitespace = " \t\n\r";

//cTE PARA EL NOMBRE DE LA COMPAÑIA
var reCompanyName = "IB";

var phoneChars = "()-+ ";

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

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

function isLetter (c)
{   return ((c >= "A" && c <= "Z") || (c >= "a" && c <= "z"))
}

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

function CampoVacio(frmField)
{
   	if (frmField.value == "" || frmField.value == null)
	{
	        return (false);
	}
	return (true);
}

function ValidBlanks(frmField,errorBlanks)
{
	if (frmField.value == "" || frmField.value == null || frmField.value == " ")
	{
	        //alert("Debe insertar algún valor en el campo " + strFldName);
	        alert(errorBlanks);
	        frmField.focus();
	        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 == "\\"  )
		{
			valido = false
		}
	}
	if (!valido)
		return false
	else
		return true

}

//CAMBIO añadir esta funcion
function BusqFakeCaracteres(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 == "\\"  )
		{
			valido = false
		}
	}
	if (!valido)
		return false
	else
		return true

}


//Función que valida los campos tipo STRING
function ValidFieldString(frmField,intLength,obligatorio,errorBlanks,errorCaracter,errorLenght)
{

    if ((obligatorio) && (!ValidBlanks(frmField,errorBlanks))) return (false);

    if (frmField.value != "")
    {
        //CAMBIO añadir esta primera condicion
        if(!BusqCaracteres(frmField.value))
            {
            alert(errorCaracter)
            frmField.focus();
            return (false);
            }
        if (frmField.value.length > intLength)
            {
            alert(errorLenght)
            frmField.focus();
            return (false);
            }
     }

     return true;
}

//Función que valida los campos tipo STRING
function ValidFakeFieldString(frmField,intLength,obligatorio,errorBlanks,errorCaracter,errorLenght)
{

    if ((obligatorio) && (!ValidBlanks(frmField,errorBlanks))) return (false);

    if (frmField.value != "")
    {
        //CAMBIO añadir esta primera condicion
        if(!BusqFakeCaracteres(frmField.value))
            {
            alert(errorCaracter)
            frmField.focus();
            return (false);
            }
        if (frmField.value.length > intLength)
            {
            alert(errorLenght)
            frmField.focus();
            return (false);
            }
     }

     return true;
}



//Función que valida los Combo, campos tipo LIST
function ValidFieldList(frmField,obligatorio,errorSelect)
{
        if ((obligatorio) && (frmField.value=="-1"))
        {
                alert(errorSelect)
                frmField.focus();
                return (false);
        }
}

function ValidFieldListBis(frmField,obligatorio,errorSelect,valorNoValido)
{
        if ((obligatorio) && (frmField.value=="-1" || frmField.value==valorNoValido) )
        {
                alert(errorSelect)
                frmField.focus();
                return (false);
        }
}

//Función que valida los campos NUMERIC
function ValidFieldNumeric(frmField,intLength,obligatorio,errorBlank,errorNumeric,errorLenght)
{
    if ((obligatorio) && (!ValidBlanks(frmField,errorBlank))) return (false);

    if (frmField.value != "")
        if (!isNumber(frmField.value))
        {
            //alert("El contenido del campo " + strFldName + " debe ser numerico");
            alert(errorNumeric)
            frmField.focus();
            return (false);
        }else
        {
          if (frmField.value.length > intLength)
            {
            alert(errorLenght)
            frmField.focus();
            return (false);
            }
        }

     return true;
}

//Función que valida un campo alfanumérico
function ValidFieldAlphaNumeric(frmField,intLength,obligatorio,errorBlank,errorAlphaNumeric,errorLength)
{
    if ((obligatorio) && (!ValidBlanks(frmField,errorBlank))) return (false);

    if (frmField.value != "")
        if (!isAlphanumeric(frmField.value)) {
            alert(errorAlphaNumeric)
            frmField.focus();
            return (false);
        } else {
          if (frmField.value.length > intLength) {
            alert(errorLength)
            frmField.focus();
            return (false);
          }
        }

     return true;
}

//Función que valida los campos EMAIL
function ValidFieldEmail(frmField,intLength,obligatorio,errorBlank,errorEmail,errorLenght)
{
       if ((obligatorio) && (!ValidBlanks(frmField,errorBlank))) return (false);

        if (frmField.value != ""){
            if (frmField.value.length > intLength)
            {
                alert(errorLenght)
                frmField.focus();
                return (false);
            }
            if (!isEmail(frmField.value))
                {
                //alert("El contenido del campo " + strFldName + " no es correcto");
                alert(errorEmail)
                frmField.focus();
                return (false);
            }
       }
       return true;
}

//Función que valida los campos Telefono
function ValidFieldPhone(frmField,intLength,obligatorio,errorBlank,errorPhone,errorLength)
{
       if ((obligatorio) && (!ValidBlanks(frmField,errorBlank))) return (false);

        if (frmField.value != ""){
            if (frmField.value.length > intLength)
            {
                alert(errorLength)
                frmField.focus();
                return (false);
            }
            if (!isPhoneNumber(frmField.value))
            {
                //alert("El contenido del campo " + strFldName + " no es correcto");
                alert(errorPhone);
                frmField.focus();
                return (false);
            }
            if (validarRE(phoneRegexp, frmField, errorPhone)==false){
                alert(errorPhone);
                frmField.focus();
                return (false);
            }
       }
       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 '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;

		}
	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 isNie(nie)
{
	//incidencia 520291: se pasaba mal el nie y daba un error en las operaciones
    var cadenaNie = nie;
    
    if (cadenaNie.length == 0) return false;
    cadenaNie = Trim(cadenaNie);
    primerCaracter=cadenaNie.substring(0,1).toUpperCase();
    colaNie=cadenaNie.substring(1);
	if (primerCaracter=="X" || primerCaracter=="Y" || primerCaracter=="Z") {
    	
    	if(primerCaracter=="X"){
    			cadenaNie = '0' + colaNie;
    		
		}
		if(primerCaracter=="Y"){
    			cadenaNie = '1' + colaNie;
    		
		}
		if(primerCaracter=="Z"){
    			cadenaNie = '2' + colaNie;
    			
		}
		
		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");
		cadenaNie=cadenaNie.toLowerCase();
		nifcorrecto = true;
		dni=cadenaNie.substring(0,cadenaNie.length-1);
		dni=parseInt(dni,10);
		letra=cadenaNie.charAt(cadenaNie.length-1);
		letraCorrecta = letras[ dni % 23];
		
		if (dni > 99999999)
			nifcorrecto = false;
		if(letra!=letraCorrecta)
			nifcorrecto = false;
		if (nifcorrecto)
			return true;
		else
			return false;
	} else {
			return false;
	}
}

function isNif(nif)
{

	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");
	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 v2 = new Array('J','A','B','C','D','E','F','G','H','I');
      var digCrtl=cif.charAt(cif.length-1);
      var temp = 0;
      var temp1;

      if(/^[Pp]{1}[0-9]{8}$/.test(cif)) {
            return false
      }

      if(!/^[A-Za-z0-9]{9}$/.test(cif)) {
            return false
      }            

      if (!/^[ABCDEFGHJPQRSUVNW]/.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 || digCrtl==v2[temp]) {
                        return true
                  }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
    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
        }
    }

/*    day=parseInt(s.substring(0,2),10)
    month=parseInt(s.substring(3,5),10)
    year=parseInt(s.substring(6,10),10)*/

	tempoDate=s.split("/");
	day=parseInt(tempoDate[0],10);
    month=parseInt(tempoDate[1],10);
    year=parseInt(tempoDate[2],10);

    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
}

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;
}


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

//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})(\\]?)$");
//Incid. 338856: Impedir caracteres numericos en el mail tras el último punto detrás de la arroba
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})(\\]?)$");

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 urlRegexp = new RegExp("^http[s]?://\w{3}\\.{1}[a-zA-Z0-9]+\\.{1}[a-zA-Z]{2,3}\.\*$", "i");

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 length(error, frmField, intLength)
{
    if (frmField.value.length > intLength)
    {
        alert(error);
        frmField.select();
        frmField.focus();
        return false;
    }
    return true;
}


function betweenLength(strFldName, frmField, intLength1, intLength2)
{
    if (intLength1 > frmField.value.length > intLength2)
    {
        alert("La longitud del campo " + strFldName + " no debe ser inferior a " + intLength1 + " ni superior a " + intLength2 + " caracteres");
        frmField.select();
        frmField.focus();
        return false;
    }
    return true;
}

function minLength(error, frmField, intLength)
{
    if (intLength > frmField.value.length)
    {
        //alert("La longitud del campo " + strFldName + " no debe ser inferior a " + intLength + " caracteres");
        alert(error)
        frmField.select();
        frmField.focus();
        return false;
    }
    return true;
}

function maxLength(error, frmField, intLength)
{
    if (intLength < frmField.value.length)
    {
        //alert("La longitud del campo " + strFldName + " no debe ser inferior a " + intLength + " caracteres");
        alert(error)
        frmField.select();
        frmField.focus();
        return false;
    }
    return true;
}

// Función encargada de validar NIF o CIF
var TIPO_DOCUMENTO_NIF="4";
var TIPO_DOCUMENTO_CIF="1";

var TIPO_DOCUMENTO_NIF_PYME="1";
var TIPO_DOCUMENTO_CIF_PYME="0";

function validaDocumento(NumDocumento, tipoDocumento, mensajeError, esPyme) {

   /*  if (NumDocumento == "" || NumDocumento == null || NumDocumento == " ") {
		alert(mensajeError);
	 	return false;
	}

     if (cadenaNif.length != 9) {
		alert(mensajeError);
	 	return false;
	}
    */
   if (esPyme) {
        constanteCIF = TIPO_DOCUMENTO_CIF_PYME;
        constanteNIF = TIPO_DOCUMENTO_NIF_PYME;
    } else {
        constanteCIF = TIPO_DOCUMENTO_CIF;
        constanteNIF = TIPO_DOCUMENTO_NIF;
    }

    /* NUEVO: 15/09/2006 - En Registro Empresa admitimos como NIF un NIE(Nº Identificación para Extranjeros
    o Tarjeta Residente) pero en Registro Administrador No admitimos como DNI un NIE */
    if (tipoDocumento==constanteNIF) {
    	
       if(esPyme){
       			
              if(!isNif(NumDocumento) &&!isNie(NumDocumento)){
                  alert(mensajeError);
                  return false;
              }
       }else{
       			
              if(!isNif(NumDocumento)){
                  alert(mensajeError);
                  return false;
              }
       }
    }

     if (tipoDocumento==constanteCIF) {
           if(!isCif(NumDocumento)){
               alert(mensajeError);
               return false;
           }
     }


}


//Este algoritmo se deja de usar en BRM desde la fecha 30/11/2006
function validaNif(cadenaNif, tipoDocumento, mensajeError, esPyme) {

    if (esPyme) {
        constanteCIF = TIPO_DOCUMENTO_CIF_PYME;
        constanteNIF = TIPO_DOCUMENTO_NIF_PYME;
    } else {
        constanteCIF = TIPO_DOCUMENTO_CIF;
        constanteNIF = TIPO_DOCUMENTO_NIF;
    }

	var valoresNif = new Array("0","1","2","3","4","5","6","7","8","9");

    var valoresCif = new Array("A","B","C","D","E","F","G","H","N","P","Q","S");

    var controlNif = 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");

    var controlCifLetras = new Array("A","B","C","D","E","F","G","H","I","J");

	cadenaNif = Trim(cadenaNif);

	if (cadenaNif =='00000000') {
		//vmensaje("Es Obligatorio introducir el número de Documento");
		alert(mensajeError);
		return false;
	}
	if (cadenaNif.length == 0) {
		//vmensaje("Es Obligatorio introducir el número de Documento");
		alert(mensajeError);
		return false;
	}
	else if (cadenaNif.length != 9) {
		//vmensaje("EL Nº del Documento no tiene la longitud adecuada.");
		alert(mensajeError);
	 	return false;    //EL nif no tiene la longitud adecuada.
	}

    caracterControl=cadenaNif.substring(8,9).toUpperCase();
    primerCaracter=cadenaNif.substring(0,1).toUpperCase();

    for (i=0;i<valoresNif.length;i++) {
        if (valoresNif[i]==primerCaracter) tipo="NIF";
    }

    if (tipoDocumento==constanteNIF) {
        var provincia="";

        if ((primerCaracter=="K") || (primerCaracter=="L")) {
            provincia=cadenaNif.substring(1,3);
            //alert(provincia);
            if (IntOk(provincia)==false) {
                //vmensaje("El Nº del Documento introducido es incorrecto");
                alert(mensajeError);
                return false;
                //Codigo de provincia no válido
            }
            numero=cadenaNif.substring(3,8);
        } else if (primerCaracter=="X") {
            numero=cadenaNif.substring(1,8);
        } else {
            numero=cadenaNif.substring(0,8);
        }

        //alert(numero);
        if (IntOk(numero)==false) {
            //vmensaje("El Nº del Documento introducido es incorrecto");
            alert(mensajeError);
            return false;   //Parte numérica del Nif no válida
        }

        caracterControlCalculado=controlNif[((parseFloat(numero)%23))];

        //El algoritmo dice que al resto hay que
        //sumarle 1, eso lo hacemos al indexar el
        //array ya que los indices empiezan en 0

        //alert ("caracterControl NIF:"+caracterControl+"\ncalculado:"+caracterControlCalculado);

        if (caracterControl != caracterControlCalculado) {
            //vmensaje("El Nº del Documento introducido es incorrecto");
            alert(mensajeError);
            return false;
            //Carácter Control incorrecto
        }

        /* NUEVO: 15/09/2006 - En Registro Empresa admitimos como NIF un NIE(Nº Identificación para Extranjeros
        o Tarjeta Residente) pero en Registro Administrador No admitimos como DNI un NIE */
        if (!esPyme && primerCaracter=="X") {
            alert(mensajeError);
            return false;
        }

    } else if (tipoDocumento==constanteCIF) {
        if (primerCaracter=="N") {
            pais=cadenaNif.substring(1,4);
            if (IntOk(pais)==false) {
                //vmensaje("El Nº del Documento introducido es incorrecto");
                alert(mensajeError);
                return false;   //Codigo de pais no válido
            }
            numero=cadenaNif.substring(4,8);
        } else {
            numero=cadenaNif.substring(1,8);
        }

        if (IntOk(numero)==false) {
            //vmensaje("El Nº del Documento introducido es incorrecto");
            alert(mensajeError);
            return false;   //Parte numérica del Nif no válida
        }

        caracterControlCalculado = 10 - ( ( Math.floor(0.2*parseInt(cadenaNif.substring(1,2),10)) +
            (2*parseInt(cadenaNif.substring(1,2),10) %10) +
            Math.floor(0.2*parseInt(cadenaNif.substring(3,4),10) ) +
            (2*parseInt(cadenaNif.substring(3,4),10) %10) +
            Math.floor(0.2*parseInt(cadenaNif.substring(5,6),10) ) +
            (2*parseInt(cadenaNif.substring(5,6),10) %10) +
            Math.floor(0.2*parseInt(cadenaNif.substring(7,8),10) ) +
            (2*parseInt(cadenaNif.substring(7,8),10) %10) +
            parseInt(cadenaNif.substring(2,3),10) +
            parseInt(cadenaNif.substring(4,5),10) +
            parseInt(cadenaNif.substring(6,7),10))% 10);

        var letraControlCalculada = "";

        if ( (primerCaracter=="N") || (primerCaracter=="P") || (primerCaracter=="Q") || (primerCaracter=="S") ) {
            letraControlCalculada = valoresCif[caracterControlCalculado-1];
        } else {
            letraControlCalculada = controlCifLetras[caracterControlCalculado-1];
        }

        if (caracterControlCalculado==10) caracterControlCalculado=0;

        if (caracterControl != caracterControlCalculado && caracterControl != letraControlCalculada) {
            alert(mensajeError);
            return false;   //Carácter Control incorrecto
        }

        //NUEVO: 01/10/2005 - Evitamos que CIF pueda empezar por un número
        if (isNumber(primerCaracter)) {
            alert(mensajeError);
            return false;
        }

    }

    return true;
}


// Funciones de apoyo para el NIF

function IntOk(cad)
{
 	cad=Trim(cad);
 	var i,lg = cad.length;
 	if (lg==0) return false;
 	for (i=0;i<lg;i++)
  	if (cad.charAt(i)<'0' || cad.charAt(i)>'9')
   	return false;
 	return true;
}

function LongitudOk(cad,len)
{
 	cad=Trim(cad);
 	var lg = cad.length;
	if (lg==len) return true;
	return false;

}

function ValidSecretPass(frmField,intLength,obligatorio,errorBlanks,errorCaracter,errorLenght)
{
    frmField.value= Trim(frmField.value);
	
	if ((obligatorio) && (!ValidBlanks(frmField,errorBlanks))) return (false);
	
    if (frmField.value != "")
    {
        //CAMBIO añadir esta primera condicion
        if(!BusqCaracteres(frmField.value))
            {
            alert(errorCaracter)
            frmField.focus();
            return false;
            }
        if (frmField.value.length > intLength)
            {
            alert(errorLenght)
            frmField.focus();
            return false;
            }
     }
	 
	 return true;
}

function Trim(cad)
{
	var aux="";
	var i,lg = cad.length;
	alert("LONGITUD : "+cad.length);
	for (;lg>0 && cad.charAt(lg-1)<=' ';lg--);
	alert("PRIMER FOR: "+cad);
	for (i=0;i<lg && cad.charAt(i)<=' ';i++);
	alert("SEGUNDO FOR: "+cad);
	for (;i<lg;i++)
		aux = aux + cad.charAt(i);
		
	alert("LO QUE VAMOS A MANDAR: " + aux.value);
	
	return aux;
}


function validarZipCode(provincia, zipCode, error)
{
    var codProvincia = provincia.value;
    var codPostal = zipCode.value;

    if (codProvincia.length == 1){
       codProvincia = "0" + codProvincia;
    }

    if (codPostal.length != 5){
        alert(error);
        zipCode.select();
        zipCode.focus();
        return false;
    }
    for (i=0; i<codProvincia.length;i++){
        if (codProvincia.charAt(i)!= codPostal.charAt(i)){
		    alert(error);
		    zipCode.select();
		    zipCode.focus();
		    return false;
		}
	}
	return true;
}


// Elimina blancos al principio y al final de una cadena
function fTrim(pStr) {
  var ini, fin, len = pStr.length
  if (0 == len) return pStr;
  for (ini = 0; ini < len; ini++) {
    if (pStr.charAt(ini) != ' ') break;
  }
  for (fin = len - 1; fin > ini; fin--) {
    if (pStr.charAt(fin) != ' ') break;
  }
  return pStr.substring(ini, fin+1);
}


// Quita de una cadena el elemento que le pasamos
function quitaCaracter(cadena,elem){
  var resultado = "";
     for (i=0;i<cadena.length;i++){
      	if (cadena.charAt(i) != elem){
        	resultado = resultado + cadena.charAt(i);
        }
     }
	return resultado;
}

//Valida si un checkbox esta seleccionado
function ValidCheckField(frmField,mensaje)
{
    if(!frmField.checked)
    {
        alert(mensaje);
      return(false);
    } else
    {
       return(true);
    }
}




// Quita de una cadena el elemento que le pasamos
function quitaCaracter(cadena,elem){
  var resultado = "";
     for (i=0;i<cadena.length;i++){
      	if (cadena.charAt(i) != elem){
        	resultado = resultado + cadena.charAt(i);
        }
     }
	return resultado;
}

//Valida si un checkbox esta seleccionado
function ValidCheckField(frmField,mensaje)
{
    if(!frmField.checked)
    {
        alert(mensaje);
      return(false);
    } else
    {
       return(true);
    }
}

//funciones relacionadas 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;
}

//-------------------------------------------------

/*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;
}
//controla el numero y tipo de pasajeros
function CompPasajeros(max_pax,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) > max_pax) { error += txt2+"\n"; }	
	if((n_inf+n_chd)>(n_adt*2)){error += txt3+"\n";}
	
	return error;
}


/* 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 (!ValidFieldDocNumber("",documentType,25,"list",true))
    {
        return 1;
    }
    //validación NUMERO DOCUMENTO
    else if (!ValidFieldDocNumber("",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 (!ValidFieldDocNumber("",documentNumber,8,"number",true))
                {
                    return 3;
                }
                else if (!ValidFieldDocNumber("",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 (!ValidFieldDocNumber("",documentNumber,25,"nif",true))
                        {
                            return 6;
                        }
                   }
                   //validación para IBDAPE
                   else if(documentType.value == 6 && !isNie(documentNumber.value))
                        {/*valido la tarjeta de residencia*/
                            return 7;
                        }
    return 0;
}

// funcion asociada a la validacion de número de documento segun su tipo (isCorrectDocument)
//es necesario por el diferente tratamiento de los errores, en BRM se muestran uno a uno.
function ValidFieldDocNumber(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) && (frmField.value == "")) 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 '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 '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 'list' :
	        if ((obligatorio) && (frmField.selectedIndex==0))
	        {
	                //alert("Debe seleccionar algún valor de la lista " + strFldName );
	                frmField.focus();
	                return (false);
	        }
				break;			

		}
	return (true);
}



//Incidencia 413454

function ValidarCP()
{                    
            if ( (document.getElementById("zipCode") != null) && (document.getElementById("provinceState")!= null) ){
              var itemCP = document.getElementById("zipCode").value;
              var itemsProv = document.getElementById("provinceState");
              
               if (itemCP.length == 2)
               {	//buscar si exise algun codigo q sea igual
                itemCP = parseInt(itemCP,10)//para CP q empiezan por 0
                		var codPostal = searchCP(itemCP);
                        if (codPostal != null)
                        {	itemsProv.selectedIndex = codPostal;
                        } else
                        {	 itemsProv.selectedIndex = 0;
                        }

              }
              if (itemCP.length < 2)
              {	///solamente deberia de aplicarse para el caso de ESPAÑA
                itemsProv.selectedIndex = 0;
              }
              
               
            }
         
            if ( (document.getElementById("ibHomeZip") != null) && (document.getElementById("ibHomeState")!= null) ){
              var itemCP = document.getElementById("ibHomeZip").value;
              var itemsProv = document.getElementById("ibHomeState");
              
              if (itemCP.length == 2)
               {	//buscar si exise algun codigo q sea igual
                itemCP = parseInt(itemCP,10)//para CP q empiezan por 0
                		var codPostal = searchCP(itemCP);
                        if (codPostal != null)
                        {	itemsProv.selectedIndex = codPostal;
                        } else
                        {	 itemsProv.selectedIndex = 0;
                        }

              }
              if (itemCP.length < 2)
              {	///solamente deberia de aplicarse para el caso de ESPAÑA
                itemsProv.selectedIndex = 0;
              }
              
              
              
            }
			if ( (document.getElementById("abZip") != null) && (document.getElementById("abState")!= null) ){
              var itemCP = document.getElementById("abZip").value;
              var itemsProv = document.getElementById("abState");
              
              if (itemCP.length == 2)
               {	//buscar si exise algun codigo q sea igual
                itemCP = parseInt(itemCP,10)//para CP q empiezan por 0
                		var codPostal = searchCP(itemCP);
                        if (codPostal != null)
                        {	itemsProv.selectedIndex = codPostal;
                        } else
                        {	 itemsProv.selectedIndex = 0;
                        }

              }
              if (itemCP.length < 2)
              {	///solamente deberia de aplicarse para el caso de ESPAÑA
                itemsProv.selectedIndex = 0;
              }
              
              
            } 
            
            if ( (document.getElementById("codigoPostal") != null) && (document.getElementById("provincia")!= null) ){
              var itemCP = document.getElementById("codigoPostal").value;
              var itemsProv = document.getElementById("provincia");
              
               if (itemCP.length == 2)
               {	//buscar si exise algun codigo q sea igual
                itemCP = parseInt(itemCP,10)//para CP q empiezan por 0
                		var codPostal = searchCP(itemCP);
                        if (codPostal != null)
                        {	itemsProv.selectedIndex = codPostal;
                        } else
                        {	 itemsProv.selectedIndex = 0;
                        }

              }
              if (itemCP.length < 2)
              {	///solamente deberia de aplicarse para el caso de ESPAÑA
                itemsProv.selectedIndex = 0;
              }
              
               
            }  
            
}

function searchCP(itemCP)
{    var codPostal = null;
	
	
	 if ( document.getElementById("provinceState")!= null){
       	 var itemsProv = document.getElementById("provinceState");
     }
     if ( document.getElementById("ibHomeState")!= null){
       	 var itemsProv = document.getElementById("ibHomeState");
     }
     if ( document.getElementById("abState")!= null){
       	 var itemsProv = document.getElementById("abState");
     }
     if ( document.getElementById("provincia")!= null){
     	 var itemsProv = document.getElementById("provincia");
     }
	
	
	for (var ind=0;ind<itemsProv.length;ind++)
	{	if (itemCP == itemsProv[ind].value)
		{	codPostal = ind; }
	}
	return codPostal;
}

//Fin incidencia 413454