/**
 * Tämän tyylinen accordionmenu perustuu siihen, että sivun latautuessa alamenut eivät 
 * ole piilossa, jolloin saadaan tietää se pikselimäärä johon menu pitää kasvattaa kun menu avataan.
 * IE:llä kuitenkin nähdään ongelma, jossa koko menurakenne on hetken näkyvissä, ennenkuin valitsemattomat 
 * kohdat saadaan piiloon. Sama ongelma näyttää olevan järjestään kaikissa Accordionmenu-demoissa eri 
 * javascript alustoille.
 * Ongelma ei katoa silläkään, että menu ensin luodaan PHP:llä ja sitten tällä samalla skriptillä se avataan,
 * koska tällöin menulla ei ole mitään tietoa siitä, montako pikseliä mitäkin menua pitää avata.
 * 
 * Jotta ongelma saadaan IE:llä kierrettyä, pitää koko Accordionmenu rakentaa uudestaan kokonaan eri lähtökohdasta,
 * joka voisi ehkä perustua esim. alavalikon itemien lukumäärään
 * Esim height = number_of_items * line_height + top_margin + bottom_margin 
 */
var AccordionMenu = {

	inited: false,
	
	config: "",
	
	init: function(config) 
	{
		this.inited = true;
		this.config = config;
		this.menuObj = document.getElementById('mainmenu');
		this.menuObj.config = new Object();
		this.menuObj.config.submenuIndex = new Array();
		
		for (i=0; i<this.menuObj.childNodes.length; i++)
		{			
			thisItem = this.menuObj.childNodes[i];
			thisItem.config = new Object();
			thisItem.config.index = i;
			
			switch (thisItem.className)
			{
				case 'menuitem': 
					nextItem = this.menuObj.childNodes[i+1];
					if ((typeof(nextItem) != 'undefined') && (nextItem.className == 'submenu'))
					{	
						thisItem.config.submenu = nextItem;
						thisItem.onclick = function()
						{
							AccordionMenu.toggleItem(this);
						};
					}
				break;
				
				case 'submenu': 
					this.menuObj.config.submenuIndex.push(i);
					thisItem.config.origHeight = parseInt(thisItem.childNodes[0].childNodes.length) * 20 + 10;
					thisItem.config.state = false;
					
					// -- jos navigoidaan valitussa alavalikossa, ei piiloteta alavalikkoa näkyvistä	
					inList = false;
					for(j=0; j<thisItem.childNodes[0].childNodes.length; j++)
					{
						linkItem = thisItem.childNodes[0].childNodes[j];
						if(linkItem.href == document.location) inList = true;
					}
					
					if(!inList)
						AccordionMenu.hideItem(thisItem);
					//else
					//	thisItem.style.display = "block";
						
				break;
					
			}
		}
		
	},
	
	
	expandItem: function(obj)
	{
		if (obj.config.index != this.menuObj.config.selectedIndex) this.menuObj.config.prevSelectedIndex = this.menuObj.config.selectedIndex;
		this.menuObj.config.selectedIndex = obj.config.index;
		obj.style.height = 1;
		obj.style.display = 'block';
		obj.previousSibling.childNodes[1].src = "/application/images/arrow_open.gif";
		JSTweener.addTween(obj.style, {
		   time: 0.5,
		   transition: 'easeOutExpo',
		   height: obj.config.origHeight
		});

		if (AccordionMenu.config.collapseprev)
		{
			if (typeof(this.menuObj.config.prevSelectedIndex) != 'undefined') AccordionMenu.collapseItem(this.menuObj.childNodes[this.menuObj.config.prevSelectedIndex]);
		}
		obj.config.state = true;

	},
	
	collapseItem: function(obj)
	{
		obj.previousSibling.childNodes[1].src = "/application/images/arrow_close.gif";
		
		JSTweener.addTween(obj.style, {
		    time: 0.5,
		    transition: 'easeOutExpo',
		    height: 1,
		    onComplete: AccordionMenu.hideItem,
		    onCompleteParams: [obj]
		});

		obj.config.state = false;
	},
	
	
	hideItem: function(obj)
	{
		obj.previousSibling.childNodes[1].src = "/application/images/arrow_static.gif";
		obj.style.overflow = 'hidden';
		obj.style.height = 1;
		obj.style.display = 'none';
	},
	
	
	toggleItem: function(obj) 
	{
		if (!obj.config.submenu.config.state)
		{
			AccordionMenu.expandItem(obj.config.submenu);
			obj.childNodes[1].src = "/application/images/arrow_open.gif";
			obj.childNodes[1].backgroundImage = "/application/images/selected_mainnavi.png";
		}
		else 
		{
			AccordionMenu.collapseItem(obj.config.submenu);
			obj.childNodes[1].src = "/application/images/arrow_close.gif";
		}
		
	}
}