var objPreviousLink = null;
					
//The following lines preload the menu images		
var imgPixel = new Image(31,16);
var imgLine = new Image(31,16);
var imgDocJoin = new Image(31,16);
var imgDoc = new Image(31,16);
var imgPlusOnly = new Image(31,16);
var imgMinusOnly = new Image(31,16);
var imgFolderOpen = new Image(31,16);
var imgFldrClosed = new Image(31,16);
var imgFldrClosedJoinempty = new Image(31,16);
var imgFldrClosedempty = new Image(31,16);

imgPixel.src = "images/pixel.gif";
imgLine.src = "images/line.gif";
imgDocJoin.src = "images/docjoin.gif";
imgDoc.src = "images/doc.gif";
imgPlusOnly.src = "images/plusonly.gif";
imgMinusOnly.src = "images/minusonly.gif";
imgFolderOpen.src ="images/folderopen.gif";
imgFldrClosed.src = "images/folderclosed.gif";
imgFldrClosedJoinempty = "images/folderclosedjoin-empty.gif";
imgFldrClosedempty = "images/folderclosed-empty.gif";  
		
//This function queries the arClickedElementID[] and arAffectedMenuItemID[] arrays
//to get an object reference to the appropriate menu element to show or hide.
function fnLookupElementRef(sID, arClickedElementID, arAffectedMenuItemID)
{
	var i;
	for (i=0;i<arClickedElementID.length;i++)
		if (arClickedElementID[i] == sID)
			return document.getElementById(arAffectedMenuItemID[i]);
								
	return null;
}
		
//This function is responsible for showing/hiding the menu items.  It
//also switches the images accordingly
function doChangeTree(e, arClickedElementID, arAffectedMenuItemID)
{
	var targetID, srcElement, targetElement;
	srcElement = e;
	
	if (srcElement != null)			
		//Only work with elements that have LEVEL in the classname
		if(srcElement.className.substr(0,5) == "LEVEL") 
		{
			//Using the ID of the item that was clicked, we look up
			//and retrieve an object reference to the menu item that
			//should be shown or hidden
			targetElement = fnLookupElementRef(srcElement.id, arClickedElementID, arAffectedMenuItemID)		
						
			if (targetElement != null)
			{
				fnChangeFolderStatus(srcElement, targetElement);

				//If we have a value in the MODE field, it means we are clicking
				//on a site.  We should submit the menu so we can retrieve the
				//data for that site and rebuild the tree 
				if (srcElement.name == 'LoadOnDemand')
				{
					//We submit the menu only if the tree is being expanded.  
					//if (targetElement.style.display == "")
					//	document.frmMenu.submit();
				}
			}
		}
}

//Adds the current element ID to a string stored in hidden HTML field.
//Only adds the ID if it is not already in there
function fnAddItem(sElementID)
{
	var sCurrValue = getCookie("openFolders") || "";	
	if(sCurrValue.indexOf(sElementID) == -1) {		
		setCookie("openFolders", sCurrValue + "," + sElementID,"" , "/");
	}
}

function getCookie(name) {

  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}
function setCookie(name, value, expires, path, domain, secure) {

  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

//Removes a specific element ID from a string stored in hidden HTML field.
function fnRemoveItem(sElementID)
{
	
	var sCurrValue = getCookie("openFolders") || "";
	if(sCurrValue != "") {
		
		var arValues = sCurrValue.split(',');
		
		var arNewValues = new Array(0);
		var x=0;
		
		for (i=0;i<arValues.length;i++) {
			if (arValues[i] != sElementID) {
				arNewValues[x] = arValues[i];
				x++;
			}	
		}
		sCurrValue = arNewValues.join(',');
		setCookie("openFolders", sCurrValue,"","/");
	}
	
	
	
}

//Opens a closed folder and closes an open folder.  This function
//is responsible for all aspects of changing the folder status.
//Attributes are as follows:
//-------------------------------
//srcElement : Object reference to the folder that should be expanded/contracted
//targetElement : Object reference to the subfolder that should be displayed/hidden
function fnChangeFolderStatus(srcElement, targetElement)
{
	
	if (srcElement != null) 
	{
		//First find out if the current folder is empty
		//We find out based on the name of the image used
		if (srcElement.tagName == 'IMG')
		{
			var sImageSource = srcElement.src;
			if (sImageSource.indexOf("empty") == -1)
			{
				if (targetElement.style.display == "none")
				{
					//Our menu item is currently hidden, so display it
					targetElement.style.display = "";
										
					if (srcElement.className == "LEVEL1")
						//Set a special open-folder graphic for the root folder
						srcElement.src = imgMinusOnly.src;
					else
						//Otherwise, just show the standard icon
						srcElement.src = imgFolderOpen.src;
						
					fnAddItem(srcElement.id);
				}
				else
				{
					//Our menu item is currently visible, so hide it
					targetElement.style.display = "none";
										
					if (srcElement.className == "LEVEL1")
						//Set a special closed-folder graphic for the root folder
						srcElement.src = imgPlusOnly.src;
					else
						//Otherwise, just show the standard icon
						srcElement.src = imgFldrClosed.src;
							
					fnRemoveItem(srcElement.id);
				}
			}
		} 
	}
}
		
//This function highlights the text of a menu item.
//It also deselects the previously
//selected menu item.  It takes three parameters: 1) an
//object reference to the selected link, and 2) an 
//object reference to the previously selected link.  The
//function returns a reference to the currently selected link.
function fnSelectItem(objSelectedLink, objPreviousLink)
{	
	
	setCookie("selNode", objSelectedLink, "", "/");
	var bFound = false;				
	//If we have previously selected a menu item, deselect it
	
	if (objPreviousLink != null)
		fnDeselectItem(objPreviousLink);
	
	//Find an object reference for our TD tag
	var objTD = objSelectedLink;
	while (objTD.tagName!="TD")
	{
		
		objTD=objTD.parentElement;
						
		if (objTD.tagName == "TD")
			bFound = true;
		
	}				
	//Got the TD tag reference, so now highlight the cell	
	if (bFound == true)
	{
		
		objTD.className = "selectedtItem";
	}
					
	//Return reference to our selected item
	return objSelectedLink;
}
		
//This function removes the highlight from a
//previously selected menu item.  It takes an
//object reference to the item that needs deselecting.
function fnDeselectItem(objPreviousLink)
{
	if (objPreviousLink !=  null)
	{
		//Find an object reference for our TD tag
		var objTD = objPreviousLink;
		while (objTD.tagName!="TD")
			objTD=objTD.parentElement;
					
		//Change the style class for the TD tag 
		//back to normal
		objTD.className = "node";
	}
}


//Verifica validità email
function checkEmail(strValue) {
	var objRegExp  = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
	if (objRegExp.test(strValue) == false) {
		return false;
	}
	return true;
}

//Verifica validità Partita IVA
function ControllaPIVA(pi) {
	if( pi == '' )  return false; /*''*/;
	if( pi.length != 11 )
		return false; /*"La lunghezza della partita IVA non e' \n" +
			"corretta: la partita IVA dovrebbe essere lunga\n" +
			"esattamente 11 caratteri.\n";*/
	validi = "0123456789";
	for( i = 0; i < 11; i++ ){
		if(validi.indexOf(pi.charAt(i)) == -1 )
			return false; /*"La partita IVA contiene un carattere non valido `" +
				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";*/
	}
	return true;
}


//avvia la installazione del motore di ricerca  su firefox - netscape
	function installaMotoreRicerca() {
		if ((typeof(window.sidebar) == "object") && (typeof(window.sidebar.addSearchEngine) == "function")) {
			window.sidebar.addSearchEngine("http://" + location.host+ "/plugins/smap.src","http://" + location.host + "/plugins/smap.gif", "SMAP Audio Professionale", "Web");
		} else {
			alert("I plugin di ricerca sono installabili solo in Firefox e Netscape 6+.");
		}
	}
