document.locus = function()
	{
	/*
	by Jazz
	genera la barra di navigazione del sito
	*/
	var cnt=0;			//contatore ad uso dello sviluppatore
	var livelli=0;		//contatore che memorizza il numero di livelli rilevati nell'url 
	var inizio=0;		//contatore di posizione del carattere successivo a "/" all'interno di una stringa 
	var fine=0;		    //contatore di posizione del carattere precedente a "/" partendo dalla posizione inizio+1
	var up="index.php"; //nome della pagina indice
	var barraNav="";	//stringa che forma la barra di navigazione finita 
	var arrayLivelli= new Array();	//array contenente i nomi dei livelli rilevati nell'url
	var hostName="www.altalanga.it"; //nome dell'host (QUANDO PUBBLICATO DA PRELEVARE DALL'OGGETTO Location)
	var siteName="www.altalanga.cn.it"; //nome che compare come radice della barra di navigazione
	var url=location.href; //url completa della pagina visualizzata
	var path="";		//percorso relativo (url senza protocollo e hostname)
	var index=false;	//il flag indica se la pagina attuale è un indice (true= pagina indice)
	var underscoredDir=false //il flag indica se la pagina è contenuta in una cartella che inizia con "_"
	
	if (url.indexOf("index.")!=-1) index=true; //imposta il flag index se nell'url è presente "index."
		
	//estrae l'url relativa eliminando il protocollo e l'hostname dall'url
	if (location.host!="") path=location.pathname;
	else path=url.substring((url.indexOf(hostName)+hostName.length),url.length);
	
	/*al path viene anche eliminato il nome della pagina visualizzata localizzato 
	dopo l'ultima occorrenza di "/" nel path stesso
	in questo modo si elimina anche un'eventuale stringa di query
	il risultato è: "/livello_1/livello_2/livello_n/"
	*/
	path=path.substring(0,path.lastIndexOf("/")+1);
	
	/*
	correzione delle parole accentate tramite il metodo replace dell'oggetto String
?..Â?.
	(le parole che compongono l'url non contengono accenti)
	*/
	path=path.replace("societa","società");
	
	/*
	conta i livelli nella struttura di directory controllando il numero di
	occorrenze del carattere "/"
	n livelli avranno n+1 caratteri "/" 
	per ottenere il giusto numero di livelli occorre sottrarre 1 al totale conteggiato
	*/
	while(cnt>=0) 
		{
		livelli++;
		cnt=path.indexOf("/",cnt+1);
		}
	livelli-=1;
	
	/*
	se ci troviamo al livello zero, cioè la root del sito, usciamo dalla funzione
	senza stampare la barra di navigazione, ma stampando il titolo della finestra
	
	if (livelli==0) 
	{
		document.write("&nbsp;");
		return;
	}
	*/	
		
	//crea un oggetto RegExp con un pattern per eliminare "_" dai nomi dei livelli
	var pattern=new RegExp("[_+]","g")
	
	/*
	il carattere "/" formatta la stringa path, consentendo di separare ogni singolo
	elemento della struttura delle directory
	nel ciclo for le variabili inizio e fine localizzano la posizioni di ogni "/"
	il metodo .substring genera una sottostringa di caratteri partendo da inizio+1 a fine
	viene usato inizio+1 per eliminare il carattere "/" dalla sottostringa
	alla fine di ogni ciclo inizio prende il valore di fine per trovare l'elemento successivo
	nella stringa	
	*/
	for (q=0;q<=livelli-1;q++) 
		{
		inizio=path.indexOf("/",inizio)
		fine=path.indexOf("/",inizio+1)
		arrayLivelli[q]=path.substring(inizio+1,fine)
		
		//imposta il flag underscoredDir a true se il nome del livello inizia per "_"
		if (arrayLivelli[q].substring(0,1)=="_") underscoredDir=true 
		
		//elimina "_" dai nomi dei livelli usando un'espressione regolare contenuta in pattern (vedi sopra)
		arrayLivelli[q]=arrayLivelli[q].replace(pattern," ");
		
		inizio=fine;
		}
		
	
	
			
	
	
	/* trasforma gli item dell'array in link relativi */
	/* la stringa up contiene il nome dell'indice index.htm */
	/* partendo dal livello più interno vengono assegnati gli url ad ogni item */
	/* ad ogni salita di livello, viene aggiunto un "../" all'url dell'index di ritorno */
	/* se type è uguale a titolo, gli item dell'array non vengono trasformati in link */
	
	for (q=livelli-1;q>=0;q--) 
	{
		if (!(q == livelli-1 && index==true)) arrayLivelli[q] = '<a href="' + up + '" class="item">' + arrayLivelli[q] + '</a>';
		else arrayLivelli[q] = '<span class="item">' + arrayLivelli[q] + '</span><br>'
		up="../" + up;
	}
		
	
	/*
	genera la stringa contenente la barra di navigazione ed elimina l'ultimo carattere
	all'hostname viene assegnato il link ad index del livello 0 (la root)
	tutti gli item vengono concatenati nella stringa barraNav separati da " > "
	*/
	barraNav = '<a href="' + up + '" class="item">' + siteName + '</a> - ';
	
	
	for (q=0;q<=livelli-1;q++)
	{
		barraNav+=arrayLivelli[q]+" - ";
	}
	
	/*l'ultimo " > " viene eliminato dalla stringa barraNav	*/
	barraNav=  barraNav.substring(0,barraNav.length-3) ;					
	
	/*
	se type è titolo allora viene impostato il titolo a barraNav
	altrimenti il metodo document.write stampa sulla pagina html la stringa barraNav
	*/
	document.write (barraNav);
}

function browserDetect()
{
	var browsers = "(ie4|ie55|ie5|ie6|ns6|ns4|op6|op7|opera|explorer|netscape)"
		
	var token = new RegExp(browsers);
	var tokenSintax = new RegExp (browsers + "| " , "gi")
	var operatorsSintax = /(\(|\)|&&|\|\||!)/g;
	
	//definizione delle variabili di detection del browser
	var ie4  =  (document.all && !window.opera ? true : false);
	var ie5  =  (document.all && !document.fireEvent && !window.opera ? true : false);
	var ie55 =  (document.all && document.fireEvent && !document.createComment ? true : false);
	var ie6  =  (document.all && document.fireEvent && document.createComment ? true : false);
	
	var ns6  =  (!document.all && !window.opera && document.getElementById ? true : false);
	var ns4  =  (document.layers ? true : false);
	
	var op6  =  (window.opera && !document.createComment ? true : false);
	var op7  =  (window.opera && document.createComment ? true : false);
	
	var explorer = ie4 || ie5 || ie55 || ie6;
	var netscape = ns6 || ns4;
	var opera = op6 || op7;
	
	this.detect = function(expression) 
	//restituisce true se l'espressione passata è vera. 
	//i token dell'espressione equivalgono alle variabili di detection
	//gli operatori sono:
	// && = and
	// || = or
	// ( ) = parentesi per sottoespressione
	// ! = not
	{
		var sintaxError = "";
		sintaxError = expression.replace(tokenSintax,"");
		sintaxError = sintaxError.replace (operatorsSintax, "");
		
		if (sintaxError.length > 0) 
		{
			alert ("Errore: il comando " + sintaxError.toUpperCase() + " non è riconosciuto")
			return false;
		}
				
		while (token.test(expression))
		{
			last = token.exec(expression)
			expression = expression.replace(last[0], eval(last[0])) //rimpiazza nella stringa dell'espressione il valore della variabile corrispondente
		}
		return eval(expression) ? true : false
	}
}

document.browser = new browserDetect();