
/* 
	SINTAXIS DE LA FUNCIO CHECKLIST
	 
   checkField (NOMBRE_input_camp, tipus_camp, obligatori)

   _____________[Tipus camp]______________
   isInteger (s [,eok])                números enters(+/-)
   isNumber (s [,eok])                 números decimals(el separador de decimals es el [.])
   isAlphabetic (s [,eok])             les lletres ke conté la variable [lowercaseLetters] o [uppercaseLetters]
   isAlphanumeric (s [,eok])           lletre i números que contenen les variables [lowercaseLetters,uppercaseLetters,digits]
   isPhoneNumber (s [,eok])            números de telèfon acepta caracters com('+','-','()','.','')
   isEmail (s [,eok])                  comproba que tingui l'estructura d'una direcció mail(eee@eeee.com)
   isPositive (s,[eok])				   comproba que el valor numeric sigui positiu ( per exemple cas de preu...)
   ----------------------------------------

*/
// Ens indica si volem deixar la casella en blanc si deixem [false]->NO PODEM DEIXAR INPUTS BUITS /[true]->SI PODEM DEIXAR INPUTS BUITS
var defaultEmptyOK = false;
// Comproba que no hi hagin comillas simples o simbols estranys dins l'imput si es [true]->si comproba l'input
var checkNiceness = true;

var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnñopqrsçtuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNÑOPQRSÇTUVWXYZÁÉÍÓÚÑÜ"
var sql="SELECT,DELETE,INSERT"
var whitespace = " \t\n\r";
var phoneChars = "()-+ ";
var invalidchars ="\$%=?¿*^;\"\'·{}[]¡<>+*#|";

//------------MISSATGES D'ERROR-------------------//
var mMessage = "Error: no puede dejar este espacio vacio"
var pPrompt = "Error: ";
var pAlphanumeric = "Inserte un texto que contenga solo letras y/o numeros y no comienze por espacios en blanco.";
var pAlphabetic   = "inserte un texto que contenga solo letras";
var pInteger = "inserte un numero entero";
var pNumber = "inserte un número, el punto como separador de decimales";
var pPhoneNumber = "inserte un número de teléfono";
var pEmail = "la dirección de correo electrónico no es válida";
var pName = "este campo solo acepta letras, numeros o espacios";
var pNice = "Estos carácteres no están permitidos ('\\\','$','%','&','=','?','¿','*','^',';','\"','\'','·','{}','[]','<>','+','*','#','|') en este campo";
var pMiSql ="instrucción no permitida";
var pPositive = "este campo solo puede admitir números positivos.";

//---------FUNCIONS BÀSIQUES--------------//
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// s es vacio o solo caracteres de espacio
function isWhitespace(s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function stripCharsInBag(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 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") || (c == ".") || (c == ","))
}

function isSql(c)
{
	return ((c=="DELETE")||(c=="INSERT")||(c=="SELECT")||(c=="delete")||(c=="insert")||(c=="select"))
}

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


// ----------------NUMEROS--------------------//

//NOMBREes acepta números enter (+/-)
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;
}

//NOMBREes acepta números enter positius.
function isPositive(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 (!isDigit(c) || (c == "-")) return false;
    }
    return true;
}

// números amb decimals, acepta tan positius com negatius
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;
}

// -------------------- TEXTE ---------------------- //
// NOMBREés acepta caracters alfabétics que conté la variable[lowercaseLetters,uppercaseLetters]
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++)
    {   
        var c = s.charAt(i);

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


// NOMBREés acepta caracters alfabétics que conté la variable[lowercaseLetters,uppercaseLetters,digits]
function isAlphanumeric(s)
{   
	var i,x,w;
    
	if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
	w="";
	x=0;
	var miSql = new Array();
	for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
			
		if(isWhitespace(c))
		{
			miSql[x]=w;
			if (miSql[0]==""){return false;}
			++x;
		}else{
			w=w+c;
			miSql[x]=w;
		}
		
		var z=x;
		if (x>z){
			z=x;
		}
			
        if (!(isLetter(c) || isDigit(c) || whitespace) )
        return false;			
					
    }
	
	for (x=0;x<=z;x++){
		var word=new String(miSql[x])
		if (isSql(word))
		{
		alert(pMiSql);
		return false;
		}
	} 
	
    return true;
}

// ------------ TELÉFON - MAIL --------------- //

// format de teléfon acepta carácters com('+','-','()')
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))
}

// valida DIRECCIONns mail te que seguir la sintaxi d'una adreça mail xx@xxx.com
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;
}

//aquesta funcio comproba que no es fiquin caracters com comilles simples, barras...
function isNice(s)
{
        var i = 1;
        var sLength = s.length;
        var b = 1;
		var c;
		for (i = 0; i < s.length; i++){   
	        c = s.charAt(i);
        	if (invalidchars.indexOf(c) != -1) b = 0;
    	}
        return b;
}


// ---------------------------------------------------------------------- //
//                  FUNCIONES PARA RECLAMARLE AL USUARIO                  //
// ---------------------------------------------------------------------- //

// pone el string s en la barra de estado
function statBar (s)
{   window.status = s
}

// notificar que el campo theField esta vacio
function warnEmpty (theField)
{   
	theField.style.background="#ececec";
	theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

// notificar que el campo theField es invalido
function warnInvalid (theField, s)
{   
	theField.style.background="#ececec";
	theField.focus();
    theField.select();
    alert(s)
    statBar(pPrompt + s)
    return false
}

// el corazon de todo: checkField
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 == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
	    if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
		if( theFunction == isPositive ) msg = pPositive;
    }
    
    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);

    if (theFunction(theField.value) == true) 
        return true;
    else
        return warnInvalid(theField,msg);

}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function validarNombre(cadena){


var dominio = /^[abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZäáàëéèïíöóòüúÀÁÈÉÍÒÓÚÄËÏÖÜ ]$/;
var fallos=-1;

// miro si los dos primeros caracteres son espacios blancos o tiene como mínimo 3 letres

	if(cadena.charAt(0) == ' ' || cadena.charAt(1) == ' ' || (cadena.length <3)) return false;

	for(i=0;i<cadena.length;i++){
		if(cadena.charAt(i).search(dominio)){
		  fallos++;
		}
	}
	
if(fallos>0) return false;
return true;

}

// validar email valida un email sintácticamente

function validarEmail(emailStr){

 /* Verificar si el email tiene el formato user@dominio. */

var emailPat=/^(.+)@(.+)$/

 /* Verificar la existencia de caracteres. ( ) < > @ , ; : \ " . [ ] */

var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

 /* Verifica los caracteres que son válidos en una dirección de email */

var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"

/* Verifica si la dirección de email está representada con una dirección IP Válida */ 

 var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

 /* Verificar caracteres inválidos */

var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/*domain, as opposed to 
, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)

if (matchArray==null) {
	//alert("Email address seems incorrect (check @ and .'s)")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]
// Si el user "user" es valido 
if (user.match(userPat)==null) {
// Si no
//alert("El nombre de usuario no es válido.")
return false
}

 /* Si la dirección IP es válida */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	for (var i=1;i<=4;i++) {
		if (IPArray[i]>255) {
	//	alert("IP de destino inválida")
		return false
		}
 	}
return true
}

var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		//alert("El dominio parece no ser válido.")
		return false
	}
 
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length

if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
	//alert("La dicrección debe tener 3 letras si es o 2 si en de algún pais.")
	return false
}

if (len<2) {
	var errStr="La dirección es erronea"
	//alert(errStr)
	return false
}

// La dirección de email ingresada es Válida
return true;

}

<!--- Compruebo la longitud de un campo->

function checkLong(textArea,longitud){   

	val = MM_findObj(textArea);
	val_long = MM_findObj(longitud);
	num = parseFloat(val_long.value);
    				
	if(val.value.length>num){
		 alert ('El comentario es demasiado largo');
		 return false;
	}else{
	return true;
	}
}

