/****************************************************************

jsForm.js vers. 020110
Script by support@gruppo4.com - http://www.gruppo4.com
You can use this code if you leave this message

history:
versione 000818 = prima release
versione 000916 = modificata per accettare l'evento onSubmit dal tag form
versione 001004 = aggiunti i moduli VALID PIVA e TOO LONG
versione 010703 = aggiunto il parametro lang alla funzione
versione 020110 = aggiunti il moduli NO BAD CHAR

****************************************************************/

/****************************************************************
	CONTROLLO FORM
****************************************************************/

function controllaForm(formElm,lang){

if (lang==null) {lang="ita"}

if (lang=="ita") {
/*	definizione dei messaggi di alert*/
	var alrtMsg = "ATTENZIONE!"
	var msg1 = "\rIl campo: "
	var msg2 = "\rI campi: "
	var mbMsg1 = ", non e' stato compilato!"
	var mbMsg2 = ", non sono stati compilati!"
	var vmMsg1 = ", contiene dati non validi!"
	var vmMsg2 = ", contengono dati non validi!"
	var oiMsg1 = ", puo' contenere solo numeri!"
	var oiMsg2 = ", possono contenere solo numeri!"
	var tlMsg1 = ", contiene troppi caratteri!"
	var tlMsg2 = ", contengono troppi caratteri!"
}

else if (lang=="eng") {
/*	definizione dei messaggi di alert*/
	var alrtMsg = "ATTENTION PLEASE!"
	var msg1 = "\rThe field: "
	var msg2 = "\rThe fields: "
	var mbMsg1 = ", must be compiled!"
	var mbMsg2 = ", must be compiled!"
	var vmMsg1 = ", contains not valid data!"
	var vmMsg2 = ", contain not valid data!"
	var oiMsg1 = ", must contain only numbers!"
	var oiMsg2 = ", must contain only numbers!"
	var tlMsg1 = ", contains too many characters!"
	var tlMsg2 = ", contain too many characters!"
}

/*	definizione delle variabili e richiamo dei loro valori*/
	mustBeList = ""
	mustBeNameList = ""
	validMailList = ""
	validMailNameList = ""
	noBadCharList = ""
	noBadCharNameList = ""
	onlyIntegerList= ""
	onlyIntegerNameList = ""
	validCFList = ""
	validCFNameList = ""
	validPivaList = ""
	validPivaNameList = ""
	tooLongList = ""
	tooLongNameList = ""
	tooLongLengthList = ""

	getString()

/****************************************************************
	MODULO MUST BE
****************************************************************/

	if (mustBeList != "") {

/*	creazione degli array*/
	mustBeArray = mustBeList.split(",");
	mustBeNameArray = mustBeNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, nome unico, contenuti in mustBeList)*/

	var tempName = ""

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].name!=tempName)&&(mustBeList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
		var tempName = formElm[i].name
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in mustBeArray e in mustBeNameArray*/
		for (k = 0; k < mustBeArray.length; k++) {
			if (mustBeArray[k]==formElm[i].name) {j=k}
		}
/*	se il campo e' vuoto ed e' di tipo testo, password, area di testo, file upload*/
		if((formElm[i].value=="")&&((formElm[i].type=="text")||(formElm[i].type=="password")||(formElm[i].type=="textarea")||(formElm[i].type=="file"))) {
			tempNameArray[n] = mustBeNameArray[j];n+=1;
		}
/*	se il campo e' di tipo select ed ha value =""*/
		if((formElm[i].type=="select-one")&&(formElm[i].options[formElm[i].selectedIndex].value =="")) {
			tempNameArray[n] = mustBeNameArray[j];n+=1;
		}
/*	se il campo e' di tipo checkbox o radiobutton*/
		if((formElm[i].type=="checkbox")||(formElm[i].type=="radio")) {
			var checkMyCheck = false
			for (c = 0; c < formElm[formElm[i].name].length; c++) {
				if (formElm[formElm[i].name][c].checked=="1"){checkMyCheck = true}
			}
			if (checkMyCheck == false){tempNameArray[n] = mustBeNameArray[j];n+=1;}
		}
	}

/*	se il loop del modulo mustBe ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + mbMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + mbMsg2);}
	}
	}

/****************************************************************
	MODULO VALID MAIL
****************************************************************/

	if (validMailList != "") {

/*	creazione degli array*/
	validMailArray = validMailList.split(",");
	validMailNameArray = validMailNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, non vuoto, contenuto in validMailList)*/

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].value!="")&&(validMailList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in validMailArray e in validMailNameArray*/
		for (k = 0; k < validMailArray.length; k++) {
			if (validMailArray[k]==formElm[i].name) {j=k}
		}

/*	il campo deve contenere solo caratteri validi*/
		var validate = true
		var badChars = " /:,;"
			for (c=0; c<badChars.length; c++) {
			badChar = badChars.charAt(c)
			if (formElm[i].value.indexOf(badChar,0) > -1) {validate = false}
		}
/*	deve contenere una e una sola @*/
		atPos = formElm[i].value.indexOf("@",1)
		if (atPos == -1) {validate = false}
		if (formElm[i].value.indexOf("@",atPos+1) != -1) {validate = false}
/*	dopo la @ un solo "." e almeno due caratteri*/
		dotPos = formElm[i].value.indexOf(".",atPos)
		if (dotPos == -1) {validate = false}
			if (dotPos+3 > formElm[i].value.length) {validate = false}

		if (validate==false){tempNameArray[n] = validMailNameArray[j];n+=1;}
	}

/*	se il loop del validMail be ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + vmMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + vmMsg2);}
	}
	}

/****************************************************************
	MODULO NO BAD CHAR
****************************************************************/

	if (noBadCharList != "") {

/*	creazione degli array*/
	noBadCharArray = noBadCharList.split(",");
	noBadCharNameArray = noBadCharNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, non vuoto, contenuto in noBadCharList)*/

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].value!="")&&(noBadCharList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in noBadCharArray e in noBadCharNameArray*/
		for (k = 0; k < noBadCharArray.length; k++) {
			if (noBadCharArray[k]==formElm[i].name) {j=k}
		}
/*	il campo deve contenere solo caratteri validi*/

		var goodChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.~~_-"
		var validate = true

		for (c=0; c<formElm[i].value.length; c++) {
			filechar = formElm[i].value.charAt(c)
			if (goodChar.indexOf(filechar,0) == -1) {validate = false}
		}

		if(validate == false) {
			tempNameArray[n] = noBadCharNameArray[j];n+=1;
		}
	}

/*	se il loop del modulo noBadChar ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + vmMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + vmMsg2);}
	}
	}

/****************************************************************
	MODULO ONLY INTEGER
****************************************************************/

	if (onlyIntegerList != "") {

/*	creazione degli array*/
	onlyIntegerArray = onlyIntegerList.split(",");
	onlyIntegerNameArray = onlyIntegerNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, non vuoto, contenuto in onlyIntegerList)*/

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].value!="")&&(onlyIntegerList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in onlyIntegerArray e in onlyIntegerNameArray*/
		for (k = 0; k < onlyIntegerArray.length; k++) {
			if (onlyIntegerArray[k]==formElm[i].name) {j=k}
		}
/*	se il campo non contiene solo numeri interi*/
		if(isNaN(formElm[i].value)) {
			tempNameArray[n] = onlyIntegerNameArray[j];n+=1;
		}
	}

/*	se il loop del modulo onlyInteger ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + oiMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + oiMsg2);}
	}
	}

/****************************************************************
	MODULO VALID CF
****************************************************************/

	if (validCFList != "") {

/*	creazione degli array*/
	validCFArray = validCFList.split(",");
	validCFNameArray = validCFNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, non vuoto, contenuto in validCFList)*/

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].value!="")&&(validCFList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in validCFArray e in validCFNameArray*/
		for (k = 0; k < validCFArray.length; k++) {
			if (validCFArray[k]==formElm[i].name) {j=k;}

		}

/*	il campo deve contenere 16 caratteri*/
		var validate = true
		if (formElm[i].value.length!=16) {validate = false;}
		else {

/*	verifica del carattere di controllo*/

			var alfa = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
			var numb = "0123456789"
			var disp = "1,0,5,7,9,13,15,17,19,21,2,4,18,20,11,3,6,8,12,14,16,10,22,25,24,23"
			var cc=0

			for (c=0; c<(formElm[i].value.length-1); c++) {
				mod2 = (c%2)
				isAlfa = (isNaN(formElm[i].value.charAt(c)))
				cfChar= formElm[i].value.charAt(c).toUpperCase()
				switch (mod2) {
					case 0:
						switch (isAlfa) {
							case true: cc+=parseInt(disp.split(",")[alfa.indexOf(cfChar)]);break;
							case false: cc+=parseInt(disp.split(",")[numb.indexOf(cfChar)]);break;
						};
					break;
					case 1:
						switch (isAlfa) {
							case true: cc+=parseInt(alfa.indexOf(cfChar));break;
							case false: cc+=parseInt(numb.indexOf(cfChar));break;
						};
					break;
				}
			}
			if (cc%26!=alfa.indexOf(formElm[i].value.charAt(15).toUpperCase())) {validate = false;}
		}
			if (validate==false){tempNameArray[n] = validCFNameArray[j];n+=1;}
	}

/*	se il loop del validCF ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + vmMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + vmMsg2);}
	}
	}

/****************************************************************
	MODULO VALID PIVA
****************************************************************/

	if (validPivaList != "") {

/*	creazione degli array*/
	validPivaArray = validPivaList.split(",");
	validPivaNameArray = validPivaNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, non vuoto, contenuto in validPivaList)*/

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].value!="")&&(validPivaList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in validPivaArray e in validPivaNameArray*/
		for (k = 0; k < validPivaArray.length; k++) {
			if (validPivaArray[k]==formElm[i].name) {j=k}
		}
/*	se il campo non contiene 11 cifre e solo cifre */
		if ((formElm[i].value.length!=11)) {
			tempNameArray[n] = validPivaNameArray[j];n+=1;
		}
	}

/*	se il loop del modulo validPiva ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + vmMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + vmMsg2);}
	}
	}

/****************************************************************
	MODULO TOO LONG
****************************************************************/

	if (tooLongList != "") {

/*	creazione degli array*/
	tooLongArray = tooLongList.split(",");
	tooLongLengthArray = tooLongLengthList.split(",")
	tooLongNameArray = tooLongNameList.split(",")

	tempArray = new Array()
	tempNameArray = new Array()
	var e = 0
	var n = 0

/*	loop su tutti i form.elements per popolare il tempArray
	(nome esistente, non vuoto, contenuto in tooLongList)*/

	for (i = 0; i < formElm.length; i++) {
		if ((formElm[i].name!="")&&(formElm[i].value!="")&&(tooLongList.indexOf(formElm[i].name)!=-1)) {
			tempArray[e]=i; e= e+1;
		}
	}

/*	loop su tempArray*/
	for (e = 0; e < tempArray.length; e++) {
		i=tempArray[e]

/*	per ogni elemento si individua la posizione 'j' in tooLongArray e in tooLongNameArray*/

		for (k = 0; k < tooLongArray.length; k++) {
			if (tooLongArray[k]==formElm[i].name) {j=k;}
		}
/*	se il campo contiene un numero di caratteri maggiore di*/

		if(formElm[i].value.length>tooLongLengthArray[j]) {
			tempNameArray[n] = tooLongNameArray[j];n+=1;
		}
	}

/*	se il loop del modulo tooLong ha trovato errori*/
	if (tempNameArray.length!=0){
		if(tempNameArray.length==1) {alrtMsg += (msg1 + tempNameArray.join(", ") + tlMsg1);}
		else {alrtMsg += (msg2 + tempNameArray.join(", ") + tlMsg2);}
	}
	}

/****************************************************************
	CHIUSURA DELLA FUNZIONE
****************************************************************/

/*se ci sono errori mostra l'alert, altrimenti facciamo il submit della form*/
	if (alrtMsg!="ATTENZIONE!") {
		alert (alrtMsg)
		return false
		}
}
