/****
ATTENZIONE!!:
usare SEMPRE il doppio apice (") per le stringhe
***/


menuItem = function (item,selected,deep){
  this.item = item;
  this.selected = selected;
  this.deep = deep;
};

var menuitem = [];

var pathImg;
var topImg;
var topHref;
var selectPath;

function resetAllObj(){
	menuitem = [];
	
	pathImg = '';
	topImg = '';
	topHref = '';
	selectPath = '';
}

//definisco il footer della tabella
function tableFooter(){
	return TR(null,TD(null,IMG({"src":pathImg.concat("pixTra.gif"), "width":"148", "height":"1"},null)));
}

function tableHeader(){
	
	var arrayString = new Array();
	arrayString = selectPath.split("/");

	if (arrayString[0] == 'skylife')
	{
		return TR(null,TD({"width":"148", "height":"10","vAlign":"bottom"}, 
				A({"href":topHref},
					IMG({"src":pathImg+topImg,"border":"0"},null))));
	}
	else {
		return TR(null,TD({"width":"148", "height":"25","vAlign":"bottom"}, 
				A({"href":topHref},
					IMG({"src":pathImg+topImg,"border":"0"},null))));
	}
}

function buildMenu(selPath){
	/**
	/* 30/08/2006 - pier says:
	/* questo controllo noon centra nulla con il menu, ma pare che alcune versioni di Explorer si prendono un fotone
	/* dopo il redirect della loginProxy (es. dopo sign-in per i commenti...)
	/* questo controllo ricarica la pagina se l'oggetto MochiKit.Async non è ancora stato istanziato all'atto della 
	/* creazione del menu. Questa cosa stupida è sufficente perché IE si riprenda e ricarichi la pagina correttamennte
	 */
	if (MochiKit.Async==undefined || MochiKit.Base==undefined || MochiKit.Iter==undefined || MochiKit.DOM==undefined)
	{
		var actualUrl = window.location;
		window.location.href = actualUrl;
	}

	if(menuitem!='') resetAllObj();
	selectPath = selPath;
	this.loadFromURL("xml", SkyWeb.Constants.MenuSxUrl); 
}

function loadFromURL (format, url) {
        //log("loadFromURL", format, url);
        var d;
        if (this.deferred) {
            this.deferred.cancel();
        }
        if (format == "xml") {
            var req = getXMLHttpRequest();
            if (req.overrideMimeType) {
                req.overrideMimeType("text/xml");
            }
            req.open("GET", url, true);
            d = sendXMLHttpRequest(req).addCallback(datatableFromXMLRequest);
            //alert(d);
        } else if (format == "json") {
            d = loadJSONDoc(url);
        } else {
            throw new TypeError("format " + repr(format) + " not supported");
        }
        // keep track of the current deferred, so that we can cancel it
        this.deferred = d;
        var self = this;
        // on success or error, remove the current deferred because it has
        // completed, and pass through the result or error
        d.addBoth(function (res) {
            self.deferred = null; 
            log('loadFromURL success');
            return res;
        });
        // if anything goes wrong, except for a simple cancellation,
        // then log the error and show the logger
        d.addErrback(function (err) {
            if (err instanceof CancelledError) {
                return;
            }
            logError(err);
            //logger.debuggingBookmarklet();
        });
        return d;
    }
    
    datatableFromXMLRequest = function (req) {
		//logDebug("datatableFromXMLRequest");
    	var xml = req.responseXML;
		selectMenu(xml,selectPath);
		var newTable = DIV({"id":"menusx"},TABLE({"width":"148","height":"100", "border":"0", "cellSpacing":"0", "cellPadding":"0", "bgColor":"#ffffff"},
						THEAD(null,tableHeader()),
						TFOOT(null,tableFooter()),
						TBODY(null,map(buildRow,menuitem))));
		swapDOM("menusx",newTable);
    	return xml;
};

function selectMenu(xml,selectPath){
	var deep = 0;
	var selectArr = selectPath.split("/");
	var menus = xml.getElementsByTagName("section");
	//seleziono il menu corretto per la pagina
	for(var x=0; x<menus.length; x++){
		var menu = menus[x];
		//seleziono il menu
		if(menu.getAttribute("code")==selectArr[deep]){
			pathImg = menu.getAttribute("pathImg");
			topImg = menu.getAttribute("src");
			topHref = menu.getAttribute("href");
			var items = menu.childNodes;
			for(var i=0; i<items.length; i++){
				if(items[i].nodeType==1){
					goDeep(items[i], selectArr, deep+1);
				}
			}
			break;
		}
	}
}

function goDeep(item,selectArr, deep){
	var label = item.getAttribute("label");
	var code = item.getAttribute("code");
	var selected = false;
	var newTable;
	//se l'item e' selezionato
	/*CP: 24_08 Sostituito 'code.indexOf(selectArr[deep])>-1' con 'code.match(selectArr[deep])==code' 
	per lo sdoppiamento di calcio. Adesso fa un match preciso.*/
	if(code.match(selectArr[deep])==code){
		selected = true;
		label = selected ? label.toUpperCase() : label;
		menuitem.push(new menuItem(item,selected, deep));
		if(item.hasChildNodes()){
			var subItems = item.childNodes;
			for(var i=0; i<subItems.length; i++){
				if(subItems[i].nodeType==1){
					goDeep(subItems[i], selectArr, deep+1);
				}
			}
		}
	}else{
		menuitem.push(new menuItem(item,selected, deep));
	}
}

// <tr><td><a href="#" class="skyCorpL2">Intrattenimento</a></td></tr>
// <tr><td class="skyCorpL1"><a href="#" onmouseover="menuCorp('/guid/','on','menu020')" onmouseout="menuCorp('/guid/','off','menu020')"><img src="/img/menu/guid/menu020.gif" alt="" name="menu020" border="0"/></a></td></tr>

function buildRow(menuItem){
	var item = menuItem.item;
	var selected = menuItem.selected;
	var deep = menuItem.deep;
	
	var newRow;
	var _tipoRiga = item.getAttribute("type").length==0 ? "text" : item.getAttribute("type");
	
	for(i=0; i<item.attributes.length; i++){
		eval("var _" + item.attributes[i].nodeName + " = \"" + item.attributes[i].nodeValue+"\";");
		//logDebug("var _" + item.attributes[i].nodeName + " = \"" + item.attributes[i].nodeValue+"\";");
	}

	if(_type=="text"){
		//item menu a testo
		if(selected){
			_class = _class+"-On";
		}
		
		newRow = TR(null, 
					TD(null,
						A({"href":_href,"class":_class},_label)));
	}else if(_type=="img"){
		//item menu ad immagine
		if(selected){
			_src = _src.replace(/\.gif/g,"_on.gif");
			_src = _src.replace(/\.png/g,"_on.png");
			_src = _src.replace(/\.jpg/g,"_on.jpg");
			_onmouseout = _onmouseover;
		}
		
		newRow = TR(null, 
					TD({"class":_class},
					A({"href":_href},
					IMG({"src":pathImg+_src,"onmouseover":_onmouseover,"onmouseout":_onmouseout,"border":0}))));
	}else if(_type=="separator"){
		//item menu separatore
		newRow = TR(null,TD({"class":_class},IMG({"src":pathImg+_src,"border":0})));
	}
	return newRow;
}

function label2Id(str){
	str = str.toLowerCase();
	str = str.replace(/\s+/g,"");
	return str;
}

function changeStatus(action,object){
	try{
		if (action == "on" && !object.src.match(/_on/g)){
			object.src = object.src.replace(/\.gif/g,"_on.gif");
		} else if (action == "off"){
			object.src = object.src.replace(/_on\.gif/g,".gif");
		}
	}catch(e){
		alert("Si e' verificato un errore: "+e);
	}
}