/* Simple AJAX Code-Kit (SACK) v1.6.1 */
/* ?2005 Gregory Wild-Smith */
/* www.twilightuniverse.com */
/* Software licenced under a modified X11 licence,
see documentation or authors website for more details */

function sack(file) {
this.xmlhttp = null;

this.resetData = function() {
	this.method = "POST";
	this.queryStringSeparator = "?";
	this.argumentSeparator = "&";
	this.URLString = "";
	this.encodeURIString = true;
	this.execute = false;
	this.element = null;
	this.elementObj = null;
	this.requestFile = file;
	this.vars = new Object();
	this.responseStatus = new Array(2);
};

this.resetFunctions = function() {
	this.onLoading = function() { };
	this.onLoaded = function() { };
	this.onInteractive = function() { };
	this.onCompletion = function() { };
	this.onError = function() { };
	this.onFail = function() { };
};

this.reset = function() {
	this.resetFunctions();
	this.resetData();
};

this.createAJAX = function() {
	try {
		this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e1) {
		try {
			this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e2) {
			this.xmlhttp = null;
		}
	}

	if (! this.xmlhttp) {
		if (typeof XMLHttpRequest != "undefined") {
			this.xmlhttp = new XMLHttpRequest();
		} else {
			this.failed = true;
		}
	}
};

this.setVar = function(name, value){
	this.vars[name] = Array(value, false);
};

this.encVar = function(name, value, returnvars) {
	if (true == returnvars) {
		return Array(encodeURIComponent(name), encodeURIComponent(value));
	} else {
		this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
	}
}

this.processURLString = function(string, encode) {
	encoded = encodeURIComponent(this.argumentSeparator);
	regexp = new RegExp(this.argumentSeparator + "|" + encoded);
	varArray = string.split(regexp);
	for (i = 0; i < varArray.length; i++){
		urlVars = varArray[i].split("=");
		if (true == encode){
			this.encVar(urlVars[0], urlVars[1]);
		} else {
			this.setVar(urlVars[0], urlVars[1]);
		}
	}
}

this.createURLString = function(urlstring) {
	if (this.encodeURIString && this.URLString.length) {
		this.processURLString(this.URLString, true);
	}

	if (urlstring) {
		if (this.URLString.length) {
			this.URLString += this.argumentSeparator + urlstring;
		} else {
			this.URLString = urlstring;
		}
	}

	// prevents caching of URLString
	this.setVar("rndval", new Date().getTime());

	urlstringtemp = new Array();
	for (key in this.vars) {
		if (false == this.vars[key][1] && true == this.encodeURIString) {
			encoded = this.encVar(key, this.vars[key][0], true);
			delete this.vars[key];
			this.vars[encoded[0]] = Array(encoded[1], true);
			key = encoded[0];
		}

		urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
	}
	if (urlstring){
		this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
	} else {
		this.URLString += urlstringtemp.join(this.argumentSeparator);
	}
}

this.runResponse = function() {
	eval(this.response);
}

this.runAJAX = function(urlstring) {
	if (this.failed) {
		this.onFail();
	} else {
		this.createURLString(urlstring);
		if (this.element) {
			this.elementObj = document.getElementById(this.element);
		}
		if (this.xmlhttp) {
			var self = this;
			if (this.method == "GET") {
				totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
				this.xmlhttp.open(this.method, totalurlstring, true);
			} else {
				this.xmlhttp.open(this.method, this.requestFile, true);
				try {
					this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
				} catch (e) { }
			}

			this.xmlhttp.onreadystatechange = function() {
				switch (self.xmlhttp.readyState) {
					case 1:
						self.onLoading();
						break;
					case 2:
						self.onLoaded();
						break;
					case 3:
						self.onInteractive();
						break;
					case 4:
						self.response = self.xmlhttp.responseText;
						self.responseXML = self.xmlhttp.responseXML;
						self.responseStatus[0] = self.xmlhttp.status;
						self.responseStatus[1] = self.xmlhttp.statusText;

						if (self.execute) {
							self.runResponse();
						}

						if (self.elementObj) {
							elemNodeName = self.elementObj.nodeName;
							elemNodeName.toLowerCase();
							if (elemNodeName == "input"
							|| elemNodeName == "select"
							|| elemNodeName == "option"
							|| elemNodeName == "textarea") {
								self.elementObj.value = self.response;
							} else {
								self.elementObj.innerHTML = self.response;
							}
						}
						if (self.responseStatus[0] == "200") {
							self.onCompletion();
						} else {
							self.onError();
						}

						self.URLString = "";
						break;
				}
			};

			this.xmlhttp.send(this.URLString);
		}
	}
};

this.reset();
this.createAJAX();
}

/************************************************************************************************************
Static folder tree
Copyright (C) October 2005  DTHMLGoodies.com, Alf Magne Kalleland

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Dhtmlgoodies.com., hereby disclaims all copyright interest in this script
written by Alf Magne Kalleland.

Alf Magne Kalleland, 2006
Owner of DHTMLgoodies.com

************************************************************************************************************/	

/*
Update log:
December, 19th, 2005 - Version 1.1: Added support for several trees on a page(Alf Magne Kalleland)
January,  25th, 2006 - Version 1.2: Added onclick event to text nodes.(Alf Magne Kalleland)
February, 3rd 2006 - Dynamic load nodes by use of Ajax(Alf Magne Kalleland)
*/
	
var idOfFolderTrees = ['dhtmlgoodies_tree'];

var imageFolder = '/templates/ITA/images/';	// Path to images
var folderImage = 'dhtmlgoodies_folder.gif';
var plusImage = 'categoria_piu.gif';
var minusImage = 'categoria_meno.gif';
var initExpandedNodes = '';	// Cookie - initially expanded nodes;
var useAjaxToLoadNodesDynamically = true;
var ajaxRequestFile = '/modules/writeNodes.php';
var contextMenuActive = false;	// Set to false if you don't want to be able to delete and add new nodes dynamically

var ajaxObjectArray = new Array();
var treeUlCounter = 0;
var nodeId = 1;

/*
These cookie functions are downloaded from 
http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
*/
function Get_Cookie(name) { 
   var start = document.cookie.indexOf(name+"="); 
   var len = start+name.length+1; 
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
   if (start == -1) return null; 
   var end = document.cookie.indexOf(";",len); 
   if (end == -1) end = document.cookie.length; 
   return unescape(document.cookie.substring(len,end)); 
} 
// This function has been slightly modified
function Set_Cookie(name,value,expires,path,domain,secure) { 
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
    var cookieString = name + "=" +escape(value) + 
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
       ( (path) ? ";path=" + path : "") + 
       ( (domain) ? ";domain=" + domain : "") + 
       ( (secure) ? ";secure" : ""); 
    document.cookie = cookieString; 
} 

function expandAll(treeId)
{
	var menuItems = document.getElementById(treeId).getElementsByTagName('LI');
	for(var no=0;no<menuItems.length;no++){
		var subItems = menuItems[no].getElementsByTagName('UL');
		if(subItems.length>0 && subItems[0].style.display!='block'){
			showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,''));
		}			
	}
}

function collapseAll(treeId)
{
	var menuItems = document.getElementById(treeId).getElementsByTagName('LI');
	for(var no=0;no<menuItems.length;no++){
		var subItems = menuItems[no].getElementsByTagName('UL');
		if(subItems.length>0 && subItems[0].style.display=='block'){
			showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,''));
		}			
	}		
}

function getNodeDataFromServer(ajaxIndex,ulId,parentId)
{
	document.getElementById(ulId).innerHTML = ajaxObjectArray[ajaxIndex].response;
	ajaxObjectArray[ajaxIndex] = false;
	parseSubItems(ulId,parentId);
}


function parseSubItems(ulId,parentId)
{
	
	if(initExpandedNodes){
		var nodes = initExpandedNodes.split(',');
	}
	var branchObj = document.getElementById(ulId);
	var menuItems = branchObj.getElementsByTagName('LI');	// Get an array of all menu items
	for(var no=0;no<menuItems.length;no++){
		var imgs = menuItems[no].getElementsByTagName('IMG');
		if(imgs.length>0)continue;
		nodeId++;
		var subItems = menuItems[no].getElementsByTagName('UL');
		var img = document.createElement('IMG');
		img.src = imageFolder + plusImage;
		img.onclick = showHideNode;
		if(subItems.length==0)img.style.display='none';else{
			subItems[0].id = 'tree_ul_' + treeUlCounter;
			treeUlCounter++;
		}
		var aTag = menuItems[no].getElementsByTagName('A')[0];
		//aTag.onclick = collapseAll('dhtmlgoodies_tree');
		if(contextMenuActive)aTag.oncontextmenu = showContextMenu;

						
		menuItems[no].insertBefore(img,aTag);
		menuItems[no].id = 'dhtmlgoodies_treeNode' + nodeId;
		var folderImg = document.createElement('IMG');
		if(menuItems[no].className){
			folderImg.src = imageFolder + menuItems[no].className;
			menuItems[no].insertBefore(folderImg,aTag);
		}/*else{
			folderImg.src = imageFolder + folderImage;
		}
		menuItems[no].insertBefore(folderImg,aTag);*/
		
		var tmpParentId = menuItems[no].getAttribute('parentId');
		if(!tmpParentId)tmpParentId = menuItems[no].tmpParentId;
		if(tmpParentId && nodes[tmpParentId])showHideNode(false,nodes[no]);	
	}		
}
	
		
function showHideNode(e,inputId)
{
	if(inputId){
		if(!document.getElementById('dhtmlgoodies_treeNode'+inputId))return;
		thisNode = document.getElementById('dhtmlgoodies_treeNode'+inputId).getElementsByTagName('IMG')[0]; 
	}else {
		thisNode = this;
		if(this.tagName=='A')thisNode = this.parentNode.getElementsByTagName('IMG')[0];	
		
	}
	if(thisNode.style.display=='none')return;
	var parentNode = thisNode.parentNode;
	inputId = parentNode.id.replace(/[^0-9]/g,'');
	if(thisNode.src.indexOf(plusImage)>=0){
		thisNode.src = thisNode.src.replace(plusImage,minusImage);
		var ul = parentNode.getElementsByTagName('UL')[0];
		ul.style.marginLeft = '10px';
		ul.style.display='block';
		if(!initExpandedNodes)initExpandedNodes = ',';
		if(initExpandedNodes.indexOf(',' + inputId + ',')<0) initExpandedNodes = initExpandedNodes + inputId + ',';
		
		if(useAjaxToLoadNodesDynamically){	// Using AJAX/XMLHTTP to get data from the server
			var firstLi = ul.getElementsByTagName('LI')[0];
			var parentId = firstLi.getAttribute('parentId');
			if(!parentId)parentId = firstLi.parentId;
			if(parentId){
				ajaxObjectArray[ajaxObjectArray.length] = new sack();
				var ajaxIndex = ajaxObjectArray.length-1;
				ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?parentId=' + parentId;					
				ajaxObjectArray[ajaxIndex].onCompletion = function() { getNodeDataFromServer(ajaxIndex,ul.id,parentId); };	// Specify function that will be executed after file has been found					
				ajaxObjectArray[ajaxIndex].runAJAX();		// Execute AJAX function
			}			
		}
		
	}else{
		thisNode.src = thisNode.src.replace(minusImage,plusImage);
		
		if(parentNode.getElementsByTagName('UL')[0])
		{
			parentNode.getElementsByTagName('UL')[0].style.display='none';
		}
		
		initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
	}	
	Set_Cookie('dhtmlgoodies_expandedNodes',initExpandedNodes,500);
	
	return false;
}

var okToCreateSubNode = true;
function addNewNode(e)
{
	if(!okToCreateSubNode)return;
	setTimeout('okToCreateSubNode=true',200);
	contextMenuObj.style.display='none';
	okToCreateSubNode = false;
	source = contextMenuSource;
	while(source.tagName.toLowerCase()!='li')source = source.parentNode;
	

	/*
	if (e.target) source = e.target;
		else if (e.srcElement) source = e.srcElement;
		if (source.nodeType == 3) // defeat Safari bug
			source = source.parentNode; */
	//while(source.tagName.toLowerCase()!='li')source = source.parentNode;
	var nameOfNewNode = prompt('Name of new node');
	if(!nameOfNewNode)return;

	uls = source.getElementsByTagName('UL');
	if(uls.length==0){
		var ul = document.createElement('UL');
		source.appendChild(ul);
		
	}else{
		ul = uls[0];
		ul.style.display='block';
	}
	var img = source.getElementsByTagName('IMG');
	img[0].style.visibility='visible';
	var li = document.createElement('LI');
	li.className='categoria_punto.gif';
	var a = document.createElement('A');
	a.href = '#';
	a.innerHTML = nameOfNewNode;
	li.appendChild(a);
	ul.id = 'newNode' + Math.round(Math.random()*1000000);
	ul.appendChild(li);
	parseSubItems(ul.id);
	saveNewNode(nameOfNewNode,source.getElementsByTagName('A')[0].id);
	
}

/* Save a new node */
function saveNewNode(nodeText,parentId)
{
	self.status = 'Ready to save node ' + nodeText + ' which is a sub item of ' + parentId;
	// Use an ajax method here to save this new node. example below:
	/*
	ajaxObjectArray[ajaxObjectArray.length] = new sack();
	var ajaxIndex = ajaxObjectArray.length-1;
	ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?newNode=' + nodeText + '&parendId=' + parentId					
	ajaxObjectArray[ajaxIndex].onCompletion = function() { self.status = 'New node has been saved'; };	// Specify function that will be executed after file has been found					
	ajaxObjectArray[ajaxIndex].runAJAX();		// Execute AJAX function
	*/		
}

function deleteNode()
{
	if(!okToCreateSubNode)return;		
	setTimeout('okToCreateSubNode=true',200);		
	contextMenuObj.style.display='none';
	source = contextMenuSource;
	
	if(!confirm('Click OK to delete the node ' + source.innerHTML))return;
	okToCreateSubNode = false;
	
	var parentLi = source.parentNode.parentNode.parentNode;
	while(source.tagName.toLowerCase()!='li')source = source.parentNode;		

	var lis = source.parentNode.getElementsByTagName('LI');
	source.parentNode.removeChild(source);
	if(lis.length==0)parentLi.getElementsByTagName('IMG')[0].style.display='none';
	deleteNodeOnServer(source.id);
}

function deleteNodeOnServer(nodeId)
{
	self.status = 'Ready to delete node' + nodeId;
	// Use an ajax method here to save this new node. example below:
	/*
	ajaxObjectArray[ajaxObjectArray.length] = new sack();
	var ajaxIndex = ajaxObjectArray.length-1;
	ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?deleteNodeId=' + nodeId					
	ajaxObjectArray[ajaxIndex].onCompletion = function() { self.status = 'Node has been deleted successfully'; };	// Specify function that will be executed after file has been found					
	ajaxObjectArray[ajaxIndex].runAJAX();		// Execute AJAX function
	*/				
	
}

function initTree(clicca)
{
	for(var treeCounter=0;treeCounter<idOfFolderTrees.length;treeCounter++){
		var dhtmlgoodies_tree = document.getElementById(idOfFolderTrees[treeCounter]);
		var menuItems = dhtmlgoodies_tree.getElementsByTagName('LI');	// Get an array of all menu items
		for(var no=0;no<menuItems.length;no++){					
			nodeId++;
			var subItems = menuItems[no].getElementsByTagName('UL');
			var img = document.createElement('IMG');
			img.src = imageFolder + plusImage;
			img.alt = clicca;
			img.title = clicca;			
			img.onclick = showHideNode;
			if(subItems.length==0)img.style.display='none';else{
				subItems[0].id = 'tree_ul_' + treeUlCounter;
				treeUlCounter++;
			}
			var aTag = menuItems[no].getElementsByTagName('A')[0];
			if(contextMenuActive)aTag.oncontextmenu = showContextMenu;
			//aTag.onclick = collapseAll('dhtmlgoodies_tree');
			menuItems[no].insertBefore(img,aTag);
			if(!menuItems[no].id)menuItems[no].id = 'dhtmlgoodies_treeNode' + nodeId;
			var folderImg = document.createElement('IMG');
			if(menuItems[no].className){
				folderImg.src = imageFolder + menuItems[no].className;
				menuItems[no].insertBefore(folderImg,aTag);
			}/*else{
				folderImg.src = imageFolder + folderImage;
			}
			menuItems[no].insertBefore(folderImg,aTag);*/
		}	
	}
	initExpandedNodes = Get_Cookie('dhtmlgoodies_expandedNodes');
	if(initExpandedNodes){
		var nodes = initExpandedNodes.split(',');
		for(var no=0;no<nodes.length;no++){
			if(nodes[no])showHideNode(false,nodes[no]);	
		}			
	}	
}


/*menu italiadvd*/
function mostraMenu(menuCorrente) {
			if (document.getElementById) {
				Menu = document.getElementById(menuCorrente).style
				if (Menu.display == "block") {
					Menu.display = "none"
					document["imgopen"].src = "/templates/ITA/images/categoria_piu.gif"
				}
				else {
					Menu.display = "block"
				  document["imgopen"].src = "/templates/ITA/images/categoria_meno.gif"
				}
				return false
			}
			else {
				return true
			}
		}
		
