// JavaScript Document

//	Elimina gli spazi bianchi all'inizio e alla fine della stringa
function Trim(stringa) {
	if (!stringa)
		return false;
	
	else
		return stringa.replace(/^\s+|\s+$/g,'');
}

//	Controlla la validità dell'email
function ControlloMail(stringa) {
	if (stringa.match(/^(\S+)@(\S+)\.(\S{2,7})$/i)) return true;
	else return false;
}

//	Controlla la validità della data
function ControlloData(stringa) {
	if (stringa.match(/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2}|[0-9]{4})( [0-9]{2}:[0-9]{2})?$/)) return true;
	else return false;
}

//	Controlla la validità di un numero intero
function ControlloIntero(stringa) {
	if (stringa.match(/^([0-9]+)$/)) return true;
	else return false;
}

//	Controlla la validità di un numero reale
function ControlloReale(stringa) {
	if (stringa.match(/^([0-9]+)((\.[0-9]+)?)$/)) return true;
	else return false;
}

//	Controlla la validità di un link
function ControlloLink(stringa) {
	if (stringa.match(/^(http:\/\/|mailto:|ftp:\/\/)/i)) return true;
	else return false;
}

//	Controlla la validità di un codice IBAN
function ControlloIBAN(stringa) {
	if (stringa.match(/^([a-z]{2}) ([0-9]{2}) ([a-z]{1}) ([0-9]{5}) ([0-9]{5}) ([0-9]{12})$/i)) return true;
	else return false;
}

//	Controlla la validità di un numero PostePay
function ControlloPostepay(stringa) {
	if (stringa.match(/^([0-9]{4}) ([0-9]{4}) ([0-9]{4}) ([0-9]{4})$/i)) return true;
	else return false;
}

//	Se ci si trova nella index mette il focus sulla username
function Focus(idCampo) {
	if (document.getElementById(idCampo))
		document.getElementById(idCampo).focus();
}

//	Controlla che i campi del form siano inseriti (quelli richiesti) e nel modo corretto (tutti quelli non vuoti)
//	idForm: id del form da controllare
function ControllaModulo(idForm) {
	//	Se il form non esiste esce
	if (!document.getElementById(idForm))
		return false;
		
	var form = document.getElementById(idForm);

	//	Passa in rassegna gli argomenti ricevuti (dopo il primo)
	for (var i = 1; i < arguments.length; i++) {
		/*	
			Prova a dividere la stringa. 
			Il secondo se il campo è richiesto (1) o no (0)
			Il terzo campo specifica come convalidarlo.
		*/
		var campoStr = new String(arguments[i]);
		var campoSplit = campoStr.split(',');

		//	Recupera il campo, se presente
		if (form.elements[campoSplit[0]]) {
			//	Salva i valori nei parametri togliendo gli spazi in eccesso
			var campo = form.elements[Trim(campoSplit[0])];
			var richiesto = parseInt(Trim(campoSplit[1]));
			var formato = Trim(campoSplit[2]);

			//	Controlla se il campo è richiesto ed è riempito
			if (richiesto == 1 && !Trim(campo.value)) {
				alert('Inserire un valore in: '+campo.id);
				campo.focus();
				return false;
			}	
			
			//	Controlla se il campo è richiesto ed è selezionato, o visualizza un messaggio di errore
			else if (richiesto == 1 && (campo.type == 'checkbox' && !campo.checked)) {
				alert('Selezionare: '+campo.id);
				campo.focus();
				return false;
			}
			
			//	Se specificato controlla anche la formattazione del campo
			else if (Trim(campo.value) && formato) {
				switch (formato) {
					//	Controlla e-mail
					case 'MAIL':
						if (!ControlloMail(campo.value)) {
							alert('E-mail non valida in: '+campo.id);
							campo.focus();
							return false;
						}
					break;
					
					//	Controlla data
					case 'DATE':
						if (!ControlloData(campo.value)) {
							alert('Data non valida in: '+campo.id);
							campo.focus();
							return false;
						}
					break;
					
					//	Controlla numero intero
					case 'INTEGER':
						if (!ControlloIntero(campo.value)) {
							alert('Valore intero non valido in: '+campo.id);
							campo.focus();
							return false;
						}
					break;
					
					//	Controlla numero reale
					case 'FLOAT':
						if (!ControlloReale(campo.value)) {
							alert('Valore decimale non valido in: '+campo.id);
							campo.focus();
							return false;
						}
					break;
					
					//	Controlla link
					case 'LINK':
						if (!ControlloLink(campo.value)) {
							alert('Link non valido in: '+campo.id+'\nIl formato corretto deve iniziare con "http://", "mailto:" oppure "ftp://"');
							campo.focus();
							return false;
						}
					break;
					
					//	Controlla codice IBAN
					case 'IBAN':
						if (!ControlloIBAN(campo.value)) {
							alert('Codice IBAN non valido in: '+campo.id+'\nIl formato corretto è:\n\n2 lettere per il codice nazione\n2 cifre di controllo\n1 lettera per il CIN\n5 cifre per l\'ABI\n5 cifre per il CAB\n12 cifre per il numero di conto\n\nSeparare ogni blocco con uno spazio');
							campo.focus();
							return false;
						}
					break;

					//	Controlla numero PostePay
					case 'POSTEPAY':
						if (!ControlloPostepay(campo.value)) {
							alert('Codice PostePay non valido in: '+campo.id+'\nIl formato corretto è:\n\n4 blocchi\n4 cifre per ogni blocco\n\nSeparare ogni blocco con uno spazio');
							campo.focus();
							return false;
						}
					break;

					//	Default
					default:
						alert('Tipo di dato non valido in: '+campo.id);
						campo.focus();
						return false;
					break;
				}
			}
		}
	}
			
	//	Disattiva tutti i campi invio del modulo
	DisattivaSubmit(idForm, true);
	
	//	Tutto ok, restituisce vero
	return true;
}

//	Disattiva (true) o riattiva (false) tutti i pulsanti di invio di un form
function DisattivaSubmit(idForm, disattivare) {
	//	Se il form non esiste esce
	if (!document.getElementById(idForm))
		return false;
	
	//	Recupera tutti i campi del modulo
	var campi = document.getElementById(idForm).elements;
	
	for (var i = 0; i < campi.length; i++) {
		//	Disattiva o riattiva solo se è un pulsante di invio
		if (campi[i].type == 'submit')
			campi[i].disabled = disattivare;
	}
}

//	Solo uno dei campi tra quelli inviati può essere riempito o selezionato
function CampoUnico(idForm) {
	//	Se il form non esiste esce
	if (!document.getElementById(idForm))
		return false;
		
	var form = document.getElementById(idForm);
	var unico = false;

	//	Passa in rassegna gli argomenti ricevuti (dopo il primo)
	for (var i = 1; i < arguments.length; i++) {
		var campo = form.elements[arguments[i]];
		
		//	Controlla che il campo sia l'unico riempito del gruppo, oppure cambia il valore di "unico"
		if (campo && Trim(campo.value)) {
			//	Messaggio di errore
			if (unico) {
				alert('Inserire solo uno dei campi vicini contrassegnati con **');
				campo.focus();
				return false;
			}
			
			else
				unico = true;
		}
		
		//	Controlla se il campo è richiesto ed è selezionato, oppure cambia il valore di "unico"
		else if (campo && campo.type == 'checkbox' && campo.checked) {
			//	Messaggio di errore
			if (unico) {
				alert('Selezionare solo una delle caselle vicine contrassegnate con **');
				campo.focus();
				return false;
			}

			else
				unico = true;
		}
	}
	
	//	Tutto ok, restituisce vero
	return true;
}

//	Controlla che i campi del form inviati siano uguali (utile per la conferma della password ad es.)
function ConfermaCampi(idForm) {
	//	Se il form non esiste esce
	if (!document.getElementById(idForm))
		return false;
		
	var form = document.getElementById(idForm);
	
	//	Valore di confrondo
	var valoreConfronto = '';
	
	//	Passa in rassegna gli argomenti ricevuti (dopo il primo)
	for (var i = 1; i < arguments.length; i++) {
		var campoStr = new String(arguments[i]);
		
		//	Recupera il campo, se presente
		if (form.elements[campoStr]) {
			var campo = form.elements[campoStr];
			
			//	Setta il valore di confronto, se non impostato
			if (valoreConfronto == '')
				valoreConfronto = campo.value;
			
			//	Controlla, se il campo è riempito, che sia uguale al valore di confronto o restituisce errore
			if (campo.value != valoreConfronto) {
				alert('I valori di conferma non corrispondono');
				campo.focus();
				return false;
			}			
		}
	}

	//	Tutto ok, restituisce vero
	return true;
}

//	Controlla che almeno un certo numero di campi del form siano riempiti (o selezionati)
//	"tipoPredefinito": se specificato controlla solo se certi tipi di campi siano riempiti
function CampiMinimi(idForm, numeroMinimo, tipoPredefinito) {
	//	Se il form non esiste esce
	if (!document.getElementById(idForm))
		return false;
	
	//	Campi riempiti
	var campiRiempiti = 0;
	
	//	Recupera tutti i campi del modulo
	var campi = document.getElementById(idForm).elements;
	
	for (var i = 0; i < campi.length; i++) {
		//	Se specificato controlla solo i tipo richiesti
		if (tipoPredefinito) {
			switch (tipoPredefinito) {
				//	Testo, textarea, file e default
				case 'text':
				case 'textarea':
				case 'file':
				default:
					if (campi[i].type == tipoPredefinito && Trim(campi[i].value))
						campiRiempiti++;
				break;
				
				//	Checkbox
				case 'checkbox':
					if (campi[i].type == tipoPredefinito && campi[i].checked == true)
						campiRiempiti++;
				break;
			}
		} 
		
		//	Controlla qualsiasi tipo
		else {
			//	Controlla i campi di testo
			if (campi[i].type == 'text' && Trim(campi[i].value))
				campiRiempiti++;
				
			//	Controlla le checkbox
			else if (campi[i].type == 'checkbox' && campi[i].checked == true)
				campiRiempiti++;
		}
		
		//	Se i campi riempiti soddisfano i requisiti minimi esce dalla funzione
		if (campiRiempiti >= numeroMinimo)
			return true;
	}
	
	//	Campi minimi non riempiti
	alert('Selezionare e/o riempire almeno '+numeroMinimo+' campo/i');
	campi[0].focus();
	return false;
}

//	Controlla la login nel sito
function LoginCliente() {
	if (ControllaModulo('login', 'username,1', 'password,1')) return true; 
	else { 
		DisattivaSubmit('login', false); 
		return false; 
	}
}

//	Controlla la registrazione cliente nel sito
function RegistraCliente() {
	if (
		ControllaModulo('clienti', 'ragioneSociale,1', 'email,1,MAIL', 'username,1', 'password,1', 'cap,0,INTEGER', 'privacy,1') 
		&& ConfermaCampi('clienti', 'password', 'passwordConf')
	) return true; 
	
	else { 
		DisattivaSubmit('clienti', false); 
		return false;
	}
}

//	Controlla l'invio dell'email
function Contatti() {
	if (ControllaModulo('contatti', 'nome,1', 'email,1,MAIL', 'privacy,1')) return true; 
	
	else { 
		DisattivaSubmit('contatti', false); 
		return false;
	}
}

//	Mostra o nasconde uno o più blocchi
function MostraNascondi() {
	//	Passa in rassegna gli argomenti ricevuti
	for (var i = 1; i < arguments.length; i++) {
		//	Recupera il singolo blocco
		var blocco = document.getElementById(arguments[i]);
		
		//	Setta lo stato se specificato
		if (arguments[0])
			blocco.style.display = arguments[0];
		
		//	Lo stile viene invertito a seconda dello stato attuale
		else if (blocco != false || blocco != undefined) {
			//	Visibilità attuale
			var visibilita = blocco.style.display;
			
			//	Cambia visibilià
			blocco.style.display = visibilita == 'none' ? '' : 'none';
		}
	}
}

//	Mostra o nasconde i dettagli nei blocchi file
function DettaglioFile(numero) {
	//	Setta lo stato se specificato
	var stato = arguments[1] ? arguments[1] : false;
	
	//	Richiama la funzione
	MostraNascondi(
		stato, 
		'mostraFile'+numero, 
		'nascondiFile'+numero, 
		'dettaglioFile'+numero
	);
}

//	Cambia lo stile al link file da cancellare o lo ripristina
function CancellaFile(numero) {
	//	Setta lo stato se specificato
	var stato = arguments[1] ? arguments[1] : false;

	//	Recupera il link e la classe assegnatagli
	var collegamento = document.getElementById('linkFile'+numero);
	var classe = 
		!collegamento.className 
		|| collegamento.className == 'linkBase' 
	? 'linkInattivo' : 'linkBase';
	
	//	Cambia la classe al link
	collegamento.className = classe;
	
	//	Se la classe è assegnata il file esistente verrà eliminato, quindi cambia il valore del campo hidden
	var cancellaFile = document.getElementById('cancellaFileAttuale'+numero);
	cancellaFile.value = classe ? 1 : 0;
	
	//	Richiama la funzione
	MostraNascondi(
		stato, 
		'cancellaFile'+numero, 
		'annullaCancellaFile'+numero
	);
}

//	Modifica il file mostrando il campo del form
function ModificaFile(numero) {
	//	Setta lo stato se specificato
	var stato = arguments[1] ? arguments[1] : false;

	//	Richiama la funzione
	MostraNascondi(
		stato, 
		'campoFile'+numero
	);
}

//	Inserisce un nuovo blocco file
//	"soloFoto": crea un campo file, se true, che accetta solo JPEG
//	"escludiFiligrana": se true evita di aggiungere la filigrana
function BloccoFile(soloFoto, escludiFiligrana) {
	//	Recupera il tag contenitore del nuovo file
	var contenitore = document.getElementById('nuovoFile');
	
	//	Recupera il numero del file precedente e lo incrementa
	var numero = document.getElementById('indiceFile').value;
	numero++;
	
	//	Prima di proseguire controlla che i campi precedenti siano riempiti
	for (var i = 0; i < numero; i++) {
		//	Recupera i campi dei dati
		var file = document.getElementById('file'+i).value;
		var fileAttuale = document.getElementById('fileAttuale'+i).value;
		
		//	Se nessuno dei valori qui sopra è riempito visualizza un errore ed esce dalla funzione
		if (!file && !fileAttuale) {
			alert('Prima di aggiungere un nuovo file\noccore inserire tutti gli altri');
			return false;
		}
	}
	
	//	Controlla se il campo file deve accettare solo le foto
	var accetta = soloFoto ? 'accept="image/jpeg"' : '';
	
	//	Modello HTML
	var template = '<div id="nuovoFile"><input type="hidden" name="indiceFile" id="indiceFile" value="'+numero+'" /></div>\n';
	template += '<div class="bloccoFile">\n';
	template += '<p id="campoFile"><strong>\n';
	template += '<input name="file['+numero+']" type="file" id="file'+numero+'" size="40" '+accetta+' />\n';
	template += '<input type="hidden" name="fileAttuale['+numero+']" id="fileAttuale'+numero+'" />\n';
	template += '</strong></p>\n';
	template += '<div id="dettaglioFile'+numero+'">\n';
	
	//	Controlla se occorre aggiungere la filigrana (default)
	if (!escludiFiligrana) {
		template += '<p>didascalia:<strong>\n';
		template += '<input name="didascalia['+numero+']" type="text" id="didascalia'+numero+'" size="40" maxlength="255" />\n';
		template += '</strong></p>\n';
		template += '<p class="noMargine">filigrana:\n';
		template += '<input name="filigrana['+numero+']" type="radio" id="filigranaSi'+numero+'" value="si" checked="checked" />s&igrave;\n';
		template += '<input type="radio" name="filigrana['+numero+']" value="no" id="filigranaNo'+numero+'" />no\n';
		template += '</p>\n';
	}
	
	else {
		template += '<p class="noMargine">didascalia:<strong>\n';
		template += '<input name="didascalia['+numero+']" type="text" id="didascalia'+numero+'" size="40" maxlength="255" />\n';
		template += '</strong></p>\n';
	}
	
	template += '</div>\n';
	template += '</div>\n';
	
	//	Stampa il modello nel contenitore
	contenitore.outerHTML = template;
}

//	Inserisce un nuovo blocco variante
//	prodotto: può essere "serbatoio" o "cannafumaria"
function BloccoVariante(prodotto) {
	//	Recupera il numero della variante precedente e lo incrementa
	var numero = document.getElementById('indiceVariante').value;
	numero++;
	
	//	Prima di proseguire controlla che i campi precedenti siano riempiti
	for (var i = 0; i < numero; i++) {
		//	Se non è presente il campo (in caso ad es. di cancellazione) salta il ciclo
		if (!document.getElementById('codiceVariante'+i)) continue;
		
		//	Recupera i campi dei dati
		var prezzo = document.getElementById('prezzo'+i).value;
		var codiceVariante = document.getElementById('codiceVariante'+i).value;

		//	Se i campi non sono tutti riempiti visualizza un errore ed esce dalla funzione
		if (
			!codiceVariante
			|| !prezzo
		) {
			alert('Prima di aggiungere una nuova variante\noccore inserire tutte le altre');
			return false;
		}
	}
	
	//	Modello HTML
	var template = '<tr id="variante'+numero+'">\n';
	
	//	Controlla quale tipo di prodotto aggiungere
	if (!prodotto || prodotto == 'serbatoio') {
		template += '<td><input name="codiceVariante['+numero+']" type="text" id="codiceVariante'+numero+'" size="15" maxlength="50" /></td>\n';
		template += '<td><input name="capacita['+numero+']" type="text" id="capacita'+numero+'" size="5" maxlength="10" onkeyup="CompletaCodice('+numero+')" /></td>\n';
		template += '<td><input name="diametro['+numero+']" type="text" id="diametro'+numero+'" size="5" maxlength="10" /></td>\n';
		template += '<td><input name="peso['+numero+']" type="text" id="peso'+numero+'" size="5" maxlength="10" /></td>\n';
		template += '<td style="text-align:right"><input name="prezzo['+numero+']" type="text" id="prezzo'+numero+'" size="10" style="text-align:right" /></td>\n';
	}
	
	else {
		template += '<td><input name="codiceVariante['+numero+']" type="text" id="codiceVariante'+numero+'" size="15" maxlength="50" /></td>\n';
		template += '<td><input name="lunghezza['+numero+']" type="text" id="lunghezza'+numero+'" size="10" maxlength="50" /></td>\n';
		template += '<td><input name="diametro['+numero+']" type="text" id="diametro'+numero+'" size="5" maxlength="10" onkeyup="CompletaCodice('+numero+')" />\n';
		template += '<input name="altroDiametro['+numero+']" type="text" id="altroDiametro'+numero+'" size="5" maxlength="10" onkeyup="CompletaCodice('+numero+')" /></td>\n';
		template += '<td><input name="angolo['+numero+']" type="text" id="angolo'+numero+'" size="3" maxlength="3" /></td>\n';
		template += '<td><input name="pezzi['+numero+']" type="text" id="pezzi'+numero+'" size="3" maxlength="3" /></td>\n';
		template += '<td style="text-align:right"><input name="prezzo['+numero+']" type="text" id="prezzo'+numero+'" size="10" style="text-align:right" /></td>\n';
	}
	
	template += '<td class="noWrap">\n';
	template += '<a href="javascript:void(0)" onclick="if (confirm(\'Cancellare questa variante?\')) $(\'#variante'+numero+'\').replaceWith(\'\')" title="Cancella"><img src="../img/delete.png" alt="cancella" width="16" height="16" border="0" align="middle" /></a>\n';
	template += '</td>\n';
	template += '</tr>\n';
	template += '<tr id="nuovaVariante" style="display:none"></tr>\n';
		
	//	Stampa il modello nel contenitore
	$('#nuovaVariante').replaceWith(template);
		
	//	Incrementa il valore dell'indice
	document.getElementById('indiceVariante').value++;
}

//	Inserisce un nuovo blocco sconto
function BloccoSconto() {
	//	Recupera il numero dello sconto precedente e lo incrementa
	var numero = document.getElementById('indiceSconto').value;
	numero++;
	
	//	Prima di proseguire controlla che i campi precedenti siano riempiti
	for (var i = 0; i < numero; i++) {
		//	Se non è presente il campo (in caso ad es. di cancellazione) salta il ciclo
		if (!document.getElementById('riferimento'+i)) continue;
		
		//	Recupera i campi dei dati
		var riferimento = document.getElementById('riferimento'+i).value;
		var sconto = document.getElementById('sconto'+i).value;

		//	Se i campi non sono tutti riempiti visualizza un errore ed esce dalla funzione
		if (
			!riferimento
			|| !sconto 
		) {
			alert('Prima di aggiungere un nuovo sconto\noccore inserire tutti gli altri');
			return false;
		}
	}
	
	//	Modello HTML
	var template = '<tr id="sconti'+numero+'">\n';
	template += '<td id="listaRiferimento'+numero+'"></td>\n';
	template += '<td id="idRiferimento'+numero+'"></td>\n';
	template += '<td style="text-align:right"><input name="sconto['+numero+']" type="text" id="sconto'+numero+'" size="3" maxlength="3" style="text-align:right" /></td>\n';
	template += '<td class="noWrap"><a href="javascript:void(0)" onclick="if (confirm(\'Cancellare questo sconto?\')) $(\'#sconti'+numero+'\').replaceWith(\'\')" title="Cancella"><img src="../img/delete.png" alt="cancella" width="16" height="16" border="0" align="middle" /></a></td>\n';
	template += '</tr>\n';
	template += '<tr id="nuovoSconto" style="display:none"></tr>\n';
	
	//	Stampa il modello nel contenitore
	$('#nuovoSconto').replaceWith(template);
	
	//	Stampa la lista
	ListaAssegnaVariazioni('listaRiferimento'+numero, numero);
	
	//	Incrementa il valore dell'indice
	document.getElementById('indiceSconto').value++;
}

//	Inserisce un nuovo blocco variazioni del listino
function BloccoVariazioni() {
	//	Recupera il numero della variazione precedente e la incrementa
	var numero = document.getElementById('indiceVariazione').value;
	numero++;
	
	//	Prima di proseguire controlla che i campi precedenti siano riempiti
	for (var i = 0; i < numero; i++) {
		//	Se non è presente il campo (in caso ad es. di cancellazione) salta il ciclo
		if (!document.getElementById('riferimento'+i)) continue;
		
		//	Recupera i campi dei dati
		var riferimento = document.getElementById('riferimento'+i).value;
		var variazione = document.getElementById('variazione'+i).value;

		//	Se i campi non sono tutti riempiti visualizza un errore ed esce dalla funzione
		if (
			!riferimento
			|| !variazione 
		) {
			alert('Prima di aggiungere una nuova variazione\noccore inserire tutte le altre');
			return false;
		}
	}
	
	//	Modello HTML
	var template = '<tr id="variazioni'+numero+'">\n';
	template += '<td id="listaRiferimento'+numero+'"></td>\n';
	template += '<td id="idRiferimento'+numero+'"></td>\n';
	template += '<td style="text-align:right"><input name="variazione['+numero+']" type="text" id="variazione'+numero+'" size="4" maxlength="4" style="text-align:right" /></td>\n';
	template += '<td class="noWrap"><a href="javascript:void(0)" onclick="if (confirm(\'Cancellare questa variazione?\')) $(\'#variazioni'+numero+'\').replaceWith(\'\')" title="Cancella"><img src="../img/delete.png" alt="cancella" width="16" height="16" border="0" align="middle" /></a></td>\n';
	template += '</tr>\n';
	template += '<tr id="nuovaVariazione" style="display:none"></tr>\n';
	
	//	Stampa il modello nel contenitore
	$('#nuovaVariazione').replaceWith(template);
	
	//	Stampa la lista
	ListaAssegnaVariazioni('listaRiferimento'+numero, numero);
	
	//	Incrementa il valore dell'indice
	document.getElementById('indiceVariazione').value++;
}

//	Mostra o nasconde il tipo di pagamento
function ControllaPagamento(idForm, idPagamentoGruppo) {
	var form = document.getElementById(idForm);
	var pagamentoGruppo = document.getElementsByName(idPagamentoGruppo);

	//	Blocchi possibili da mostrare
	var bloccoBonificoBanca = document.getElementById('bloccoBonificoBanca');
	var bloccoPostepay = document.getElementById('bloccoPostepay');
	var bloccoContrassegno = document.getElementById('bloccoContrassegno');
	
	//	Valori da azzerare in caso di cambio accesso
	var intestBonificoBanca = document.getElementById('intestBonificoBanca');
	var banca = document.getElementById('banca');
	var indirizzoBanca = document.getElementById('indirizzoBanca');
	var iban = document.getElementById('iban');
	var costoBonificoBanca = document.getElementById('costoBonificoBanca');
	var intestPostepay = document.getElementById('intestPostepay');
	var numPostepay = document.getElementById('numPostepay');
	var costoPostepay = document.getElementById('costoPostepay');
	var costoContrassegno = document.getElementById('costoContrassegno');
	var faxConferma = document.getElementById('faxConferma');

	//	Controlla quale blocco mostrare nascondendo gli altri
	for (var i = 0; i < pagamentoGruppo.length; i++) {
		//	Viene preso in considerazione solo il blocco selezionato
		if (pagamentoGruppo[i].checked) {
			switch (pagamentoGruppo[i].name) {
				//	Bonifico bancario
				case "bonificoBanca":
					if (pagamentoGruppo[i].value == 'si')
						bloccoBonificoBanca.style.display = 'block';
					else {
						bloccoBonificoBanca.style.display = 'none';
						
						//	Azzera i campi
						intestBonificoBanca.value = '';
						banca.value = '';
						indirizzoBanca.value = '';
						iban.value = '';
						costoBonificoBanca.value = '';
					}
				break;
				
				//	PostePay
				case "postepay":
					if (pagamentoGruppo[i].value == 'si')
						bloccoPostepay.style.display = 'block';
					else {
						bloccoPostepay.style.display = 'none';
						
						//	Azzera i campi
						intestPostepay.value = '';
						numPostepay.value = '';
						costoPostepay.value = '';
					}
				break;
				
				//	Contrassegno
				case "contrassegno":
					if (pagamentoGruppo[i].value == 'si')
						bloccoContrassegno.style.display = 'block';
					else {
						bloccoContrassegno.style.display = 'none';
						
						//	Azzera i campi
						costoContrassegno.value = '';
					}
				break;
			}
		}
	}
}

//	Formatta i numeri reali, con separatore di cifre decimali e di migliaia
function FormattaNumero(numero, cifreDecimali, sepDecimale, sepMigliaia) {
	//	Se il numero è zero esce
	if (numero == 0)
		return numero;
	
	//	Arrotonda il numero e lo trasforma in stringa per dividere le cifre
	var numeroTemp = Math.round(numero * Math.pow(10, cifreDecimali)); 
	numeroTemp = new String(numeroTemp);
	
	//	Separa le cifre intere e le divide e recupera la parte decimale
	var cifreIntere = numeroTemp.substring(0, numeroTemp.length - cifreDecimali).split('');
	var parteDecimale = numeroTemp.substring(numeroTemp.length - cifreDecimali);
	
	//	Parte intera del numero
	var parteIntera = '';

	//	Ricompone la parte intera del numero
	for (var i = 0; i < cifreIntere.length; i++) {
		//	Aggiunge il separatore di migliaia ogni tre cifre
		if ((cifreIntere.length - i) % 3 == 0 && i > 0)
			parteIntera += sepMigliaia;
	
		//	Incrementa la parte intera
		parteIntera += cifreIntere[i];	
	}
	
	//	Restituisce il numero formattato
	return parteIntera+sepDecimale+parteDecimale;				
}

//	Calcola il prezzo dell'ordine
function TotaleOrdine(idTotaleCarrello, idPagamento, idSpedizione, idTotaleOrdine) {
	//	Recupera i dati
	var totaleCarrello = document.getElementById(idTotaleCarrello);
	var pagamento = document.getElementById(idPagamento);
	var spedizione = document.getElementById(idSpedizione);
	var totaleOrdine = document.getElementById(idTotaleOrdine);
	
	//	Array dei costi
	var costi = new Array();
	
	//	Totale dell'ordine non formattato
	var totaleUnformat = parseFloat(totaleCarrello.value);
	
	//	Recupera il costo aggiuntivo del tipo di pagamento scelto
	if (pagamento.value != 0) {
		costi = pagamento.value.split(',');
		
		//	Somma il prezzo al totale
		totaleUnformat += parseFloat(costi[1]);
	}
	
	//	Recupera il costo aggiuntivo del tipo di spedizione scelta
	if (spedizione.value != 0) {
		costi = spedizione.value.split(',');
		
		//	Somma il prezzo al totale
		totaleUnformat += parseFloat(costi[1]);
	}
	
	//	Imposta il valore dell'ordine formattato
	totaleOrdine.innerHTML = FormattaNumero(totaleUnformat, 2, ',', '.');
}

//	Imposta l'altezza dell'iframe per l'upload multiplo
function AltezzaIFrame() {
	parent.document.getElementById('idIframe').height = document.getElementById('contenitore').offsetHeight;
}

//	Rollover immagine. Crea un bordo semitrasparente sopra l'immagine
//	img: tag dell'immagine da manipolare
function RollOver(img) {
	//	Dimensione del bordo, in pixel
	var bordo = 5;
	
	//	Crea una cornice trasparente attorno all'immagine
	var cornice = document.createElement('div');
	cornice.setAttribute('id', 'corniceTrasparente');
	
	//	Imposta la posizione della cornice sopra l'immagine
	cornice.style.position = 'absolute';
	cornice.style.top = 0;
	cornice.style.left = 0;
	cornice.style.width = img.width - (bordo * 2);
	cornice.style.height = img.height - (bordo * 2);
	
	//	Imposta lo sfondo e il bordo della cornice
	cornice.style.border = '5px solid #FFFFFF';
	cornice.style.background = 'url(img/blank.gif)';
	cornice.style.cursor = 'hand';
	
	//	Imposta la trasparenza del div
	cornice.style.filter = 'alpha(opacity = 50)';
	cornice.style.MozOpacity = 0.5;
	
	//	Crea un involucro per l'immagine
	img.outerHTML = '<div id="corniceDiv" style="position:relative" onmouseout="RollOut(this)">'+img.outerHTML+'</div>\n';
	
	//	Aggiunge la cornice sopra l'immagine
	document.getElementById('corniceDiv').appendChild(cornice);
}

//	Rollout immagine. Rimuove il bordo
//	img: tag dell'immagine da manipolare
function RollOut(img) {
	//	Rimuove la cornice dall'immagine, se presente
	if (document.getElementById('corniceDiv')) {
		//	Toglie il div contenitore
		var corniceDiv = document.getElementById('corniceDiv');
		corniceDiv.removeChild(document.getElementById('corniceTrasparente'));
		corniceDiv.outerHTML = corniceDiv.innerHTML;
	}
}

//	JW Player con parametri
//	idPlayer: ID del tag dove riprodurre il player
//	videoUrl: indirizzo completo del file da riprodurre
//	width: larghezza (in pixel) del player
//	height: altezza (in pixel) del player
//	preview: (opzionale) immagine di anteprima
//	altPath: (opzionale) se vero cambia le impostazioni del lettore
//	altPlayer: (opzionale) se vero cambia alcune impostazioni
function JWP(idPlayer, videoUrl, width, height, preview, altPath, altPlayer) {
	var path = altPath ? '' : '../';	
	var so = new SWFObject(path+'flash/player.swf', 'ply', width, height, '9', '#ffffff');
	so.addParam('allowfullscreen', 'true');
	so.addParam('allowscriptaccess', 'always');
	so.addParam('wmode', 'opaque');
	so.addVariable('file', videoUrl);
	
	//	Aggiunge un'immagine di anteprima solo se specificato
	if (preview) so.addVariable('image', preview);
		
	//	Lettore alternativo
	if (altPlayer) so.addVariable('controlbar', 'bottom');
	else so.addVariable('controlbar', 'over');
		
	so.addVariable('fullscreen', 'true');
	so.addVariable('stretching', 'fill');
	so.write(idPlayer);
}

//	Attiva la fancybox
$(document).ready(function() {
	$("a.fancybox").fancybox({
		'speedIn' : 600, 
		'speedOut' : 200, 
		'titlePosition' : 'over',
		'onComplete' : function() {
			$("#fancybox-wrap").hover(
				function() { $("#fancybox-title").show(); }, 
				function() { $("#fancybox-title").hide(); }
			);
		}
	});
});

//	Cancella una variante o resetta se singola
//	idTag: tag della variante da cancellare
//	id: id dei campi del tag
function CancellaVariante(idTag, id) {
	var totale = document.getElementById('indiceVariante').value;
	
	//	In caso ci sia solo una variante non la elimina ma azzera i suoi campi
	if (!totale || totale == 0) {
		document.getElementById('codiceVariante'+id).value = '';
		document.getElementById('prezzo'+id).value = '';
		
		//	Serbatoi
		if (document.getElementById('capacita'+id)) {
			document.getElementById('capacita'+id).value = '';
			document.getElementById('diametro'+id).value = '';
			document.getElementById('peso'+id).value = '';
		}
		
		//	Canne fumarie
		else if (document.getElementById('diametro'+id)) {
			document.getElementById('lunghezza'+id).value = '';
			document.getElementById('diametro'+id).value = '';
			document.getElementById('altroDiametro'+id).value = '';
			document.getElementById('angolo'+id).value = '';
		}
	}
	
	else {
		$('#'+idTag).replaceWith('');
		document.getElementById('indiceVariante').value--;
	}
}

//	Cornice delle foto in home page (piccole)
function Cornice(img, visibile){
	if (visibile) img.className = 'cornice';
	else img.className = 'cornice trasparente';
}

//	Stampa una lista per l'assegnazione degli sconti o delle variazioni del listino
//	idTag: tag dove inserire la lista
//	numero: indice numerico per il valore
function ListaAssegnaVariazioni(idTag, numero) {
	var id = document.getElementById(idTag);
	
	//	Richiama la funzione tramite AJAX	
	jQuery.ajax({
		type: 'POST',
		url: 'ajax.php',
		data: 'op=ListaAssegnaVariazioni&numero='+numero,
		async: false,
		success: function(responso) {
			id.innerHTML = responso;
		}
	});
}

//	Recupera e stampa una lista coi riferimenti agli sconti o alle variazioni del listino
//	idTag: tag dove inserire la lista
//	numero: indice numerico per il valore
//	valore: indicazione per la tabella di riferimento
//	confronto: selezione iniziale
function RiferimentiVariazioni(idTag, numero, valore, confronto) {
	var id = document.getElementById(idTag);
	
	//	Richiama la funzione tramite AJAX	
	jQuery.ajax({
		type: 'POST',
		url: 'ajax.php',
		data: 'op=RiferimentiVariazioni&numero='+numero+'&valore='+escape(valore)+'&confronto='+escape(confronto),
		async: false,
		success: function(responso) {
			id.innerHTML = responso;
		}
	});
}

//	Cambia il codice aggiundendo il diametro
//	numero: numero dell'indice per i tag
function CompletaCodice(numero) {
	//	Gestisce sia i serbatoi che le canne fumarie
	if (document.getElementById('diametro'+numero)) {
		var codice = document.getElementById('diametro'+numero);
		
		//	Controlla se c'è anche il secondo diametro
		var altroCodice = document.getElementById('altroDiametro'+numero);
	}
	
	else if (document.getElementById('capacita'+numero)) var codice = document.getElementById('capacita'+numero);
	
	//	Se non c'è il diametro come campo input esce dalla funzione
	else return false;
	
	var valore = document.getElementById(codice+''+numero);
	var codiceBase = document.getElementById('codice');
	var codiceVariante = document.getElementById('codiceVariante'+numero);

	//	Sostituisce eventualmente l'asterisco con il valore
	codiceVariante.value = codice.value ? codiceBase.value.replace(/\*{1}/, codice.value) : codiceBase.value;
	
	//	Controlla se c'è anche il secondo diametro
	codiceVariante.value = altroCodice ? codiceVariante.value.replace(/\*{1}/, altroCodice.value) : codiceVariante.value;
}

//	Editor WYSIWYG
function InitEditor() {
	$(document).ready(function() {
		$('textarea.tinymce').tinymce({
			// Location of TinyMCE script
			script_url : '../tiny_mce/tiny_mce.js',
 
			// General options
			mode : "exact",
			elements : "tinymce",
			theme : "advanced",
			width : "100%",
			height : "300px",
			convert_urls : false,
			plugins : "style,layer,advhr,advlink,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking",
			 
			// Theme options
			theme_advanced_buttons1 : "bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,|,cut,copy,paste,pastetext,removeformat",
			theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,|,forecolor,backcolor,|,code,preview,fullscreen",
			theme_advanced_buttons3 : false,
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "bottom",
			theme_advanced_resizing : false,
			
			// Example content CSS (should be your site CSS)
			content_css : "../css/tiny.css"
		});
	});
}