var tuttiicaratteri			 = "";

// NUMERI
var tuttiinumeri				 			= "1234567890";

// LETTERE NORMALI
var tuttelelettereminuscole	= "qwertyuiopasdfghjklzxcvbnm";
var tutteleletteremaiuscole = tuttelelettereminuscole.toUpperCase();
var tuttelelettere					= tuttelelettereminuscole + tutteleletteremaiuscole

// LETTERE ACCENTATE
// var tuttelelettereaccentate	 = "àèìòù";
// tuttelelettereaccentate			+= tuttelelettereaccentate.toUpperCase();

// INTERPUNZIONI
var interpunzioni	= " .,/-";

// TUTTI I CARATTERI NORMALI
// var tuttiicaratterinormali = tuttiinumeri + tuttelelettere + tuttelelettereaccentate + interpunzioni;
var tuttiicaratterinormali = tuttiinumeri + tuttelelettere + interpunzioni;

var caratteritelefono		 = "0123456789";
var numerievirgole		 	 = ".,0123456789";

function swap_class(td,class_name){
	if(document.getElementById || (document.all && !(document.getElementById))) {
		td.className=class_name;
	}
}

function swap_class_id(id,class_name){
	if(document.getElementById || (document.all && !(document.getElementById))) {
		var oElement = document.getElementById(id);
		oElement.className=class_name;
	}
}

function openMenu(subMenuIndex) {
	var prevDisplay = document.getElementById('subMenu_opened_' + subMenuIndex + '_top').className;
	var newDisplay_opened = (prevDisplay == 'contentHidden') ? 'contentVisible' : 'contentHidden';
	var newDisplay_closed = (newDisplay_opened == 'contentHidden') ? 'contentVisible' : 'contentHidden';

	document.getElementById('subMenu_opened_' + subMenuIndex + '_top').className = newDisplay_opened;
	document.getElementById('subMenu_opened_' + subMenuIndex + '_bottom').className = newDisplay_opened;
	document.getElementById('subMenu_closed_' + subMenuIndex).className = newDisplay_closed;
}

function aprichiudiMenu(subMenuName,cClassName)
	{

	document.getElementById(subMenuName).className = cClassName;

	}
	
function uscitatesto(cField,nMin,nMax,cAllowedChars,nCase)
	{

	// nMin = 0;	// NUMERO MINIMO DI CARATTERI ACCETTABILI
								// 0 = NESSUN LIMITE, OVVERO CAMPO FACOLTATIVO

	// nMax = 30;	// NUMERO MASSIMO DI CARATTERI ACCETTABILI
								// DEVE SEMPRE ESSERE IMPOSTATO

	// cAllowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";	// STRINGA CONTENENTE I CARATTERI PERMESSI

	// nCase = 0		// 0 = LASCIA INVARIATO IL MAIUSCOLO/MINUSCOLO
									// 1 = TRASFORMA IN MAIUSCOLO
									// 2 = TRASFORMA IN MINUSCOLO

	// VARIABILE USATA PER MEMORIZZARE IL TIPO DELLE ALTRE VARIABILI
	// USATE NEL CORSO DELLA ELABORAZIONE PER VERIFICARE SE LE STESSE
	// SONO STATE PASSATE O MENO
	var cTipoVariabile = "";

	// SE NON E' STATO PASSATO IL NUMERO MINIMO DI CARATTERI DA GESTIRE
	// LI IMPOSTA DI DEFAULT A 0 ( = CAMPO FACOLTATIVO)
	cTipoVariabile = typeof(nMin);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMin = 0;
		}

	// SE NON E' STATO PASSATO IL NUMERO MASSIMO DI CARATTERI DA GESTIRE
	// LI IMPOSTA DI DEFAULT A 30
	cTipoVariabile = typeof(nMax);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMax = 30;
		}

	// SE NON E' STATO PASSATO IL FLAG PER LA GESTIONE DEL MAIUSCOLO/minuscolo
	// LO IMPOSTA DI DEFAULT A 1 (CAMBIA TUTTO IN MAIUSCOLO)
	cTipoVariabile = typeof(nCase);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nCase = 1;
		}

	// SE NON E' STATA PASSATA LA STRINGA CON I CARATTERI AMMESSI
	// LA IMPOSTA DI DEFAULT A "" ( = ACCETTA QUALSIASI CARATTERE)
	cTipoVariabile = typeof(cAllowedChars);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		cAllowedChars = "";
		}

	// INIZIALIZZA A VERO IL VALORE DA RITORNARE ALLO SCRIPT CHIAMANTE
	var lRet = true;

	// MEMORIZZA IL CONTENUTO DEL CAMPO PER LE SUCCESSIVE ELABORAZIONI
	var cValore = cField.value;

	if (nCase == 1)
		{
		cValore = cField.value.toUpperCase();
		}

	if (nCase == 2)
		{
		cValore = cField.value.toLowerCase();
		}

	// MEMORIZZA IL CONTENUTO DEL CAMPO PRIMA DI QUALSIASI ELABORAZIONE
	// PER POTERLO VISUALIZZARE NELL'ALERT IN CASO CHE NON SIA UN NUMERO VALIDO
	var cOldValore = cValore;

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE E' PRESENTE UNA STRINGA cAllowedChars
		if (cAllowedChars != "")
			{
			// PER OGNI CARATTERE CONTENUTO NEL CAMPO
			for (n=0;n<cValore.length;n++)
				{
				// SE LO STESSO NON E' PRESENTE NELLA STRINGA cAllowedChars
				if ( cAllowedChars.indexOf(cValore.charAt(n)) < 0 )
					{
					// VA IN ERRORE!
					alert ("Il carattere " + cValore.charAt(n).toUpperCase() + " non è ammesso");
					lRet = false;
					break;
					}
				}
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE NON E' STATO IMMESSO ALCUN VALORE E IL CAMPO E' OBBLIGATORIO...
		if ( (cValore == "") && (nMin > 0) )
			{
			// VA IN ERRORE!
			alert ("Il campo è obbligatorio!");
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// LUNGHEZZA MINIMA E MASSIMA DEL CAMPO UGUALI (CAMPO DI LUNGHEZZA FISSA)
		if ( (cValore.length > 0) && (cValore.length != nMin) && (nMin == nMax) )
			{
			// VA IN ERRORE!
			alert ("La lunghezza deve essere di " + nMin + " caratteri");
			lRet = false;
			}
		}
	
	if (lRet)
		{
		// LUNGHEZZA MINIMA DEL CAMPO
		if ( (cValore.length > 0) && (cValore.length < nMin) && (nMin > 0) )
			{
			// VA IN ERRORE!
			alert ("Lunghezza minima = " + nMin);
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// LUNGHEZZA MASSIMA DEL CAMPO
		if ( (cValore.length > 0) && (cValore.length > nMax) )
			{
			// VA IN ERRORE!
			alert ("Lunghezza massima = " + nMax);
			lRet = false;
			}
		}

	// INFINE, SE IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// VISUALIZZA IL NUMERO CORRETTAMENTE FORMATTATO
		cField.className = "input_form";
		cField.value = cValore;
		}
	else
		{
		// LASCIA INALTERATO IL VALORE DEL CAMPO
		// E LO EVIDENZIA CON SFONDO ROSSO
		cField.value = cOldValore;
		cField.className = "input_form_red";
		}

	// RITORNA IL RISULTATO ALLO SCRIPT CHIAMANTE
	return lRet;
	}

function controllaemailinvitati(cField,nMin,nMax,cAllowedChars,nCase)
	{

	// INIZIALIZZA IL VALORE DA RITORNARE ALLO SCRIPT CHIAMANTE, RICAVANDOLO DA USCITATESTO
	var lRet = uscitatesto(cField,nMin,nMax,cAllowedChars,nCase);

	if ( lRet )
		{

		var nomedelcamposucuimitrovo    = cField.name;
		var indirizzoemaildaconfrontare = cField.value;

		var primoseparatore    = 14;
		var secondoseparatore  = nomedelcamposucuimitrovo.indexOf("_",primoseparatore + 1)
		var campidaconfrontare = nomedelcamposucuimitrovo.substring(0,secondoseparatore + 1)
		var idpacchetto        = nomedelcamposucuimitrovo.substring(primoseparatore + 1,secondoseparatore)

		// PER OGNI ELEMENTO DEL FORM
		for (var n=0; n < this.document.form_avviaricerca.length ; n++)
			{

			// SE MI TROVO SU UNO DEI CAMPI EMAIL
			if ( this.document.form_avviaricerca[n].name.substring(0,campidaconfrontare.length) == campidaconfrontare)
				{

				// E SE NON E' QUELLO SU CUI MI TROVO
				if (this.document.form_avviaricerca[n].name != nomedelcamposucuimitrovo)
					{

					// SE L'INDIRIZZO EMAIL DIGITATO E' UGUALE A QUELLO CON CUI LO STIAMO CONFRONTANDO
					if ( (this.document.form_avviaricerca[n].value == indirizzoemaildaconfrontare) && (this.document.form_avviaricerca[n].value != "") )
						{

						// IMPOSTO A FALSE IL VALORE DA RITORNATE
						lRet = false;

						// E FACCIO UN ADEGUATO ALERT DI SPIEGAZIONE
						alert("ATTENZIONE: non puoi invitare lo stesso indirizzo email più volte per lo stesso corso/seminario!");
				
						}
				
					}
				
				}

			}
	
		}

	// INFINE, SE IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// VISUALIZZA IL NUMERO CORRETTAMENTE FORMATTATO
		cField.className = "input_form";
		}
	else
		{
		// LASCIA INALTERATO IL VALORE DEL CAMPO
		// E LO EVIDENZIA CON SFONDO ROSSO
		cField.className = "input_form_red";
		cField.value = "";
		}

	// RITORNA IL RISULTATO ALLO SCRIPT CHIAMANTE
	return lRet;
	
	}
	
// ROLLOVER ***INIZIO***

function MENU_swapImgRestore() {
  var i,x,a=document.MENU_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MENU_preloadImages() {
  var d=document; if(d.images){ if(!d.MENU_p) d.MENU_p=new Array();
    var i,j=d.MENU_p.length,a=MENU_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MENU_p[j]=new Image; d.MENU_p[j++].src=a[i];}}
}

function MENU_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MENU_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MENU_swapImage() {
  var i,j=0,x,a=MENU_swapImage.arguments; document.MENU_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MENU_findObj(a[i]))!=null){document.MENU_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
// ROLLOVER ***FINE***
// INIZIO FUNZIONE PER L'USCITA DECIMALE
function uscitadecimale(cField,nDecimals,nObbligatorio,nMin,nMax)
	{

	// DEBUG
	// nDecimals = 2;	// CAMBIARE IL VALORE NEL NUMERO DESIDERATO DI ECIMALI DA TESTARE
	// nObbligatorio = 1; 	// 1 = OBBLIGATORIO		0 = FACOLTATIVO
	// nMin = 0.00;		// COMMENTARE QUESTA RIGA PER NON IMPOSTARE UN VALORE MINIMO ACCETTABILE
	// nMax = 999999.99;	// COMMENTARE QUESTA RIGA PER NON IMPOSTARE UN VALORE MASSIMO ACCETTABILE

	// VARIABILE USATA PER MEMORIZZARE IL TIPO DELLE ALTRE VARIABILI
	// USATE NEL CORSO DELLA ELABORAZIONE PER VERIFICARE SE LE STESSE
	// SONO STATE PASSATE O MENO
	var cTipoVariabile = "";

	// SE NON E' STATO PASSATO IL NUMERO MINIMO ACCETTABILE
	cTipoVariabile = typeof(nMin);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMin = 0.00;
		}

	// SE NON E' STATO PASSATO IL NUMERO MASSIMO ACCETTABILE
	cTipoVariabile = typeof(nMax);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMax = 999999.99;
		}

	// SE NON E' STATO PASSATO IL NUMERO DI DECIMALI DA GESTIRE
	// LI IMPOSTA DI DEFAULT A 2
	cTipoVariabile = typeof(nDecimals);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nDecimals = 2;
		}

	// SE NON E' STATO PASSATO IL FLAG DI OBBLIGATORIETA' O MENO DEL CAMPO
	// LO IMPOSTA DI DEFAULT A OBBLIGATORIO
	cTipoVariabile = typeof(nObbligatorio);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nObbligatorio = 1;
		}

	// INIZIALIZZA LA VARIABILE CHE CONTERRA' IL RISULTATO DELLA ELABORAZIONE
	var nValore = 0.00;

	// INIZIALIZZA A VERO IL VALORE DA RITORNARE ALLO SCRIPT CHIAMANTE
	var lRet = true;

	// MEMORIZZA IL CONTENUTO DEL CAMPO PER LE SUCCESSIVE ELABORAZIONI
	var cValore = cField.value;

	// MEMORIZZA IL CONTENUTO DEL CAMPO PRIMA DI QUALSIASI ELABORAZIONE
	// PER POTERLO VISUALIZZARE NELL'ALERT IN CASO CHE NON SIA UN NUMERO VALIDO
	var cOldValore = cValore;

	// SOSTITUISCE EVENTUALI VIRGOLE CON IL CARATTERE "."
	cValore = cValore.replace(",",".");

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE NON E' STATO IMMESSO ALCUN VALORE E IL CAMPO E' OBBLIGATORIO...
		if ( (cValore == "") && (nObbligatorio == 1) )
			{
			// VA IN ERRORE!
			alert ("Il campo è obbligatorio!");
			lRet = false;
			}

		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE NON E' STATO IMMESSO ALCUN VALORE E IL CAMPO E' FACOLTATIVO...
		if ( (cValore == "") && (nObbligatorio == 0) )
			{
			// IMPOSTA IL VALORE A ZERO
			// cField.value = "0.00";
			nValore = 0.00;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE IL VALORE NON E' UN NUMERO...
		if (isNaN(cValore))
			{
			// VA IN ERRORE!
			alert (cOldValore + " non è un numero");
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// RICAVA IL VALORE COME NUMERO IN VIRGOLA MOBILE
		nValore = parseFloat(cValore);

		// SE E' STATO PASSATO UN VALORE MINIMO ACCETTABILE
		// E IL VALORE IMMESSO E' MINORE DELLO STESSO...
		cTipoVariabile = typeof(nMin);

		if ( nValore < nMin )
			{
			// VA IN ERRORE!
			alert ("Il valore minimo accettabile è " + nMin + "!");
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE E' STATO PASSATO UN VALORE MASSIMO ACCETTABILE
		// E IL VALORE IMMESSO E' SUPERIORE ALLO STESSO...
		cTipoVariabile = typeof(nMax);
		if ( nValore > nMax )
			{
			// VA IN ERRORE!
			alert ("Il valore massimo accettabile è " + nMax + "!");
			lRet = false;
			}
		}

	// INFINE, SE IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// VISUALIZZA IL NUMERO CORRETTAMENTE FORMATTATO
		cField.className = "input_form";
		nValore = nValore.toFixed(nDecimals);
		cField.value = nValore;
		}
	else
		{
		// LASCIA INALTERATO IL VALORE DEL CAMPO
		// E LO EVIDENZIA CON SFONDO ROSSO
		cField.value = cOldValore;
		cField.className = "input_form_red";
		}

	// RITORNA IL RISULTATO ALLO SCRIPT CHIAMANTE
	return lRet;

	}
// FINE FUNZIONE PER L'USCITA DECIMALE


// FUNZIONE PER FARE IL TRIM DELLE STRINGHE
function trim(stringa)
	{
	while (stringa.substring(0,1) == ' ')
		{
		stringa = stringa.substring(1, stringa.length);
    }
	while (stringa.substring(stringa.length-1, stringa.length) == ' ')
		{
		stringa = stringa.substring(0,stringa.length-1);
    }
	return stringa;
	}
	
// 16/05/2008 INIZIO
// APPLICA IN RUNTIME ALL'ELEMENTO CON ID cElement LA CLASSE cClassName 
function applicastile(cElement,cClassName)
	{	
	document.getElementById(cElement).className = cClassName;
	}

// FUNZIONE CHE CREA GLI OGGETTI http PER LE RICHIESTE CON METODOLOGIA AJAX E FACENDO RIFERIMENTO ALLE SPECIFICHE XML
function getHTTPObject()
	{
  var xmlhttp;

	// IL CODICE SEGUENTE NON L'HO CAPITO MA SERVE PER USARE L'XML CON INTERNET EXPLORER!!!
	// SEMBRA COMMENTATO MA NON LO E'!!! LASCIARLO ASSOLUTAMENTE INALTERATO!!!
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/

  if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
  	{
    try
    	{
      xmlhttp = new XMLHttpRequest();
	  	xmlhttp.overrideMimeType("text/xml");
    	}
    catch (e)
    	{
      xmlhttp = false;
    	}
  	}
  	return xmlhttp;
	}

function inizioattesa()
	{

	// VISUALIZZO IL DIV TRASPARENTE...
	document.getElementById("div_coperta").className = "divCopertaVisibile";

	// VISUALIZZO L'IMMAGINE DI ATTESA...
	document.getElementById("div_attesa").className = "divWaitVisibile";

	}
	
function fineattesa()
	{
	// NASCONDO L'IMMAGINE DI ATTESA...
	document.getElementById("div_attesa").className = "zonaNascosta";
	
	// NASCONDO IL DIV TRASPARENTE...
	document.getElementById("div_coperta").className = "zonaNascosta";
	}
// 16/05/2008 FINE

// function personalizzaprodotto(cId,cQta)
function personalizzaprodotto(cCodiceInterno,cQta,cId,cScript)
	{	
	// alert("Personalizzo il prodotto con CODICE INTERNO " + cId);
	// popuppersonalizzaprodotto = window.open('personalizzaprodotto.php?codiceinternoprodotto=' + cId + '&quantitaprodotto=' + cQta,'popuppersonalizzaprodotto','toolbar=yes,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=640,height=570,screenX=0,screenY=0,top=0,left=0');
	document.location = cScript + '?id=' + cId;
	}

// RICONOSCIMENTO DEL BROWSER
var IE = false;
var NS=false;
var browser_version = parseInt(navigator.appVersion);
var browser_type = navigator.appName;
if (browser_type == "Microsoft Internet Explorer")
	{
	IE = true;
	}
else
	{
	NS = true;
	}

// INIZIO FUNZIONE PER L'USCITA DECIMALE SENZA STILE
function uscitadecimalesenzastile(cField,nDecimals,nObbligatorio,nMin,nMax,cOkStyle,cErrorStyle)
	{

	// DEBUG
	// nDecimals = 2;	// CAMBIARE IL VALORE NEL NUMERO DESIDERATO DI ECIMALI DA TESTARE
	// nObbligatorio = 1; 	// 1 = OBBLIGATORIO		0 = FACOLTATIVO
	// nMin = 0.00;		// COMMENTARE QUESTA RIGA PER NON IMPOSTARE UN VALORE MINIMO ACCETTABILE
	// nMax = 999999.99;	// COMMENTARE QUESTA RIGA PER NON IMPOSTARE UN VALORE MASSIMO ACCETTABILE

	// VARIABILE USATA PER MEMORIZZARE IL TIPO DELLE ALTRE VARIABILI
	// USATE NEL CORSO DELLA ELABORAZIONE PER VERIFICARE SE LE STESSE
	// SONO STATE PASSATE O MENO
	var cTipoVariabile = "";

	// SE NON E' STATO PASSATO IL NUMERO MINIMO ACCETTABILE
	cTipoVariabile = typeof(nMin);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMin = 0.00;
		}

	// SE NON E' STATO PASSATO IL NUMERO MASSIMO ACCETTABILE
	cTipoVariabile = typeof(nMax);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMax = 999999.99;
		}

	// SE NON E' STATO PASSATO IL NUMERO DI DECIMALI DA GESTIRE
	// LI IMPOSTA DI DEFAULT A 2
	cTipoVariabile = typeof(nDecimals);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nDecimals = 2;
		}

	// SE NON E' STATO PASSATO IL FLAG DI OBBLIGATORIETA' O MENO DEL CAMPO
	// LO IMPOSTA DI DEFAULT A OBBLIGATORIO
	cTipoVariabile = typeof(nObbligatorio);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nObbligatorio = 1;
		}

	// INIZIALIZZA LA VARIABILE CHE CONTERRA' IL RISULTATO DELLA ELABORAZIONE
	var nValore = 0.00;

	// INIZIALIZZA A VERO IL VALORE DA RITORNARE ALLO SCRIPT CHIAMANTE
	var lRet = true;

	// MEMORIZZA IL CONTENUTO DEL CAMPO PER LE SUCCESSIVE ELABORAZIONI
	var cValore = cField.value;

	// MEMORIZZA IL CONTENUTO DEL CAMPO PRIMA DI QUALSIASI ELABORAZIONE
	// PER POTERLO VISUALIZZARE NELL'ALERT IN CASO CHE NON SIA UN NUMERO VALIDO
	var cOldValore = cValore;

	// SOSTITUISCE EVENTUALI VIRGOLE CON IL CARATTERE "."
	cValore = cValore.replace(",",".");

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE NON E' STATO IMMESSO ALCUN VALORE E IL CAMPO E' OBBLIGATORIO...
		if ( (cValore == "") && (nObbligatorio == 1) )
			{
			// VA IN ERRORE!
			alert ("Il campo è obbligatorio!");
			lRet = false;
			}

		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE NON E' STATO IMMESSO ALCUN VALORE E IL CAMPO E' FACOLTATIVO...
		if ( (cValore == "") && (nObbligatorio == 0) )
			{
			// IMPOSTA IL VALORE A ZERO
			// cField.value = "0.00";
			nValore = 0.00;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE IL VALORE NON E' UN NUMERO...
		if (isNaN(cValore))
			{
			// VA IN ERRORE!
			alert (cOldValore + " non è un numero");
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// RICAVA IL VALORE COME NUMERO IN VIRGOLA MOBILE
		nValore = parseFloat(cValore);

		// SE E' STATO PASSATO UN VALORE MINIMO ACCETTABILE
		// E IL VALORE IMMESSO E' MINORE DELLO STESSO...
		cTipoVariabile = typeof(nMin);

		if ( nValore < nMin )
			{
			// VA IN ERRORE!
			alert ("Il valore minimo accettabile è " + nMin + "!");
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE E' STATO PASSATO UN VALORE MASSIMO ACCETTABILE
		// E IL VALORE IMMESSO E' SUPERIORE ALLO STESSO...
		cTipoVariabile = typeof(nMax);
		if ( nValore > nMax )
			{
			// VA IN ERRORE!
			alert ("Il valore massimo accettabile è " + nMax + "!");
			lRet = false;
			}
		}

	// INFINE, SE IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// VISUALIZZA IL NUMERO CORRETTAMENTE FORMATTATO
		if (typeof(cOkStyle).toUpperCase() != "UNDEFINED")
			{
			cField.className = "input_form_componenti_numerico";
			}
		nValore = nValore.toFixed(nDecimals);
		cField.value = nValore;
		}
	else
		{
		// LASCIA INALTERATO IL VALORE DEL CAMPO
		// E LO EVIDENZIA CON SFONDO ROSSO
		if (typeof(cErrorStyle).toUpperCase() != "UNDEFINED")
			{
			cField.className = "input_form_red_componenti_numerico";
			}
		cField.value = cOldValore;
		
		}

	// RITORNA IL RISULTATO ALLO SCRIPT CHIAMANTE
	return lRet;

	}
// FINE FUNZIONE PER L'USCITA DECIMALE

function uscitatestosenzastile(cField,nMin,nMax,cAllowedChars,nCase,cOkStyle,cErrorStyle)
	{

	// nMin = 0;	// NUMERO MINIMO DI CARATTERI ACCETTABILI
								// 0 = NESSUN LIMITE, OVVERO CAMPO FACOLTATIVO

	// nMax = 30;	// NUMERO MASSIMO DI CARATTERI ACCETTABILI
								// DEVE SEMPRE ESSERE IMPOSTATO

	// cAllowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";	// STRINGA CONTENENTE I CARATTERI PERMESSI

	// nCase = 0		// 0 = LASCIA INVARIATO IL MAIUSCOLO/MINUSCOLO
									// 1 = TRASFORMA IN MAIUSCOLO
									// 2 = TRASFORMA IN MINUSCOLO

	// VARIABILE USATA PER MEMORIZZARE IL TIPO DELLE ALTRE VARIABILI
	// USATE NEL CORSO DELLA ELABORAZIONE PER VERIFICARE SE LE STESSE
	// SONO STATE PASSATE O MENO
	var cTipoVariabile = "";

	// SE NON E' STATO PASSATO IL NUMERO MINIMO DI CARATTERI DA GESTIRE
	// LI IMPOSTA DI DEFAULT A 0 ( = CAMPO FACOLTATIVO)
	cTipoVariabile = typeof(nMin);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMin = 0;
		}

	// SE NON E' STATO PASSATO IL NUMERO MASSIMO DI CARATTERI DA GESTIRE
	// LI IMPOSTA DI DEFAULT A 30
	cTipoVariabile = typeof(nMax);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nMax = 30;
		}

	// SE NON E' STATO PASSATO IL FLAG PER LA GESTIONE DEL MAIUSCOLO/minuscolo
	// LO IMPOSTA DI DEFAULT A 1 (CAMBIA TUTTO IN MAIUSCOLO)
	cTipoVariabile = typeof(nCase);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		nCase = 1;
		}
		
	// SE NON E' STATA PASSATA LA STRINGA CON LA CLASSE OK
	// LA IMPOSTA DI DEFAULT A ""
	cTipoVariabile = typeof(cOkStyle);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		cOkStyle = "";
		}

	// SE NON E' STATA PASSATA LA STRINGA CON I CARATTERI AMMESSI
	// LA IMPOSTA DI DEFAULT A "" ( = ACCETTA QUALSIASI CARATTERE)
	cTipoVariabile = typeof(cAllowedChars);
	if (cTipoVariabile.toUpperCase() == "UNDEFINED" )
		{
		cAllowedChars = "";
		}

	// INIZIALIZZA A VERO IL VALORE DA RITORNARE ALLO SCRIPT CHIAMANTE
	var lRet = true;

	// MEMORIZZA IL CONTENUTO DEL CAMPO PER LE SUCCESSIVE ELABORAZIONI
	var cValore = cField.value;

	if (nCase == 1)
		{
		cValore = cField.value.toUpperCase();
		}

	if (nCase == 2)
		{
		cValore = cField.value.toLowerCase();
		}

	// MEMORIZZA IL CONTENUTO DEL CAMPO PRIMA DI QUALSIASI ELABORAZIONE
	// PER POTERLO VISUALIZZARE NELL'ALERT IN CASO CHE NON SIA UN NUMERO VALIDO
	var cOldValore = cValore;

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
					
		// SE E' PRESENTE UNA STRINGA cAllowedChars
		if (cAllowedChars != "")
			{
			// PER OGNI CARATTERE CONTENUTO NEL CAMPO
			for (n=0;n<cValore.length;n++)
				{
				// SE LO STESSO NON E' PRESENTE NELLA STRINGA cAllowedChars
				if ( cAllowedChars.indexOf(cValore.charAt(n)) < 0 )
					{
					// VA IN ERRORE!
					alert ("Il carattere " + cValore.charAt(n).toUpperCase() + " non è ammesso");
					lRet = false;
					break;
					}
				}
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// SE NON E' STATO IMMESSO ALCUN VALORE E IL CAMPO E' OBBLIGATORIO...
		if ( (cValore == "") && (nMin > 0) )
			{
			// VA IN ERRORE!
			alert ("Il campo è obbligatorio!");
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// LUNGHEZZA MINIMA E MASSIMA DEL CAMPO UGUALI (CAMPO DI LUNGHEZZA FISSA)
		if ( (cValore.length > 0) && (cValore.length != nMin) && (nMin == nMax) )
			{
			// VA IN ERRORE!
			alert ("La lunghezza deve essere di " + nMin + " caratteri");
			lRet = false;
			}
		}
	
	if (lRet)
		{
		// LUNGHEZZA MINIMA DEL CAMPO
		if ( (cValore.length > 0) && (cValore.length < nMin) && (nMin > 0) )
			{
			// VA IN ERRORE!
			alert ("Lunghezza minima = " + nMin);
			lRet = false;
			}
		}

	// SE FINORA IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// LUNGHEZZA MASSIMA DEL CAMPO
		if ( (cValore.length > 0) && (cValore.length > nMax) )
			{
			// VA IN ERRORE!
			alert ("Lunghezza massima = " + nMax);
			lRet = false;
			}
		}

	// INFINE, SE IL CONTROLLO E' STATO OK...
	if (lRet)
		{
		// VISUALIZZA IL NUMERO CORRETTAMENTE FORMATTATO
		// E GLI APPLICA LO STILE PER CONTROLLO OK
		if (typeof(cOkStyle).toUpperCase() != "UNDEFINED")
			{
			cField.className = cOkStyle;
			}
		cField.value = cValore;
		}
	else
		{
		// LASCIA INALTERATO IL VALORE DEL CAMPO
		// E GLI APPLICA LO STILE PER EVIDENZIARE GLI ERRORI
		if (typeof(cErrorStyle).toUpperCase() != "UNDEFINED")
			{
			cField.className = cErrorStyle;
			}
		cField.value = cOldValore;
		}

	// RITORNA IL RISULTATO ALLO SCRIPT CHIAMANTE
	return lRet;
	}
	
function controllaselect(oSelect,cMessage,cOkStyle,cErrorStyle)
	{
		
	var lRet = true;
	
	if (oSelect.value == "")
		{
		lRet = false;
		alert("Valore selezionato non ammesso per\n" + cMessage);
		if (typeof(cErrorStyle).toUpperCase() != "UNDEFINED")
			{
			oSelect.className = cErrorStyle;
			}
		}
	else
		{
		if (typeof(cOkStyle).toUpperCase() != "UNDEFINED")
			{
			oSelect.className = cOkStyle;
			}
		}
	}
	
function deviordinare()
	{
	alert("Siamo spiacenti ma prima di effettuare\nmodifiche devi prima inserire l'articolo nel carrello ");	
	}
	
// INIZIO DATI E FUNZIONI UTILIZZATE PER LA METOLOGIA AJAX
var HttpEliminaTutto = getHTTPObject();
var HttpModificaQuantita = getHTTPObject();
var HttpGeneraPersonalizzaProdotto = getHTTPObject();

function eliminatuttoilprodotto(cId,cCarrello)
	{
	
	// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
	// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
	if (!AJAXisWorking && HttpEliminaTutto)
		{
		// VISUALIZZO L'IMMAGINE DI ATTESA...
		// inizioattesa();
		
		// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
		// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
		var randvalue = Math.random() * 100;
		HttpEliminaTutto.open("GET", "./ajax/eliminatuttoilprodotto.php?idprodotto=" + cId + "&tipocarrello=" + cCarrello + "&caso=" + randvalue.toString(), true);
			
		// AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
		HttpEliminaTutto.onreadystatechange = handleEliminaTutto;
		    	
		// IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
		// E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
		AJAXisWorking = true;
			
		// QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
		HttpEliminaTutto.send(null);
		}
	}
	
function handleEliminaTutto()
	{
		
	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpEliminaTutto.readyState == 4)
  	{
	
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText

		// DEBUG
		// alert(HttpEliminaTutto.responseText);

		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument 			= HttpEliminaTutto.responseXML; 
		var stato							= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;
	
		if (stato == "0")
			{
		
			var descrizione				= xmlDocument.getElementsByTagName('descrizione').item(0).firstChild.data;
			var cId								= xmlDocument.getElementsByTagName('idprodotto').item(0).firstChild.data;
			var tipocarrello			= xmlDocument.getElementsByTagName('tipocarrello').item(0).firstChild.data;
			var modificabile			= xmlDocument.getElementsByTagName('prodottomodificabile').item(0).firstChild.data;
			var nomescheda				= xmlDocument.getElementsByTagName('nomescheda').item(0).firstChild.data;
			var riepilogocarrello	= xmlDocument.getElementsByTagName('riepilogocarrello').item(0).firstChild.data;
			var totalecarrello		= xmlDocument.getElementsByTagName('totalecarrello').item(0).firstChild.data;
		
			// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
	   	// IMPOSTO IL FLAG DI CONTROLLO
	   	AJAXisWorking = false;
	
			// NASCONDO L'IMMAGINE DI ATTESA...
			// fineattesa();
	
			document.form_avviaricerca["quantitaval" + cId].value = "0";
			document["quantitaimg" + cId].src = "./images/numeri/" + "0" + ".gif";
	
			// RICAVO L'ELEMENTO IN CUI INSERIRE IL RIEPILOGO DEL CARRELLO
			// NOTA: L'ELEMENTO VIENE DEFINITO IN verticalmenu1.php
			var cellariepilogo = document.getElementById("cella_riepilogocarrello");			
			var testoriepilogocarrello = "";	
			if (riepilogocarrello == "VUOTO")
				{
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Il carrello &egrave; vuoto</font>\n";
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";
				}
			else
				{
				
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Hai nel carrello:</font>\n";
				testoriepilogocarrello += "<br><br>\n";

				riepilogocarrello = riepilogocarrello.substr(0,riepilogocarrello.length - 1);
					
				var aRiepilogoCarrello = riepilogocarrello.split("#");
				var rigacarrello = "";
				
				for(var r = 0; r < aRiepilogoCarrello.length; r++)
					{

					rigacarrello = aRiepilogoCarrello[r]; 

					aValoriRigaCarrello = rigacarrello.split("=");		
					// testoriepilogocarrello += "<font class=\"testo_nero_peppe\">" + aValoriRigaCarrello[0] + " (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"schedaprodotto_hallo.php?id=" + aValoriRigaCarrello[2] + "\">" + aValoriRigaCarrello[0] + "</a> (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<br>\n";

					}

				testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\">Importo &euro; <b>" + totalecarrello + "</b></font>\n";	 
				// testoriepilogocarrello += "<br>\n";	 

				if (tipocarrello == "carrelloconcomponenti")		
					{
					testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\"><a href=\"carrelloconcomponenti.php\">Vai al carrello</a></font>\n";	 
					}
				else
					{
					testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\"><a href=\"carrello.php\">Vai al carrello</a></font>\n";	 
					}
					
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";

				}
	
			if (tipocarrello == "carrelloconcomponenti")
				{
					
				// alert("se uso i componenti devo andare ad intervenire anche su pulstante applicamodifiche");	
				
				if (modificabile == "1")
					{                               
						
					if ((window.name == "selezioneprodotti")||(window.name == "carrelloconcomponenti"))		
						{
						document["img_variazioni_" + cId].src = "./images/non_ancora_ordinato.gif";
						// FUNZIONA: VERSIONE CON HREF + SET ATTRIBUTE
						var oAncora = document.getElementById("ancorapersonalizzaprodotto_" + cId);
						oAncora.setAttribute("href", "javascript:deviordinare()");
						}
					}
			
				}
		
			if (window.name == "schedaprodotto")			
				{
				// document.location = "schedaprodotto_hallo.php?id=" + cId;
				document.location = nomescheda + "?id=" + cId;
				}	
	
			if (window.name == "carrelloconcomponenti")			
				{
				document.location = "carrelloconcomponenti.php";
				}
			if (window.name == "carrello")			
				{
				document.location = "carrello.php";
				}
	
			}
		else
			{
			alert("Errore durante la modifica della quantità!");
			}		
	
		}
	
 	}
 	
function modificaquantita(cId,cQta,nInc,cCarrello,cModificabile,cCodiceInterno)
	{
						
	// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
	// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
	if (!AJAXisWorking && HttpModificaQuantita)
		{
			
		// CONTROLLO CHE NON SI SUPERINO LE 99 UNITA' (MASSIMO QUANTITATIVO ORDINABILE PER PRODOTTO
		// DA NOI ARBITRARIAMENTE DECISO. QUESTO VALORE ANDRA' PARAMETRIZZATO.
		var nQta = parseInt(cQta);
		nQta = nQta + nInc;				
		if (nQta > 99)
			{
			nQta = 99;
			}
		if (nQta < 0)
			{
			nQta = 0;
			}
			
		cQta = nQta.toString();
		
		// VISUALIZZO L'IMMAGINE DI ATTESA...
		// inizioattesa();
		
		// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
		// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
		var randvalue = Math.random() * 100;
		HttpModificaQuantita.open("GET", "./ajax/modificaquantita.php?idprodotto=" + cId + "&quantita" + cId + "=" + cQta + "&tipocarrello="+ cCarrello + "&caso=" + randvalue.toString(), true);
			
		// AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
		HttpModificaQuantita.onreadystatechange = handleModificaQuantita;
		    	
		// IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
		// E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
		AJAXisWorking = true;
			
		// QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
		HttpModificaQuantita.send(null);
		}
	}

// FUNZIONE JAVASCRIPT CLIENT-SIDE CHE ELABORA LA RISPOSTA RESTITUITA DALLO SCRIPT PHP SERVER-SIDE
function handleModificaQuantita()
	{
		
	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpModificaQuantita.readyState == 4)
  	{
	
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText

		// DEBUG
		// alert("RISPOSTA DI modificaquantita.php:\n" + HttpModificaQuantita.responseText);

		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument 			= HttpModificaQuantita.responseXML; 

		var stato							= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;
		
		if (stato == "0")
			{
		
			var cId								= xmlDocument.getElementsByTagName('idprodotto').item(0).firstChild.data;
			var nuovaquantita			= xmlDocument.getElementsByTagName('nuovaquantita').item(0).firstChild.data;
			var descrizione				= xmlDocument.getElementsByTagName('descrizione').item(0).firstChild.data;
			var tipocarrello			= xmlDocument.getElementsByTagName('tipocarrello').item(0).firstChild.data;
			var modificabile			= xmlDocument.getElementsByTagName('prodottomodificabile').item(0).firstChild.data;
			
			var modifiche					= xmlDocument.getElementsByTagName('modifiche').item(0).firstChild.data;
			var nomescheda				= xmlDocument.getElementsByTagName('nomescheda').item(0).firstChild.data;
			var segno							= xmlDocument.getElementsByTagName('segno').item(0).firstChild.data;
			var riepilogocarrello = xmlDocument.getElementsByTagName('riepilogocarrello').item(0).firstChild.data;
			var totalecarrello		= xmlDocument.getElementsByTagName('totalecarrello').item(0).firstChild.data;
			
			// SE NON CI SONO STATE MODIFICHE 
			if (modifiche != "1")
				{
				var nNuovaQuantita = parseInt(nuovaquantita);
				if (nNuovaQuantita < 1)
					{
					nuovaquantita = "0";
					}
				
					// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
	   		// IMPOSTO IL FLAG DI CONTROLLO
	   		AJAXisWorking = false;
	    	
				// NASCONDO L'IMMAGINE DI ATTESA...
				// fineattesa();
				document.form_avviaricerca["quantitaval" + cId].value = nuovaquantita;
				document["quantitaimg" + cId].src = "./images/numeri/" + nuovaquantita + ".gif";
	    	
	    	
	    	
				if (tipocarrello == "carrelloconcomponenti")
					{
						
					// alert("se uso i componenti devo andare ad intervenire anche su pulstante applicamodifiche");	
					
					if ( (modificabile == "1") && (nuovaquantita > "0"))
						{
						if ((window.name == "selezioneprodotti")||(window.name == "carrelloconcomponenti"))
							{
							document["img_variazioni_" + cId].src = "./images/applica_modifiche.gif";
							// FUNZIONA: VERSIONE CON HREF + SET ATTRIBUTE
							var oAncora = document.getElementById("ancorapersonalizzaprodotto_" + cId);
							oAncora.setAttribute("href", "javascript:schedaprodotto('" + cId + "')" );
							}
						}
						
					if ( (modificabile == "1") && (nuovaquantita == "0"))
						{
						if ((window.name == "selezioneprodotti")||(window.name == "carrelloconcomponenti"))
							{
							document["img_variazioni_" + cId].src = "./images/non_ancora_ordinato.gif";
							// FUNZIONA: VERSIONE CON HREF + SET ATTRIBUTE
							var oAncora = document.getElementById("ancorapersonalizzaprodotto_" + cId);
							oAncora.setAttribute("href", "javascript:deviordinare()" );
							}
						}		
					}
				}
			else
				{
				if (segno == "-")
					{
					alert("Ci sono modifiche e quindi devi specificare manualmene quale vuoi eliminare");
					document.location = nomescheda + "?id=" + cId;
					return;
					}
				else
					{
					var nNuovaQuantita = parseInt(nuovaquantita);
					if (nNuovaQuantita < 1)
						{
						nuovaquantita = "0";
						}
					
						// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
		   		// IMPOSTO IL FLAG DI CONTROLLO
		   		AJAXisWorking = false;
		    	
					// NASCONDO L'IMMAGINE DI ATTESA...
					// fineattesa();
					document.form_avviaricerca["quantitaval" + cId].value = nuovaquantita;
					document["quantitaimg" + cId].src = "./images/numeri/" + nuovaquantita + ".gif";
		    	
					if (tipocarrello == "carrelloconcomponenti")
						{
							
						// alert("se uso i componenti devo andare ad intervenire anche su pulstante applicamodifiche");	
						
						if ( (modificabile == "1") && (nuovaquantita > "0"))
							{
							if ((window.name == "selezioneprodotti")||(window.name == "carrelloconcomponenti"))	
								{
								document["img_variazioni_" + cId].src = "./images/applica_modifiche.gif";
								// FUNZIONA: VERSIONE CON HREF + SET ATTRIBUTE
								var oAncora = document.getElementById("ancorapersonalizzaprodotto_" + cId);
								oAncora.setAttribute("href", "javascript:schedaprodotto('" + cId + "')" );
								}
							}
							
						if ( (modificabile == "1") && (nuovaquantita == "0"))
							{
							if ((window.name == "selezioneprodotti")||(window.name == "carrelloconcomponenti"))
								{
								document["img_variazioni_" + cId].src = "./images/non_ancora_ordinato.gif";
								// FUNZIONA: VERSIONE CON HREF + SET ATTRIBUTE
								var oAncora = document.getElementById("ancorapersonalizzaprodotto_" + cId);
								oAncora.setAttribute("href", "javascript:deviordinare()" );
								}
							}
						}
					}
				}	
				
			if (tipocarrello == "carrelloconcomponenti")		
				{
				if (window.name == "schedaprodotto")			
					{
							
					var element 	= document.getElementById("cellacontenitricecomponenti");

					while (element.firstChild)
						{
	  				element.removeChild(element.firstChild);
						}
	  	
					// alert("Sono in handleModificaQuantita\nOra chiamo generapersonalizzaprodotto");
					
					// generapersonalizzaprodotto(cId,'001');
					generapersonalizzaprodotto(cId);
					}
	
				if (window.name == "carrelloconcomponenti")			
					{
					document.location = "carrelloconcomponenti.php";
					}
	
				}

			// RICAVO L'ELEMENTO IN CUI INSERIRE IL RIEPILOGO DEL CARRELLO
			// NOTA: L'ELEMENTO VIENE DEFINITO IN verticalmenu1.php
			var cellariepilogo = document.getElementById("cella_riepilogocarrello");			
			var testoriepilogocarrello = "";	
			if (riepilogocarrello == "VUOTO")
				{
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Il carrello &egrave; vuoto</font>\n";
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";
				}
			else
				{
				
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Hai nel carrello:</font>\n";
				testoriepilogocarrello += "<br><br>\n";

				riepilogocarrello = riepilogocarrello.substr(0,riepilogocarrello.length - 1);
					
				var aRiepilogoCarrello = riepilogocarrello.split("#");
				var rigacarrello = "";
				
				for(var r = 0; r < aRiepilogoCarrello.length; r++)
					{

					rigacarrello = aRiepilogoCarrello[r]; 

					aValoriRigaCarrello = rigacarrello.split("=");
					
					// testoriepilogocarrello += "<font class=\"testo_nero_peppe\">" + aValoriRigaCarrello[0] + " (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"schedaprodotto_hallo.php?id=" + aValoriRigaCarrello[2] + "\">" + aValoriRigaCarrello[0] + "</a> (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<br>\n";

					}

				testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\">Importo &euro; <b>" + totalecarrello + "</b></font>\n";	 

				if (tipocarrello == "carrelloconcomponenti")		
					{
					testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\"><a href=\"carrelloconcomponenti.php\">Vai al carrello</a></font>\n";	 
					}
				else
					{
					testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\"><a href=\"carrello.php\">Vai al carrello</a></font>\n";	 
					}

					
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";

				}

			}
		else
			{
			alert("Errore durante la modifica della quantità!");
			}		
			
		if ((window.name == "carrello")&&(tipocarrello == "carrello"))
			
			{
			document.location = "carrello.php";			
			}	
			
		}
		
 	}
 	
// PIPPO

function generapersonalizzaprodotto(cIdProdotto)
	{
	
	// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
	// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
	if (!AJAXisWorking && HttpGeneraPersonalizzaProdotto)
		{
		// VISUALIZZO L'IMMAGINE DI ATTESA...
		// inizioattesa();
		
		// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
		// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
		var randvalue = Math.random() * 100;
		HttpGeneraPersonalizzaProdotto.open("GET", "./ajax/personalizzaprodotto_ajax.php?prodottoid=" + cIdProdotto + "&caso=" + randvalue.toString(), true);
			
		// AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
		HttpGeneraPersonalizzaProdotto.onreadystatechange = handleGeneraPersonalizzaProdotto;
		    	
		// IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
		// E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
		AJAXisWorking = true;
			
		// QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
		HttpGeneraPersonalizzaProdotto.send(null);
		}
	}
	
function handleGeneraPersonalizzaProdotto()
	{
		
	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpGeneraPersonalizzaProdotto.readyState == 4)
  	{
	
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText

		// DEBUG
		// alert(HttpGeneraPersonalizzaProdotto.responseText);

		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument 			= HttpGeneraPersonalizzaProdotto.responseXML; 
		var risultato					= HttpGeneraPersonalizzaProdotto.responseText;
	
		// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
   	// IMPOSTO IL FLAG DI CONTROLLO
   	AJAXisWorking = false;

		// NASCONDO L'IMMAGINE DI ATTESA...
		// fineattesa();

		if (window.name == "schedaprodotto")			
			{
			// document.location = "schedaprodotto_hallo.php?id=" + cId;

			// alert("handleGeneraPersonalizzaProdotto\n" + HttpGeneraPersonalizzaProdotto.responseText);

			var element = document.getElementById("cellacontenitricecomponenti");
			
			element.innerHTML = HttpGeneraPersonalizzaProdotto.responseText;
			
			document.location = "#ancora_thumbs";

			}	
	
		}
	
 	}










// DICHIARO UN FLAG DI CONTROLLO CHE IMPOSTERO' A true O A false IN FUNZIONE DEL FATTO
// CHE UNA ELABORAZIONE SERVER SIDE E' IN CORSO OPPURE NO. INIZIALMENTE VALE OVVIAMENTE false
var AJAXisWorking = false;

// DICHIARO L'OGGETTO http CHE CONTERRA' LA RISPOSTA DELLO SCRIPT PHP CHE DEVE EFFETTUARE L'ELABORAZIONE SERVER-SIDE
var HttpComponentiDiBase 				= getHTTPObject();
var HttpComponentiAggiuntivi		= getHTTPObject();
var HttpEliminaProdotto					= getHTTPObject();
var HttpResettaComponenteDiBase	= getHTTPObject();
var HttpAssegnaProdottoAPersona	= getHTTPObject();
var HttpVisualizzaDestinazione	= getHTTPObject();

function chiudi()
	{
			
	if (!AJAXisWorking)
		{
		window.close();
		}
	}

function aggiornacomponentedibase(cIdProdotto,cProgressivo,cIdComponente,cQuantita,cIdSelect,cCarrello)
	{


	// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
	// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
  if (!AJAXisWorking && HttpComponentiDiBase)
  	{

		// VISUALIZZO L'IMMAGINE DI ATTESA...
		// inizioattesa();
    
		// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
		// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
		var randvalue = Math.random() * 100;
    HttpComponentiDiBase.open("GET", "./ajax/aggiornacomponentedibase.php?idprodotto=" + cIdProdotto + "&idcomponente=" + cIdComponente + "&quantita=" + cQuantita + "&progressivoprodotto=" + cProgressivo + "&idselect=" + cIdSelect + "&tipocarrello=" + cCarrello + "&caso=" + randvalue.toString(), true);

    // AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
    HttpComponentiDiBase.onreadystatechange = handleEsitoComponentiDiBase;
	    	
    // IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
    // E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
    AJAXisWorking = true;
    	
    // QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
    HttpComponentiDiBase.send(null);
    
		}
	
	}


// FUNZIONE JAVASCRIPT CLIENT-SIDE CHE ELABORA LA RISPOSTA RESTITUITA DALLO SCRIPT PHP SERVER-SIDE
function handleEsitoComponentiDiBase()
	{

	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpComponentiDiBase.readyState == 4)
  	{
  		
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText
		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument = HttpComponentiDiBase.responseXML; 
    
    // DEBUG
    // alert("handleEsitoComponentiDiBase\n" + HttpComponentiDiBase.responseText);
    
		// VALORI RESTITUITI PER L'ESITO DELL'ELABORAZIONE
		var stato				= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;
		var descrizione	= xmlDocument.getElementsByTagName('descrizione').item(0).firstChild.data;
		var progressivo		= xmlDocument.getElementsByTagName('progressivo').item(0).firstChild.data
		var riepilogocarrello		= xmlDocument.getElementsByTagName('riepilogocarrello').item(0).firstChild.data
		var totalecarrello		= xmlDocument.getElementsByTagName('totalecarrello').item(0).firstChild.data
		var tipocarrello			= xmlDocument.getElementsByTagName('tipocarrello').item(0).firstChild.data;
		
		// QUESTA VARIABILE MI DICE QUANTE MODIFICHE PER COMPONENTI DI BASE CI SONO
		var cModifiche	= xmlDocument.getElementsByTagName('numeromodifiche').item(0).firstChild.data;
		var nModifiche	= parseInt(cModifiche);

		// SE LA RISPOSTA AJAX E' OK
		if (stato == "0")
			{
		
			// INIZIALIZZO UNA VARIABILE PER LE VARIE MODIFICHE
			var cModifica = "";
		
			// INIZIALIZZO IL TESTO HTML
			testoHTML = "";

			if (nModifiche > 0)
				{

				testoHTML += "<table border='0' cellspacing='2' width='100%'>\n";
				
				// PER OGNI MODIFICA AI COMPONENTI DI BASE
				for (var n=0; n < nModifiche; n++)
					{

					// RICAVO LA MODIFICA (HA QUANTITA, DESCRIZIONE, PREZZO, ID PRODOTTO E ID COMPONENTE SEPARATI DA *#*)
					cModifica	= xmlDocument.getElementsByTagName('modifica').item(n).firstChild.data;
	
					// RICAVO I SINGOLI ELEMENTI DELLA MODIFICA
					var aModifica = cModifica.split("*#*");
				
					// DEBUG
					// alert("handleEsitoComponentiDiBase\n"+aModifica);
				
					// COSTRUISCO LA RIGA
					testoHTML += "<tr>\n";
					testoHTML += "<td>\n";
					testoHTML += "<font class='testo_nero_peppe'>" + aModifica[0] + " " + aModifica[1] + "</font>\n";
					testoHTML += "</td>\n";
					testoHTML += "<td width='45' align='right'>\n";
					testoHTML += "<font class='testo_nero_peppe'>" + aModifica[2] + " &euro;</font>\n";
					testoHTML += "</td>\n";				
					testoHTML += "<td width='45' align='right'>\n";				
					// testoHTML += "<a href=javascript:resettacomponentedibase('" + aModifica[3] + "','" + progressivo + "','" + aModifica[4] + "','selectcomponentedibase_" + aModifica[6] + "_" + progressivo + "','" + aModifica[4] + "')>Annulla</a>\n";
					testoHTML += "<a class='link_rosso_peppe' href=javascript:resettacomponentedibase('" + aModifica[3] + "','" + progressivo + "','" + aModifica[4] + "','selectcomponentedibase_" + aModifica[6] + "_" + progressivo + "','carrelloconcomponenti.php')>Annulla</a>\n";
					testoHTML += "</td>\n";				
					testoHTML += "</tr>\n";
				
					}
					
				testoHTML += "</table>\n";
							
				}
			else
				{
				testoHTML += "&nbsp;";
				}
			
			// INSERISCO IL TESTO HTML NELLA CELLA
			var celladaaggiornare							= document.getElementById("cellacomponentidibasemodificatielenco" + progressivo);
			celladaaggiornare.innerHTML = testoHTML;

			// RICAVO L'ELEMENTO IN CUI INSERIRE IL RIEPILOGO DEL CARRELLO
			// NOTA: L'ELEMENTO VIENE DEFINITO IN verticalmenu1.php
			var cellariepilogo = document.getElementById("cella_riepilogocarrello");			
			var testoriepilogocarrello = "";	
			if (riepilogocarrello == "VUOTO")
				{
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Il carrello &egrave; vuoto</font>\n";
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";
				}
			else
				{
			
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Hai nel carrello:</font>\n";
				testoriepilogocarrello += "<br><br>\n";

				riepilogocarrello = riepilogocarrello.substr(0,riepilogocarrello.length - 1);
					
				var aRiepilogoCarrello = riepilogocarrello.split("#");
				var rigacarrello = "";
				
				for(var r = 0; r < aRiepilogoCarrello.length; r++)
					{

					rigacarrello = aRiepilogoCarrello[r]; 

					aValoriRigaCarrello = rigacarrello.split("=");		
					// testoriepilogocarrello += "<font class=\"testo_nero_peppe\">" + aValoriRigaCarrello[0] + " (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"schedaprodotto_hallo.php?id=" + aValoriRigaCarrello[2] + "\">" + aValoriRigaCarrello[0] + "</a> (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<br>\n";

					}

				testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\">Importo &euro; <b>" + totalecarrello + "</b></font>\n";	 
				
				testoriepilogocarrello += "<br>\n";
				testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"carrelloconcomponenti.php\">Vai al carrello</a></font>\n";

				
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";

				}

			}
		else
			{
			alert("Operazione fallita!");
			}
		
		// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
   	// IMPOSTO IL FLAG DI CONTROLLO
   	AJAXisWorking = false;
 
		// NASCONDO L'IMMAGINE DI ATTESA...
		// fineattesa();
		
		}

 	}

	
function aggiungicomponenteaggiuntivo(cIdProdotto,cProgressivo,cIdComponente,cQuantita,cCarrello)
	{
	// SE E' STATO SELEZIONATO UN COMPONENTE DA AGGIUNGERE
	if (cIdComponente != "")
		{		
			
		// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
		// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
  	if (!AJAXisWorking && HttpComponentiAggiuntivi)
  		{
  	
			// VISUALIZZO L'IMMAGINE DI ATTESA...
			// inizioattesa();
  	  
			// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
			// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
			var randvalue = Math.random() * 100;
  	  HttpComponentiAggiuntivi.open("GET", "./ajax/aggiungicomponenteaggiuntivo.php?idprodotto=" + cIdProdotto + "&idcomponente=" + cIdComponente + "&quantita=" + cQuantita + "&progressivoprodotto=" + cProgressivo + "&tipocarrello="+ cCarrello + "&caso=" + randvalue.toString(), true);
  	
  	  // AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
  	  HttpComponentiAggiuntivi.onreadystatechange = handleEsitoComponentiAggiuntivi;
		    	
  	  // IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
  	  // E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
  	  AJAXisWorking = true;
  	  	
  	  // QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
  	  HttpComponentiAggiuntivi.send(null);
			}
		}
	}


// FUNZIONE JAVASCRIPT CLIENT-SIDE CHE ELABORA LA RISPOSTA RESTITUITA DALLO SCRIPT PHP SERVER-SIDE
function handleEsitoComponentiAggiuntivi()
	{

	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpComponentiAggiuntivi.readyState == 4)
  	{
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText
		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument = HttpComponentiAggiuntivi.responseXML; 
    
    // DEBUG
    // alert("handleEsitoComponentiAggiuntivi\n" + HttpComponentiAggiuntivi.responseText);
    
		// VALORI RESTITUITI PER L'ESITO DELL'ELABORAZIONE
		var stato							= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;
		var descrizione				= xmlDocument.getElementsByTagName('descrizione').item(0).firstChild.data;
		var progressivo				= xmlDocument.getElementsByTagName('progressivo').item(0).firstChild.data;
		var numerocomponenti	= xmlDocument.getElementsByTagName('numerocomponenti').item(0).firstChild.data;
		var riepilogocarrello	= xmlDocument.getElementsByTagName('riepilogocarrello').item(0).firstChild.data;
		var totalecarrello		= xmlDocument.getElementsByTagName('totalecarrello').item(0).firstChild.data;

		// SE LA RISPOSTA AJAX E' OK
		if (stato == "0")
			{
			
			// AGGIORNA L'ELENCO DEI COMPONENTI AGGIUNTI AL PRODOTTO
			var celladaaggiornare							= document.getElementById("cellacomponentiaggiuntielenco" + progressivo);
			var descrizioneeprezzocomponente	= document.getElementById("selectcomponentiaggiungibili_" + progressivo).getElementsByTagName("option")[document.form_personalizzaprodotto["selectcomponentiaggiungibili_" + progressivo].selectedIndex].innerHTML;
			var carattere											= "";
			var primaparentesi								= -1;
			var euro													= -1;
			var prezzocomponente							= "";
			var descrizionecomponente					= "";
			var idcomponente									= "";
			var idedescrizionecomponente			= "";

			// TROVO LA POSIZIONE DEL CARATTERE "("
			for (var n = 0; n < descrizioneeprezzocomponente.length ; n++)
				{
				carattere = descrizioneeprezzocomponente.substr(n,1);
				if (carattere == "(")
					{
					primaparentesi = n;
					break;
					}
				}

			// TROVO LA POSIZIONE DEL CARATTERE "€"
			for (n = 0; n < descrizioneeprezzocomponente.length ; n++)
				{
				carattere = descrizioneeprezzocomponente.substr(n,1);
				if (carattere == "€")
					{
					euro = n;
					break;
					}
				}

			// DETERMINO LA SOTTOSTRINGA CONTENENTE IL PREZZO DEL COMPONENTE
			prezzocomponente = descrizioneeprezzocomponente.substr(primaparentesi + 1, euro - primaparentesi -2)

			var testoHTML = "";
			// testoHTML += "<table border='0' cellspacing='2' id='tabellacomponentiaggiunti" + progressivo + " width='100%'>\n";	
			testoHTML += "<table border='0' cellspacing='2' width='100%'>\n";	

			for (n = 0; n < numerocomponenti ; n++)
				{
				
				idedescrizionecomponente = xmlDocument.getElementsByTagName('componente').item(n).firstChild.data;
				
				aComponente = idedescrizionecomponente.split(";");
				descrizionecomponente 			= aComponente[1];
				idcomponente								= aComponente[0];
				prezzoaggiuntivocomponente	= aComponente[2];
				prodottocomponente					= aComponente[3];
				
				// testoHTML += "<tr id='rigacomponentiaggiunti" + prodottocomponente + "_" + progressivo + "_" + idcomponente + "'>\n";
				testoHTML += "<tr>\n";
				testoHTML += "<td>\n";
				testoHTML += "<font class='testo_nero_peppe'>" + descrizionecomponente + "</font>\n";
				testoHTML += "</td>\n";
				testoHTML += "<td width='45' align='right'>\n";
				testoHTML += "<font class='testo_nero_peppe'>+" + prezzoaggiuntivocomponente + " &euro;</font>\n";
				testoHTML += "</td>\n";
				testoHTML += "<td width='45' align='right'>\n";				
				testoHTML += "<a class='link_rosso_peppe' href=javascript:aggiungicomponenteaggiuntivo('" + prodottocomponente + "','" + progressivo + "'," + idcomponente + ",'0')>Annulla</a>\n";
				testoHTML += "</td>\n";
				testoHTML += "</tr>\n";

		
				}

			testoHTML += "</table>\n";
			
			celladaaggiornare.innerHTML = testoHTML;
			// celladaaggiornare.nodeValue = testoHTML;
			
			// RICAVO L'ELEMENTO IN CUI INSERIRE IL RIEPILOGO DEL CARRELLO
			// NOTA: L'ELEMENTO VIENE DEFINITO IN verticalmenu1.php
			var cellariepilogo = document.getElementById("cella_riepilogocarrello");			
			var testoriepilogocarrello = "";	
			if (riepilogocarrello == "VUOTO")
				{
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Il carrello &egrave; vuoto</font>\n";
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";
				}
			else
				{
				
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Hai nel carrello:</font>\n";
				testoriepilogocarrello += "<br><br>\n";

				riepilogocarrello = riepilogocarrello.substr(0,riepilogocarrello.length - 1);
					
				var aRiepilogoCarrello = riepilogocarrello.split("#");
				var rigacarrello = "";
				
				for(var r = 0; r < aRiepilogoCarrello.length; r++)
					{

					rigacarrello = aRiepilogoCarrello[r]; 

					aValoriRigaCarrello = rigacarrello.split("=");		
					// testoriepilogocarrello += "<font class=\"testo_nero_peppe\">" + aValoriRigaCarrello[0] + " (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"schedaprodotto_hallo.php?id=" + aValoriRigaCarrello[2] + "\">" + aValoriRigaCarrello[0] + "</a> (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<br>\n";

					}

				testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\">Importo &euro; <b>" + totalecarrello + "</b></font>\n";	 
				
				testoriepilogocarrello += "<br>\n";
				testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"carrelloconcomponenti.php\">Vai al carrello</a></font>\n";
				
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";

				}			
			
			// RESETTA LA SELECT PER I COMPONENTIU AGGIUNTIVI
			document.form_personalizzaprodotto["selectcomponentiaggiungibili_" + progressivo].selectedIndex = '0';		
			
			// alert("Aggiunta riuscita!");
			// alert(descrizione);

			}
		else
			{
			alert("Operazione fallita!");
			}
		
		// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
   	// IMPOSTO IL FLAG DI CONTROLLO
   	AJAXisWorking = false;
 
		// NASCONDO L'IMMAGINE DI ATTESA...
		// fineattesa();
		}


 	}
 	
function eliminaprodottodaordine(cIdProdotto,cProgressivo)
	{
	// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
	// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
	if (!AJAXisWorking && HttpEliminaProdotto)
		{
	
		// VISUALIZZO L'IMMAGINE DI ATTESA...
		// inizioattesa();
	  
		// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
		// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
		var randvalue = Math.random() * 100;
	  HttpEliminaProdotto.open("GET", "./ajax/eliminaprodottodaordine.php?idprodotto=" + cIdProdotto + "&progressivoprodotto=" + cProgressivo + "&caso=" + randvalue.toString(), true);
	
	  // AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
	  HttpEliminaProdotto.onreadystatechange = handleEliminaProdotto;
	    	
	  // IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
	  // E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
	  AJAXisWorking = true;
	  	
	  // QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
	  HttpEliminaProdotto.send(null);
		}
	} 	
	
// FUNZIONE JAVASCRIPT CLIENT-SIDE CHE ELABORA LA RISPOSTA RESTITUITA DALLO SCRIPT PHP SERVER-SIDE
function handleEliminaProdotto()
	{

	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpEliminaProdotto.readyState == 4)
  	{
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText
		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument = HttpEliminaProdotto.responseXML; 
    
    // DEBUG
    // alert("handleEliminaProdotto\n" + HttpEliminaProdotto.responseText);
    
		// VALORI RESTITUITI PER L'ESITO DELL'ELABORAZIONE

		var stato									= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;

		// SE LA RISPOSTA AJAX E' OK
		if (stato == "0")
			{

			var codiceinternoprodotto	= xmlDocument.getElementsByTagName('codiceinternoprodotto').item(0).firstChild.data;
			var quantitaprodotto			= xmlDocument.getElementsByTagName('quantitaprodotto').item(0).firstChild.data;
			var idprodotto						= xmlDocument.getElementsByTagName('idprodotto').item(0).firstChild.data;

			// RICARICO QUESTO SCRIPT
			window.location = "schedaprodotto_hallo.php?id=" + idprodotto;

			}
		else
			{
			alert("Eliminazione prodotto dall'ordine fallita!");
			}
		
		// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
   	// IMPOSTO IL FLAG DI CONTROLLO
   	AJAXisWorking = false;
 
		// NASCONDO L'IMMAGINE DI ATTESA...
		// fineattesa();
		}


 	}

function resettacomponentedibase(cIdProdotto,cProgressivo,cIdComponente,cIdSelect,cCarrello)
	{
	
	// alert(cIdProdotto +"\n" + cProgressivo + "\n" + cIdComponente + "\n" + cIdSelect);
	
	// SE E' STATO SELEZIONATO UN COMPONENTE DA RESETTARE
	if (cIdComponente != "")
		{		
			
		// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
		// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
  	if (!AJAXisWorking && HttpResettaComponenteDiBase)
  		{
  	
			// VISUALIZZO L'IMMAGINE DI ATTESA...
			// inizioattesa();
  	  
			// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
			// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
			var randvalue = Math.random() * 100;
  	  HttpResettaComponenteDiBase.open("GET", "./ajax/resettacomponentedibase.php?idprodotto=" + cIdProdotto + "&idcomponente=" + cIdComponente + "&progressivoprodotto=" + cProgressivo + "&idselect=" + cIdSelect + "&tipocarrello=" + cCarrello + "&caso=" + randvalue.toString(), true);
  	
  	  // AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
  	  HttpResettaComponenteDiBase.onreadystatechange = handleResettaComponenteDiBase;
		    	
  	  // IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
  	  // E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
  	  AJAXisWorking = true;
  	  	
  	  // QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
  	  HttpResettaComponenteDiBase.send(null);
			}
		}
	else
		{
		alert("Attenzione: nessun ingrediente selezionato!");
		}

	
	}


// FUNZIONE JAVASCRIPT CLIENT-SIDE CHE ELABORA LA RISPOSTA RESTITUITA DALLO SCRIPT PHP SERVER-SIDE
function handleResettaComponenteDiBase()
	{
		

	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpResettaComponenteDiBase.readyState == 4)
  	{
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText
		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument = HttpResettaComponenteDiBase.responseXML; 
    
    // DEBUG
    // alert("handleResettaComponenteDiBase\n" + HttpResettaComponenteDiBase.responseText);
    
		// VALORI RESTITUITI PER L'ESITO DELL'ELABORAZIONE
		var stato							= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;
		var descrizione				= xmlDocument.getElementsByTagName('descrizione').item(0).firstChild.data;
		var idselect					= xmlDocument.getElementsByTagName('idselect').item(0).firstChild.data;
		var riepilogocarrello	= xmlDocument.getElementsByTagName('riepilogocarrello').item(0).firstChild.data;
		var totalecarrello		= xmlDocument.getElementsByTagName('totalecarrello').item(0).firstChild.data;
		var tipocarrello			= xmlDocument.getElementsByTagName('tipocarrello').item(0).firstChild.data;

		// SE LA RISPOSTA AJAX E' OK
		if (stato == "0")
			{

			var progressivo				= xmlDocument.getElementsByTagName('progressivo').item(0).firstChild.data;
			
			// INIZIALIZZO UNA VARIABILE PER LE VARIE MODIFICHE
			var cModifiche = xmlDocument.getElementsByTagName('numeromodifiche').item(0).firstChild.data;
			var nModifiche = parseInt(cModifiche);
		
			// INIZIALIZZO IL TESTO HTML
			testoHTML = "";

			if (nModifiche > 0)
				{

				testoHTML += "<table border='0' cellspacing='2' width='100%'>\n";
				
				// PER OGNI MODIFICA AI COMPONENTI DI BASE
				for (var n=0; n < nModifiche; n++)
					{

					// RICAVO LA MODIFICA (HA QUANTITA, DESCRIZIONE, PREZZO, ID PRODOTTO E ID COMPONENTE SEPARATI DA *#*)
					cModifica	= xmlDocument.getElementsByTagName('modifica').item(n).firstChild.data;
					// alert("PUNTO ROBERTO: \n" + cModifica);
	
					// RICAVO I SINGOLI ELEMENTI DELLA MODIFICA
					var aModifica = cModifica.split("*#*");
				
					// DEBUG
					// alert("aModifica in handleResettaComponenteDiBase\n" + aModifica);
				
					// COSTRUISCO LA RIGA
					testoHTML += "<tr>\n";
					testoHTML += "<td>\n";
					testoHTML += "<font class='testo_nero_peppe'>" + aModifica[0] + " " + aModifica[1] + "</font>\n";
					testoHTML += "</td>\n";
					testoHTML += "<td width='45' align='right'>\n";
					testoHTML += "<font class='testo_nero_peppe'>" + aModifica[2] + " &euro;</font>\n";
					testoHTML += "</td>\n";				
					testoHTML += "<td width='45' align='right'>\n";				
					// testoHTML += "<a href=javascript:resettacomponentedibase('" + aModifica[3] + "','" + progressivo + "','" + aModifica[4] + "','" + aModifica[5] + "_" + progressivo + "','" + aModifica[4] + "')>Annulla</a>\n";
					testoHTML += "<a class='link_rosso_peppe' href=javascript:resettacomponentedibase('" + aModifica[3] + "','" + progressivo + "','" + aModifica[4] + "','" + aModifica[5] + "','" + aModifica[4] + "')>Annulla</a>\n";
					testoHTML += "</td>\n";				
					testoHTML += "</tr>\n";
				
					}
					
				testoHTML += "</table>\n";
							
				}
			else
				{					
				testoHTML += "&nbsp;";
				}
			
			// INSERISCO IL TESTO HTML NELLA CELLA
			var celladaaggiornare							= document.getElementById("cellacomponentidibasemodificatielenco" + progressivo);
			celladaaggiornare.innerHTML = testoHTML;

			// RICAVO L'ELEMENTO IN CUI INSERIRE IL RIEPILOGO DEL CARRELLO
			// NOTA: L'ELEMENTO VIENE DEFINITO IN verticalmenu1.php
			var cellariepilogo = document.getElementById("cella_riepilogocarrello");			
			var testoriepilogocarrello = "";	
			if (riepilogocarrello == "VUOTO")
				{
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Il carrello &egrave; vuoto</font>\n";
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";
				}
			else
				{

			// DEBUG
			// alert("STO QUI: " + riepilogocarrello + " euro " + totalecarrello);
				
				testoriepilogocarrello = "<font class=\"testo_nero_peppe\">Hai nel carrello:</font>\n";
				testoriepilogocarrello += "<br><br>\n";

				riepilogocarrello = riepilogocarrello.substr(0,riepilogocarrello.length - 1);
					
				var aRiepilogoCarrello = riepilogocarrello.split("#");
				var rigacarrello = "";
				
				for(var r = 0; r < aRiepilogoCarrello.length; r++)
					{

					rigacarrello = aRiepilogoCarrello[r]; 

					aValoriRigaCarrello = rigacarrello.split("=");		
					// testoriepilogocarrello += "<font class=\"testo_nero_peppe\">" + aValoriRigaCarrello[0] + " (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<font class=\"testo_nero_peppe\"><a href=\"schedaprodotto_hallo.php?id=" + aValoriRigaCarrello[2] + "\">" + aValoriRigaCarrello[0] + "</a> (" + aValoriRigaCarrello[1] + ")</font>\n";
					testoriepilogocarrello += "<br>\n";

					}

				testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\">Importo &euro; <b>" + totalecarrello + "</b></font>\n";	 
				
				if (tipocarrello == "carrelloconcomponenti")		
					{
					testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\"><a href=\"carrelloconcomponenti.php\">Vai al carrello</a></font>\n";	 
					}
				else
					{
					testoriepilogocarrello += "<br><font class=\"testo_nero_peppe\"><a href=\"carrello.php\">Vai al carrello</a></font>\n";	 
					}			
				
				cellariepilogo.innerHTML = testoriepilogocarrello + "<br><br>\n";

				}

			// RESETTO LA SELECT RELATIVA AL COMPONENTE
			document.getElementById(idselect).selectedIndex = 0;
			
			}
		else
			{
			alert("Operazione fallita!");
			}
		
		// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
   	// IMPOSTO IL FLAG DI CONTROLLO
   	AJAXisWorking = false;
 
		// NASCONDO L'IMMAGINE DI ATTESA...
		// fineattesa();
		}

 	}

/* 	
 function assegnaprodottoapersona(cNomeVariabile,cValoreVariabile)
 	{
 	if (cValoreVariabile != "")
 		{
 		alert("assegnaprodottoapersona\n" + cNomeVariabile + "\n" + cValoreVariabile + "\nDevo assegnare questo prodotto a " + cValoreVariabile);
 		}
 	}
 */
 	
function assegnaprodottoapersona(cNomeVariabile,cValoreVariabile)
	{
	
	// alert(cIdProdotto +"\n" + cProgressivo + "\n" + cIdComponente + "\n" + cIdSelect);
	
			
		// SE NON E' GIA' IN CORSO UNA ELABORAZIONE SERVER-SIDE
		// E SE E' STATO DICHIARATO L'OGGETTO http IN CUI METTERE LA RISPOSTA DELLO SCRIPT SERVER-SIDE
  	if (!AJAXisWorking && HttpAssegnaProdottoAPersona)
  		{
  	
			// VISUALIZZO L'IMMAGINE DI ATTESA...
			// inizioattesa();
  	  
			// INVIA FISICAMENTE LA RICHIESTA ALLO SCRIPT SERVER-SIDE
			// IL PARAMETRO "caso" CON VALORE RANDOM VIENE USATO PER NON USARE LA CACHE DEL BROWSER
			var randvalue = Math.random() * 100;
  	  HttpAssegnaProdottoAPersona.open("GET", "./ajax/assegnaprodottoapersona.php?nomevariabile=" + cNomeVariabile + "&valorevariabile=" + cValoreVariabile.toUpperCase() + "&caso=" + randvalue.toString(), true);
  	
  	  // AL CAMBIAMENTO DI STATO DELL'OGGETTO http AVVIA LA GESTIONE DELLO STESSO
  	  HttpAssegnaProdottoAPersona.onreadystatechange = handleAssegnaProdottoAPersona;
		    	
  	  // IMPOSTA IL FLAG IN MODO CHE TUTTO JAVASCRIPT SAPPIA CHE E' IN CORSO UNA ELABORAZIONE SERVER-SIDE
  	  // E CHE DEVE ATTENDERE LA SUA CONCLUSIONE PRIMA DI POTERNE AVVIARE UN'ALTRA
  	  AJAXisWorking = true;
  	  	
  	  // QUESTA NON L'HO ANCORA CAPITA... :-( MA SERVE!!!
  	  HttpAssegnaProdottoAPersona.send(null);
			}
	
	}


// FUNZIONE JAVASCRIPT CLIENT-SIDE CHE ELABORA LA RISPOSTA RESTITUITA DALLO SCRIPT PHP SERVER-SIDE
function handleAssegnaProdottoAPersona()
	{
		

	// SE L'OGGETTO http E' IN UNA SITUAZIONE CHE NE CONSENTE L'ELABORAZIONE
  if (HttpAssegnaProdottoAPersona.readyState == 4)
  	{
  	// LA RISPOSTA FORNITA DALLO SCRIPT PHP SERVER SIDE SI TROVA IN http.responseText
		var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
    // USO XML DOM PER RICAVARE I DATI DI MIO INTERESSE DALLA RISPOSTA RICEVUTA DAL SERVER
    // CHE E' IN FORMATO XML ED E' CONTENUTA IN http.responseText
    var xmlDocument = HttpAssegnaProdottoAPersona.responseXML; 
    
    // DEBUG
    // alert("handleAssegnaProdottoAPersona\n" + HttpAssegnaProdottoAPersona.responseText);
    
		// VALORI RESTITUITI PER L'ESITO DELL'ELABORAZIONE
		var stato							= xmlDocument.getElementsByTagName('stato').item(0).firstChild.data;
		var descrizione				= xmlDocument.getElementsByTagName('descrizione').item(0).firstChild.data;

		// SE LA RISPOSTA AJAX E' OK
		if (stato == "0")
			{

			var campo = xmlDocument.getElementsByTagName('nomecampo').item(0).firstChild.data;
			var vuoto  = xmlDocument.getElementsByTagName('campovuoto').item(0).firstChild.data;

			var valore = "";
			if (vuoto == "0")
				{
				valore = xmlDocument.getElementsByTagName('valorecampo').item(0).firstChild.data;
				}
			else
				{
				valore = "";
				}
				
			// alert("persona_idprodotto_9_progressivoprodotto_1\n" + campo);
			
			valore = valore.toUpperCase();
			
			document.form_personalizzaprodotto[campo].value = valore;
						
			}
		else
			{
			alert("Operazione fallita!");
			}
		
		// TERMINATA L'ELABORAZIONE CLIENT SIDE DELLA RISPOSTA AVUTA DALLO SCRIPT SERVER-SIDE
   	// IMPOSTO IL FLAG DI CONTROLLO
   	AJAXisWorking = false;
 
		// NASCONDO L'IMMAGINE DI ATTESA...
		// fineattesa();
		
		return;
		
		}

 	}





