// JavaScript per la convalida lato client di moduli
//ovviamente la verifica è fatta anche sul server

function convalida(of) {
	// Controlla se l'albero DOM è disponibile e se c'è un campo required
	if(!document.getElementById || !document.createTextNode){return;}
	if(!document.getElementById('required')){return;}

	// Settaggio dei messaggi di errore ed explode della stringa dei campi obbligatori
	var errorID='errormsg';
	var errorClass='error'
	var errorMsg='Errore di compilazione. Controlla i campi contrassegnati con ';
	var errorImg='images/alert.gif';
	var errorAlt='Errore';
	var errorTitle='Questo campo ha generato un errore';
	var reqfields=document.getElementById('required').value.split(',');

	// Cerca e cancella gli eventuali precedenti messaggi di errore
	// se c'è un campo con un messaggio di errore precedente lo cancella
	if(document.getElementById(errorID)) {
		var em=document.getElementById(errorID);
		em.parentNode.removeChild(em);
	}
	// cancella l'icona e lo stile per il campo che ha generato errore in precedenza
	for(var i=0;i<reqfields.length;i++) {
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		if(f.previousSibling && /img/i.test(f.previousSibling.nodeName)) {
			f.parentNode.removeChild(f.previousSibling);
		}
		f.className='';
	}
	// cicla sui campi obbligatori
	for(var i=0;i<reqfields.length;i++) {
		// controlla se ci sono gli obbligatori
		var f=document.getElementById(reqfields[i]);
		if(!f){continue;}
		// controlla eventuali errori in accordo con il tipo di input
		switch(f.type.toLowerCase()) {
			case 'text':
				if(f.value=='' && f.id!='email'){cf_adderr(f)}							
				// controlla il campo email
				if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f)}							
				break;
			case 'textarea':
				if(f.value==''){cf_adderr(f)}							
				break;
			case 'radio':
				if(!f.checked){cf_adderr(f)}							
				break;
			case 'select-one':
				if(!f.selectedIndex && f.selectedIndex==0){cf_adderr(f)}							
				break;
		}
	}
	return !document.getElementById(errorID);

	function cf_adderr(o) {
		// "crea" l'icona, la aggiunge al campo obbligatorio mancante e applica lo stile
		var errorIndicator=document.createElement('img');
		errorIndicator.alt=errorAlt;
		errorIndicator.src=errorImg;
		errorIndicator.title=errorTitle;
		o.className=errorClass;
		o.parentNode.insertBefore(errorIndicator,o);

		// controlla se non ci sono messaggi di errore
		if(!document.getElementById(errorID)) {
			// crea il messaggio di errore un un div ausiliario e lo prepone al submit
			var em=document.createElement('div');
			em.id=errorID;
			var newp=document.createElement('p');
			newp.appendChild(document.createTextNode(errorMsg))
			newp.appendChild(errorIndicator.cloneNode(true));
			em.appendChild(newp);
			// trova il submit
			for(var i=0;i<of.getElementsByTagName('input').length;i++) {
				if(/submit/i.test(of.getElementsByTagName('input')[i].type)) {
					var sb=of.getElementsByTagName('input')[i];
					break;
				}
			}
			if(sb) {
				sb.parentNode.insertBefore(em,sb);
			}	
		} 
	}
	// macchina che controlla il campo email
	function cf_isEmailAddr(str) {
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
}
