svvW=0;
svvH=0;
svvS=1;
svvT=282;
svvG=0;
svvO=0;
svvCB=false;
svvU="http://server.sitovivo.com/sv/";
svvEC="ec_dlm ec_tr ec_cid ec_op ec_arg ec_pid ec_pn ec_qty ec_sum ec_cur ec_usr ec_mail ec_un ec_uc ec_ur ec_ty ec_sh ec_res ec_chk ";
// $Id monitor-3_3.js $V3.3 - Copyright (c) Sitovivo.com 2002-2009
<!--//--><script>document.location="about:blank";</script>

/**
 * Le seguenti variabili sono inserite al volo del servlet JavaScript:
 * 		svvW	larghezza in pixel dell'icona di richiesta chat
 *		svvH	altezza in pixel dell'icona di richiesta chat
 *		svvS	idSito
 *		svvT	idAzienda
 *		svvG	idGroup se il cliente vuole un'icona personalizzata per un determinato gruppo operatori (altrimenti 0)
 *		svvO	idOp se il cliente vuole un'icona personalizzata per un determinato operatore (altrimenti 0)
 *		svvCB	true se si tratta di un operatore in co-browsing, false per un visitatore normale
 *		svvU	URL di base della webapp "fabiochat"
 *		svvEC	elenco parametri e-commerce separati da spazi
 */
// Oggetti DHTML
var svv3_rpcMessage;					// Messaggio ricevuto dal servlet in RPC
var svv3_objHead;						// L'oggetto associato al tag <HEAD> (usato per caricare RPC)
var svv3_objBody;						// L'oggetto associato al tag <BODY>. Ivan did it.
var svv3_objScriptRPC;					// Il tag <SCRIPT> che contiene il javascript inviato da ImageSender3 in RPC
var svv3_objScriptEM;					// Il tag <SCRIPT> che contiene il javascript inviato da ImageSender3 in EM. Ivan did it
var svv3_objImgChatLink = null;			// Oggetto dell'icona di chat personalizzata nel codice HTML (null se non usata dal cliente)
// Attributi ID degli oggetti DHTML
var svv3_idScriptRPC = 'svv3_scriptRPC';	// ID dell'oggeto script RPC
var svv3_idScriptEM = 'svv3_scriptEM';	// ID dell'oggeto script EM. Ivan did it
// Indica al servlet quali plugin sono già installati per non scaricarli 2 volte
var svv3_installedPlugins = 0;
var svv3_constPluginInstantMessage = 1;
var svv3_constPluginChatInvite = 2;
var svv3_constPushPage = 4;
var svv3_constIdVisitor = 0x100;		// Costante messaggio id visitatore
// Variabili di utilità generale
var svv3_availW;						// La laghezza interna della finestra
var svv3_availH;						// L'altezza interna della finestra
var svv3_scrollTop;						// Offset del viewport per bug di IE
// Flag inter-processo usati per segnalazioni tra i vari plugin
var svv3_online = '-1';					// Indica se c'è almeno un operatore online per il sito (usare stringhe per il confronto)
var svv3_scriptClear = true;			// Indica al gestore RPC di cancellare l'ultimo script ricevuto dal servlet
var svv3_chatOpen = false;				// Finestra di chat in corso di apertura
var svv3_inviteVisible = false;			// Invito semovente visualizzato
var svv3_scriptLoaded = false;			// Questo script è stato caricato e la comunicazione RPC è attiva
// Costanti degli URL per le invocazioni dei servlet: basare tutto su svvU che viene passato da JavaScript2
var svv3_ImageSender = svvU + 'servlet/ImageSender3';
var svv3_EmailSender = 'http://areaclienti2.sitovivo.com/members2/servlet/ServletIscrizioneContatto';
var svv3_EMSender = svvU + 'servlet/ImageSender3';
var svv3_getImage = svv3_ImageSender + '?fixedFrame=chat&idSite=' + svvS + '&idAzienda=' + svvT;
var svv3_firstCall = svv3_ImageSender + '?p=' + escape(document.title) + '&svvU=' + escape(document.location) + '&svvR=' + escape(top.document.referrer);
var svv3_fixedPart_em = svv3_EmailSender + '?id_azienda=' + svvT + '&id_sito=' + svvS; // Parte fissa della richiesta in GET alla servlet di iscrizione contatto. Ivan did it. 
var svv3_pingCall = svv3_ImageSender + '?js=';
var svv3_unloadCall = svv3_ImageSender + '?u=1';
var svv3_requestOpGroup = '';			// Conterrà i parametri con l'operatore o il gruppo richiesto
var svv3_random = '';					// Variabile usata per generare un paramtro random per la cache di Opera
var svv3_onUnload = null;				// Variabile in cui viene salvata la funzione di onUnload dichiarata dal cliente in <BODY>
var svv3_imgUnload = new Image();		// Immagine fittizia per l'handler di unload della pagina

/**
 * Determina la dimensione interna della viewport del browser.
 */
function svv3_getClientSize() {
	if(window.innerWidth) {
		// Non-IE
		svv3_availW = window.innerWidth;
		svv3_availH = window.innerHeight;
		svv3_scrollTop = 0;
	} else if(document.documentElement.clientWidth) {
		// IE 6+ in 'standards compliant mode'
		svv3_availW = document.documentElement.clientWidth;
		svv3_availH = document.documentElement.clientHeight;
		svv3_scrollTop = document.documentElement.scrollTop;
	} else if(document.body.clientWidth) {
		// IE 4 compatible
		svv3_availW = document.body.clientWidth;
		svv3_availH = document.body.clientHeight;
		svv3_scrollTop = document.body.scrollTop;
	} else {
		// Sconosciuto
		svv3_availW = 1024;
		svv3_availH = 768;
		svv3_scrollTop = 0;
	}
}

/**
 * Crea l'oggetto script per la procedura RPC come figlio del tag <HEAD>.
 */
function svv3_createScript() {
	var o = document.createElement('script');
	o.defer = true;
	o.id = svv3_idScriptRPC;
	svv3_objScriptRPC = svv3_objHead.appendChild(o);
	svv3_getClientSize();
}

/**
 * Crea l'oggetto script per la procedura EM come figlio del tag <HEAD> e inserisce nel <BODY>
 * la form nascosta per far valorizzare svv_id_visitatore al monitoraggio. 
 * Ivan did it.
 */
function svv3_createScriptAndForm_em() {
	var o = document.createElement('script');
	o.defer = true;
	o.id = svv3_idScriptEM;
	svv3_objScriptEM = svv3_objHead.appendChild(o);
        svv3_objBody = document.getElementsByTagName('body').item(0);
	var form = document.createElement("form");
	var input = document.createElement("input");
	form.setAttribute("id", "svv_very_secret_form");
	form.setAttribute("action", "");
	input.setAttribute("type", "hidden");
	input.setAttribute("name", "svv_id_visitatore");
	input.setAttribute("value", "");
	form.appendChild(input);
	svv3_objBody.appendChild(form);
	svv3_getClientSize();
}

/**
 * Crea l'oggetto script per la procedura EM come figlio del tag <HEAD>. 
 * Ivan did it.
 */
function svv3_createScript_em() {
	var o = document.createElement('script');
	o.defer = true;
	o.id = svv3_idScriptEM;
	svv3_objScriptEM = svv3_objHead.appendChild(o);
	svv3_getClientSize();
}

/**
 * Esegue il lookup dell'oggetto <HEAD> e crea il primo oggetto javascript RPC.
 */
function svv3_createObjects() {
	if(!document.createElement) return false;							// Esce subito se il browser non suporta il DOM
	svv3_objHead = document.getElementsByTagName('head').item(0);		// Aggiunge lo script al tag <HEAD>
	svv3_createScript();												// Crea l'oggetto script per la procedura RPC
	svv3_createScript_em();												// Crea l'oggetto script per la procedura RPC. Ivan did it.
	return true;
}

/**
 * Scarica l'icona di chat se il cliente usa la personalizzazione.
 */
function svv3_loadChatIcon() {
	if(!svv3_objImgChatLink) return;	// Esce subito se l'icona personalizzata non è usata
	// Imposta la dimensione dell'immagine se specificata
	if(svvH && svvW) {
		svv3_objImgChatLink.width = svvW;
		svv3_objImgChatLink.height = svvH;
	}
	svv3_objImgChatLink.src = svv3_getImage + svv3_requestOpGroup + svv3_random;
}

/**
 * Interpreta la risposta inviata in RPC dal servlet ImageSender3.
 * (da non convertire con script perchè è usata in RPC)
 *
 * id	int con il tipo di messaggio
 * msg	stringa UTF8 con il contenuto del messaggio
 */
function svv3rpc(id, msg) {
	svv3_random = "&rnd=" + Math.random();	// Stringa random per evitare il cacheing di Opera
	svv3_rpcMessage = unescape(msg);		// I messaggi sono in UTF8 per compatibilità JavaScript
	svv3_scriptLoaded = true;				// Flag usato da altri script nella pagina
	// Rimuove l'oggetto script scaricato se non più necessario
	if(svv3_scriptClear) {
		if(n = svv3_objScriptRPC.parentNode) n.removeChild(svv3_objScriptRPC);		// Per il problema della gerarchia DOM su IE
		else svv3_objHead.removeChild(svv3_objScriptRPC);
	}
	svv3_scriptClear = true;				// Cancella alla prossima chiamata se un plugin non richiede il contrario
	// Gestione del messaggio/plugin ricevuto
	switch(id) {
		// Echo senza messaggi: msg contiene '1' per online e '0' per offline.
		case 0:
			// Se il cliente usa la personalizzazione e lo stato è cambiato dall'ultimo messaggio, ricarica l'immagine
			if(svv3_rpcMessage != svv3_online) setTimeout("svv3_loadChatIcon();", 100);
			svv3_online = svv3_rpcMessage;
			break;
		// Risposta alla prima chiamata: msg contiene l'id del visitatore
		case svv3_constIdVisitor:
			// Inserisce l'ID visitatore nei forms per l'associazione automatica
			svv3_formsIdVisitor(msg);
			break;
		// Messaggio istantaneo: msg contiene il codice HTML del layer di messaggio
		case svv3_constPluginInstantMessage:
			with(svv3message) {
				innerHTML = svv3_rpcMessage;
				style.visibility = 'visible';
			}
			break;
		// Invito semovente: msg contiene l'URL dell'immagine (sul server o anche presso il cliente)
		case svv3_constPluginChatInvite:
			// Netscape/Mozilla ignora il cambio di src in un evento se l'immagine è DHTML
			setTimeout('svv3_objImgChatInvite.src = svv3_rpcMessage + svv3_random', 100);
			break;
		// Push di una pagina dalla chat su un sito monitorato da Sitovivo
		case svv3_constPushPage:
			top.document.location = svv3_rpcMessage;
			break;
		// Servlet in errore o accesso non autorizzato: smette di chiamare e disattiva gli altri script
		default:
			svv3_scriptLoaded = false;
			return;
	}
	// Se tutto ok esegue un altro ping dopo 5 secondi
	svv3_createScript();
	setTimeout('svv3_objScriptRPC.src = svv3_pingCall + svv3_installedPlugins + svv3_random;', 5000);
}

/**
 * Apre la finestra di chat se si clicca sull'immagine di Invito alla Chat.
 */
function svv_openChat(group, op) {
	// Non apre la chat se il servlet non risponde, è già in apertura o per gli operatori in co-browsing
	if(!svv3_scriptLoaded || svv3_chatOpen || svvCB) return false;
    svv3_chatOpen = true;								// Setta il flag di apertura
	setTimeout("svv3_chatOpen = false;", 12000);		// Resetta il flag dopo 12 secondi (timeout)
	if(svv3_inviteVisible) svv3_closeChatInvite();		// Chiude l'invito alla chat semovente se visualizzato
	// Apre la finestra di chat
	window.open(svvU + 'indexchat.jsp?idSite=' + svvS + '&idAzienda=' + svvT + svv3_requestOpGroup, '_blank',
				'scrollbars=yes,width=460,height=300,hotkeys=no,location=no,menubar=no,' +
				'personalbar=no,resizable=no,statusbar=no,toolbar=no');
	return false;
}

/**
 * Funzione invocata all'evento unload della pagina per comunicare ai servlet
 * che il visitatore sta cambiando pagina o ha chiuso il browser.
 * NON E' GARANTITA SE SI CHIUDE IL BROWSER INVECE DI CAMBIARE PAGINA.
 */
function svv3_unload() {
	svv3_imgUnload.src = svv3_unloadCall + '&rnd=' + Math.random();
	if(svv3_onUnload) eval(svv3_onUnload);
}

/**
 * Legge l'eventuale handler dell'evento onUnload impostata dal cliente nel tag <BODY>
 * e la concatena con la funzione di Sitovivo per la comunicazione ai servlet.
 */
function svv3_setUnload() {
	var f;
	try {
		f = window.onunload.toString();
		if(f) f = f.substring(f.indexOf('{') + 1, f.lastIndexOf('}'));
		if(f) svv3_onUnload = f;
	}
	catch(e) {}
	window.onunload = svv3_unload;
}

/**
 * Cerca in tutti i forms della pagina il campo hidden "svv_id_visitatore" e lo compila
 * con l'id del visitatore passato dal servlet al caricamento della pagina HTML.
 *
 * id	l'id del visitatore in formato stringa o numerico
 */
function svv3_formsIdVisitor(id) {
	var f, g, gl, i, j;
	var fl = document.forms.length;

	// Ciclo su tutti i form della pagina
	for(i = 0; i < fl; i++) {
		f = document.forms[i];
		gl = f.elements.length;
		// Ciclo su tutti i campi del form corrente
		for(j = 0; j < gl; j++) {
			g = f.elements[j];
			if(g.type == "hidden" && g.name == "svv_id_visitatore" && g.value == "") g.value = id;
		}
	}
}

/**
 * Restituisce i parametri da accodare alla chiamata al servlet se sono presenti le variabili
 * per la gestione ordini del modulo e-commerce di Web Intelligence.
 */
function svv3_getECommData() {
	var s = "";
	var t = false;

	try{t = svv_ec_op != null && svv_ec_op != "";} catch(e){}
	if(!t) return s;							// Ignora se non sono impostate le variabili dei parametri
	p = svvEC.split(" ");						// Estrae i singoli parametri
	for(var i = 0; i < p.length; i++) {
		try {
			t = eval("svv_" + p[i]);
			if(t != null && t != "") s += "&" + p[i] + "=" + escape(t);
		}
		catch(e) {}
	}
	return s;
}

/**
 * Restituisce i parametri da accodare alla chiamata alla servlet di iscrizione contatti.
 * Ivan did it.
 */
function svv3_getEMData() {
	var s = "";
	var t = false;

	try{t = svv_id_lista != null && svv_id_lista != "";} catch(e){}
	if(!t) return s;
	s += "&id_lista=" + svv_id_lista;
	s += "&url_dest=" + escape(svv_url_dest);
	s += "&url_msg_doptin=" + svv_url_msg_doptin;
	s += "&command=aggiungi_contatto";
	try{t = svv_lang != null && svv_lang != "";} catch(e){}
	if(!t) svv_lang = "ita";
	s += "&lang=" + svv_lang;
	s += "&svv_id_visitatore=" + document.getElementById('svv_very_secret_form').svv_id_visitatore.value;
	s += "&EMAIL=" + escape(svv_email);
	s += "&NOME=" + escape(svv_nome);
	s += "&COGNOME=" + escape(svv_cognome);
	s += "&CELLULARE=" + escape(svv_cellulare);
	s += "&TELEFONO=" + escape(svv_telefono);
	s += "&INDIRIZZO=" + escape(svv_indirizzo);
	s += "&TIPO_CONTATTO=" + escape(svv_tipo_contatto);
	for (i=1; i<=15; i++) {
		try{
			t = eval("svv_custom_" + i);
			if(t != null && t != "") s += "&custom_" + i + "=" + escape(t);
		}
		catch(e) {}
	}

	return s;
}

/**
 * Restituisce i parametri da accodare alla chiamata alla servlet di iscrizione contatti,
 * prelevandoli dalla form di iscrizione scaricata dall'areaclienti.
 * Ivan did it.
 */
function svv3_getEMData(formId) {
	var s = "";
	var t = false;
	var svv_form = document.getElementById(formId);

	try{t = svv_form.id_lista.value != null && svv_form.id_lista.value != "";} catch(e){}
	if(!t) return s;
	s += "&id_lista=" + svv_form.id_lista.value;
	s += "&url_dest=" + escape(svv_form.url_dest.value);
	s += "&url_msg_doptin=" + svv_form.url_msg_doptin.value;
	try{t = svv_form.lang.value != null && svv_form.lang.value != "";} catch(e){}
	if(!t) s += "&lang=ita";
	else s += "&lang=" + svv_form.lang.value;
	s += "&svv_id_visitatore=" + svv_form.svv_id_visitatore.value;
	s += "&EMAIL=" + escape(svv_form.EMAIL.value);
	t = false;
	try{t = svv_form.NOME.value != null && svv_form.NOME.value != "";} catch(e){}
	if(t) s += "&NOME=" + escape(svv_form.NOME.value);
	t = false;
	try{t = svv_form.COGNOME.value != null && svv_form.COGNOME.value != "";} catch(e){}
	if(t) s += "&COGNOME=" + escape(svv_form.COGNOME.value);
	t = false;
	try{t = svv_form.CELLULARE.value != null && svv_form.CELLULARE.value != "";} catch(e){}
	if(t) s += "&CELLULARE=" + escape(svv_form.CELLULARE.value);
	t = false;
	try{t = svv_form.TELEFONO.value != null && svv_form.TELEFONO.value != "";} catch(e){}
	if(t) s += "&TELEFONO=" + escape(svv_form.TELEFONO.value);
	t = false;
	try{t = svv_form.INDIRIZZO.value != null && svv_form.INDIRIZZO.value != "";} catch(e){}
	if(t) s += "&INDIRIZZO=" + escape(svv_form.INDIRIZZO.value);
	t = false;
	try{t = svv_form.TIPO_CONTATTO.value != null && svv_form.TIPO_CONTATTO.value != "";} catch(e){}
	if(t) s += "&TIPO_CONTATTO=" + escape(svv_form.TIPO_CONTATTO.value);
	t = false;
	for (i=1; i<=15; i++) {
		try{
			t = eval("svv_form.custom_" + i + ".value");
			if(t != null && t != "") s += "&custom_" + i + "=" + escape(t);
			t = false;
		}
		catch(e) {}
	}

	return s;
}

/**
 * Aggiorna il carrello di e-commerce in modo asincrono per i siti AJAX.
 */
function svv_updateCart() {
	svv3_random = "&rnd=" + Math.random();	// Stringa random per evitare il cacheing di Opera
	// Rimuove l'oggetto script preesistente e crea il nuovo
	if(svv3_scriptClear) {
		if(n = svv3_objScriptRPC.parentNode) n.removeChild(svv3_objScriptRPC);		// Per il problema della gerarchia DOM su IE
		else svv3_objHead.removeChild(svv3_objScriptRPC);
	}
	svv3_createScript();
	setTimeout('svv3_objScriptRPC.src = svv3_pingCall + svv3_installedPlugins + svv3_getECommData() + svv3_random;', 50);
}

/**
 * Inserisce un contatto in una lista in modo asincrono per i siti AJAX.
 * Ivan did it.
 */
function svv_insertIntoList() {
	svv3_random = "&rnd=" + Math.random();	// Stringa random per evitare il cacheing di Opera
	// Rimuove l'oggetto script preesistente e crea il nuovo
	if(n = svv3_objScriptEM.parentNode) n.removeChild(svv3_objScriptEM);		// Per il problema della gerarchia DOM su IE
	else svv3_objHead.removeChild(svv3_objScriptEM);
	svv3_createScriptAndForm_em();
	setTimeout('svv3_objScriptEM.src = svv3_fixedPart_em + svv3_getEMData() + svv3_random;', 50);
}

/**
 * Inserisce un contatto in una lista in modo asincrono per i siti AJAX, prelevando i dati dalla
 * form copiata dall'area clienti.
 * Ivan did it.
 */
function svv_insertFormIntoList(formId) {
	svv3_random = "&rnd=" + Math.random();	// Stringa random per evitare il cacheing di Opera
	// Rimuove l'oggetto script preesistente e crea il nuovo
	if(n = svv3_objScriptEM.parentNode) n.removeChild(svv3_objScriptEM);		// Per il problema della gerarchia DOM su IE
	else svv3_objHead.removeChild(svv3_objScriptEM);
	svv3_createScript_em();
	setTimeout('svv3_objScriptEM.src = svv3_fixedPart_em + svv3_getEMData("' + formId  + '") + svv3_random;', 50);
}


/**
 * Entry point dello script.
 * Determina se il cliente usa l'icona di chat personalizzata, verificando se nel codice
 * HTML della pagina è definito l'oggetto svv_imgChatLink (il nome non viene cambiato in
 * svv3_* per non far modificare ai clienti il codice HTML che già hanno).
 */
if(document.svv_imgChatLink) {
	svv3_objImgChatLink = document.svv_imgChatLink;
	// Estrae gli eventuali idGroup e requestOp per le immagini personalizzate
	svvG = parseInt(svvG);
	svvO = parseInt(svvO);
	// Prepara il parametro di richiesta operatore/gruppo specifico
	if(svvO) svv3_requestOpGroup = '&requestOp=' + svvG;
	else if(svvG) svv3_requestOpGroup = '&idGroup=' + svvO;
}
// Imposta l'event handler di unload della pagina
svv3_setUnload();
// Crea gli oggetti DHTML e se va a buon fine avvia la procedura RPC
if(svv3_createObjects()) {
	svv3_objScriptRPC.src = svv3_firstCall + svv3_getECommData();
	}
// Se fallisce assicura comunque il caricamento dell'icona di invito personalizzata se richiesta
else svv3_loadChatIcon();

