
var defaultEmptyOK = false
var digits = "0123456789";
var lowercaseLetters = " abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = " ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r";
var doc="document.forms"

var phoneChars = "()-+ ";

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
function isLetter(character) { 
	return (character >= "a" && character <= "z"); 
} 
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}
function isLetter (c){

    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )

}
function ValidBlanks(frmField,strFldName,descripcion)
{
	if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') == "" || eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') == null)
	{
	        alert("Debe insertar algún valor en el campo " + descripcion);
	        eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
	        return (false);
	} 
	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 == "\\"  )
		{
			valido = false
		}
	}
	
	if (!valido)
		return false
	else
		return true
	
}
function ValidField(strFldName,frmField,intLength,minLength,strDtType,obligatorio,descripcion)
{
	
	switch (strDtType)
		{
			case 'string' : 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						//CAMBIO añadir esta primera condicion
						if(!BusqCaracteres(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))
							{
							var charsNotValid = "<, >, #, /, \", \\";
							alert("El campo " + descripcion + " no puede contener los siguientes caracteres: " + charsNotValid);
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);				
							}
							
						if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value').length > intLength)
							{
							alert("El número máximo de caracteres del campo " + descripcion + " debe ser: "+intLength);
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}
						if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value').length < minLength)
							{
							alert("El número mínimo de caracteres del campo " + descripcion + " debe ser: "+minLength);
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;
			case 'mail': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if (!isEmail(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))
							{
							alert("El contenido del campo " + descripcion + " no es correcto");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;	
			case 'nif': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if (!isNif(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))
							{
							alert("El contenido del campo " + descripcion + " no es correcto");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;				
			case 'number': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if (!isNumber(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))
							{
							alert("El contenido del campo " + descripcion + " debe ser numerico");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;
			case 'alphanumeric': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if (!isAlphanumeric(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))
							{
							alert("El contenido del campo " + descripcion + " debe ser alfanumerico");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;
			case 'hour': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
								
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if (!isHour(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))
							{
							alert("El contenido del campo " + descripcion + " no es una hora correcta.El formato correcto es 00:00.");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;	
			case 'date': 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if (isDate(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value'))== false)
							{
							alert("El contenido del campo " + descripcion + " no es una fecha correcta. El formato correcto es DD/MM/AAAA.");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}
				break;
			case 'list' : 
                    if ((obligatorio) && (eval(''+doc+'["'+frmField+'"].'+strFldName+'').selectedIndex==0))
                    {
                            alert("Debe seleccionar algún valor de la lista " + descripcion );
                           eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
                            return (false);
                    }
				break;

			case 'positivo' : 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);
					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if ((!isNumber(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')))||(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value')<0))
							{
							alert("El contenido del campo " + descripcion + " debe ser positivo.");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'').focus();
							return (false);
							}	
				break;	
			
			case 'phone' : 
					if ((obligatorio) && (!ValidBlanks(frmField,strFldName,descripcion))) return (false);					
					if (eval(''+doc+'["'+frmField+'"].'+strFldName+'.value') != "")
						if ((eval(''+doc+'["'+frmField+'"].'+strFldName+'.value').length<9)||(eval(''+doc+'["'+frmField+'"].'+strFldName+'.value').length>11) )
							{
							alert("El contenido del campo " + descripcion + " debe tener entre 9-11 caracteres.");
							eval(''+doc+'["'+frmField+'"].'+strFldName+'.value').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 isNif(nif)
{
            var itm=0;
            var defNif;
            var long=nif.length;
            var j=0;
            
            while((j<long) && (itm!=1)){
                        if(nif.substr(j,1)!=0){
                                   itm=1;
                        }
                        else{j++}                       
            }
            if(itm==0){
                        defNif=nif;
            }
            
            else{
                        defNif=nif.substr(j,long)
            }
            
		  defNif=defNif.toLowerCase();
		  nifcorrecto = true;
		  dni=defNif.substring(0,defNif.length-1);
		  dni=parseInt(dni);
		  letra=defNif.charAt(defNif.length-1);
		  letraCorrecta = letras[ dni % 23];
		            
		  if (dni > 99999999)
		    nifcorrecto = false;
		  if(letra!=letraCorrecta)
		    nifcorrecto = false;
		    
		   if (nifcorrecto){
		            return true;}
		   else{
		            return false;}
}



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 || s=="dd/mm/yyyy")
        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;
}


