// **********************************************************************************************
//  MyVoice® Net Facile
//  v.2.2.1b
//  developed & engineered by Piero Alcamo & Francesco Spadoni
//  ©2005 Rigel Engineering S.r.l.
// **********************************************************************************************
var companyDefault= "Azienda ASL RME";
var domainDefault= "asl-rmeit";
var serial= "MV11-A722-CE92-B539-451E-24BF-B1A0";

/********************* INSERIMENTO ALTRE LIBRERIE       *************************/
//Settare a 1 per l'aggiunta della libreria myv-autoreader.js, 0 altrimenti
var addAutoReaderLib = 1;

// Settare a 1 per l'aggiunta della libreria myv-facile-Profili.js, 0 altrimenti
var addProfileLib = 0;

/*****************************   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='';
/*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();
var 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() {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/myvoice";
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      ****************************/
/********************************************************************/
function myv_SpeakText(txt,rep)
	{
	if (!myv_audio) return;
	if (!myv_InternetExplorer)
		{
		if (!myv_initialized)
			{
			if (rep==null) myv_parlatxt = txt;
			window.setTimeout('myv_SpeakText("testo","repeat")',50);
			return;
			}
		else {if (rep=="repeat") txt = myv_parlatxt;}
		}
	var myvobj = getMyVoiceObject();
	if (myvobj==null) return;
	myvobj.Speak(txt);
	}


function myv_SpeakLink(txt) {myv_SpeakText(txt)}

function myv_SetSource(str,rep)
	{
	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 (myv_InternetExplorer)
	   {if (companyDefault=="" && CreaMyvNum++<3) {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_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,rep)
	{
	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 +',"repeat")';
			window.setTimeout(out, 100);
			return;
			}
		else
			{if (rep=="repeat") {text = myv_textinit; speaker=myv_speakertext; profilo=myv_profilotext;}
			}
		}
	myv_SpeakText(text);
	}


function Riproduci(speaker,profilo,rep)
	{
	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 (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 (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()) return false;
	   else myv_nostop=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:5;';
		out+=' position:absolute; border-width:thin;';
		var myvdraghh = UseMyVoice ? 50 : 55;
		out+=' height:'+myvdraghh+'px; border-style:ridge; background-color:#EFEFEF; padding:0px; margin:0px;" >';
		//Inizio MyvBar
		var myvbarprofadd = 0;
		var myvbarautoadd = 0;
		if (UseMyVoice) {if (myv_withProfiles) myvbarprofadd+=20;  if (myvautolib) 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">';
		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
		var ww=25 + myvbarprofadd + myvbarautoadd;
		out+='<span style="vertical-align:top; padding:0; padding-right:'+ww+'px; padding-left:2px;">MyVoice&reg; Plugin';
		if (!myv_InternetExplorer) out+='&nbsp;';
		out+='</span>';
		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:5';
		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">';
			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" />';
			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');
		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 + '<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>'
		out=out + '</OBJECT>';
		if (myvautolib && (layout!="false" || floating=="true"))
			{
			out+='<a href="#" onclick="speakPage()" style="float:left;">';
			out+='<img src="'+myv_imgurl+'speakpage.bmp" style="border:0;"';
			out+=' onmousedown="this.src=\''+ myv_imgurl +'speakpagex.bmp\'" onmouseup="this.src=\''+ myv_imgurl +'speakpage.bmp\'"';
			out+=' alt="Leggi il contenuto della pagina" /></a>';
			out+='<a href="#" onclick="speakLink()" style="float:left;">';
			out+='<img src="'+myv_imgurl+'speaklink.bmp" style="border:0;"';
			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();
	
	/*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&reg; 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&reg; 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&reg; Plugin</b> disponibile solo per Windows e MacOS.")' +  myv_after();
	setUseMyVoiceAlert(out);
	}

function NoMyVoiceAlert()
	{
	if (!showNoMyvUsable) return;
	var out= myv_before();
	out+='<b>MyVoice&reg; 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;}
	   		}
	}
}

document.onkeydown = myv_getkey;

/*******************************************************************************************
*************************       SELEZIONA E PARLA         **********************************
*******************************************************************************************/
var myv_selectedString=""
document.onmouseup=myv_LanciaCopiaSelezione;

function myv_CopiaSelezione()
	{
	if (myv_InternetExplorer) {rng = document.selection.createRange(); myv_selectedString=rng.text;}
	else 
	   {
	   if (window.getSelection()) 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 può 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;
	}