//current selected menu's list item container
var parentListItem = false;
var lastLink = false;
var currentLink = false;
var intialDeepLink = false;
var linkhtml = '';

//initial reayd function
function onReadyMenuInit()
{
	setListLevels('ul', 0);
}

//set list index levels
function setListLevels(selector, level)
{
	//get list
	var lists = $("#sitemap "+selector);
	if(lists.size() > 0)
	{
		//if exists set level of list
		$("#sitemap "+selector).attr('index', level);
		if(level > 0)
		{
			//if level greater than zero then hide intially
			$("#sitemap "+selector).hide();
		}
		
		//do recursive function
		//for inner lists
		setListLevels(selector+" ul", level+1);
	}
}

//swf address fire event
function handleSwfAddressMenuUpdate(nuri)
{
	if(currentLink)
	{
		lastLink = currentLink;
	}
	
	//get menu link
	currentLink = getClosestLinkMatch(nuri);
	if(currentLink && currentLink.size() > 0)
	{		
		//list item
		parentListItem = currentLink.closest('li');
		
		//if link exists
		var openIndex = 0;
		
		//get current folder uri
		var curi = getSelectedUri();
		if(curi)
		{
			//if there is a selected menu
			var currentSelected = $("#sitemap ul li.selected a[href='"+base_url+curi+"']");
			if(currentSelected.size())
			{
				//then deselect
				currentSelected.toggleClass('selected', false);
			}
			
			//if there is sub menus open
			openIndex = closeUnselected(curi, nuri);
		}
		else
		{
			$("#sitemap ul li").toggleClass('selected', false);
		}
		
		//open folders that need to be open
		openList(nuri, openIndex);
				
		if(currentLink.parent().find('ul').size() == 0)
		{
			currentLink.parent().toggleClass('selected', true);
			return currentLink;
		}
	}
	return false;	
}

function isIntialDeepLink()
{
	if(intialDeepLink && parentListItem && parentListItem.find('ul').size() > 0)
	{
		var atag = parentListItem.find('ul li:first a');
		if(atag && atag.size() > 0)
		{
			var tmp_url = atag.attr('href').replace(base_url, '');
			updateAddress("/"+tmp_url);
			intialDeepLink = false;
			return true;
		}
	}
	return false;
}

//breaks down the uri passed
//and returns a match between 
//the valid part of uri and link tag
function getClosestLinkMatch(nuri)
{
	var atag = $("#sitemap ul li a[href='"+base_url+nuri+"']");
	if(atag.size() == 0)
	{
		tmpuri = popSegs(nuri, 1);
		if(tmpuri != nuri)
		{
			return getClosestLinkMatch(tmpuri);
		}
	}
	else
	{
		return atag;
	}
	return false;
}

//gets selected folder uri
function getSelectedUri(selector)
{
	if(selector==null)
	{
		selector="ul";
	}
	
	//if there is open list
	var ul = $("#sitemap ul "+selector+":visible");
	if(ul.size() > 0)
	{
		//has child open list
		var sul = $("#sitemap ul "+selector+" ul:visible");
		if(sul.size() > 0)
		{
			//then do recursive function
			return getSelectedUri(selector+" ul");
		}
		else if(ul.parent().find('a').size() > 0)
		{
			//else return href of this list
			return (ul.parent().find('a').attr('href')).replace(base_url, '');
			//return (ul.find('a').attr('href')).replace(base_url, '');
		}
	}
	
	//return false of no lists are open
	return false;
}

//closes open lists items that need to be closed
//and returns the stop index
function closeUnselected(curi, nuri)
{
	//into array
	var ca = curi.split('/');
	var na = nuri.split('/');
	
	//if the curi is not equal to nuri and
	//if either of the uri arrays lengths greater than one
	//that means theres more to compare
	if(curi!=nuri)
	{
		if(ca.length > 1 || na.length > 1)
		{
			//if current is greater or equal to nuri
			//then remove anohter piece
			if(ca.length >= na.length)
			{
				//hide this folder
				visibility(ca.join('/'), false);
				ca.pop();
			}
			if(na.length >= ca.length)
			{
				na.pop();
			}
			
			//check this new 
			return closeUnselected(ca.join('/'), na.join('/'));
		}
		else
		{
			//close last sement
			visibility(ca.join('/'), false, true);
		}
	}
	else
	{
		return ca.length;
	}
	return 0;
}

//opens list items from a certain index
//depending on uri
function openList(nuri, openIndex)
{
	if(openIndex==null)
	{
		openIndex=0;
	}
	na = nuri.split('/');
	for(var i=(openIndex+1); i <= na.length; i++)
	{
		var href = nuri;
		if(na.length > i)
		{
			href= popSegs(nuri, (na.length-i));
		}
		visibility(href, true);
	}
}

function onMenuVisibiltyUpdated()
{
	//do layout specific
	if(!is_mobile)
	{
		ul = parentListItem.find('ul:first');
		if(ul.size() == 0)
		{
			ul = parentListItem;
		}
	}
}

//show or close list depending on uri
function visibility(href, show, callback)
{
	if(show==null)
	{
		show = true;
	}
	var atag = $("#sitemap ul li a[href='"+base_url+href+"']");
	if(atag.size() > 0 && atag.parent().find('ul:first').size() > 0)
	{
		atag.toggleClass('selected', show);
		var ul = atag.parent().find('ul:first');
		if(ul.size() > 0)
		{
			data(ul, 'menuactive', show, true);
			if(show)
			{			
				//alert("show: "+base_url+href);
				ul.slideDown("slow");
			}
			else
			{
				//alert("hide: "+base_url+href);
				ul.slideUp("slow");
			}
		}
	}
}

