// **********************************************************************************************
//  MyVoice¨ Net Facile
//  v.2.4.2
//
//  developed & engineered by Piero Alcamo & Francesco Spadoni
//  ©2006 Rigel Engineering S.r.l.
//  
//	modificata:
//		06 Febbraio 2006	- Alfonso Tatarelli [2.3]
//		08 Febbraio 2006	- Piero Alcamo [2.3.1]
//		13 Marzo 2006		- Alfonso Tatarelli [2.3.2]
//								Definita variabile myv_wp necessaria per il plugin di WordPress.
//		14 Marzo 2006		- Piero Alcamo [2.4.0]
//								Modificato per il parsing con lexicon:
//								- variabile myv_lexicon_on  (riga 30)
//								- Aggiunto myv_lexiconInit(); nella funzione myv_init2()  (riga 136)
//								- Aggiunto parametro "parseit" a ParlaTesto
//								- Modicate funzioni myv_SpeakText e myv_SpeakTextSafari
//								- Aggiunte funzioni per il lexicon in fondo alla libreria (da riga 1366)
//
//		22 Marzo 2006		- Piero Alcamo  [2.4.1]
//								Aggiunta variabile "addspeakbuttons", che permette di decidere se
//								inserire nel pannello i bottoni per lo speak dei links o 
//								della pagina (righe 35, 957, 1065)
//		31 Marzo 2006		- Piero Alcamo  [2.4.2]
//								- Modificato CreaOggettoMyVoice vedi riga 1121
//								-  Aggiunta la funzione myv_waitUntilInitialized, richiamata da
//								  ParlaTesto, ParlaURL, myv_speakIfNotRunning, myv_speakAtEnd,
//								  myv_setSource, Riproduci								
// **********************************************************************************************

var companyDefault= "";
var domainDefault= "";
var serial= "";

/********************* INSERIMENTO ALTRE LIBRERIE       *************************/
//Settare a 1 per l'aggiunta della libreria myv-autoreader.js, 0 altrimenti
var addAutoReaderLib = 1;

//L'autoreader inseriscel'oggetto MyVoice se impostato a 1;
var invokeCreaOggettoMyVoice = 0;

//La InsertMyVoiceObject inserisce i link di speak se impstato a 1;
var addspeakbuttons = 0;

// Settare a 1 per l'aggiunta della libreria myv-facile-Profili.js, 0 altrimenti
var addProfileLib = 0;

//Utilizza il lexicon se impostata a 1;
var myv_lexicon_on = 1;

/*****************************   ACCESS KEY      ********************************** 
* Per aggiungere nuovi accesskey definirli in questa sezione e modificare la funzione myv_getkey. */
var myv_keypage    = "3";   // speakPage
var myv_keylink    = "4"; 	// speakLink	
var myv_keyshow    = "5";   // Show floating panel
var myv_keyplaysel = "6"; 	// sintesi del testo selezionato	
var myv_keyplay    = "7";   // Play
var myv_keystop    = "8";   // Stop
var myv_keyloop    = "9";   // Loop
var myv_keypause   = "0";	// Pause
// *********************************************************************************

// Var globali
var myvautolib=0;
var myv_dirhome='';
var myv_wp=0;

/*Sets the dirhome variable*/
function myv_setDirhome()
	{ 
	if (myv_dirhome!='') return;
	var scripts = document.getElementsByTagName('script');
	for (var i=0;i<scripts.length;i++)
   		if (scripts[i].src!=null && scripts[i].src.toLowerCase().indexOf('myv-facile.js')>-1)
			myv_dirhome=scripts[i].src.substring(0,scripts[i].src.toLowerCase().indexOf('myv-facile.js'));
	}
myv_setDirhome();

// Detect OS
var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator"
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS)
{
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "MacOS"
	else if (checkIt('win')) OS = "Windows"
	else OS = "an unknown operating system";
}

function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}
//

var myv_imgurl;

if ( OS == "MacOS" )
	myv_imgurl = myv_dirhome + 'images/osx/';
else
	myv_imgurl = myv_dirhome + 'images/';

var myv_profileurl = myv_dirhome + 'profili/';

myv_appendLib(myv_dirhome+"myv-facile-licenza.js");

if (addProfileLib) {myv_appendLib(myv_dirhome+"myv-facile-profili.js");}
if (addAutoReaderLib) {myv_appendLib(myv_dirhome+"myv-autoreader.js");}
function myv_appendLib(liburl) 
	{
	var headelem = document.getElementsByTagName('head')[0];
	if (headelem)
		{
		var scriptElement = document.createElement("script");
		scriptElement.setAttribute("src", liburl);
		scriptElement.setAttribute("type", "text/javascript");
		headelem.appendChild(scriptElement)	;
		}
	}

var myv_namePlugin = "MyVoice Plugin";
var myv_InternetExplorer=navigator.appName.indexOf("Microsoft")!=-1;

/***************** INITIALIZE MYVOICEOBJECT OBJECT WHEN AUTOLIB SETTED *******************************/
//window.onload=function(){myv_init();}
if (myv_InternetExplorer) window.attachEvent('onload',myv_init);
else window.addEventListener('load',myv_init,false);
function myv_init() {if (myv_InternetExplorer) {window.setTimeout("myv_init2()", 150);} else myv_init2();}
function myv_init2() 
	{
	myv_lexiconInit();
	if (myv_wp) {addvoices_wp();}
	else {if (myvautolib) addvoices();}
	}  // addvoices() is defined on myv-autoreader.js
/*******************************************************************************************************/

var myv_bVer = parseInt(navigator.appVersion);
var gMyVoiceTalk;

// Oggetto Myvoice corrente
var myVoiceObj=null;
var MyVoiceId;
var UseMyVoice=0;
var CreaMyvNum = 0; //Global variable used in CreoOggettoMyVoice function.

//variabile usata per mostrare la finestra che avverte quando l'oggetto myvoice non è installato o non è disponibile per l'OS corrente
var showNoMyvUsable=true;
// variabile usata per rendere invisibile il floating panel quando nel caso di CreaOggettoMyVoice('id','false','true'), cioè in caso di floating panel invisibile al caricamento della pagina
var hideFloatPanel=false;
var myv_topFloat=10;

//Variabili di default per la creazione dell'oggetto MyVoice e per il pannello
var myv_codebaseDefault = "http://www.myvoice.it/";
var myv_srcDefault      = myv_dirhome+"dummy.myv";
var myv_ramDefault      = "false";
var myv_autostartDefault= "false";
var myv_layoutDefault   = "true";
var myv_floatingDefault = "true";
var myv_currFloat       = myv_floatingDefault;
var myv_widthDefault    = 138;
var myv_heightDefault   = 19;
var myv_width;
var myv_height;

var myv_timestamp; //indica il momento in cui è stata fatta l'ultima getMyVoiceObject()
var myv_tsind = 0;

var myv_debug = true; //visualizzare alert sul funzionnamento di myvoice se è true
var myv_installationDebug=false;

// var globale testo selezionato con mouse
var myv_selezione="selezionare prima una porzione di testo";

/*
   Le variabil seguenti servono a gestire diversi myv_speakers
   Caratteristiche di uno Speaker:
       - id
       - voice (male,female)
       - speed (1-10)
       - tone (1-10)
*/
var myv_speakers = new Array();
var myv_modifyCurrSpeaker = false;
var myv_defaultSpeaker = 'default'; //Speaker di default
var myv_currSpeaker = myv_defaultSpeaker; //Speaker corrente
var myv_preferredSpeaker = '';

/********************* Gestione profili *****************************/
var myv_withProfiles=false; //Utilizzata per sapere se si utilizza creaoggetto con profili o no

/*********************************************************************/
var myv_reset=0;
var myv_audio=true; //se il plug-in è abilitato o meno

/* Ogni volta che viene caricato un URL (myv_SpeakURL e myv_SetSource) questa variabile si aggiorna;
	Quando si disabilita il plugin (myv_setAudio(false)), viene simulata la disabiltazione del plugin
	caricando l'url empty.myv; quando si riabilita il plugin viene ricaricato l'ultimo URL valido prima
	della disabilitazione, che è contenuto dentro questa variabile.
	(vedi myv_SpeakURL, myv_SetSource e myv_setAudio per funzionamento)
*/
var myv_lastURLLoaded=myv_srcDefault;

var myv_nostop = false; //utilizzato da PlayURLCond, PlayTestoCond e ManageSpeakerProfile

var myv_numinit = 0;

//utilizzato solo per netscape
var myv_initialized = false;
var myv_srctxt;
var myv_parlatxt;
var myv_continit = 0;

/* Evita l'esecuzione delle funzioni quando la pagina viene scaricata (vedi managespeakerprofile) */
var myv_unloaded=false;
if (myv_InternetExplorer)
	window.attachEvent('onunload',myv_closeall);
else
	window.addEventListener('unload',myv_closeall,false);
//window.onunload=myv_closeall;

function myv_closeall(){myv_unloaded=true; /*Stop();*/}


/********************************************************************/
/******************   FUNZIONI BASE      ****************************/
/********************************************************************/

/******************* Safari Compatibility ***************************/
var myv_tg = null;
var myv_safariTimer = 300; 
var myv_currToSpeak = 0;
var myv_maxToSpeak = 1000;
var myv_safariText2Speach = '';
/***********************************************************/

function myv_SpeakText(txt, parseit ,rep)
	{
	if (!myv_audio) return;
	if (browser=="Safari")
		{
		var tg2 = window.event.srcElement;
		if (tg2==myv_tg) return;
		myv_tg = tg2;
		}
	if (!myv_InternetExplorer)
		{
		if (!myv_initialized)
			{
			if (rep==null) myv_parlatxt = txt;
			window.setTimeout('myv_SpeakText("testo",'+parseit+',"repeat")',50);
			return;
			}
		else {if (rep=="repeat") txt = myv_parlatxt;}
		}
	if (browser!="Safari") 
		{
		/******* Safari Compatibility *********/
		var myvobj = getMyVoiceObject();
		if (myvobj==null) return;
		if (parseit == null) parseit = myv_lexicon_on;
		if (parseit) txt = myv_replaceWithLexicon(txt);
		myvobj.Speak(txt);
		}
	else
		{
		myv_currToSpeak++;
		if (myv_currToSpeak == myv_maxToSpeak) myv_currToSpeak=0;
		myv_safariText2Speach = txt;
		window.setTimeout('myv_SpeakTextSafari('+myv_currToSpeak+','+parseit+')',myv_safariTimer);
		}
	}

/******* Safari Compatibility *********/
function myv_SpeakTextSafari(i, parseit)
	{
	if (myv_currToSpeak!=i) return;
	var myvobj = getMyVoiceObject();
	if (myvobj==null) return;
	if (typeof parseit == undefined) parseit = myv_lexicon_on;
	if (parseit) myv_safariText2Speach = myv_replaceWithLexicon(myv_safariText2Speach);
	myvobj.Speak(myv_safariText2Speach);
	}


function myv_SpeakLink(txt) {myv_SpeakText(txt)}

function SetSource(str) {myv_SetSource(str);}

function myv_SetSource(str,rep)
	{
	if (!myv_waitUntilInitialized("myv_SetSource",str,rep)) return;
	if (!myv_audio) return;
	if (!myv_InternetExplorer)
		{
		if (!myv_initialized)
			{
			if (!rep) myv_srctxt = str;
			window.setTimeout('myv_SetSource("' + myv_srctxt + '","repeat")',50);
			return;
			}
		else
			{if (rep=="repeat") str = myv_srctxt;
			}
		}
	var myvobj = getMyVoiceObject();
	if (myvobj==null) return;
    myvobj.SetSource(str);
	myv_lastURLLoaded = str;
	}


function myv_SpeakURL(url)
	{
   	var myvobj = getMyVoiceObject();
   	if (myvobj==null) return;
   	myvobj.SpeakURL(url);
   	myv_lastURLLoaded = url;
	}


function Play()
	{
	if (!myv_audio) return;
	MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	MyVoiceObj.Start();
	}


function Stop()
	{
	if (!myv_InternetExplorer && !myv_initialized) return;
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	MyVoiceObj.Stop();
	}


function myv_PauseResume() {if (myv_isRunning()) myv_Pause(); else myv_Resume();}

function myv_Pause()
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	MyVoiceObj.Pause();
	}

function myv_Resume()
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	MyVoiceObj.Resume();
	}


function myv_GetSpeed()
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj== null) return;
	return MyVoiceObj.GetSpeed();
	}

function myv_SetSpeed(vv)
	{ //set speed when vv is a string containing a number
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	var n = parseInt(vv);
	MyVoiceObj.SetSpeed( n );
	}


function myv_GetTone()
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	return MyVoiceObj.GetTone();
	}


function myv_SetTone(vv)
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	var n = parseInt(vv);
	MyVoiceObj.SetTone(n);
	}


function myv_GetLoop()
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return 'OFF';
	if (MyVoiceObj.IsLooping()) {return 'ON';}
	else {return 'OFF';}
	}


function myv_SetLoop(n)
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	if (n == 1) {MyVoiceObj.Loop(true);}
	else {MyVoiceObj.Loop(false);}
	return false;
	}

function myv_LoopToggle() {if (myv_GetLoop()=="ON") myv_SetLoop(false); else myv_SetLoop(true);}


function myv_GetVoice()
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	return MyVoiceObj.GetVoice();
	}


function myv_SetVoice(voice)
	{
	var MyVoiceObj = getMyVoiceObject();
	if (MyVoiceObj==null) return;
	MyVoiceObj.SetVoice(voice);
	}


function myv_isRunning()
	{
	var myvobj = getMyVoiceObject();
	if (myvobj==null) return;
	return myvobj.IsRunning();
	}

/********************************************************************/
/*********************  FUNZIONI UTENTE  ****************************/
/********************************************************************/

/*
	Inserisce un oggetto MyVoice nella pagina html con i seguenti parametri:
	 __________________________________________________________________________________________
	| id		     | Identificativo														   |
	| visibile       | true (Default) = visibile ,  false=nascosto							   |
	| floating	     | true (Deafult) = pannello float, false = pannello fisso				   |
	 ------------------------------------------------------------------------------------------
    Di questi parametri solo il primo (id) è obbligatorio.
    Tutti gli altri hanno dei valori di default.
*/
function CreaOggettoMyVoice(id, visibile, floating, addhtml)
	{
	myv_width  = myv_widthDefault;
	myv_height = myv_heightDefault;
	if (visibile==null) layout=myv_layoutDefault;      // Added 31/03/06
	if (floating==null) floating=myv_floatingDefault;  // added 31/03/06
	if (myv_InternetExplorer)
	   {if (companyDefault=="" && CreaMyvNum++<10) {window.setTimeout("CreaOggettoMyVoice('"+id+"', '"+visibile+"', '"+floating+"', true)",100); return;}
	   }
	return InsertMyVoiceObject(id,myv_width,myv_height,visibile,floating,addhtml,myv_srcDefault,myv_codebaseDefault,myv_autostartDefault,myv_ramDefault,companyDefault,domainDefault);
	}

/** Carica l'url specificato nell'oggetto; */
function CaricaURL(url) {myv_SetSource(url);}


/**
	Le tre funzioni seguenti riproducono rispettivamente:
	- Il testo contenuto nell'url (ParlaURL);
	- Il testo passato come parametro (ParlaTesto)
	- Il testo contenuto nell'url caricato nell'oggetto myvoice (Riproduci);
		tale url può essere caricato usando la funzione CaricaURL oppure passandolo
		con il parametro src in fase di creazione dell'oggetto MyVoice
	Inoltre le tre funzioni hanno due parametri opzionali, speaker e profilo, utilizzati,
	rispettivamente, per specificare lo speaker che si vuole utilizzare per la riproduzione,
	e sotto quale profilo la riproduzione è ritenuta valida.
*/
function ParlaURL(url,speaker,profilo,rep)
	{
	if (!myv_waitUntilInitialized("ParlaURL",url,speaker,profilo,rep)) return;
	if (!myv_manageSpeakerProfile(speaker,profilo)) return;
	if (!myv_InternetExplorer)
		{
		if (!myv_initialized)
			{
			if (!rep) {myv_urlinit=url; myv_speakerurl = speaker; profilourl=profilo;}
			if (myv_speakerurl != null) speaker = '"' + myv_speakerurl + '"'; else speaker=null;
			if (profilourl != null) profilo = '"' + profilourl + '"'; else profilo=null;
			window.setTimeout('ParlaURL("' + myv_urlinit + '",'+ speaker +','+ profilo +',"repeat")',100);
			return;
			}
		else
			{if (rep=="repeat") {url = myv_urlinit; speaker=myv_speakerurl; profilo=profilourl;}
			}
		}
	myv_SpeakURL(url);
	}


function ParlaTesto(text,speaker,profilo,parseit,rep)
	{
	if (!myv_waitUntilInitialized("ParlaTesto",text,speaker,profilo,parseit,rep)) return;
	if (!myv_manageSpeakerProfile(speaker,profilo)) {return;}
	if (!myv_InternetExplorer)
		{
		if (!myv_initialized)
			{
			if (!rep) {myv_textinit=text; myv_speakertext=speaker; myv_profilotext=profilo;}
			if (myv_speakertext != null) speaker = '"' + myv_speakertext + '"'; else speaker=null;
			if (myv_profilotext != null) profilo = '"' + myv_profilotext + '"'; else profilo=null;
			var out = 'ParlaTesto("' + myv_textinit + '",'+ speaker +','+ profilo+','+ parseit +',"repeat")';
			window.setTimeout(out, 100);
			return;
			}
		else
			{if (rep=="repeat") {text = myv_textinit; speaker=myv_speakertext; profilo=myv_profilotext;}
			}
		}
	myv_SpeakText(text, parseit);
	}


function Riproduci(speaker,profilo,rep)
	{
	if (!myv_waitUntilInitialized("Riproduci",speaker,profilo,rep)) return;
	if (!myv_manageSpeakerProfile(speaker,profilo)) return;
	Play();
	}


/*
	I tre metodi seguenti hanno lo stesso significato delle tre precedenti.
	L'unica differenza è che queste sono utilizzate per poter inserire un "RITARDO",
	dopo il quale la riproduzione può iniziare.
	Un possibile utilizzo si ha quando si vogliono concatenare testi provenienti da fonti
	diverse; in questo caso il primo testo viene riprodotto subito, l'altro dopo il ritardo specificato;
	Un altro utilizzo è quando si vogliono concatenare testi utilizzando profili o speaker
	diversi, etc...
*/
function ParlaURLDopo(url,ritardo,speaker,profilo) {myv_SpeakAtEnd(url,ritardo,speaker,profilo,null,'url');}
function ParlaTestoDopo(testo,ritardo,speaker,profilo) {myv_SpeakAtEnd(testo,ritardo,speaker,profilo,null,'text');}
function RiproduciDopo(ritardo,speaker,profilo) {myv_SpeakAtEnd(' ',ritardo,speaker,profilo,null,'play');}


/*
	I tre metodi seguenti, come le precedenti terne di metodi, servono, rispettivamente, a
	riprodurre il testo riferito da un URL, il testo passato come parametro, o quello
	caricato nell'oggetto MyVoice.
	La riproduzione, però, in questo caso, inizia solo se l'oggetto MyVoice no sta già
	riproducendo qualcosa.
	Un utilizzo possibile è quello di utilizzarlo quando si raccoglie l'evento 'onmouseover'
	su un oggetto grande, quale un'intera tabella; in questo caso, infatti, se, durante la
	riproduzione delle informazioni legate alla tabella, l'utente muove il mouse, pur
	restando all'interno della tabella, viene rilevato un nuovo evento onmouseover e quindi
	la riproduzione ricomincia da capo. Con i tre metodi seguenti si evita questo inconveniente.
*/
function ParlaURLCond(url,speaker,profilo) {myv_SpeakIfNotRunning(url,speaker,profilo,'url');}
function ParlaTestoCond(testo,speaker,profilo) {myv_SpeakIfNotRunning(testo,speaker,profilo,'text');}
function RiproduciCond(speaker,profilo) {myv_SpeakIfNotRunning(' ',speaker,profilo,'play');}


/** Aggiunge un nuovo speaker */
function AggiungiSpeaker(id,tipovoce,velocita,tono)
  {
  if (myv_getSpeaker(id,'noalert')!=null) {alert('Speaker '+ id + 'già esistente'); return;}
  var n = myv_speakers.length;
  myv_speakers[n] = new Array();
  myv_speakers[n][0] = id;
  myv_speakers[n][1] = tipovoce;
  myv_speakers[n][2] = velocita;
  myv_speakers[n][3] = tono;
  }


/** Modifica le caratteristiche dello speaker di default */
function ImpostaSpeakerDefault(tipovoce,velocita,tono)
	{
	ModificaSpeaker(myv_defaultSpeaker,tipovoce,velocita,tono);
	}


/** Modifica le caratteristiche di uno speaker già esistente  */
function ModificaSpeaker(id,tipovoce,velocita,tono)
	{
	var sp = myv_getSpeaker(id,'noalert')
	if (sp!=null) {sp[1]= tipovoce; sp[2]= velocita; sp[3]= tono;}
	else AggiungiSpeaker(id,tipovoce,velocita,tono)
	}


/** dice se MyVoice è abilitato o meno */
function MyVoiceAbilitato() {return myv_getAudio();}

/** b=false -> MyVoice disabilitato; b=true -> MyVoice abilitato */
function AbilitaMyVoice(b)
	{
	myv_setAudio(b);
	if (document.images['enableimage'])
		{
		if (b)
			 {
			 document.images['enableimage'].src=myv_imgurl+'checkx.gif'
			 document.images['enableimage'].alt="Clicca per disabilitare MyVoiceNet"
			 }
		else
			 {
			 document.images['enableimage'].src=myv_imgurl+'check.gif'
			 document.images['enableimage'].alt="Clicca per abilitare MyVoiceNet"
			 }
		}
	myv_setCookie("abilitaMyVoiceInit",b?"true":"false");
	}


/********************************************************************/
/********************************************************************/
/********************  FUNZIONI DI SUPPORTO  ************************/
/********************************************************************/
/********************************************************************/
function myv_SpeakAtEnd(url,time,speaker,profile,timest,type)
	{
	if (!myv_waitUntilInitialized("myv_SpeakAtEnd",url,time,speaker,profile,timest,type)) return;
	if (profile!=null) {if (profile!=myv_currProfile) return;}
	else {if (myv_existsProfile(speaker) && speaker!=myv_currProfile) return;}

	if (timest!=null) {if (timest!=myv_timestamp) return;}
	var sp = speaker;
	var pr = profile;
	sp!=null ? sp = '"'+sp+'"' : sp = null;
	pr!=null ? pr = '"'+pr+'"' : pr = null;
	
	if (timest==null)
		{window.setTimeout('myv_SpeakAtEnd("'+url+'",'+ time +','+ sp +',' + pr + ',"' + myv_timestamp + '","'+ type+'")',time);
		}
	else
		{
		var MyVoiceObj = getMyVoiceObject();
		if (MyVoiceObj!=null)
			{
			if (!MyVoiceObj.IsRunning())
				{
				if (type=='url') ParlaURL(url,speaker,profile);
				else if (type=='text') ParlaTesto(url,speaker,profile);
				else if (type=='play') Riproduci(speaker,profile);
				}
			else
            	{window.setTimeout('myv_SpeakAtEnd("'+url+'",'+ time +','+ sp +',' + pr + ',"' + myv_timestamp + '","'+ type+'")',500);
		    	}
			}
      	}
   	return;
	}


function myv_SpeakIfNotRunning(url,speaker,profile,type,ok)
	{
	if (!myv_waitUntilInitialized("myv_SpeakIfNotRunning",url,speaker,profile,type,ok)) return;
	if (profile!=null) {if (profile!=myv_currProfile) return;}
	else {if (myv_existsProfile(speaker) && speaker!=myv_currProfile) return;}
	if (!myv_nostop)
		{
	  	if (type=='url') ParlaURL(url,speaker,profile);
		else if (type=='text') ParlaTesto(url,speaker,profile);
		else if (type=='play') Riproduci(speaker,profile);
	  	myv_nostop=true;
	  	}
   	return;
	}


function myv_getAudio() {return myv_audio;}

function myv_setAudio(b)
	{
	if (!b)
		{
		if (getMyVoiceObject()!=null) 
			{
			myv_SetSource(myv_dirhome+'empty.myv');
			Stop();
			}
		}
	myv_audio = b;
	if (b) myv_SetSource(myv_lastURLLoaded);
	}
	
	
function setMyVoiceObject(objname) {return myv_InternetExplorer ? document.all(objname) : document.embeds[objname];}

function getMyVoiceObject()
	{
	if (!UseMyVoice) return null;
	if (!myv_audio) return null;
	myv_timestamp = myv_getTimestamp();
	if (myVoiceObj==null) {myVoiceObj=setMyVoiceObject(MyVoiceId);}
	return myVoiceObj;
	}


function myv_getTimestamp()
	{
	myv_tsind++; if (myv_tsind>500) myv_tsind=0;
	return new Date().toGMTString()+myv_tsind;
	}


function myv_getSpeaker(id,showalert)
	{
	var tp=-1
	for (var i=0; i<myv_speakers.length && tp==-1; i++) {if (myv_speakers[i][0] == id) tp=i;}
	if (tp == -1)
		{
		if (showalert==null) alert('Speaker ' + id + ' inesistente.');
		return null;
		}
	else return myv_speakers[tp];
	}


function myv_setSpeaker(id)
	{
	if (myv_unloaded) return;
	if (id==null) {myv_resetSpeaker(); return;}
	Stop();
	if (id==myv_currSpeaker && !myv_modifyCurrSpeaker) return;
	var pp = myv_getSpeaker(id);
	if (pp!=null) {myv_SetVoice(pp[1]); myv_SetSpeed(pp[2]); myv_SetTone(pp[3]);}
	myv_currSpeaker=id;
	myv_modifyCurrSpeaker = false;
	}


function myv_resetSpeaker()
	{
	if (myv_currSpeaker!=myv_defaultSpeaker || myv_reset>10 || myv_modifyCurrSpeaker)
		{myv_setSpeaker(myv_defaultSpeaker); myv_reset=0;
		}
	else myv_reset++;
	}


function myv_listSpeakers()
	{
	var s='Elenco degli Speakers.\n \nSpeaker         Voice     Speed     Tone\n'
	for (var i=0; i<myv_speakers.length; i++)
		{
		s=s + myv_speakers[i][0]; for (var j=0; j<(16-myv_speakers[i][0].length);j++) s=s+' ';
		s=s + myv_speakers[i][1];  for (var j=0; j<(13-myv_speakers[i][1].length);j++) s=s+' ';
		s=s + myv_speakers[i][2];  for (var j=0; j<11;j++) s=s+' ';
		s=s + myv_speakers[i][3]+'\n';
		}
	alert(s);
	}


//Gestisce i profili e gli speakers;
//ritorna true se myvoice deve riprodurre qualcosa; false se si deve interrompere
function myv_manageSpeakerProfile(speaker,profile)
	{
	if (myv_unloaded) return false;
	if (!UseMyVoice) return false;
	if (!myv_audio) return false;
	if (myv_nostop)
	   {
	   var myvobj = getMyVoiceObject();
	   if (!myvobj.IsRunning()) window.setTimeout('myv_nostop=false;',1000);
	   return false;
	   }
	if (myv_InternetExplorer || (!myv_InternetExplorer && myv_initialized)) myv_setSpeaker(speaker);
	return true;
	}


/********************************************************************/
/********  FUNZIONI PER IL CARICAMENTO DI UN OGGETTO MYVOICE  *******/
/********************************************************************/
function myv_IsMyVoicePluginInstalled()
	{
	if (navigator.appName == 'Netscape' /*|| navigator.appName == 'Opera'*/)
		{
		if (myv_installationDebug) alert("Netscape");
		if (navigator.platform == "Win32")
			{
         	if (myv_installationDebug)
				{
				alert('win32 '+navigator.plugins.length);
				var out=''
				for (var i=0; i<navigator.plugins.length; i++) {out = out+i+':  '+navigator.plugins[i].name +'\n';}
				alert(out)
				}
         	if (navigator.plugins["MyVoice Plugin "] || navigator.plugins["MyVoice Plugin"])
            	{
      			if (myv_installationDebug) alert("Netscape Win32 - MyVoice Plugin Found");
            	return (1);
            	}
			else
				{
				if (myv_installationDebug) alert('Netscape Win32 - MyVoice Plugin not found');
				return (0);
				}
			}
      	else //platform Mac
         	if (navigator.plugins["MyVoice Plugin"])
            	{
            	if (myv_installationDebug) alert("Netscape Mac - Plugin Found ");
            	return (1);
            	}
         	else
            	{
            	if (myv_installationDebug) alert("Netscape Mac - Plugin NOT FOUND");
            	return (0);
            	}
      	}
	else if (navigator.appName == "Microsoft Internet Explorer")
		{
		if (myv_installationDebug) alert("Internet Explorer");
		if (navigator.platform == "Win32")
			{
			if (myv_installationDebug) alert("Internet Explorer Win32"+"  "+CheckIEControl());
			return (CheckIEControl()); //CheckIEControl è una funzione vbscript (vedi InsertMyVoiceObject)
			}
      	else // mac
			if (navigator.platform == "MacPPC")
            	{
            	if (navigator.plugins["MyVoice Plugin"])
               		{
               		if (myv_installationDebug) alert("Internet Explorer Mac - MyVoice Plugin Found");
               		return (1);
               		}
            	else
					{
               		if (myv_installationDebug) alert('Internet Explorer Mac - MyVoice Plugin  not found');
               		return (0);
               		}
				}
          	else
             	{
             	if (myv_installationDebug) alert('invalid platform');
             	return (0);
             	}
      	}
	}


function myv_MyVoiceUsable(showAlert)
	{
	var UseMyVoice = 0
	if (showAlert==null) showAlert=true;
	gMyVoiceTalk = myv_IsMyVoicePluginInstalled();	
	if (myv_installationDebug) alert('gMyvoiceTalk: '+gMyVoiceTalk)
	if (gMyVoiceTalk)
		{
		if (navigator.platform == "Win32")
        	{
        	if ((navigator.appName == "Netscape") && (myv_bVer < 3)) { if (showAlert) myv_MacOSNetscapeAlert();}
        	else if ((navigator.appName == "Netscape") || (navigator.appName == "Microsoft Internet Explorer") 
					 /*|| (navigator.appName == "Opera")*/) 
		   	  	{UseMyVoice = 1;
			  	}
           	else {if (showAlert) myv_WinOSAlert();}
        	}
     	else //MAC
        	if (navigator.platform == "MacPPC")
           		{
           		if (navigator.appName == "Netscape")
              		{
					if (myv_bVer > 3) {UseMyVoice = 1;}
					else {if (showAlert) myv_MacOSNetscapeAlert();}
					}
           		else {if (showAlert) myv_MacOSNetscapeAlert();}
           		}
        	else {if (showAlert) myv_OSAlert();}
     	}
  	else {if (showAlert) NoMyVoiceAlert();}

  	return UseMyVoice;
	}


//Funzion invocata in caso di floating panel che viene caricato invisibile
function myv_restoreFloatValues()
{
	myv_showpanel(false,false); 
	if (myv_InternetExplorer || true) myv_panelobj.style.top=myv_topFloat+'px'; 
	myv_panelobj.style.zIndex=3; 
	myv_setpanelobject();
}


function myv_insertCheckIEControl()
{
	var  out = '';
	out +='Function CheckIEControl() \n';
	out +='Dim MyVoiceControl \n';
	out +='On Error Resume Next \n';
	out +='CheckIEControl = 0 \n';
	out +='Set MyVoiceControl = CreateObject("MVCONTROL.MVControlCtrl.1") \n';
	out +='if (IsObject(MyVoiceControl)) then CheckIEControl = 1 \n';
	out +='set MyVoiceControl = nothing \n';
	out +='End Function \n';
	var scrEl = document.createElement("script");
	scrEl.setAttribute('type','text/vbscript');
	var txtNode = document.createTextNode(out);
	scrEl.text = out;
	document.getElementsByTagName('head')[0].appendChild(scrEl);
}


function InsertMyVoiceObject(id,width,height,layout,floating,addhtml,src,codebase,autostart,ram,company,domain)
	{
	var innHtml = "";
	if (layout==null) layout=myv_layoutDefault; 
	if (floating==null) floating=myv_floatingDefault;
	if (codebase==null) codebase=myv_codebaseDefault;
	if (src==null) src=myv_srcDefault;
	if (ram==null) ram=myv_ramDefault;
	if (autostart==null) autostart=myv_autostartDefault;
	if (company==null) company=companyDefault;
	if (domain==null) domain=domainDefault;
	if (addhtml==null) addhtml=false;
	
	var docElem = myv_InternetExplorer ? document.body : document.documentElement;
	if (addhtml) {innHtml = docElem.innerHTML;}
	
  	if (myv_InternetExplorer) myv_insertCheckIEControl(); // Inserisco la funzione javascript CheckIEControl
	
 	var out="";
	myv_currFloat=floating;
	
	UseMyVoice = myv_MyVoiceUsable(false);
	if (floating=="true" && (showNoMyvUsable || UseMyVoice)) 
		{
		if (layout=='false') hideFloatPanel=true;  // Utilizzato per rendere il myvdrag invisibile al caricamento della pagina
		//Div principale
		out+='<div id="myvdrag" style="left:10px;';
		if (hideFloatPanel) 
		{
			if (myv_InternetExplorer) {out+=' top:1100px;'} else {out+=' top:'+myv_topFloat+'px;';}
			out+=' z-index:0;'; //on window.onload restore real values invoking myv_restoreFloatValues() function
		}
		else out+=' top:'+myv_topFloat+'px; z-index:10000;';
		out+=' position:absolute; border-width:thin;';
		var myvdraghh = UseMyVoice ? 50 : 55;

		if ( OS != "MacOS" )
			out+=' height:'+myvdraghh+'px; border-style:ridge; background-color:#EFEFEF; padding:0px; margin:0px;" >';
		else
			out+=' height:'+myvdraghh+'px; border-style:outset; border-color: #000; background-color:#EFEFEF; padding:0px; margin:0px;" >';

		//Inizio MyvBar
		var myvbarprofadd = 0;
		var myvbarautoadd = 0;
		if (UseMyVoice) {if (myv_withProfiles) myvbarprofadd+=20;  if (myvautolib && addspeakbuttons) myvbarautoadd+=50; }
		var myvbarwidth=170 + myvbarprofadd + myvbarautoadd;
		out+='<div id="myvbar" style="cursor:move; width: '+myvbarwidth+'px; font-weight:bold; font-size:11px; font-family:\'Lucida Grande\', verdana, arial, helvetica, sans-serif; padding:2px; margin:0; margin-bottom:5px; color:white; background-position:left; background-image:url('+myv_imgurl+'bgbar.jpg); background-repeat:no-repeat">';

		if ( OS != "MacOS" ) {
			out+='<a href="http://www.myvoice.it" title="vai al sito di myvoice" onmouseover="ParlaTesto(\'Vai al sito di my voice\')" onfocus="ParlaTesto(\'vai al sito di my voice\')">';
			out+='<img src="'+myv_imgurl+'logo.gif" style="width:15px; border:0; background:transparent;" alt="logo myvoice" />';
			out+='</a>'; // Logo myvoice
		}
		else {
			out+='';
			out+='<a onclick="myv_showpanel(false)" style="cursor:default; text-align:left" onmouseover="ParlaTesto(\'Clicca per chiudere il pannello\')" onfocus="ParlaTesto(\'Clicca per chiudere il pannello\')">';
			out+='<img src="'+myv_imgurl+'cancel.gif" style="border:0;float: left;" onmouseover="this.src=\''+myv_imgurl+'cancelx.gif\'" onmouseout="this.src=\''+myv_imgurl+'cancel.gif\'" onmousedown="this.src=\''+myv_imgurl+'cancelx.gif\'" onmouseup="this.src=\''+myv_imgurl+'cancel.gif\'" alt="Chiudi il pannello" />';
			out+='</a>';
		}

		var ww=25 + myvbarprofadd + myvbarautoadd;
		
		if ( OS != "MacOS" )
			out+='<span style="vertical-align:top; padding:0; padding-right:'+ww+'px; padding-left:2px;">MyVoice Plugin';
		else
			out+='<span style="text-align: center;vertical-align:top;color: #000;">MyVoice Plugin';

		if (!myv_InternetExplorer) out+='&nbsp;';
		out+='</span>';

		if ( OS != "MacOS" ) {
			out+='<span>';
			out+='<a onclick="myv_showpanel(false)" style="cursor:default; text-align:right" onmouseover="ParlaTesto(\'Clicca per chiudere il pannello\')" onfocus="ParlaTesto(\'Clicca per chiudere il pannello\')">';
			out+='<img src="'+myv_imgurl+'cancel.gif" style="border:0;" onmousedown="this.src=\''+myv_imgurl+'cancelx.gif\'" onmouseup="this.src=\''+myv_imgurl+'cancel.gif\'" alt="Chiudi il pannello" />';
			out+='</a></span>';
		}
		
		out+='</div>'; //FINE MYVBAR */
		if (!addhtml) {document.write(out); out='';}
		layout="true"; //Se voglio il pannello floating il layout mi indica solo se inizialmente il pannello è visibile o meno
		}
	
	if (layout!="true" && floating!="true")  {showNoMyvUsable=false;}
	UseMyVoice = myv_MyVoiceUsable();
   	if (UseMyVoice)
		{
		if (myv_getSpeaker(myv_defaultSpeaker,'noalert')==null) AggiungiSpeaker(myv_defaultSpeaker,'male',5,5);
		if (MyVoiceId==null) MyVoiceId=id;
	 	 	
		out+='<div id="myvdiv" style="cursor:default;';
		if (floating!="true" && addhtml) out+=' top:10px; left:10px; position:absolute; z-index:10000';
		if (layout=='false') 
			{
			out+=' visibility:hidden;';
			width=1; height=1;
			}
		out+='">'
		if (layout!='false') 
			{
			out+='<a onclick="myv_enabledisable()" style="padding:0; margin:0; padding-left:4px; float:left">';
			if ( OS != "MacOS" )
				out+='<img name="enableimage" style="border:0; padding:0; margin:0;" src="'+myv_imgurl+'checkx.gif" height="'+height+'" width="22" alt="abilita o disabilita il plugin" />';
			else
				out+='<img name="enableimage" style="border:0; padding:0; margin:0;" src="'+myv_imgurl+'checkx.gif" height="18" width="14" alt="abilita o disabilita il plugin" />';
			out+='</a>';
			}
		if (myv_withProfiles && layout!='false')
		   	{
			out+='<a href="#" onclick="myv_openProfileWindow()" style="float:left;">';
			out+='<img src="'+myv_profileurl+'manageprofile.gif" style="border:0; height:"'+height+'px;"';
			out+=' onmousedown="this.src=\''+ myv_profileurl +'manageprofilex.gif\'" onmouseup="this.src=\''+ myv_profileurl +'manageprofile.gif\'"';
			out+=' alt="Gestione profili" /></a>';
			}
		var defSpeaker = myv_getSpeaker(myv_defaultSpeaker,'noalert');
		
		if ( myv_InternetExplorer ) {
			out=out + '<object style="background:gray; float:left" classid="clsid:4866b425-40ea-11d3-97d2-0060085f3e07"';
			out=out + ' codebase="'+codebase+'"';
			out=out + ' id="' +id+ '" width="' + width + '" height="' + height + '">\n';
			out=out + '<param name="src" value="' + src + '">\n';
			out=out + '<param name="language" value="ita">\n';
			out=out + '<param name="voice" value="' + defSpeaker[1] + '">\n';
			out=out + '<param name="ram" value="' + ram + '">\n';
			out=out + '<param name="speed" value="' + defSpeaker[2] + '">\n';
			out=out + '<param name="tone" value="' + defSpeaker[3] + '">\n';
			out=out + '<param name="loop" value="false">\n';
			out=out + '<param name="autostart" value="' + autostart + '">\n';
			out=out + '<param name="layout" value="' + layout + '">\n';
			out=out + '<param name="company" value="' + company + '">\n';
			out=out + '<param name="domain" value="' + domain + '">\n';
			out=out + '<param name="sn" value="' + serial + '">\n';
			out=out + '</object>';
		} else {
			out=out + '<embed style="float:left" embed type="plugin/x-myvoice" src="' + src + '"';
			out=out + ' name="'+id+'" width="' + width + '" height="' + height + '"';
			out=out + ' language="ita"';
			out=out + ' voice="' + defSpeaker[1] + '"';
			out=out + ' ram="' + ram  + '"';
			out=out + ' speed="' + defSpeaker[2] + '"';
			out=out + ' tone="' + defSpeaker[3] + '"';
			out=out + ' loop="false"';
			out=out + ' autostart="' + autostart +  '"';
			out=out + ' layout="' + layout + '"';
			out=out + ' company="' + company + '"';
			out=out + ' domain="' + domain + '"';
			out=out + ' sn="'+ serial + '"';
			out=out + ' pluginpage= "'+ codebase +  '">\n';
			out=out + '</embed>';
			//LINE ADDED 30/06/2003 for accessibility reasons (1.1.6)
			out=out+'<noembed>Oggetto MyVoice</noembed>';
		}

		if (myvautolib && addspeakbuttons && (layout!="false" || floating=="true"))
		{
			if ( OS != "MacOS" ) {
				out+='<a href="#" onclick="speakPage()" style="float:left;">';
				out+='<img src="'+myv_imgurl+'speakpage.bmp" style="border:0;"';
			} else {
				out+='<a href="#" onclick="speakPage()" style="">';
				out+='<img src="'+myv_imgurl+'speakpage.bmp" style="border:0;padding: 2px;"';
			}
			out+=' onmouseover="this.src=\''+ myv_imgurl +'speakpagex.bmp\'" onmouseout="this.src=\''+ myv_imgurl +'speakpage.bmp\'"';
			out+=' onmousedown="this.src=\''+ myv_imgurl +'speakpagex.bmp\'" onmouseup="this.src=\''+ myv_imgurl +'speakpage.bmp\'"';
			out+=' alt="Leggi il contenuto della pagina" /></a>';
			if ( OS != "MacOS" ) {
				out+='<a href="#" onclick="speakLink()" style="float:left;">';
				out+='<img src="'+myv_imgurl+'speaklink.bmp" style="border:0;"';
			} else {
				out+='<a href="#" onclick="speakLink()" style="">';
				out+='<img src="'+myv_imgurl+'speaklink.bmp" style="border:0;padding: 2px;"';
			}
			out+=' onmouseover="this.src=\''+ myv_imgurl +'speaklinkx.bmp\'" onmouseout="this.src=\''+ myv_imgurl +'speaklink.bmp\'"';
			out+=' onmousedown="this.src=\''+ myv_imgurl +'speaklinkx.bmp\'" onmouseup="this.src=\''+ myv_imgurl +'speaklink.bmp\'"';
			out+=' alt="Leggi i links della pagina" /></a>';
		}

		out+='</div>'
	
		if (floating=="true") {out+='</div>';}
		//procedura utilizzata per attendere la fine del caricamento del plugin
		 }
	else //UseMyVoice is 0
		 {
		 out += getUseMyVoiceAlert();
		 if (floating=="true" && (showNoMyvUsable || UseMyVoice)) {out+='</div>';}
		 }	
	 
	if (myv_installationDebug) alert(out);
		
	if (addhtml) {out+=innHtml; docElem.innerHTML=out;}
	else {document.write(out);}
	//document.close();
	//document.getElementById('myvdiv').style.visibility="visible";
	
	if (!myv_InternetExplorer && UseMyVoice) myv_waitInitialization();
	if (myv_InternetExplorer && UseMyVoice) myv_initialized=true;   // Added 31/03/2006
	
	/*Used for drag the floating panel*/
	if (floating=="true" && (showNoMyvUsable || UseMyVoice) && !myvautolib) {myv_setpanelobject();}	
	if (hideFloatPanel && !myvautolib) {myv_restoreFloatValues();}
	
	if (myv_getCookie("abilitaMyVoiceInit")=="false") {AbilitaMyVoice(false)}
	 
	return UseMyVoice;
	}


/********************************************************************/
/********************************************************************/
/************  FUNZIONI UTILIZZATE IN CASO DI ERRORE  ***************/
/********************************************************************/
/********************************************************************/
var UseMyVoiceAlert = "";
function setUseMyVoiceAlert(str) {UseMyVoiceAlert+=str;}
function getUseMyVoiceAlert() {return UseMyVoiceAlert;}

function myv_MacOSNetscapeAlert()
	{
	if (!showNoMyvUsable) return;
	var out = myv_before() + '<b>MyVoice Plugin</b> non supportato dal tuo browser ma solo da NS 3.0"' +  myv_after();
	setUseMyVoiceAlert(out);
	}

function myv_WinOSAlert()
	{
	if (!showNoMyvUsable) return;
	var out = myv_before() + '<b>MyVoice Plugin</b> non supportato dal tuo browser ma da NS e IE.")' +  myv_after();
	setUseMyVoiceAlert(out);
	}

function myv_OSAlert()
	{
	if (!showNoMyvUsable) return;
	var out = myv_before() + '<b>MyVoice Plugin</b> disponibile solo per Windows e MacOS.")' +  myv_after();
	setUseMyVoiceAlert(out);
	}

function NoMyVoiceAlert()
	{
	if (!showNoMyvUsable) return;
	var out= myv_before();
	out+='<b>MyVoice Plugin</b> non installato.<br />';
	out+='<a href="#" style="color:blue;" onkeypress="window.open(\'http://www.myvoice.it/download.shtml\')" onclick="window.open(\'http://www.myvoice.it/download.shtml\')">';
	out+='Installa il Plugin</a>';
	out+= myv_after();
	setUseMyVoiceAlert(out);
	}

function myv_before()
	{
	var fontSize=myv_InternetExplorer?'xx-small':'x-small';
	var out='<div style="font-family:Verdana; font-size:'+fontSize+'; width:170px;'
	if (myv_currFloat=="false") out+=' border:thin solid gray;'
	out+='">'
	if (myv_currFloat=="false") out+='<div style="background-color:#00009F; color:white; text-align:center">Attenzione!!!!</div>';
	out+='<div style="padding-left:2px; padding-bottom:5px; font-family:Arial; font-size:1.1em; '
	if (myv_currFloat=="false") out+='background-color:#EFEFEF; color:000000;';
	out+='">'
	return out;
	}

function myv_after() {return '</div></div>';}
/***************************************************************************/

function myv_enabledisable() {AbilitaMyVoice(!myv_getAudio())}

function myv_newwindow()
	{
	newWindow = window.open("mverror.htm", "ERRORE", "top=50,left=50,width=200,height=150,scrollbars=no,toolbar=no,noresize,menubar=no")
	}

function myv_IsInitialized() {return myv_initialized;}

function myv_waitInitialization()
	{
	if (!myv_initialized && myv_continit<100)
		{
		window.setTimeout('myv_waitInitialization()',100);
		myvobj = getMyVoiceObject();
		if (myvobj!=null) {myv_initialized = myvobj.IsInitialized;}
		myv_continit++;
		}
	else {myv_initialized=true;}
	return true;
	}


function myv_getkey(keyStroke) 
	{
	var isNetscape=(keyStroke && keyStroke.which);
	var eventChooser = (isNetscape) ? keyStroke.which : event.keyCode;
	var which = String.fromCharCode(eventChooser).toLowerCase();
	if ((isNetscape && keyStroke.altKey && keyStroke.shiftKey) || (!isNetscape && window.event.altKey  && window.event.shiftKey))
	   {
	   if (!MyVoiceAbilitato() && which!=myv_keyshow) return;
	   switch (which)
			{
			case myv_keyplaysel: {ParlaTesto(myv_selezione); break;}
			case myv_keyplay: {Riproduci(); break;}
			case myv_keystop: {Stop(); break}
			case myv_keyloop: {if (myv_GetLoop()=="ON") myv_SetLoop(false); else myv_SetLoop(true); break;}
			case myv_keypause: {if (myv_isRunning()) myv_Pause(); else myv_Resume();break;}
			case myv_keyshow: {myv_showpanel(!myv_panelvisible(),false); break;}
			case myv_keypage: {if (myvautolib) speakPage(); break;}
			case myv_keylink: {if (myvautolib) speakLink(); break;}
	   		}
	}
}

if (myv_InternetExplorer)
	window.attachEvent('onkeydown',myv_getkey);
else
	window.addEventListener('keydown',myv_getkey,false);

//	document.onkeydown = myv_getkey;

/*******************************************************************************************
*************************       SELEZIONA E PARLA         **********************************
*******************************************************************************************/
var myv_selectedString=""

if (myv_InternetExplorer)
	window.attachEvent('onmouseup',myv_LanciaCopiaSelezione);
else
	window.addEventListener('mouseup',myv_LanciaCopiaSelezione,false);

//document.onmouseup=myv_LanciaCopiaSelezione;

function myv_CopiaSelezione()
{
	if (myv_InternetExplorer) {
		rng = document.selection.createRange();
		myv_selectedString=rng.text;
	} else {
	//	if (window.getSelection())
		if (browser == "Safari")
			myv_selectedString = window.getSelection(); 
		else
			myv_selectedString = document.getSelection();
	}

	if (myv_selectedString == "") return ;
	myv_selezione= myv_selectedString + "";

	ParlaTesto(myv_selezione); 
} 

function myv_LanciaCopiaSelezione() {setTimeout("myv_CopiaSelezione()",50); return true;}
/**********************************************************************************************/

function myv_existsProfile(p){return false;}

/************************************************************
 *** FUNZIONI PER ESEGUIRE IL DRAG E LO SCROLLING DEL PANNELLO FLOTTANTE ***
************************************************************/
var myv_lastbutton, myv_mousebutton, myv_left, myv_top, myv_xx, myv_xx, myv_panelobj, myv_firedobj;
var myv_scrollcomp;
var myv_dragapproved=false;
var myv_tscroll, myv_lscroll, myv_lefts, myv_tops;

//invoked when start drag on the floating panel (myvdrag). Ref: Seek "myv_panelobj.onmousedown=myv_mousedown" in InsertMyVoiceObject function
function myv_mousedown(evt)
	{
	if (myv_panelobj==null) {myv_setpanelobject();}
	if (myv_InternetExplorer) {myv_mousebutton = window.event.button} else {myv_mousebutton = evt.which;}
	if (myv_panelvisible() && myv_mousebutton<=1) {return myv_drags(evt);}
	return false;
	}

function myv_drags(evt)
	{
	myv_firedobj = myv_InternetExplorer ? event.srcElement : evt.target;
	var topelement = myv_InternetExplorer ? "BODY" : "HTML";   
	
	if (myv_InternetExplorer)
	   {if (myv_firedobj.componentFromPoint(event.clientX, event.clientY).substring(0,6) == "scroll") return false}
	   
	while (myv_firedobj.tagName != topelement && myv_firedobj.id != "myvbar")
       {myv_firedobj=myv_InternetExplorer ? myv_firedobj.parentElement : myv_firedobj.parentNode
       }
	if (myv_firedobj.id=="myvbar")
		{
	   	myv_dragapproved=true;
		myv_panelobj.onmouseup=myv_mouseup;
		myv_firedobj.onmousemove=myv_move;
		myv_left = parseInt(myv_panelobj.style.left+0);
       	myv_top = parseInt(myv_panelobj.style.top+0);
		myv_xx=myv_InternetExplorer? event.clientX : evt.clientX;
       	myv_yy=myv_InternetExplorer? event.clientY : evt.clientY;
		myv_lefts = myv_lscroll; myv_tops = myv_tscroll;
		}
     return false
	 }

function myv_mouseup(evt) {myv_dragapproved = false; myv_firedobj=null; return true}

function myv_move(e)
	{
	if (myv_dragapproved && myv_panelobj!=null)
		{
	 	var x = myv_InternetExplorer? event.clientX-myv_xx : e.clientX-myv_xx;
		var y = myv_InternetExplorer? event.clientY-myv_yy : e.clientY-myv_yy;
	   	myv_panelobj.style.left = myv_left + x + 'px';
		myv_panelobj.style.top = myv_top + y + 'px';
		myv_tscroll = myv_tops + y; myv_lscroll = myv_lefts + x;
     	}
	return false;
	}
	
function myv_showpanel(show, showAlert) 
{
	//if (!getMyVoiceObject().IsInitialized) {window.setTimeout("myv_showpanel("+show+","+showAlert+")",100); return;}
	if (showAlert==null) {showAlert=true;}
	if (myv_panelobj==null) myv_setpanelobject();
	if (myv_panelobj==null) return;
	if (!show && showAlert) {alert('Il pannello di controllo puo\' essere riaperto utilizzando la combinazione di tasti SHIFT + ALT + '+myv_keyshow); /*confirm()*/}
	myv_panelobj.style.visibility = show ? 'visible' : 'hidden';
}

//Invoked when window scrolls
function myv_scrollIt()
	{
	var yscr = myv_InternetExplorer ? document.body.scrollTop : window.pageYOffset;
	var xscr = myv_InternetExplorer ? document.body.scrollLeft : window.pageXOffset;
	myv_panelobj.style.left = myv_lscroll + xscr + 'px';
	myv_panelobj.style.top = myv_tscroll + yscr + 'px';
	}

function myv_setpanelobject()
{
	myv_panelobj=document.getElementById('myvdrag'); if (myv_panelobj==null) return;
	myv_panelobj.onmousedown=myv_mousedown; 
	myv_tscroll = parseInt(myv_panelobj.style.top);
   	myv_lscroll = parseInt(myv_panelobj.style.left);
	window.setInterval('myv_scrollIt()',200);
	if (myv_InternetExplorer && !hideFloatPanel) myv_showpanel(true);
}
	
function myv_panelvisible() {if (myv_panelobj!=null) return myv_panelobj.style.visibility!='hidden'; return false;}
/** FINE DELLE FUNZIONI PER IL DRAG DEL PANNELLO FLOTTANTE*/

function myv_setCookie(name,settings,sec)
	{
	if (sec==null) sec=365*24*60*60;
	var expire = new Date();
	expire.setTime(expire.getTime() + (sec*1000) );
	var str = name+'='+escape(settings)+';expires=' + expire.toGMTString()+';';
	document.cookie = str;
	}


function myv_getCookie(name)
	{
	var i = document.cookie.indexOf(name+'=',0);
	if (i==-1) {return "";}
	i = i + name.length + 1;
	var i2 = document.cookie.indexOf(";",i);
	if (i2 == -1) i2 = document.cookie.length;
	var cookie = unescape(document.cookie.substring(i,i2));
	return cookie;
	}



/*************************************************************************************/
/**************************** L E X I C O N   ***************************************/

// Server Side Lexicon per Preprocessing - fs - NO CASE SENSITIVE !!
var myv_vocabolo = new Array();
var myv_traduzione = new Array();  
var objXml;
/*var myv_entities = new Array("nbsp","agrave","egrave","igrave","ograve","ugrave")
var myv_evalues = new Array(" ", "a\'", "e\'","i\'","o\'","u\'")*/

function myv_lexiconInit()
	{
	myv_openFile(myv_dirhome+"myv-lexicon.txt", "myv_vocabularyAppend()");
	}

function myv_replaceWithLexicon(txt)
	{
	var text = txt;
	
	// sostituzione vocaboli (Stranieri, sigle ecc.) - Server Side Lexicon
	for (i=0;i<myv_vocabolo.length;i++)
	   	{text=myv_replaceAll(text, myv_vocabolo[i], myv_traduzione[i]);
	   	}

	return text;
	}

function myv_vocabularyAppend(e) 
	{
	var vv = objXml.responseText.split("\n");  //divide in righe
	if (vv.length<=0 || myv_trim(vv[0]).indexOf("// MyVoice")!=0) return;
	var currTxt;
	for (var i=0; i<vv.length; i++)
		{
		currTxt = myv_trim(vv[i]);
		if (currTxt.indexOf("//")!=0)  //elimino i commenti
			{
			var aa = currTxt.split("=");
			if (aa.length==2) 
				{
				myv_vocabolo[myv_vocabolo.length] = myv_replaceAll(myv_trim(aa[0]),"\"","");
				myv_traduzione[myv_traduzione.length] = myv_replaceAll(myv_trim(aa[1]),"\"","");
				}
			}
		}
	}

// Replaces replaceStr with withStr in text
function myv_replaceAll(text, replaceStr, withStr) 
	{
	if (text ==null || text=="") return text;
	var re = new RegExp(replaceStr, 'gi') ; //g = replace all occurrences, i = ignore case
	return text.replace(re, withStr);
	}	

function myv_trim(txt) 
	{
	var s=txt;
	if (s.length > 0) while (s.charCodeAt(0)==160 || s.indexOf(' ') == 0 || s.indexOf('\t') == 0 || s.indexOf('\n') == 0) s = s.substr(1); //charCode=160 is &nbsp;
	if (s.length > 0) while(s.lastIndexOf(' ') == s.length - 1 || s.indexOf('\t') == s.length - 1) s = s.substr(0, s.length - 1);
	return s;
	}

function myv_openFile(aUrl, listener)
	{
	try
		{
		objXml = myv_InternetExplorer ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		objXml.open("GET", aUrl, myv_InternetExplorer);
		if (myv_InternetExplorer) objXml.onreadystatechange = function() {if (objXml.readyState==4) eval(listener);}
		objXml.send(null);
		if (!myv_InternetExplorer) eval(listener);
		}
	catch (e) {alert("error" +e); return null;}
	}
	
	
function myv_waitUntilInitialized(functionName)
	{
	if (myv_IsInitialized()) return true;
	var args=myv_waitUntilInitialized.arguments;
	var fun2Call = functionName+"(";
	var arg;
	for(var i=1; i<args.length;i++)
		{
		arg = args[i]?"'"+args[i]+"'":"null";
		fun2Call += arg;
		if (i<args.length-1) fun2Call += ",";
		}
	fun2Call+=")";
	window.setTimeout(fun2Call,100);
	return false;
	}