var clickedButton = '';

var quanti=0;
	
function Quanti(elemento){
  if(elemento.checked){
      quanti += 1;
  }else{
      quanti -= 1;
  }
}

function disevidenziaCustomerSatisfaction(form1){
	
	var lg1 = form1.elements.length;
			
	for(var y=0; y<lg1; y++) {
				
		var ele = form1.elements[y];
			
		document.getElementById( ele.name );
	}
}

function SetAllCheckBoxes(FormName, FieldName, CheckValue){

	if(!document.forms[FormName]) return;
	
	var objCheckBoxes = document.forms[FormName].elements[FieldName];
	
	if(!objCheckBoxes) return;
	
	var countCheckBoxes = objCheckBoxes.length;
		
	if(!countCheckBoxes){
		objCheckBoxes.checked = CheckValue;
		quanti=objCheckBoxes;
	}else{
		// set the check value for all check boxes
		for(var i = 0; i < countCheckBoxes; i++){
			objCheckBoxes[i].checked = CheckValue;
			if(CheckValue) Quanti(objCheckBoxes[i]);
		}
	}
	
	if(!CheckValue) quanti=0;
}

function popup(apri) {
	var stile = "top=10, left=10, width=900, height=700, resizable=yes";
	window.open(apri, "", stile);
}

function popup_eventi(apri) {
	var stile = "top=10, left=10, width=900, height=700, resizable=yes, scrollbars=yes";
	window.open(apri, "", stile);
}

function popup2(apri) {
	var stile = "top=10, left=10, width=400, height=500, resizable=yes";
	window.open(apri, "", stile);
}

function indirizzoEmailValido(indirizzo) {
  if (window.RegExp) {
    var nonvalido = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
    var valido = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
    var regnv = new RegExp(nonvalido);
    var regv = new RegExp(valido);
    if (!regnv.test(indirizzo) && regv.test(indirizzo))
      return true;
    return false;
	}
  else {
    if(indirizzo.indexOf("@") >= 0)
      return true;
    return false;
  	}
}

function checkPartecipante(index){
 		
	var np= 'nomep'+index;
	var vnp = window.document.getElementById(np).value;
	
	var mp = 'mailp'+index;
	var vmp = window.document.getElementById(mp).value;
	
	if((vnp=="" && vmp!="") || (vnp!="" && vmp=="")){
	 	alert("Verifichi che il partecipante numero "+(index+1)+" abbia validato sia il nome che la mail");
	 	return false;
	}else{
	 	if(vnp!="" && vmp!=""){
			if(!indirizzoEmailValido(vmp)){
				alert("La mail del partecipante numero "+(index+1)+" risulta non essere valida");
				return false;
			}
		}
	}
	
	return true;
}

function checkIscrizioneEvento(nomeform){
  
	if(!validateForm(nomeform)) return false;
		
	for(var i=0; i<5; i++) {
		if(!checkPartecipante(i)) return false; 
	}
 	return true;
}

function checkRichiestaDemoForm(nomeForm) {

	return validateForm(nomeForm);

}

function checkRichiestaDownload(nomeform){
	
	if(!validateForm(nomeform)) return false;
		
	if (document.evForm.confirm.checked == false){
		alert("E' necessario autorizzare il trattamento dei propri dati personali.");
		return false;
	}
	 		 
	return true;
}

function confermaCancella(){
	
	var agree = confirm("Confermi la cancellazione?");
	
	if(agree){
		return true;
	}else{
		return false;	
	}
}

function confermaCambioLogin(){
	
	var agree = confirm("Confermando questa operazione uscirai dalla tua area riservata per accedere a quella del cliente. Verificare di aver salvato i dati del cliente prima di confermare.");
	
	if(agree){
		return true;
	}else{
		return false;	
	}
}

function replaceVirgolaInPunto(cifra){
	
	cifra = cifra.replace(",",".");
	return (cifra);

}

function checkCustomerSatisfaction(form_name){

	var form0 = document.forms[form_name];

	var lg = form0.elements.length;
		
	for(var t=0; t<lg; t++) {
			
		var el = form0.elements[t];
		
		var sub= el.name.substring(5,0);
				
		if(sub == "risp_"){
		 
		 	if(el.type!="radio"){
		 	 
				var valore = el.value;
			
				if(valore.length>0) {
				 
				 	//alert("nome "+el.name+" valore "+valore);
				
					if(isNaN(valore)) {
											
						alert("Verificare che tutti i dati inseriti siano numerici");
				
						return false;	
				
					}else{
							 	
				 		if(valore<0 || valore>5){
				 	 					 	 						
							alert("Verificare che tutti i numeri inseriti siano compresi tra 0 e 5");
				 			
						 	return false;					 
						}
					}				
				}
			}
		}
	}
	
	//ritorno true se il controllo � andato a buon fine
	return true;
}

function replaceSpecialChars(key){
 
 	key = key.replace(/\ /g,"_");
 	key = key.replace(/\?/g,"_");
	key = key.replace(/\&/g,"_");
 	key = key.replace(/\$/g,"_");
 	
 	key = key.replace(/\�/g,"a");
 	key = key.replace(/\�/g,"u");
	key = key.replace(/\�/g,"e");
 	key = key.replace(/\�/g,"e");
 	
 	key = key.replace(/\+/g,"_");
 	key = key.replace(/\,/g,"_");
	key = key.replace(/\:/g,"_");
 	key = key.replace(/\;/g,"_");
 	key = key.replace(/\�/g,"_");
 	key = key.replace(/\*/g,"_");
 	
 	key = key.replace(/\@/g,"at");
 	key = key.replace(/\#/g,"_");
	key = key.replace(/\%/g,"_");
 	key = key.replace(/\^/g,"_");
 	key = key.replace(/\`/g,"_");
 	key = key.replace(/\�/g,"_");
 	key = key.replace(/\'/g,"_");
 	
	key = key.replace(/\{/g,"_");
 	key = key.replace(/\}/g,"_");
	key = key.replace(/\|/g,"_");
 	key = key.replace(/\[/g,"_");
 	key = key.replace(/\]/g,"_");
 	key = key.replace(/\(/g,"_");
	key = key.replace(/\)/g,"_");
			
	return (key);
}

function replaceOrario(ora, descr, id){
 
 	//creo un array con i caratteri speciali da considerare
 	a = new Array(",", ":", ";", "-", "_", "/");
 
 	//recupero la lunghezza dell'array
 	var l = a.length;
 	
 	//per ogni carattere speciale eventuale lo rimpiazzo con un punto
 	for(var i=0; i<l; i++){
		ora = ora.replace(a[i],".");
	}
	
	//recupero la posizioine del punto
	var p = ora.indexOf(".");
	
	//se il punto � presente in una posizione diversa dalla prima o dall'ultima
	if(p>0 && p<ora.length-1){
	 	 
	 	//recupero l'ora come la sottostringa formata da caratteri che vanno da 0 alla posizione del punto
		var hh = ora.substring(0, p);
		
		//se il campo orario non � un numero o � maggiore di 23, segnala errore
		if(isNaN(hh) || hh>23){
			alert("Le ore digitate per il campo "+descr+"\nnon risultano essere valide. Si prega di verificare.");
			this.document.style="color: #FF0000; font-family: Verdana; font-weight: bold; font-size: 14px; background-color: #FFFF66;";
			return false;
		}
		
		var hours = "";
		
		//se il campo orario � minore di 10 aggiungi 0 prima della prima cifra
		if(hh<10 && hh.length<2){
		  hours = "0"+hh.toString();
	 	}else{
	 	  hours = hh.toString();
	 	}
	 	 	
	 	//recupero il campo con i minuti
	 	var min = ora.substring(p+1, ora.length);
	 	
	 	//verifico correttenza campo minuti
	 	if(isNaN(min) || min>59){
			alert("I minuti digitati per il campo "+descr+"\nnon risultano essere validi. Si prega di verificare.");
			return false;
		}
		
		var minutes = "";
					 	
	 	//se i minuti sono inferiori a 10 aggiungo 0 prima della prima cifra
		if(min<10 && min.length<2){
			minutes = "0"+min.toString();
		}else{
		 	minutes = min.toString();
		}
			
		var ok = hours+"."+minutes;
		
		return ok;
		
	}else{
	 
	 	//se invece non � contenuto il punto
	 
	 	//verifico se � possibile ricavare l'ora
	 	if(ora.length>0 && !isNaN(ora) && ora<24){
	 		//se il campo orario � 1
		  	if(ora.length==1) return "0"+ora+".00";
		  	else{
				if(ora.length==2) return ora+".00";
			}	  
	 	}	 
	 	
	 	alert("Il campo "+descr+" risulta non essere valido.\nIl formato corretto con cui indicare i campi orari e';\nhh.mm");
	 	return false;
	 	
	}
}

function setMyButton(bottone, hidden, valore){
	clickedButton = bottone;
	document.prospettoOre.codiceprospetto.value = valore;
	document.prospettoOre.submit();
	
	return true;
}

function setActivityModifyButton(val, idattivita, idcommessa){
 	
	clickedButton = val;
 	window.document.getElementById('idattivita').value = idattivita;

	return true;
}

//funzione chiamata quando si richiede di cancellare un'attivita creata
//function: setActivityDeleteButton
//params: val; nome del bottone che � stato cliccato
//		  indice_activity; indice all'interno dell'array di sessione, dell'attivita da cancellare
//		  id_commessa; codice della commessa
//		  id_activity; codice dell'attivita da cancellare	  
function setActivityDeleteButton(val, indice_activity, id_commessa, id_activity){
 
 	var agree = confirm("Confermi la cancellazione del'attivita?");
 
 	//se � stata confermata la cancellazione
 	if(agree){
		clickedButton = val;
		if(id_activity!=''){
			window.document.getElementById('idattivita').value = id_activity;
		}else{
			window.document.getElementById('indiceattivita').value = indice_activity;
		}
		if(id_commessa!=''){
			window.document.getElementById('idcommessa').value = idcommessa;
	 	}
		return true;
	}else{
		return false;
	}
}

function setContractModifyButton(val, idcontract, idcommessa){
	
	clickedButton = val;
 	window.document.getElementById('idcontratto').value = idcontract;

	return true;
}

function setActionModifyButton(val, nomecampo, valorecampo){
 	 	
	clickedButton = val;

	window.document.getElementById(nomecampo).value = valorecampo;

	return true;
}

function setActionDeleteButton(val, nomecampo, valorecampo, stringa){

	var agree = confirm("Confermi la cancellazione "+stringa+"?");
	
	if(agree){
		return setActionModifyButton(val, nomecampo, valorecampo);
	}else{
		return false;
	}
}

function setModifyButton(val, idcontact, idpartner){
	
	clickedButton = val;
 	window.document.getElementById('idcontatto').value = idcontact;
	if(idpartner!=''){
		window.document.getElementById('idpartner').value = idpartner;
 	}

	return true;
	
}

function setGenericDeleteButton(val, id, nomecampo, desccampo){
	 
	var agree = confirm("Confermi la cancellazione "+desccampo+"?");
 	
 	if(agree){
		clickedButton = val;
	 	window.document.getElementById(nomecampo).value = id;
		return true;
	}else{
		return false;
	}
}


function setDeleteContractButton(val, idcontract, idcommessa){
 
 	var agree = confirm("Confermi la cancellazione del contratto?");
 
 	if(agree){
		clickedButton = val;
	 	window.document.getElementById('idcontratto').value = idcontract;
		if(idcommessa!=''){
			window.document.getElementById('idcommessa').value = idcommessa;
	 	}
		return true;
	}else{
		return false;
	}
}

function setDeleteButton(val, idcontact, idpartner){
 
 	var agree = confirm("Confermi la cancellazione del contatto?");
 
 	if(agree){
		clickedButton = val;
	 	window.document.getElementById('idcontatto').value = idcontact;
		if(idpartner!=''){
			window.document.getElementById('idpartner').value = idpartner;
	 	}
		return true;
	}else{
		return false;
	}
}

function setButton(val, nomeform){
	 clickedButton = val;
	 return validateForm(nomeform);
}

function validateForm(form_name) {
 		
	if(clickedButton=="deletecontact" || clickedButton=="modifycontact"){
		return true;
	}
			
	var fields = new Array();

	var form0 = document.forms[form_name];
	
	for(var t=0;t<form0.elements.length;t++) {
		
		var el = form0.elements[t];
		
		if(el.type == "hidden") continue;
				
		//verifico se l'elemento � una data
		var esito = checkData(el);
		if(esito==false){
			 return false;
		}
		
		var mandatory = 0;
		var description = el.name;
		if(el.attributes) {
		 
		 	//si verifica l'eventuale obbligatoriet� del campo
			 	 
			attr = el.attributes["st:mandatory"];
			if(attr) {
				
				var v = attr.value;
				
				if(v == "false") mandatory = 0;
				else if(v == "true") mandatory = 1;
				else if(v == "conditional") mandatory = 2;
			}
						
			//se il gruppo a cui appartire il campo della form non corrisponde al nome del
			//bottone cui cui � stata fatta la submit, allora significa che dobbiamo togliere
			//l'obbligatoriet� al campo
			
			formgroup = el.attributes["st:formgroup"];
			if(formgroup){
				
				var w = formgroup.value;
				if(w!=clickedButton) mandatory = 0;
				
			}		
					
			attr = el.attributes["st:description"];
			if(attr) description = attr.value;
			
			if(el.type == "checkbox"){
				if(!el.checked){
					if(mandatory==1){
						alert("Il campo "+description+" e' obbligatorio!");
						return false;	
					}
				}
			}
		}
		
		if(!fields[el.name]) {
			fields[el.name] = new Array();
			fields[el.name]["description"] = description;
			fields[el.name]["mandatory"] = mandatory;
			fields[el.name]["type"] = el.type;	
		
			var subType = "";
			var attr = el.attributes["st:subType"];
			if(attr) subType = attr.value;
			fields[el.name]["subtype"] = subType;				

			var v = el.value;
			if( (el.type=="radio") && el.checked==false) v=null;

			if(v!=null) fields[el.name]["value"] = v;	
		}
		else {

			var v = el.value;
			if( (el.type=="radio" || el.type=="checkbox") && el.checked==false) v=null;
			
			var vv = fields[el.name]["value"];
			if(!vv) {
				if(v!=null) fields[el.name]["value"] = v;
			}
			else if(typeof(vv) == "object") {
				if(v!=null) {
					vv.push(v);
					fields[el.name]["value"] = vv;
				}
			}
			else {
				if(v!=null) {
					fields[el.name]["value"] = new Array(vv, v);				
				}
			}
		}
	}
	
	for(keyVar in fields) {
		
		var field = fields[keyVar];
		
		if(field.mandatory == 1 && field.value == "") {
			alert("Il campo " + field.description + " e' obbligatorio!");
			return false;
		}
		
		if(field.mandatory == 2) {
			if(typeof(conditionalFields) == "undefined") {
				alert("Il campo " + field.description + " richiede dei campi condizionali che non sono definiti!");
				return false;
			}
			
			var condField = conditionalFields[keyVar];
			if(condField!=null) {
				for(keyCond in condField) {
					var ff = fields[keyCond];
					if(ff!=null) {
						if(ff.value == condField[keyCond]) {
							if(typeof(field.value) == "undefined" || field.value == "") {
								alert("Il campo " + field.description + " e' obbligatorio!");
								return false;
							}	
						}
					}
				}
			}
		}
		
		if(field.subtype == "number") {
		 	var x = field.value.replace(",", ".");
			if(isNaN(x)) {
				alert("Il campo " + field.description + " deve contenere un valore numerico");
				return false;
			}
		}else{
			if(field.subtype == "mail") {
				if(!indirizzoEmailValido(field.value)){
					alert("Il campo " + field.description + " deve contenere un indirizzo e-mail valido");
					return false;
				}
			}					 
		} 
	}
	
	return true;
}

//Funzione per la verifica di una data. Prede come paramentro il valore di un elemento presente nel form e,
//dopo aver verificato che si tratta di una data, ne recupera il valori e gestisce l'eventuale sua obbligatoriet�.
function checkData(el){
	
	//se l'elemento � una select
	if(el.type == "select-one"){
		
		var d = 0;
		var k = 0;
		
		var descrizione;
		
		//verifico che abbia degli attributi
		if(el.attributes) {
							
			//verifico se il campo � parte di una data
			attrib = el.attributes["st:date"];
						
			if(attrib) {
				var val = attrib.value;
				if(val == "true") d = 1;
				else d=0;
			}
	
			//se il campo fa parte di una data
			if(d==1){
												
				//recupero l'obbligatoriet� della data eventuale
				obblig = el.attributes["st:mandatory"];
				
				if(obblig){
					var ob = obblig.value;
					if(ob=="true") k = 1;
					else k = 0; 
				}
				
				descr = el.attributes["st:description"];
				if(descr){
					descrizione = descr.value;
				}
					
				//recupero il gruppo di appartenenza dell'elemento cio�
				//il codice della data a cui esso appartiene
				group = el.attributes["st:group"];
			
				if(group){
									
					var g = group.value;
					
					//recupero gli id del mese e dell'anno a cui appartiene il giorno recuperato
					var idmm = "mm"+g;
					var idaa = "aa"+g;
					
					//recupero il giorno, il mese e l'anno della data da verificare
					var giorno = el.value;
					var mese = Number(document.getElementById(idmm).value);
					var anno = document.getElementById(idaa).value;
					
					//se la data � obbligatoria ma uno dei suoi valori non � significativo,
					//segnala l'errore ed interrompi il controllo
					if(k==1 && (giorno=="undefined" || giorno=="" ||
							mese=="undefined" || mese=="" ||
								anno=="undefined" || anno=="")){
						if(descr){
							alert("Il campo "+descrizione+" e' obbligatorio!"); 
						}else{
							alert("E' prensenta una data obbligatoria non valorizzata correttamente!");
						}
						return false;
					}
									
					//recupero la data
					var myData = el.value + "/" + mese + "/" + anno;
							
					//verifico la validit� della data
					var esito = isDate(myData, "d/M/y");
																
					if(k==1 && esito==false){
						if(descr){
							alert("Il campo "+descrizione+" non contiene una data valida!"); 
						}else{
							alert("La data "+myData+" inserita non e' valida!");
						}
						return false;
					}
														
				}else{
					alert("Gruppo non valido! Siamo spiacenti ma non e' possibile verificare la data");
				}
			}
		}
	}
	return true;
}

function showImage(nomediv, indice, lunghezza_array){

	if (document.getElementById){
	
		var ind = indice;
		var id_div = nomediv + ind;
		
		alert(id_div);
	
		if(document.getElementById(id_div).style.display == 'none'){
		
			document.getElementById(id_div).style.display = 'block';
		}
		
		for(k=0; k<lunghezza_array && k!=indice; k++){
				
			var id = nomediv + k;						
			document.getElementById(id).style.display = 'none';
		}
	}
}

function showTagCloudDiv(iddiv){
	
	if (document.getElementById){
	 	if(document.getElementById(iddiv).style.display == 'none'){
	 		document.getElementById(iddiv).style.display = 'block';	 
		}else{
			document.getElementById(iddiv).style.display = 'none';		
		}
	}	
}

function show(nomediv, nometr, indice, lunghezza_array){

	if (document.getElementById){
	
		var id_div = nomediv + indice;
		var id_tr = nometr + indice;
	
		if(document.getElementById(id_div).style.display == 'none'){
		
			document.getElementById(id_div).style.display = 'block';
			document.getElementById(id_tr).style.backgroundColor = '#E1E1E1';
		}
	}
}

function hide(nomediv, nometr, lunghezza_array){
	
	if(document.getElementById){
		
		for(k=0; k<lunghezza_array; k++){
				
			var id = nomediv + k;
			var id_tr = nometr + k;
						
			document.getElementById(id).style.display = 'none';
			document.getElementById(id_tr).style.backgroundColor = '';
		}
	}
}

function scegli(url){
	location.href = url;
}

function evidenzia(nomediv, indicediv, numeroitem){
  
 	var iddiv = nomediv + indicediv;
	
	if(document.getElementById){
		document.getElementById(iddiv).style.backgroundColor='#C30000';
	}	
}

function disevidenzia(nomediv, indicediv){
  
 	var iddiv = nomediv + indicediv;
	
	if(document.getElementById){
	 	document.getElementById(iddiv).style.backgroundColor='';
	}	
}

function accessoAvanzatoData(id_div){
		
	if (document.getElementById){
		
		if(document.getElementById(id_div).style.display == 'none'){
			document.getElementById(id_div).style.display = 'block';
		}else{
			if(document.getElementById(id_div).style.display == 'block'){
				document.getElementById(id_div).style.display = 'none'
			}
		}
	}	
}

function differenzaDate(val, nomeform){
  
 	with(document.dataForm){
			  	
		today=new Date()
		var anotherDate = new Date(aa.value, mm.value-1, gg.value); //Month is 0-11 in JavaScript
		
		//Set 1 day in milliseconds
		var one_day=1000*60*60*24
		
		//Calculate difference btw the two dates, and convert to days
		var esito = Math.ceil((today.getTime()-anotherDate.getTime())/(one_day));
	  
		if(esito<0){
			alert("Attenzione: non e' possibile accedere a date future");
			return false;
		}else{
			return setButton(val, nomeform);
		}
	}
}

function inizializzaCommessa(val){
	document.prospettoOre.commessa_scelta.value=val;
	document.prospettoOre.submit();
}

function inizializzaCliente(val){
	//top.location.href = "./?com="+val;
	document.prospettoOre.cliente_scelto.value=val;
	document.prospettoOre.submit();
}

//funzione che dato un valore digitato in una casella destinata a contenere un valore temporale,
//restituisce il valore formattato secondo il formato HH:MM oppure un messaggio di errores
function checkTime(time){
 
 	var timeChars = new Array();
 	timeChars[0]=",";
 	timeChars[1]=".";
 	timeChars[2]=";";
 	timeChars[3]="-";
	timeChars[4]=":";
	
	//memorizzo il carattere spaziatore scelto dall'utente
	var charFind=-1;
	//numero caratteri spaziatori trovati
	var numberCharsFind=0;
	//esito del controllo sull'ora
	var checkHours=false;
	//esito del controllo sui minuti
	var checkMinutes=false;
	 	
 	//se il valeore non � un numero
 	if(isNaN(time)){
	 	 //per ogni carattere speciale
	 	 for(i=0; i<timeChars.length; i++){
	 	 	//se la stringa contiene il carattere speciale
	 	 	if(time.indexOf(timeChars[i])!=-1){
	 		 	//incremento il contatore di caratteri speciali trovati nella stringa
	 			numberCharsFind++;
		 		//spezzo la stringa utilizzando il carattere
				var array = time.split(timeChars[i]);
		 	   	//verifico che l'array che sia grande esattamente 2
		 	 	if(array.length==2){
				   //verifico che la sottostringa che precede il carattere sia un numero compreso tra 0 e 24
				   var ore = array[0];
				   if(ore.length>0 && ore!="" && !isNaN(ore)){
						if(ore>-1 && ore<24) checkHours=true;
						else checkMinutes=false;
				   }else checkMinutes=false;
				   //verifico che la sottostringa che segue il carattere sia un numero compreso tra 0 e 59
				   var minuti = array[1];
				   if(minuti.length>0 && minuti!="" && !isNaN(minuti)){
						if(minuti>-1 && minuti<60) checkMinutes=true;
						else checkMinutes=false;
				   }else checkMinutes=false;
				   //verifico incrociato ore e minuti
				   if(checkHours==true && checkMinutes==true) charFind=timeChars[i];
				}
			}
	    }
	    if(numberCharsFind!=1 || checkHours==false || checkMinutes==false){
	     	alert("Il tempo digitato non e' valido!");
	     	return time;
	    }else{
			return ore+":"+minuti;	
		}
	 }else{
		if(time<0 || time>23){
			alert("Il tempo digitato non e' valido!");
		}		
		return time+":00";
	 }
}
