// JavaScript Document
// ----------------------------------------------------------------------
//           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/
// ---------------------------------------------------------------------- 

//VARs que ya estaban
var defaultEmptyOK = false;
var checkNiceness = true;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñüªº.-/,âêîôû"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑÂÊÎÔÛ"
var whitespace = " \t\n\r";
var phoneChars = "-+";
var DNIChars = "abcdefghijklmnopqrstuvwxyzáéíóúñüªº.-/,âêîôûABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑÂÊÎÔÛ";
var NumTarjChars = "-";

//VARs que he puesto yo
var msg_final = '';
var elprimero = ''; //ElPrimero a efectos del primer campo que falla para que el cursor se ponga ahí para rectificar
var hayqueponerseen = '';
var havalidado = '0';
		
var duplicara_sollicitud = 'Si continua, farà l\'enviament d\'aquest formulari per segona vegada. ';
duplicara_sollicitud+='Això només té sentit si està realitzant una sol·licitud diferent de l\'anterior.\n\nSi creu que no s\'ha dut';
duplicara_sollicitud+='a terme correctament la primera sol·licitud, li recomanam que s\'asseguri d\'aquest fet mirant el seu correu ';
duplicara_sollicitud+='electrònic i comprovant que no ha rebut cap còpia de la sol·licitud anterior.\n\nEstà segur de que vol continuar ';
duplicara_sollicitud+='enviant aquesta sol·licitud?';

var pot_tardar_un_poc = 'ATENCIÓ!!! Pensi que si ha adjuntat algun fitxer, podria ser que tardàs un poc en aparèixer la resposta a l\'enviament del formulari. ';
pot_tardar_un_poc+='Per favor, esperi a que aparegui la resposta a la pàgina i NO pitgi de nou el botó \'Envia Sol·licitud\' fins que acabi d\'enviar-se la informació. ';
pot_tardar_un_poc+='Aquest procés pot tardar des de segons fins a 10 minuts, depenent dels fitxers adjuntats, la grandària d\'aquests i la velocitat de la connexió a Internet que faci servir.';		


//FUNCTIONs que ya estaban
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 true
//		Sin filtros de caracteres en los campos de texto
//    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;
}


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 == "." ) || ( 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 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 );
		if (modString.length > 8) {
			return (isInteger(modString));
		} else {
    	return false;
		}
}

function isDNI (s)
{   
		var modString;
    if (isEmpty(s)) 
       if (isDNI.arguments.length == 1) return defaultEmptyOK;
       else return (isDNI.arguments[1] == true);
    modString = stripCharsInBag( s, DNIChars )
    if (modString.length == 8) {
			return (isInteger(modString));
		} else {
    	return false;
		}
}

function isNIF (s)
{   
	var n1,l;
	var lletresNIF="TRWAGMYFPDXBNJZSQVHLCKE";
    
	//Comprobamos que se concuerda con el formato de NIF
	s=s.toUpperCase();
	s=s.replace(/([^A-Z0-9])*/g,"");
	if(!(/^[0-9]{8}[A-Z]{1}$/.test(s))){
		return false;	
	}


	//Comprobamos que la letra sea correcta
	n1=s.substr(0,8);
	n1 = n1 % 23;
	if(lletresNIF.substr(n1,1)==s.substr(8,1)){
		return true;
	}else{
		return false;	
	}
}

function isNIE (s)
{   
	var n1,l;
	var lletresNIF="TRWAGMYFPDXBNJZSQVHLCKE";

	//Comprobamos que se concuerda con el formato de NIE
	s=s.toUpperCase();
	s=s.replace(/([^A-Z0-9])*/g,"");
	if(!(/^[XYZ]{1}[0-9]{7}[A-Z]{1}$/.test(s))){
		return false;	
	}
	l=s.substr(0,1);
	//Comprobamos que la letra sea correcta
	n1=parseInt(s.substr(1,7),10);
	if(l=="Y"){
		n1=n1+10000000;
	}else if(l=="Z"){
		n1=n1+20000000;
	}
	n1 = n1 % 23;
	if(isNaN(n1) || lletresNIF.substr(n1,1)!=s.substr(8,1)){
		return false;				
	}else{
		return true;
	}
	return false;
}

function isSelected (s)
{
  return true;
}

function isNice(s)
{
        var i = 0;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" )) b = 0;
                i++;
        }
        return b;
}

function warnInvalid (theField, s)
{   
   	if (elprimero == '') {
		  elprimero = 'Ya no';
			hayqueponerseen = theField;
		}
    msg_final += '\n- '+s;
    return false;
}

function checkField (theField, theFunction, emptyOK, s, s_extra)
{   
    var msg;
		var msg_extra;
		
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length > 3) {
        msg = s;
    }

//		Mira que en una cadena de texto no haya una doble comilla o comilla simple.
//		No lo usamos
//
//    if ( checkNiceness && !isNice(theField.value)) {
//    		msg = 'El campo "'+theField.id+'" no admite comillas.';
//        return warnInvalid(theField, msg);
//		}

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

    if ((emptyOK == false) && (isEmpty(theField.value))) {
     	  return warnInvalid(theField, msg);
		}

		if (theFunction(theField.value) == true) {
				return true;
		} else {
				if (elprimero == '') {
					elprimero = 'Ya no';
					//alert (theField);
					hayqueponerseen = theField;
				}
				msg_extra = s_extra;
				msg = msg_extra;
				msg_final += '\n- '+msg;
				return false;
		}
		
}

function analisis_data (any,data) {
	alert (data.charAt(0));
}


//FUNCTIONs que he puesto yo
function isMajor2 (s)
{
  if (s<=2) {
		return false;
	} else {
		return true;
	}
}

function isDistintoCero (s)
{
  if (s!=0) {
		return true;
	} else {
		return false;
	}
}

function isDistintoVacio (s)
{
  if (s!='') {
		return true;
	} else {
		return false;
	}
}

function isChecked (s)
{
	
  if (s=='n') {
		return false;
	} else {
		return true;
	}
}


function isCP (s)
{   
    if (isEmpty(s)) 
       if (isCP.arguments.length == 1) return defaultEmptyOK;
       else return (isCP.arguments[1] == true);
    if (s.length == 5) {
			return (isInteger(s));
		} else {
    	return false;
		}
}

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 es_dia_valid(dia,mes)
{
return (parseInt(dia)>0 && parseInt(dia)<=diesenelmes[mes - 1]) ? 1 : 0 //Si "dia" esta entre 1 y los dias que tiene el mes "Month" devuelve verdadero si no devuelve falso
}

function verificar_data (formulari,nomdia,nommes,nomany) {
	
		for (var i=0; i<formulari.elements.length; i++) {
			if ( formulari.elements[i].name == nomdia ) {
				var dia = formulari.elements[i].value;
				var diai = i;
			} else if ( formulari.elements[i].name == nommes ) {
				var mes = formulari.elements[i].value;
				var mesi = i;
			} else if ( formulari.elements[i].name == nomany ) {
				var any = formulari.elements[i].value;
				var anyi = i;
			}
		}
		
		if ((dia!=0) && (mes!=0) && (any!=0)) {
		
			var bixest = 1;
			var totcorrecte = 1;
		
			var diesenelmes = new Array()
			diesenelmes[0] = 31; //Els dies de Gener
			diesenelmes[1] = 0; //Els dies de Febrer es calculen més envant per si l'any es bixest
			diesenelmes[2] = 31; //Els dies de Març
			diesenelmes[3] = 30; //Els dies de Abril
			diesenelmes[4] = 31; //Els dies de Maig
			diesenelmes[5] = 30; //Els dies de Juny
			diesenelmes[6] = 31; //Els dies de Juliol
			diesenelmes[7] = 31; //Els dies de Agost
			diesenelmes[8] = 30; //Els dies de Setembre
			diesenelmes[9] = 31; //Els dies de Octubre
			diesenelmes[10] = 30; //Els dies de Novembre
			diesenelmes[11] = 31; //Els dies de Desembre
			
			if ((any % 4 == 0 && any % 100 != 0) || (any % 400 == 0)) { // Si "any" es un any bixest retorna TRUE, en cas contrari, FALSE
				diesenelmes[1] = 29;
			} else {
				diesenelmes[1] = 28;
			}
			
			if ((dia>0) && (dia <= diesenelmes[mes - 1])) {  //Si "dia" està entre 1 i el dies que té el mes "mes" retorna TRUE, en cas contrari, FALSE
				return;
			} else {
				formulari.elements[diai].value=diesenelmes[mes-1];
				return;
			}
		}
}

function isNumTarj (s)
{   
		var modString;
    if (isEmpty(s)) 
       if (isNumTarj.arguments.length == 1) return defaultEmptyOK;
       else return (isNumTarj.arguments[1] == true);
    modString = stripCharsInBag( s, NumTarjChars )
		return (isInteger(modString));
}

function isSize (s)
{   
	var grandaria_desitjada = 8;
    if (s.length<grandaria_desitjada) {
       return false;
	} else {
	   return true;
	}
}