/**
 * @author Moretti Paolo
 */

var M = {
	
	//menuXmlUrl: 'http://www.eurizoncapital.it/ec/menuxml',		// Remoto
	menuXmlUrl: '/cait/menuxml',										// Locale
	sliderActiveElement: false,
	imgPath: '/sStatico/images/main/',								// Image path
	m_titPrefix: 'm_tit_',
	/*
	TitlesArray: {
		'PRODOTTI': 'm_tit_iProdotti.gif',
		'INVESTITORI PRIVATI': 'm_tit_investitoriPrivati.gif',
		'INVESTITORI ISTITUZIONALI': 'n_tit_investitoriIst.gif',
		'IMPRESE': 'm_tit_imprese.gif',
		'LA SOCIETA': 'm_tit_societa.gif',
		'MERCATI': 'm_tit_mercati.gif',
		'IN PRIMO PIANO': 'm_tit_inPrimoPiano.gif'
	},
	*/
	idPrefix: 'spam',
	mainMenuScroller: false,
	maximumHeight: Number(282),
	maximumInternalHeight: Number(259),
	intIDm_controller: Number(50),
	intIDs_controller: Number(50),
	
	init: function(m_id)
	{
		//window.onload = function() {
			Utils.debugStatus = true;
			M.status = 'loading';
			M.M = $(m_id) || false;
			M.activeItemId = Utils.getUriParam('varset_orig');
			if (M.activeItemId != false) {
				M.activeItemId = Utils.setParamLength(M.activeItemId, 4);		// Elimino livelli superiori al quarto
				M.loadMenuItems();
			} else {
				Utils.Debug("Impossibile trovare il parametro varset_orig")
				M.fireMenu();
			}
		//}
		
	},
	
	loadMenuItems: function()
	{
		new Ajax.Request(this.menuXmlUrl + '?varset_orig=' + M.activeItemId, {
			method: 'get', 
			onSuccess: function(req) {
				M.XML = req.responseXML;
				M.writeMenuUI();
			},
			onFailure: function() {
				Utils.Debug("ERRORE di caricamento XML!")
			}
		});
	},
	
	fireMenu: function()
	{
		this.status = "stop";
		if ($('MenuBlock')) 
			$('MenuBlock').style.display = 'none';
		else 
			Utils.Debug("non esiste MenuBlock")
	},
	
	writeMenuUI: function() 
	{
		var itemHTML = '';
		if (!this.XML.getElementsByTagName('Menu')[0].hasChildNodes()) 
			this.fireMenu();
		else {
			// Ci sono nodi, procedo a costruire l'interfaccia del menù
			for (var i = 0; i < this.XML.getElementsByTagName('Menu')[0].childNodes.length; i++) {
				if (this.XML.getElementsByTagName('Menu')[0].childNodes[i].nodeName != '#text') {
					var mnode = this.XML.getElementsByTagName('Menu')[0].childNodes[i];
					var childs = this.getMenuChilds(mnode);
					
					if (childs) {
						// Imposto il title
						$('MenuTitleLevel').src = this.imgPath + this.m_titPrefix + (mnode.getAttribute('l').split(" ").join("_") + '.gif');
						
						// Controllo i secondi livelli
						childs.each(function(item, ind){
							if (item.nodeName != '#text') {
							
								itemHTML += '<li class="waround"></li><li id="' + Utils.getUriParam("varset_orig", item.getAttribute('a')) + '">' +
								'<a href="' +
								item.getAttribute('a') +
								'" title="' +
								item.getAttribute('l') +
								'">' +
								item.getAttribute('l') +
								'</a>';
								
								// Controllo i terzi livelli
								var subChilds = M.getMenuChilds(item);
								if (subChilds.length > 0) {
								
									itemHTML += '<div id="' + Utils.getUriParam("varset_orig", item.getAttribute('a')) + '_childOpener" onMouseOver="M.toggleOpener(this)" onMouseOut="M.toggleOpener(this)" onClick="M.toggleChilds(this)" class="ChildOpener"><img src="' + M.imgPath + 'f_opener.gif"></div><ul class="subItems">';
									subChilds.each(function(sitem, ind){
									
										if (sitem.nodeName != '#text') {
											var item4HTML = ''; // Resetto gli elementi di quarto livello
											itemHTML += '<li id="' + Utils.getUriParam("varset_orig", sitem.getAttribute('a')) + '"><a href="' + sitem.getAttribute('a') + '" title="' + sitem.getAttribute('l') + '">' + sitem.getAttribute('l') + '</a></span></li>';
											
											// Controllo il quarto livello
											var lastChilds = M.getMenuChilds(sitem);
											if (lastChilds.length > 0) {
												lastChilds.each(function(litem, ind){
													if (litem.nodeName != '#text') 
														item4HTML += '<li id="' + Utils.getUriParam("varset_orig", litem.getAttribute('a')) + '"><a href="' + litem.getAttribute('a') + '" title="' + litem.getAttribute('l') + '">' + litem.getAttribute('l') + '</a></span></li>';
												});
												if (item4HTML != '') 
													$('MenuBlockItems_4').innerHTML += '<ul id="' + Utils.getUriParam("varset_orig", sitem.getAttribute('a')) + '_level4">' + item4HTML + '</ul>';
											}
											
										}
									});
									itemHTML += '</ul>';
								}
								itemHTML += '<img src="' + M.imgPath + 'm_bg_bt_item1.gif"></li>';
								
							}
						})
					} else M.fireMenu();
				}
			};
			M.M.innerHTML += itemHTML;
			this.setActiveUp();
		}
	},
	
	toggleOpener: function(op) 
	{
		if (op.getAttribute('status') != "open") {
			if (op.firstChild.src.indexOf('f_opener.gif') > 0) 
				op.firstChild.src = this.imgPath + 'f_opener_on.gif';
			else 
				op.firstChild.src = this.imgPath + 'f_opener.gif';
		}
	},
	
	toggleChilds: function(op) 
	{
		Utils.Debug("Cliccato " + op + ", stato: " + op.getAttribute('status'))
		if (op.getAttribute('status') != "open") {
			op.setAttribute('status', 'open');
			op.firstChild.src = this.imgPath + 'f_opener_on.gif';
			this.setActiveUp(Element.up(op, 0).id);
		} else {
			op.setAttribute('status', 'close');
			this.resetActive(Element.up(op, 0).id);
		}
		Utils.Debug("Nuovo stato: " + op.getAttribute('status'));
		this.rewriteItems();
	},
	
	rewriteItems: function() 
	{
		$$('#MenuBlock li.waround').each(function(item, i){
			item.style.height = '0px';
		});
	},
	
	checkMenuViewport: function(op) 
	{
		Utils.Debug("CALL: checkMenuViewport")
		Utils.Debug($('MenuBlockItems_1').offsetHeight + " - " + this.maximumInternalHeight + ": " + this.mainMenuScroller);
		Utils.Debug($('MenuBlockItems_1').parentNode.offsetHeight);
		if($('MenuBlockItems_1').offsetHeight >= this.maximumInternalHeight && this.mainMenuScroller == false) {
			if ($('MenuBlock')) {
				$('MenuBlock').setStyle({
					height: M.maximumHeight + 'px',
					overflow: 'hidden'
				});
				$('MenuBlock').innerHTML += '<div id="menuScrollerTrack"><div id="menuScrollerHandle"><img src="/sStatico/images/main/m_menuHandle.gif"></div></div>';
			}
			$('menuScrollerTrack').setStyle({
				height: M.maximumInternalHeight + 'px'
			});
			if (!$('tempMenuScroller')) {
				$('MenuBlockItems_1').wrap('div', {
					'id': 'tempMenuScroller',
					'style': 'height: ' + M.maximumHeight + 'px'
				});
			} else $('tempMenuScroller').setStyle({
				height: M.maximumHeight + 'px'
			})
			$('MenuBlockItems_1').setStyle({
				position: 'absolute',
				top:0,
				left: 0,
				width: '95%'
			});
			this.ms = new Control.Slider('menuScrollerHandle', 'menuScrollerTrack', {	// Scroller per il menu di sinistra
				axis: 'vertical',
				minimum: 0,
				maximum: M.maximumHeight,
				alignY: 0,
				sliderValue: 0,
				onSlide: function(pos, o){
					$('MenuBlockItems_1').style.top = "-" + Number(($('MenuBlockItems_1').offsetHeight - 262) * pos) + 'px';
				}
			});
			this.mainMenuScroller = true;
			
		} else if($('MenuBlockItems_1').offsetHeight < this.maximumInternalHeight) {
			
			if($('tempMenuScroller')) $('tempMenuScroller').style.height = $('MenuBlockItems_1').offsetHeight + 'px'
			if (this.mainMenuScroller) {
				Element.remove('menuScrollerHandle');
				Element.remove('menuScrollerTrack');
				$('MenuBlockItems_1').style.top = '0'
				this.mainMenuScroller = false;
			}
			
		}
	},
	
	resetActive: function(actItem)
	{
		Utils.Debug("CALL: resetActive " + actItem)
		var activeItem = $(actItem);
		this.resetFatherActive(activeItem);
		Element.removeClassName(activeItem, 'active');
		
		M.checkMenuViewport(); 
		/*
		var intID = setInterval(function(){	// Workaround per aggirare il problema sul caricamento di IE
			M.checkMenuViewport(); 
			clearInterval(intID);
		}, 50);
		*/
	},
	
	setActiveUp: function(actItem) 
	{
		Utils.Debug("----- " + $(this.activeItemId))
		if (actItem != null) this.activeItemId = actItem;
		if ($(this.activeItemId)) {
			var idParams = Utils.getSpamParams(this.activeItemId);
			
			if (idParams.length == 4) { // quarto livello selezionato
				$(this.activeItemId).addClassName('active');
				this.sliderActiveElement = $(this.activeItemId);
				this.activeItemId = this.getFatherIdByArray(idParams);
				idParams = this.getFatherIdParamsByArray(idParams);
			}
			
			if(!$(this.activeItemId)) {
				this.activeItemId = this.getFatherIdByArray(idParams);
				idParams = this.getFatherIdParamsByArray(idParams);
			}
			var activeItem = $(this.activeItemId);
			this.setFatherActive(activeItem);
			activeItem.addClassName('active');
			// Accendo la freccia che apre i figli inquanto attivo.
			if ($(activeItem.id + '_childOpener')) {
				this.toggleOpener($(activeItem.id + '_childOpener'));
				$(activeItem.id + '_childOpener').setAttribute('status', 'open');
			}
			if (idParams.length == 3) { // Accendo il quarto livello
				if ($(Utils.joinIdParams(idParams) + '_level4')) {
					$(Utils.joinIdParams(idParams) + '_level4').style.display = 'block';
					if ($(Utils.joinIdParams(idParams) + '_level4').childNodes.length > 9) {
						var intIDs = setInterval(function(){ // Workaround per aggirare il problema sul caricamento di IE
							M.setSlider();
							M.intIDs_controller--;
							clearInterval(intIDs);
						}, 50);
					} else {
						$('sliderTrack').style.display = 'block';
						$('sliderTrack').childElements().each(function(elem, i){
							elem.style.display = 'none'
						});
					}
					
				}
				this.toggleOpener($(Utils.getFatherSpamId(activeItem.id) + '_childOpener'));
			}
		}
		else {
			var params = Utils.getSpamParams(Utils.getUriParam('varset_orig'));
			if (params.length != 1 || 
				params == "") {
				Utils.Debug("Non ci sono sottovoci attive");
				this.fireMenu();
			}
		}
		
		M.showMenu();
		M.checkMenuViewport(); 
		/*
		var intIDm = setInterval(function(){	// Workaround per aggirare il problema sul caricamento di IE
			M.showMenu();
			M.checkMenuViewport(); 
			M.intIDm_controller--;
			if(M.intIDm_controller == 0) clearInterval(intIDm);
		}, 50);
		*/
	},
	
	setSlider: function() 		// Slider del quarto livello 
	{
		var yperc = .001;
		$('sliderTrack').style.display = 'block'
		if (this.sliderActiveElement != false) {
			for (var i = 0; i < this.sliderActiveElement.ancestors()[0].childElements().length; i++) {
				var elem = this.sliderActiveElement.ancestors()[0].childElements()[i]
				if (elem == this.sliderActiveElement) 
					var yperc = (i / this.sliderActiveElement.ancestors()[0].childElements().length);
			}
		}
		var s = new Control.Slider('sliderHandle', 'sliderTrack', {		
			axis: 'vertical',
			minimum: 0,
			maximum: Number($('MenuBlockItems_4').offsetHeight - $('MenuBlockItems_4_block').offsetHeight),
			alignY: 0,
			sliderValue: 0,
			onSlide: function(pos, o){
				$('MenuBlockItems_4').style.top = "-" + Number(this.maximum * pos) + 'px';
			}
		});
		this.Slider = s;
		Utils.Debug("Slider settato");
		this.setSliderViewport(yperc);
		return s;
	},
	
	moveSlider: function(dir) 
	{
		this.setSliderViewport(this.Slider.value + (dir * .05));
	},
	
	setSliderViewport: function(n) 
	{
		this.Slider.setValue(n);
		$('MenuBlockItems_4').style.top = "-" + Number(this.Slider.maximum * n) + 'px';
	},
	
	setSliderViewport_mouseWheel: function(e) 
	{
		/*
		window.onMouseWheel = function(){alert("asd")};
		//Scrollfreeze.off();
		var n = Event.wheel(e) * -.1;
		M.setSliderViewport(M.Slider.value + n);
		//Scrollfreeze.on();
		*/
	},
	
	getFatherIdByArray: function(ids) 
	{
		ids[ids.length - 1] = null;
		return M.idPrefix + '_' + ids.compact().join('_');
	},
	
	getFatherIdParamsByArray: function(ids) 
	{
		ids[ids.length - 1] = null;
		return ids.compact();
	},
	
	setFatherActive: function(item) 
	{
		if(item.up(1).nodeName == 'LI') this.setFatherActive(item.up(1));
		else item.addClassName('on')
	},
	
	resetFatherActive: function(item) 
	{
		if(item.up(1).nodeName == 'LI') this.setFatherActive(item.up(1));
		else item.removeClassName('on')
	},
	
	showMenu: function() 
	{
		if($('LoadingBox')) $('LoadingBox').style.display = 'none';
		this.M.style.display = 'block';
		this.status = 'loaded';
	},
	
	getMenuChilds:  function(node) 
	{
		var Childs = new Array();
		if (node != null && node.childNodes.length > 0) {
			for (var j = 0; j < node.childNodes.length; j++) {
				var item = node.childNodes[j];
				if (item.nodeName != '#text') {
					Childs.push(item);
				}
			}
			if(Childs.length > 0) return Childs;
			else return false;
		} else return false;
	}
	
}

var Utils = {
	
	setCookie: function (name, val, expDays)
	{
		var exp = new Date(); 
		exp.setTime(exp.getTime() + (expDays*24*60*60*1000));
		expDate=exp.toGMTString();
		document.cookie = ""+name+" ="+ val+"; expires ="+ expDate+";";
	},
	
	getCookie: function (offset)
	{ 
		var endStr = document.cookie.indexOf (";", offset); 
		if (endStr == -1) var endStr = document.cookie.length; 
		return unescape(document.cookie.substring(offset, endStr));
	},
	
	setParamLength: function(strParam, len) 
	{
		Utils.Debug("CALL: setParamLength - Utils - " + strParam)
		var arrParam = Utils.getSpamParams(strParam);
		if(arrParam.length > len) {
			arrParam[arrParam.length - 1] = null
			strParam = Utils.setParamLength(M.idPrefix + '_' + arrParam.compact().join("_"), len);
		}
		return strParam;
	},
	
	getUriParam: function(param, uri) 
	{
		if(uri == null) var uri = window.location.href;
		//if(uri.include(param)) {		PROTOTYPEJS 1.5.1
		if(uri.indexOf(param) > 0) {
			var uriParams = uri.toQueryParams();
			return uriParams[param];
		} else return false
	},
	
	getSpamParams: function(spamId) 
	{
		return spamId.split("_").without(M.idPrefix);
	},
	
	joinIdParams: function(idParams)
	{
		return M.idPrefix + '_' + idParams.join('_');
	},
	
	getFatherSpamId: function(spamId) 
	{
		if (!Utils.isArray(spamId)) 
			var spamId = this.getSpamParams(spamId);
		spamId[spamId.length - 1] = null;
		return M.idPrefix + '_' + spamId.compact().join("_");
	},
	
	getNum: function(s) 
	{
		return Number(s.split('px')[0]);
	},
	
	isArray: function(e) 
	{
		if(e.constructor.toString().indexOf("Array") > 0) return true;
		else return false;
	},
	
	Debug: function(msg, t) 
	{
		if(t && typeof t == 'object') {
			for (method in t) {
				
			}
		}
		if((this.debugStatus || t == true) && $('debug'))
			$('debug').innerHTML += '<br>DEB>' + msg;
	}
	
}

