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

//           FormCheq.js (c) ChaTo [www.chato.cl] 1998

//           basado en FormChek.js (c) Eric Krock 1997 Netscape Corp.

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

// Rutinas para verificacion de formularios, basado en FormChek.js

// Parte del curso "TEJEDORES DEL WEB" http://www.TejedoresDelWeb.com/

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



var defaultEmptyOK = false

var checkNiceness = true;

var digits = "0123456789";

var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü "		//incluidos los espacios

var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ "		//incluidos los espacios

var whitespace = " \t\n\r";

var phoneChars = "()-+ ";

var mMessage = "Error: no puede dejar este espacio vacio"

var pPrompt = "Error: ";

var pAlphanumeric = "ingrese un texto que contenga solo letras y/o numeros";

var pAlphabetic   = "ingrese un texto que contenga solo letras";

var pInteger = "ingrese un numero entero";

var pIntegerPositivo = "El campo no se puede dejar en blanco";

var pNumber = "ingrese un numero";

var pPhoneNumber = "ingrese un número correctamente";

var pEmail = "ingrese una dirección de correo electrónico válida";

var pName = "ingrese un texto que contenga solo letras, numeros o espacios";

var pNice = "no puede utilizar comillas aqui";

function makeArray(n) {

   for (var i = 1; i <= n; i++) {

      this[i] = 0

   } 

   return this

}



function isEmpty(s)

{   return ((s == null) || (s.length == 0))

}



function isWhitespace (s)

{   var i;

    if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++)

    {   

        var c = s.charAt(i);

        // si el caracter en que estoy no aparece en whitespace,

        // entonces retornar falso

        if (whitespace.indexOf(c) == -1) return false;

    }

    return true;

}





function stripCharsInBag (s, bag)

{   var i;

    var returnString = "";



    // Buscar por el string, si el caracter no esta en "bag", 

    // agregarlo a returnString

    

    for (i = 0; i < s.length; i++)

    {   var c = s.charAt(i);

        if (bag.indexOf(c) == -1) returnString += c;

    }



    return returnString;

}





function stripCharsNotInBag (s, bag)

{   var i;

    var returnString = "";

    for (i = 0; i < s.length; i++)

    {   

        var c = s.charAt(i);

        if (bag.indexOf(c) != -1) returnString += c;

    }



    return returnString;

}





function stripWhitespace (s)

{   return stripCharsInBag (s, whitespace)

}



function charInString (c, s)

{   for (i = 0; i < s.length; i++)

    {   if (s.charAt(i) == c) return true;

    }

    return false

}



function stripInitialWhitespace (s)

{   var i = 0;

    while ((i < s.length) && charInString (s.charAt(i), whitespace))

       i++;

    return s.substring (i, s.length);

}



function isLetter (c)

{

    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||

            ( lowercaseLetters.indexOf( c ) != -1 ) )

}



function isDigit (c)

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

}



function isLetterOrDigit (c)

{   return (isLetter(c) || isDigit(c))

}



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;

}



//miaaa

function isIntegerPositivo (s)

{

	if (isInteger(s) && s > 0)

		return true;

	else

		return false;

}



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)) 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 isInterval (s, minimo, maximo)
{
	var textotemp = "El número de caracteres del campo debe estar comprendido entre "+ minimo +" y "+maximo;
	alert(s.length);
    if(s.length>=minimo)
	 if(s.length<=maximo)
	 	v = true;
	 else
	 	v = false;
	else
		v = false;
		
	//alert("toma "+	textotemp);
	if (v == false)

        return selectInvalid(s, textotemp);
}



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

}



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)) 

       if (isEmail.arguments.length == 1) return defaultEmptyOK;

       else return (isEmail.arguments[1] == true);

    if (isWhitespace(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 isNice(s)

{

        var i = 1;

        var sLength = s.length;

        var b = 1;

        while(i<sLength) {

                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" ) ) b = 0;

                i++;

        }

        return b;

}



function statBar (s)

{   window.status = s

}



function warnEmpty (theField)

{   theField.focus()

    alert(mMessage)

    statBar(mMessage)

    return false

}



function warnInvalid (theField, s)

{   
	//lert("si bueno no");
	theField.focus()

    theField.select()

    alert(s)

    statBar(pPrompt + s)

    return false

}



//mia, lo mismo pero sin seleccion, para las listas (selects)

function selectInvalid (theField, s)

{   theField.focus()

    alert(s)

    statBar(pPrompt + s)

    return false

}



function checkField (theField, theFunction, emptyOK, s)

{   

    var msg;

    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;

    if (checkField.arguments.length == 4) {

        msg = s;

    } else {

        if( theFunction == isAlphabetic ) msg = pAlphabetic;

        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;

        if( theFunction == isInteger ) msg = pInteger;

        if( theFunction == isIntegerPositivo ) msg = pIntegerPositivo;

        if( theFunction == isNumber ) msg = pNumber;

        if( theFunction == isEmail ) msg = pEmail;

        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;

        if( theFunction == isName ) msg = pName;

    }

    

    if ((emptyOK == true) && (isEmpty(theField.value))) return true;



    if ((emptyOK == false) && (isEmpty(theField.value))) 

        return warnEmpty(theField);



    if ( checkNiceness && !isNice(theField.value))

        return warnInvalid(theField, pNice);



    //modificacion mia para que no compruebe valores si pasas NULL como parametro, solo es para ver las komillas

    if (theFunction == null) 

        return true;



    if (theFunction(theField.value) == true) 

        return true;

        

    //mioooo

    if (theFunction == isIntegerPositivo)

        return selectInvalid(theField,msg);

    else

        return warnInvalid(theField,msg);



}



//OTRAS FUNCIONES HECHAS POR MI PARA CASAS DE MURCIA ---------------------------------------------------



//Funciones para contar el numero de caracteres en descripcion segun campo MAXLENGTH

function calcular(obj, obj2) {



	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""



	texto=obj.value;

	longitud=texto.length;

	if (mlength-longitud <= 0)

			obj2.value=0;

	else obj2.value=(mlength-longitud);



	if (obj.getAttribute && obj.value.length>mlength)

			obj.value=obj.value.substring(0,mlength)

}



//Hecha por mi para validar los radio buttons

function validarRadioBut(b, texto) {

	for (var i = 0; i < b.length; i++ ) {

		if (b[i].checked)

			return true;

	}

	alert(texto);	//si llega hasta aqui es que no esta seleccionado

	return false;

}



//Activa y desactiva campos, para todos los navegadores

function enable(objName) {

	if (navigator.appName == 'Netscape')

			if (objName[0] != null && objName[0].type == 'radio')

					arrElementsStatus[objName[0].name] = 'editable';

			else

				this.arrElementsStatus[objName.name] = 'editable';

	else

		if (objName.length  && objName[0].type == 'radio')

			for (i=0; i<objName.length; i++)

				objName[i].disabled = 0;

		else

			objName.disabled = 0;

}



function disable(objName) {

	if (navigator.appName == 'Netscape')

		if (objName[0] != null  && objName[0].type == 'radio')

				arrElementsStatus[objName[0].name] = 'readonly';

		else

		{

			if (objName.type == "select-multiple")

				arrListBoxValue[objName.name] = objName.selectedIndex;

			this.arrElementsStatus[objName.name] = 'readonly';

		}

	else

		if (objName.length  && objName[0].type == 'radio')

			for (i=0; i<objName.length; i++)

				objName[i].disabled = 1;

		else

			objName.disabled = 1;

}

