// ---------------------------------------------------------------------- //
//                                VARIABLES                               //
// ---------------------------------------------------------------------- //

// Esta variable indica si está bien dejar las casillas
// en blanco como regla general
var defaultEmptyOK = false;

var blnComillas = true;

// listas de caracteres

var carDigitos = "0123456789";
var carMinusculas = "abcdefghijklmnopqrstuvwxyzáéíóúñü";
var carMayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ";
var carBlancos = " \t\n\r";

// caracteres admitidos en nos de telefono
var carTelefono = "()-+ ";

// ---------------------------------------------------------------------- //
//                     TEXTOS PARA LOS MENSAJES                           //
// ---------------------------------------------------------------------- //

var txtError = "Error: Debe rellenar los campos Obligatorios"

var txtPrompt = "Error: ";
var txtNULL = "Debe rellenar este campo Obligatorio"
var txtAlfanumerico = "ingrese un texto que contenga solo letras y/o numeros";
var txtTexto   = "ingrese un texto que contenga solo letras";
var txtEntero = "ingrese un numero entero";
var txtNumero = "ingrese un numero";
var txtTelefono = "ingrese un número de teléfono";
var txtEmail = "ingrese una dirección de correo electrónico válida";
var txtNombre = "ingrese un texto que contenga solo letras, numeros o espacios";
var txtComillas = "no puede utilizar comillas aqui";
var txtNif = "debe introducir un NIF valido";


// ---------------------------------------------------------------------- //
//                  CODIGO PARA FUNCIONES BASICAS                         //
// ---------------------------------------------------------------------- //



//CADFENA VACIA O DE LONGITUD CERO
function esVacio(cad)
{   
return ((cad == null) || (cad.length == 0));
}

//ESPACIO EN BLANCO O CADENA DE ESPACIOS EN BLANCO
function esEspacioBlanco (cad)
{   var i;
    if (esVacio(cad)) return true;
    for (i = 0; i < cad.length; i++)
    {   
        var c = cad.charAt(i);
        if (carBlancos.indexOf(c) == -1) return false;
    }
    return true;
}


//ELIMINA LOS CARACTERES QUE APARECEN EN UN PATRON DE LA CADENA
function eliminaCarCadena (cad, patron)
{   var i;
    var returnString = "";
	    
    for (i = 0; i < cad.length; i++)
    {   var c = cad.charAt(i);
        if (patron.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}


//ELIMINA LOS CARACTERES DE UNA CADENA QUE NO APARECEN EN EL PATRON
function eliminaCarNoCadena (cad, patron)
{   var i;
    var returnString = "";
    for (i = 0; i < cad.length; i++)
    {   
        var c = cad.charAt(i);
        if (patron.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}


// ELIMINA TODOS LOS ESPACIOS EN BLANCO DE UNA CADENA
function eliminaEspaciosBlanco (cad)
{   return eliminaCarCadena (cad, carBlancos);
}



// INDICA SI EL CARACTER ES UNA LETRA
function esLetra (car)
{
    return( ( carMinusculas.indexOf( car ) != -1 ) ||
            ( carMayusculas.indexOf( car ) != -1 ) );
}


// INDICA SI EL CARACTER ES UN DIGITO
function esDigito (car)
{   return ((car >= "0") && (car <= "9"));
}


// INDICA SI EL CARACTER ES DIGITO O LETRA
function esLetraDigito (car)
{   return (esLetra(car) || esDigito(car));
}


// ---------------------------------------------------------------------- //
//                          NUMEROS                                       //
// ---------------------------------------------------------------------- //

function esEntero (val)
{   var i;
    if (esVacio(val)) 
       if (esEntero.arguments.length == 1) return defaultEmptyOK;
       else return (esEntero.arguments[1] == true);
    
    for (i = 0; i < val.length; i++)
    {   
        var c = val.charAt(i);
        if( i != 0 ) {
            if (!esDigito(c)) return false;
        } else { 
            if (!esDigito(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}


// INDICA SI EL VALOR ES NUMERICO (ENTERO O FLOTANTE CON O SIN SIGNO)
function esNumero (val)
{   var i;
    var punto;
    punto = false;
    if (esVacio(val)) 
       if (esNumero.arguments.length == 1) return defaultEmptyOK;
       else return (esNumero.arguments[1] == true);
    
    for (i = 0; i < val.length; i++)
    {   
        var c = val.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !punto )
                    punto = true;
                else
                    return false;
            } else     
                if (!esDigito(c)) 
					return false;
        } else { 
            if ( c == "." ) {
                if( !punto )
                    punto = true;
                else
                    return false;
            } else     
                if (!esDigito(c) && (c != "-") || (c == "+")) 
					return false;
        }
    }
    return true;
}

// ---------------------------------------------------------------------- //
//                        STRINGS SIMPLES                                 //
// ---------------------------------------------------------------------- //


//INDICA SI LA CADENA ES VACIA O NULL
function esNULL (txt)
{   
  if (esVacio(eliminaEspaciosBlanco(txt))) 
     return false;
  else
	 return true;
}

// INDICA SI LA CADENA UNICAMENTE CONTIENE TEXTO
function esTexto (txt)
{   
	var i;

    if (esVacio(txt)) 
       if (esTexto.arguments.length == 1) return defaultEmptyOK;
       else return (esTexto.arguments[1] == true);
    for (i = 0; i < txt.length; i++)
    {   
        var c = txt.charAt(i);
        if (!esLetra(c))
        	return false;
    }
    return true;
}

// INDICA SI LA CADENA ES ALFANUMERICA (LETRAS Y NUMEROS)
function esAlfanumerico (txt)
{   var i;

    if (esVacio(txt)) 
       if (esAlfanumerico.arguments.length == 1) return defaultEmptyOK;
       else return (esAlfanumerico.arguments[1] == true);

    for (i = 0; i < txt.length; i++)
    {   
        var c = txt.charAt(i);
        if (! (esLetra(c) || esDigito(c) ) )
        return false;
    }

    return true;
}

//INDICA SI SOLO CONTIENE LETRAS, DIGITOS O ESPACIOS EN BLANCO
function esNombre (txt)
{
    if (esVacio(txt)) 
       if (esNombre.arguments.length == 1) return defaultEmptyOK;
       else return (esNombre.arguments[1] == true);
    
    return(esAlfanumerico(eliminaCarCadena(txt,carBlancos)));
}

// ---------------------------------------------------------------------- //
//                     TELEFONO , EMAIL o NIF                             //
// ---------------------------------------------------------------------- //


//INDICA SI LA CADENA CONTIENE UN NIF CORRECTO
function esNif (txt)
{   var modString;
	var contGuion=0;
	var contLetra=0;
    if (esVacio(txt)) 
       if (esNif.arguments.length == 1) return defaultEmptyOK;
       else return (esNif.arguments[1] == true);
 
    for (i = 0; i < txt.length; i++)
    {   
        var c = txt.charAt(i);
        if (esLetra(c) || esDigito(c) || c == "-") 
		{
	        //return false;
			if ( esLetra(c) )
				contLetra ++;
			if ( c == "-" )
				contGuion ++;
		}
		else return false;
    }

	if ( contGuion > 1 || contLetra > 1 || contLetra < 1) 
		return false;
    return true;
}

//INDICA SI LA CADENA CONTIENE UN NUMERO DE TELEFONO O DE FAX
function esTelefono (txt)
{   var modString;
    if (esVacio(txt)) 
       if (esTelefono.arguments.length == 1) return defaultEmptyOK;
       else return (esTelefono.arguments[1] == true);
 
    modString = eliminaCarCadena ( txt, carTelefono );
    return (esEntero(modString))
}

//INDICA SI LA CADENA CONTIENE UNA DIRECCION DE CORREO VALIDA
function esEmail (txt)
{
    if (esVacio(txt)) 
       if (esEmail.arguments.length == 1) return defaultEmptyOK;
       else return (esEmail.arguments[1] == true);

    if (esEspacioBlanco(txt)) 
		return false;
    var i = 1;
    var sLength = txt.length;

    while ((i < sLength) && (txt.charAt(i) != "@"))
    { 
		i++;
    }

    if ((i >= sLength) || (txt.charAt(i) != "@")) 
		return false;
    else 
		i += 2;

    while ((i < sLength) && (txt.charAt(i) != "."))
    { 
		i++;
    }

    if ((i >= sLength - 1) || (txt.charAt(i) != ".")) 
		return false;
    else 
		return true;
}


//INDICA SI EL TEXTO CONTIENE COMILLAS
function sinComillas(txt)
{
        var i = 1;
        var sLength = txt.length;
        var b = 1;
        while(i<sLength) {
                if( (txt.charAt(i) == "\"") || (txt.charAt(i) == "'" ) ) b = 0;
                i++;
        }
        return b;
}

// ---------------------------------------------------------------------- //
//                           MENSAJES AL USUARIO                             //
// ---------------------------------------------------------------------- //

//MUESTRA UN TEXTO EN LA BARRA DE ESTADO
function txtBarraEstado (txt)
{   
	window.status = txt;
}


//NOTIFICA QUE EL CAMPO ES VACIO
function msgCampoVacio (src)
{   
	src.focus();
    alert(txtError);
    txtBarraEstado(txtError);
    return false;
}

function msgCampoInvalido (src, txt)
{   
	src.focus();
    src.select();
	//alert(src.name);
    alert(txt);
    txtBarraEstado(txtPrompt + txt);
    return false;
}

// ---------------------------------------------------------------------- //
//                           FUNCION RAIZ                                //
// ---------------------------------------------------------------------- //


function verifica(src, funcion, emptyOK, txt)
{   
    var msg;
	
    if (verifica.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (verifica.arguments.length == 4) 
	{
        alert(txt);
		msg = txt;
    } 
	else 
	{
        if( funcion == esTexto ) msg = txtTexto;
        if( funcion == esAlfanumerico ) msg = txtAlfanumerico;
        if( funcion == esEntero ) msg = txtEntero;
        if( funcion == esNumero ) msg = txtNumero;
        if( funcion == esEmail ) msg = txtEmail;
        if( funcion == esTelefono) msg = txtTelefono;
        if( funcion == esNombre) msg = txtNombre;
		if( funcion == esNif) msg = txtNif;
		if( funcion == esNULL) msg = txtNULL;
    }
    
    if ((emptyOK == true) && (esVacio(src.value))) return true;

    if ((emptyOK == false) && (esVacio(src.value))) 
        return msgCampoVacio(src);

    if ( blnComillas && !sinComillas(src.value))
        return msgCampoInvalido(src, txtComillas);

    if (funcion(src.value) == true) 
        return true;
    else
        return msgCampoInvalido(src,msg);

}

