
/*
 * SCRIPT DE VALIDACIO DE ELEMENTS
 * D UN FORMULARI I DE FUNCIONS D UTILITAT
 * David Lopez
 * 01/08/2009
 */

/*
 * FUNCIO DE VALIDACIO DEL LOGIN
 */
function isValidLogin(login) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// El login ha de ser un conjunt de caracters
	// en minuscula i sense espais, amb una longitud
	// maxima de 10 caracters
	var RElogin = /^[a-z][a-z0-9]{4,9}$/;
	if (login.search(RElogin) == -1) {
		// No coincideix amb l'expressio regular
		isOk = false;
	}
	return isOk;
}

/*
 * FUNCIO DE VALIDACIO D'UNA PASSWORD:
 */
function isValidPassword(password) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// La password ha de ser un conjunt de caracters
	// amb una longitud minima de 6 caracters
	var REtext = /^\s+$/;
	if ((password == "") || (password.search(REtext) != -1)) {
		isOk = false;
	}
        if (isOk) {
            // Comprovem que té una longitud minima de 6
            if (password.length < 6) isOk = false;
        }
	return isOk;
}

/*
 * FUNCIO DE VALIDACIO D'UN CAPTCHAR
 */
function isValidCaptchar(captchar) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// El captchar es un conjunt de 5 caracters amb numeros
	var REcaptchar = /^[a-zA-Z0-9]{5}$/;
	if (captchar.search(REcaptchar) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * VALIDACIO D UN CAMP DE TEXT
 * QUE NO HA D ESTAR BUIT
 */
function isValidText(text) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per a no buit
	var REtext = /^\s+$/;
	if ((text == "") || (text.search(REtext) != -1)) {
		isOk = false;
	}
	return isOk;
}
/*
 * FUNCIO PER A VALIDAR UN VALOR NUMERIC ENTER
 */
function isValidNum(num) {
	// Intentarem passar el numero a 
	// Enter i comprovarem si hi ha error o no
	var isOk = true;
	num=parseInt(num);
	if (isNaN(num)) {
		isOk=false;
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR UN VALOR NUMERIC FLOTANT
 */
function isValidFloat(num) {
	// Intentarem passar el numero a 
	// Flotant i comprovarem si hi ha error o no
	var isOk = true;
	num=parseFloat(num);
	if (isNaN(num)) {
		isOk=false;
	}
	return isOk;
}

/*
 * VALIDACIO DEL EMAIL
 */
function isValidEmail(email) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al email
	var REemail = /^[a-zA-Z]\w*([.-]?\w+)*@[a-zA-Z0-9]\w*([.-]?\w+)*\.[a-zA-Z]{2,3}$/;
	if (email.search(REemail) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * VALIDACIO DE REFERENCIA VNG
 */
function isValidReferenciaVNG(referencia) {
    // Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al email
	var REreferencia = /^[a-z][0-9]{9}$/;
	if (referencia.search(REreferencia) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * VALIDACIO DE CONTROLADOR VNG
 */
function isValidControladorVNG(controlador) {
	var isOk = true;
	var REcontrolador = /^[0-9]{3}$/;
	if (controlador.search(REcontrolador) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * VALIDACIO D'UNA HORA EN FORMAT HH:MM
 */
function isValidHora(hora) {
	// Farem la comprovacio fent servir
	// expressions regulars i comprovant
	// les dades enviades
	var isOk = true;
	// Expressio regular de l'hora
	var REhora = /^[0-2]{0,1}[0-9]:[0-5][0-9]$/;
	if (hora.search(REhora) == -1) {
		isOk = false;
	}
	if (isOk) {
		// Dividim pels dos punts
		separacio = hora.split(':');
		hora = parseInt(separacio[0]);
		minut = parseInt(separacio[1]);
		if ((hora > 23) || (hora < 0)) isOk = false;
		if ((minut < 0) || (minut > 59)) isOk = false;
	}
	return isOk;
}

/*
 * VALIDACIO DE LA DATA
 * AMB FORMAT: DD/MM/AAAA
 */
function isValidDataF1(data) {
	// Farem la comprovacio fent servir
	// expressions regulars i despres 
	// accedint al calendari
	var isOk = true;
	// Expressio Regular per a la data
	var REdata = /^[0-3][0-9]\/[01][0-9]\/[12][0-9][0-9][0-9]$/;
	if (data.search(REdata) == -1) {
		isOk = false;
	} else {
		// Ara hem de comprovar que els valors introduits son correctes
		var diesMesos = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		var parts = data.split("/");
		var dia = parts[0];
		var mes = parts[1];
		var any = parts[2];
		if (dia.charAt(0) == "0") dia = dia.charAt(1);
		if (mes.charAt(0) == "0") mes = mes.charAt(1);
		// Fem les transformacions a enters
		dia = parseInt(dia);
		mes = parseInt(mes);
		any = parseInt(any);
		if ((dia == 0) || (mes == 0) || (mes > 12)) {
			isOk = false;
		} else {
			// Comprovem si l any es de TRASPAS
			if ( ((any%4==0) && (any%100 != 0)) || (any%400==0) ) diesMesos[1] = 29;
			// Comprovem que els dies son correctes
			if (dia > diesMesos[mes-1]) {
				isOk = false;
			}
		}
	}
	return isOk;
}

/*
 * VALIDACIO DE LA DATA
 * AMB FORMAT: DD-MM-AAAA
 */
function isValidDataF2(data) {
	// Farem la comprovacio fent servir
	// expressions regulars i despres 
	// accedint al calendari
	var isOk = true;
	// Expressio Regular per a la data
	var REdata = /^[0-3][0-9]\-[01][0-9]\-[12][0-9][0-9][0-9]$/;
	if (data.search(REdata) == -1) {
		isOk = false;
	} else {
		// Ara hem de comprovar que els valors introduits son correctes
		var diesMesos = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		var parts = data.split("-");
		var dia = parts[0];
		var mes = parts[1];
		var any = parts[2];
		if (dia.charAt(0) == "0") dia = dia.charAt(1);
		if (mes.charAt(0) == "0") mes = mes.charAt(1);
		// Fem les transformacions a enters
		dia = parseInt(dia);
		mes = parseInt(mes);
		any = parseInt(any);
		if ((dia == 0) || (mes == 0) || (mes > 12)) {
			isOk = false;
		} else {
			// Comprovem si l any es de TRASPAS
			if ( ((any%4==0) && (any%100 != 0)) || (any%400==0) ) diesMesos[1] = 29;
			// Comprovem que els dies son correctes
			if (dia > diesMesos[mes-1]) {
				isOk = false;
			}
		}
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR QUE UN RANG DE DATES ES CORRECTE
 * DE FET COMPROVAREM SI LA DATA INICIAL ES MES PETITA O IGUAL
 * QUE LA DATA FINAL
 */
function isValidRangData(diaI, mesI, anyI, diaF, mesF, anyF) {
	diaI = parseInt(diaI);
	mesI = parseInt(mesI);
	anyI = parseInt(anyI);
	diaF = parseInt(diaF);
	mesF = parseInt(mesF);
	anyF = parseInt(anyF);
	if (anyF < anyI) return false;
	if (anyF == anyI) {
		if (mesF < mesI) return false;
		if (mesF == mesI) {
			if (diaF < diaI) return false;
		}
		return true;
	}
	return true;
}


/*
 * FUNCIO PER A VALIDAR UN NUMERO DE TELEFON
 * (FORMAT NACIONAL SENSE ESPAIS - 999123123)
 */
function isValidTelefonF1(telefon) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al Telefon
	var REtelefon = /^\d{9}$/;
	if (telefon.search(REtelefon) == -1) {
		isOk = false;
	}
	return isOk;
}

/* FUNCIO PER A VALIDAR UN NUMERO DE TELEFON
 * (FORMAT INTERNACIONAL - (+34)999123123)
 */
function isValidTelefonF2(telefon) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al Telefon
	var REtelefon = /^\(\+\d{2,3}\)\d{9,10}$/;
	if (telefon.search(REtelefon) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR UN NUMERO DE TELEFON
 * (FORMAT INTERNACIONAL  - 00 34 99 912 31 23 o 00 34 999 12 31 23)
 */
function isValidTelefonF3(telefon) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al Telefon
	var REtelefon = /^00\s\d{2,3}\s\d{2,3}\s\d{2,3}\s\d\d\s\d\d$/;
	if (telefon.search(REtelefon) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR EL CODI POSTAL
 */
function isValidCp(cp) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al Codi Postal
	var REcp = /^[0-9]{5}$/;
	if (cp.search(REcp) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR UN ANY
 */
function isValidAny(any) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per l'any
	var REany = /^[12][0-9]{3}$/;
	if (any.search(REany) == -1) {
		isOk = false;
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR EL DNI
 */
function isValidDni(dni) {
	// Farem la comprovacio fent servir
	// expressions regulars
	var isOk = true;
	// Expressio Regular per al DNI
	var REdni = /^[0-9]{8}[a-zA-Z]$/;
	if (dni.search(REdni) == -1) {
		isOk = false;
	} else {
		// El format es correcte
		// Ara comprovem si la lletra ho es o no
		var Lletres = 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");
		var NumDni = dni.substring(0,dni.length-1);
		var LletraDni = dni.substring(dni.length-1, dni.length)
		NumDni = parseInt(NumDni);
		NumDni = NumDni % 23;
		LletraDni = LletraDni.toUpperCase();
		if (LletraDni != Lletres[NumDni]) isOk = false;
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR EL CIF
 */
function isValidCif(cif) {
	// Farem la comprovacio fent servir
	// expressions regulars i la codificacio
	var isOk = true;
	// Expressio Regular per al CIF
	var REcif = /^[ABCDEFGHKLMNPQS][0-9]{7}[0123456789ABCDEFGHIJ]$/;
	// Passem el CIF a majuscules
	cif = cif.toUpperCase();
	if (cif.search(REcif) == -1) {
		isOk = false;
	} else {
		// El format es correcte
		// Ara comprovem si la codificacio tambe ho es
		// Fragmentem el cif en les parts que necessitem
		var Lletra = cif.substring(0,1);
		var Provincia = cif.substring(1,3);
		var Numero = cif.substring(1,8);
		var Ultim = cif.substring(8,9)
		// Comprovem que la provincia es correcte
		// La pasem a enter
		Provincia = parseInt(Provincia);
		if ((Provincia < 1) || ((Provincia > 64) && (Provincia < 70)) || ((Provincia > 84) && (Provincia < 91)) || (Provincia > 99)) {
			// La provincia no es correcte
			isOk = false;
		} else {
			// Calculem el valor de la darrera lletra
			var Lletres = new Array("A","B","C","D","E","F","G","H","I","J");
			// Sumen el digits parells
			var Parells = 0;
			var num = Numero.substring(1,2);
			Parells = Parells + parseInt(num);
			num = Numero.substring(3,4);
			Parells = Parells + parseInt(num);
			num = Numero.substring(5,6);
			Parells = Parells + parseInt(num);
			// Ara manipulem els senars
			num = Numero.substring(0,1);
			num = 2 * parseInt(num);
			if (num < 10) num = "0" + num;
			num = num + "";
			var Senar1 = parseInt(num.substring(0,1)) + parseInt(num.substring(1,2));
			num = Numero.substring(2,3);
			num = 2 * parseInt(num);
			if (num < 10) num = "0" + num;
			num = num + "";
			var Senar2 = parseInt(num.substring(0,1)) + parseInt(num.substring(1,2));
			num = Numero.substring(4,5);
			num = 2 * parseInt(num);
			if (num < 10) num = "0" + num;
			num = num + "";
			var Senar3 = parseInt(num.substring(0,1)) + parseInt(num.substring(1,2));
			num = Numero.substring(6,7);
			num = 2 * parseInt(num);
			if (num < 10) num = "0" + num;
			num = num + "";
			var Senar4 = parseInt(num.substring(0,1)) + parseInt(num.substring(1,2));
			var Senars = Senar1 + Senar2 + Senar3 + Senar4;
			var Total = 10 - ((Parells + Senars) % 10);
			// Ara a Total tenim el valor del darrer caracter
			if ((Lletra == "K") || (Lletra == "P") || (Lletra == "Q") || (Lletra == "S")) {
				// Ha de ser una lletra
				if (Lletres[Total+1] != Ultim) isOk = false;
			} else if ((Lletra == "A") || (Lletra == "B") || (Lletra == "E") || (Lletra == "H")) {
				// Ha de ser un numero
				if (Total != Ultim) isOk = false;
			} else {
				// Pot ser lletra o numero
				if ((Total != Ultim) && (Lletres[Total+1] != Ultim)) isOk = false;
			}
		}
	}
	return isOk;
}

/*
 * FUNCIO PER A VALIDAR QUE S'HA TRIAT UNA OPCIO A UN SELECT
 */
function isSelectOk(sel) {
	// Farem una comprovacio simple.
	// Partim que un select no seleccionat es de value = 0
	var isOk = true;
	// Comprovacio
	if (sel.value == 0) {
		// La seleccio no s'ha fet
		isOk = false;
	}
	return isOk;
}


/*
 * FUNCIO PER A ELIMINAR ELS ESPAIS EN BLANC A
 * L INICI I AL FINAL D UN TEXT
*/
function trim(text) {
	// Eliminem espais inicial
	while (text.charAt(0) == " ") {
		text = text.substring(1,text.length);
	}
	// Eliminem espais finals
	while (text.charAt(text.length-1) == " ") {
		text = text.substring(0,text.length - 2);
	}
	return text;
}

/*
 * FUNCIO PER ELIMINAR ESPAIS INICIALS
 */
function lTrim(text) {
	// Eliminem espais inicial
	while (text.charAt(0) == " ") {
		text = text.substring(1,text.length);
	}
	return text;
}

/*
 * FUNCIO PER ELIMINAR ESPAIS FINALS
 */
function rTrim(text) {
	// Eliminem espais finals
	while (text.charAt(text.length-1) == " ") {
		text = text.substring(0,text.length - 2);
	}
	return text;
}

/*
 * FUNCIO PER A PASSAR UNA CADENA A MAJUSCULES
 */
function aMajuscules(cadena) {
	return cadena.toUpperCase();
}

/*
 * FUNCIO PER A PASSAR UNA CADENA A MINUSCULES
 */
function aMinuscules(cadena) {
	return cadena.toLowerCase();
}

/*
 * FUNCIO PER A CANVIAR L'ACTION D'UN FORMULARI
*/
function canviaAction(idForm,nouAction) {
	var Formulari = document.getElementById(idForm);
	Formulari.action=nouAction;
}

