// 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 (document.getElementById(campoSplit[0])) {
			//	Salva i valori nei parametri togliendo gli spazi in eccesso
			var campo = document.getElementById(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.all ? document.getElementById(idForm).all : 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() {
	var login = document.getElementById('username');
	var password = document.getElementById('password');
	
	if (ControllaModulo('login', 'username,1', 'password,1')) {
		//	Controlla che i valori delle caselle siano diversi da quelle di default
		if (login.value != login.defaultValue && password.value != password.defaultValue) return true; 
		
		else {
			alert('Cambiare i valori predefiniti con i propri dati');
			return false;
		}
	}
	
	else { 
		DisattivaSubmit('login', false); 
		return false; 
	}
}

//	Controlla la registrazione cliente nel sito
function RegistraCliente() {
	if (
		ControllaModulo(
			'clienti', 
			'nome,1', 
			'email,1,MAIL', 
			'username,1', 
			'password,1',
			'indirizzo,1',
			'citofono,1',
			'citta,1',
			'cap,0,INTEGER',
			'telefono,1',
			'privacy,1'
		) 
		&& ConfermaCampi('clienti', 'password', 'passwordConf')
	) return true; 
	
	else { 
		DisattivaSubmit('clienti', false); 
		return false;
	}
}

//	Controlla l'invio dell'email
//	esteso: se vero controlla anche altri campi
function Contatti(esteso) {
	if (esteso) {
		if (ControllaModulo(
			'contatti', 
			'cognome,1',
			'nome,1', 
			'email,1,MAIL',
			'descrizione,1',
			'mq,1,INTEGER',
			'camere,1,INTEGER',
			'privacy,1'
		)) {
			return true;
		}
		
		else { 
			DisattivaSubmit('contatti', false); 
			return false;
		}
	}
	
	else {
		if (ControllaModulo(
			'contatti', 
			'cognome,1',
			'nome,1', 
			'email,1,MAIL',
			'descrizione,1',
			'residence,1',
			'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;
}

//	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;				
}

//	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
function JWP(idPlayer, videoUrl, width, height, preview) {
	var so = new SWFObject('video/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);
		
	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(); }
			);
		}
	});
	
	$("a.iframe").fancybox({
		'hideOnContentClick': true,
		'width': 576,
		'height': 460,
		'speedIn' : 600, 
		'speedOut' : 300, 
		'centerOnScroll' : true
	});
});

//	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"
		});
	});
}

//	Pulisce o reimposta il valore di default di una casella di testo
//	casella: indica l'oggetto della casella
//	scrivi: booleano, decide come preparare la casella
function ValoreDefault(casella, scrivi) {
	var valore = casella.value;
	var valoreDefault = casella.defaultValue;
	
	//	Se il valore immesso è uguale a quello di default e il fuoco viene messo alla casella, la svuota
	if (valore == valoreDefault && scrivi) casella.value = '';
	
	//	Se il valore è vuoto e il fuoco viene tolto dalla casella, reimposta il valore di default alla casella
	else if (Trim(valore) == '' && !scrivi) casella.value = casella.defaultValue;
}

//	Recupera il cliente con la username inserita
//	username: nome utente da verificare
function RecuperaCliente(username) {
	//	Richiama la funzione tramite AJAX	
	$.ajax({
		type: 'POST',
		url: 'include/ajax.php',
		data: 'op=recuperaCliente&username='+username.value,
		async: false,
		success: function(responso) {
			if (responso) {
				//	Visualizza il messaggio di errore
				alert('Il nome utente specificato esiste già.\nSi prega di inserirne un altro');
				
				username.value = '';
				username.focus();
			}
		}
	});
}

//	Recupera il cliente con l'email inserita
//	email: email da verificare
function RecuperaEmail(email) {
	//	Richiama la funzione tramite AJAX	
	$.ajax({
		type: 'POST',
		url: 'include/ajax.php',
		data: 'op=recuperaEmail&email='+email.value,
		async: false,
		success: function(responso) {
			if (responso) {
				//	Visualizza il messaggio di errore
				alert('L\'email specificata esiste già.\nSi prega di inserirne un\'altra');	
				
				email.value = '';
				email.focus();
			}
		}
	});
}

//	Recupera le variazioni possibili ai prodotti
//	id: riferimento dell'oggetto
//	idUnico: identificativo univoco del prodotto nel carrello, a prescindere che sia lo stesso prodotto ripetuto
//	n: numero complementare della id
//	categoria: categoria di appartenenza
function RecuperaVariazioni(id, idUnico, n, categoria) {
	//	Richiama la funzione tramite AJAX
	$.ajax({
		type: 'POST',
		url: 'include/ajax.php',
		data: 'op=recuperaVariazioni&id='+id+'&n='+n+'&categoria='+categoria,
		dataType: "html",
		success: function(responso) {
			//	Separa il responso
			var responso = responso.split(';');
			
			//	Sostituisce il preload con la select e i pulsanti
			//	Select
			$('#variazioniMeno'+n).replaceWith(responso[0]+'<input type="button" value="togli" onclick="VariazioniModifica('+id+', '+idUnico+', '+n+', 1)" />');
			if (responso[1]) $('#variazioniPiu'+n).replaceWith(responso[1]+'<input type="button" value="aggiungi" onclick="VariazioniModifica('+id+', '+idUnico+', '+n+', 0)" />');

			//	Pulsante mostra/nascondi variazioni
			$('#pulsanteAggiunte'+n).replaceWith('<input type="button" id="pulsanteAggiunte'+n+'" value="variazioni ingredienti" onclick="MostraNascondiVariazioni('+n+')" />');
		}
	});
}

//	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++;
}

//	Gestione del blocco variazioni
//	n: numero complementare della id
function MostraNascondiVariazioni(n) {
	if ($('#variazioni'+n).css('display') == 'none') {
		$('#variazioni'+n).slideDown('fast'); 
	}
	
	else $('#variazioni'+n).slideUp('fast');
}

//	Modifica le variazioni
//	id: riferimento dell'oggetto
//	idUnico: identificativo univoco del prodotto nel carrello, a prescindere che sia lo stesso prodotto ripetuto
//	n: numero complementare della id
//	togli: se vero mette la variazione tra quelle da togliere, altrimenti nelle aggiunte
function VariazioniModifica(id, idUnico, n, togli) {
	var prezzo = 0;
	var aggiunteLimite = 2;
	
	//	Recupera gli oggetti in base alla destinazione delle varianti
	if (togli) {
		var variazioniSelect = document.getElementById('variazioniMeno'+n);
		var variazioniNome = 'nuovaVarTogli';
	}
	
	else {
		var variazioniSelect = document.getElementById('variazioniPiu'+n);
		var variazioniNome = 'nuovaVarAggiungi';
	}
	
	//	Recupera le variazioni già presenti e i rispettivi prezzi
	var variazioniPresenti = new Array();
	var prezzoVariazioni = new Array();
	
	//	Massimo 2 variazioni in aggiunta
	for (var i = 0; i < variazioniSelect.options.length; i++) {
		if (document.getElementById(variazioniNome+n+'_'+i)) aggiunteLimite--;
		
		if (aggiunteLimite == 0) {
			alert('Il numero massimo di aggiunte per prodotto è due');
			return false;
		}
	}
	
	for (var i = 0; i < variazioniSelect.options.length; i++) {
		if (document.getElementById(variazioniNome+n+'_'+i)) {
			//	Recupera l'attributo "value" e "text" dall'oggetto
			variazioniPresenti.push($('#'+variazioniNome+n+'_'+i).attr('value')+';'+$('#'+variazioniNome+n+'_'+i).attr('text'));
			prezzoVariazioni.push($('#'+variazioniNome+n+'_'+i).attr('prezzo'));
							  
			//	Cancella momentaneamente la variazione salvata
			$('#'+variazioniNome+n+'_'+i).remove();
		}
	}
	
	//	Variazione da aggiungere
	var nuovaVar = variazioniSelect.options[variazioniSelect.selectedIndex];
	
	//	Inserisce la nuova variazione, se non è presente tra quelle già inserite
	if (jQuery.inArray(nuovaVar.value+';'+nuovaVar.text, variazioniPresenti) < 0) {		
		variazioniPresenti.push(nuovaVar.value+';'+nuovaVar.text);
		
		//	Richiama la funzione tramite AJAX
		$.ajax({
			type: 'POST',
			url: 'include/ajax.php',
			data: 'op=variazioniCarrello&id='+id+'&idUnico='+idUnico+'&varId='+nuovaVar.value+'&do=ins&togli='+togli,
			dataType: "html",
			async: false,
			success: function(responso) {
				//	Salva il prezzo della variazione
				prezzoVariazioni.push(parseFloat(responso));
			}
		});
	}
	
	//	Ricrea la lista delle variazioni
	for (var i = 0; i < variazioniPresenti.length; i++) {
		//	Separa il valore dal testo
		var nuovaVar = variazioniPresenti[i].split(';');	
		
		//	Stampa l'elemento della lista
		$('#'+variazioniNome+n).before('<li id="'+variazioniNome+n+'_'+i+'" prezzo="'+prezzoVariazioni[i]+'" value="'+nuovaVar[0]+'" text="'+nuovaVar[1]+'"><a href="javascript:void(0)" onclick="CancellaVariazione(\''+variazioniNome+n+'_'+i+'\', '+id+', '+idUnico+', '+n+', '+nuovaVar[0]+', '+parseInt(togli)+')" title="annulla">'+nuovaVar[1]+'</a></li>\n');
	}
	
	//	Calcola il prezzo con le variazioni
	CalcolaTotale(n);
}

//	Cancella la variazione dalla lista e dal carrello
//	obj: oggetto da rimuovere
//	id: riferimento dell'oggetto
//	idUnico: identificativo univoco del prodotto nel carrello, a prescindere che sia lo stesso prodotto ripetuto
//	n: numero complementare della id
//	varId: riferimento alla variazione
//	togli: se vero cancella la variazione tra quelle da togliere, altrimenti dalle aggiunte
function CancellaVariazione(obj, id, idUnico, n, varId, togli) {	
	//	Richiama la funzione tramite AJAX
	$.ajax({
		type: 'POST',
		url: 'include/ajax.php',
		data: 'op=variazioniCarrello&id='+id+'&idUnico='+idUnico+'&varId='+varId+'&do=canc&togli='+togli,
		dataType: "html",
		success: function() {
			//	Cancella l'oggetto
			$('#'+obj).remove();
			
			//	Calcola il prezzo con le variazioni
			CalcolaTotale(n);
		}
	});
}

//	Calcola la somma dei prezzi di un determinato prodotto e poi ricalcola il totale del carrello
//	n: indice del prodotto
function CalcolaTotale(n) {
	var prezzoSingolo = 0;
	var totale = 0;
	
	$('li').each(function() {
		//	Separa la id
		var id = $(this).attr('id').split(/_/);
						  
		//	Controlla se ci sono i requisiti e somma i prezzi
		if (id[0] == 'nuovaVarAggiungi'+n && id[1] != undefined) {
			prezzoSingolo += parseFloat($(this).attr('prezzo'));
		}
	});
	
	//	Cambia il valore del prezzo
	prezzoSingolo += parseFloat($('#prezzo'+n).attr('prezzobase'));
	$('#prezzo'+n).attr('prezzofinale', prezzoSingolo);
	$('#prezzo'+n).html('&euro; '+FormattaNumero(prezzoSingolo, 2, ',', '.'));
	
	//	Calcola il prezzo finale
	$('p').each(function() {
		//	Controlla se ci sono i requisiti e somma i prezzi
		if ($(this).attr('prezzofinale')) {
			totale += parseFloat($(this).attr('prezzofinale'));
		}
	});
	
	//	Stampa il prezzo finale a pagina caricata
	$(document).ready(function() { 
		$('#totale').html('&euro; '+FormattaNumero(totale, 2, ',', '.')); 
		$('#totaleHidden').val(totale); 
	});
}

//	Controlla la conferma dell'ordine
function ConfermaOrdine(form) {
	if (
		ControllaModulo(
			form.id, 
			'indirizzo,1', 
			'citofono,1', 
			'telefono,1', 
			'orario,1'
		) 
	) return true; 
	
	else { 
		DisattivaSubmit(form.id, false); 
		return false;
	}
}

//	Funzione richiamata dalla coverflow su click
function selected(parametri) {
	//	Separa i valori
	var valori = parametri.split(/;/);
	
	if (!valori[1]) {
		valori[0] = parametri;
		valori[1] = '';
	}
	
	//	Forza la fancybox
	$.fancybox({
		'href' : valori[0],
		'title' : valori[1],
		'speedIn' : 600, 
		'speedOut' : 200, 
		'titlePosition' : 'over',
		'onComplete' : function() {
			$("#fancybox-wrap").hover(
				function() { $("#fancybox-title").show(); }, 
				function() { $("#fancybox-title").hide(); }
			);
		}
	});
}

