//default margin left
var defaultMarginLeft = 60;

//menu space available
var menuAvailableSpace = 0;

//menu margin left
var menuMarginLeft = 0;

//menu minimum width
var menuMinWidth = 0;
var menuMinList = 0;

var menuArrowMargin		= 10;
var menuArrowPadding	= 10;

function onIntialRenderer()
{
	//update layout header height, depending on logo and menu height
	updateLayoutHeight();
	
	//set menu margin left
	var left = $('#logo img').width();
	menuMarginLeft = left+defaultMarginLeft;
	$('#sitemap').css('margin-left', menuMarginLeft);
	
	//intial menu process
	intialMenuProcess();
}

function onReadySpecific(){}

function onResizeBodySpecific()
{	
	var skh = $('#sticky_gallery_nav');
	if(skh.size() > 0 && bodyHeight == $('#body').height())
	{
		//alert('there is an sticky nav');
		bodyHeight = $('#body').height() - skh.height() - 9 - scrollPadding;
	}
}

function onResizeSpecific()
{			
	//process menu
	processMenuOnResize();
}

function onResizeGalleryItemSpecific(fimg)
{
	$('#body .galleryblock .galleryblock_info_bg').height(fimg.height());
}

function toggleGalleryStickySpecific(isGallery, overlay)
{
	var btm = 20;
	if(isGallery)
	{
		btm = 75;
		if(overlay)
		{
			btm = 20;
		}
	}
	else
	{
		onIntialRenderer();
	}
	$('#right').css('bottom', btm);
}

////////////////////////////////////
//LAYOUT HEIGHT FUNC
/////////////////////////////////////

function updateLayoutHeight()
{
	var top = $('#logo img').height();
	var sh = $('#sitemap ul').height()*$('#sitemap ul[data-menuactive=true]').size();
	if($('#sitemap ul[data-menuactive=true]').size() > 0)
	{
		sh+=$('#sitemap ul[data-menuactive=true]').size()*30;
	}
	if(sh > top)
	{
		top = sh;
	}
	
	//add padding
	top+=15;
	
	var ctop = pixelToNum($('#body, #content, #content_layer, #content_layer_gallery, #right, #info').css('top'));
	$('#body, #content, #content_layer, #content_layer_gallery, #right, #info').css('top', top);

	if(ctop != top)
	{
		//resize only if need to
		onPageResize();
	}
}

////////////////////////////////////
// MENU RESIZING FUNC
/////////////////////////////////////

//chekc to see if menu has been processed
function isMenuReady()
{
	if($('#sitemap ul:first').attr(aWAtt) == undefined)
	{	
		$('#sitemap').find('ul').hide();
		return false;
	}
	return true;
}

//intial call to process menu
function intialMenuProcess()
{
	//then if the actual width of the menu is not calculated then process
	if(!isMenuReady())
	{
		//work out widths of lists	
		calculateActualListWidth($('#sitemap'));
		$('#sitemap ul:first').show().animate({"opacity":1}, 100, 'linear');
	}
}

//this function is only called once on a list
//it calculates the list width
function calculateActualListWidth(ele)
{
	ele.find('ul').css("opacity", 0).show();
	ele.find('ul').each(
		function()
		{
			//set width to be some big at the start
			//this is so it all in one line
			$(this).width(1000000);
			
			//using offset as guide
			var lastChild = $(this).find('> li:last-child');
			var ulWidth	= lastChild.offset().left+lastChild.outerWidth()-menuMarginLeft+10;
			debug(layoutDebug ,'width determined by offset of last item ('+lastChild.find('a span').html()+'): '+ulWidth);

			//set widths
			setActualWidth($(this), ulWidth);
			$(this).width(ulWidth);
		}
	);
	ele.find('ul').css("opacity", 1).hide();
}

function processMenuOnResize()
{
	//make sure the sitemap holder overflow is hidden 
	$("#sitemap").css('overflow', 'hidden');
	
	if(isMenuReady())
	{	
		//if menu has been processed
		menuAvailableSpace = $(document).width() - menuMarginLeft - menuArrowMargin;
		
		//determine the greatest width, of the menus that are open/visible
		menuMinWidth = getMenuMinimumWidth($("#sitemap > ul:first"), 0);
		debug(layoutDebug , "menuMinWidth: "+menuMinWidth+", available space: "+menuAvailableSpace);
		
		//set menu holder width
		$("#sitemap").width(menuAvailableSpace);
		
		//set first list width to its original width
		$("#sitemap > ul:first").width(getActualWidth($("#sitemap > ul:first")));
		
		//show all menu items
		$("#sitemap li").css("opacity", "");
		
		//if menu min width is greater than avaible space 
		//then show arrows
		toggleArrows(false);
		if(menuMinWidth > menuAvailableSpace)
		{
			toggleArrows(true);
			menuAvailableSpace -= ($('#sitemap_right').width() + menuArrowPadding);
			hideHalfCutMenuitems($("#sitemap > ul:first"));
			$("#sitemap > ul:first").width(menuMinWidth);
			$("#sitemap").width(menuAvailableSpace);
		}
	}
}

//on menu clicked
function onMenuVisibilityChange(ul, doDefault)
{	
	processMenuOnResize();
	updateLayoutHeight();
}

function getMenuMinimumWidth(ul, min)
{
	var ulw = actualWidth(ul);
	if(ulw > min)
	{
		menuMinList = ul;
		min = ulw;
	}
	
	var cul = ul.find('> li > ul:visible');
	if(cul.size() > 0)
	{
		return getMenuMinimumWidth(cul, min);
	}
	return min;
}

//toggle menu scroll arrows
function toggleArrows(b)
{
	if($('.sitemap_arrow').size() == 0)
	{
		$('#left').append('<div class="sitemap_arrow" id="sitemap_right"><a href="#">&gt;</a></div><div class="sitemap_arrow" id="sitemap_left"><a href="#">&lt;</a></div>');
	}
	
	$('.sitemap_arrow').hide();
	$('.sitemap_arrow').unbind('mousedown');
	if(b)
	{
		//debug(layoutDebug , ($("#sitemap").width()-mSpace));
		//$('#sitemap ul:first').position().left-
		//$('#sitemap ul:first').css('left', );
		$('.sitemap_arrow').show();
		$('#sitemap_left').css('left', menuMarginLeft-menuArrowMargin-menuArrowPadding);
		$('#sitemap_right').css('right', menuArrowMargin);

		$('.sitemap_arrow a').click(function(){return false;});
		$('#sitemap_right a').mousedown(function(){startTween(this, -1, $('#sitemap > ul')); return false;});
		$('#sitemap_left a').mousedown(function(){startTween(this, 1, $('#sitemap > ul')); return false;});
	}
	else
	{
		$('#sitemap ul:first').animate({"left":0}, 0);
	}
}

function hideHalfCutMenuitems(ul)
{
	var ulw = ul.attr(aWAtt);
	if(ulw > menuAvailableSpace)
	{
		var noItems = ul.find('li').size();
		for(var i=(noItems-1); i >= 0; i--)
		{
			//get nth child
			var lastChild = ul.find('li:eq('+i+')');
			if(lastChild.size() > 0)
			{
				//width upto and including list item
				var liwi	= lastChild.offset().left+lastChild.outerWidth()-menuMarginLeft+10;
				lastChild.css("opacity", "");
				if(liwi > menuAvailableSpace)
				{
					//lastChild.css("opacity", 0);
				}
				else
				{
					break;
				}
			}
		}
	}
	
	if(ul.find('ul:visible').size() > 0)
	{
		hideHalfCutMenuitems(ul.find('ul:visible'));
	}
}









//menu space available
var mSpace 		= 0;


//data attribute holders a string array of lengths
var cWAtt 		= 'data-cW';



//relates to the menu list which is the biggest
var minMenu = false;


//menu margin left
var mLeftMargin = 0;
var menuWidth = 0;

function doDefaultMenuSize()
{
	minMenu = $('#sitemap ul:first');
	minMenuWidth = actualWidth(minMenu);
	debug(layoutDebug , "default minMenuWidth: "+minMenuWidth);
}

function onMenuVisibilityChange2(ul, doDefault)
{	
	if(doDefault != null && doDefault)
	{
		doDefaultMenuSize();
	}
	
	//get menu minimum
	getMinMenuWidth(ul);
	
	//set properties
	$('#sitemap ul:first').width(minMenuWidth);
	
	updateLayoutHeight();
	
	//process if menu needs arrows
	//onMenuProcessed();
}



function getMinMenuWidth(ul)
{
	var minWidth = actualWidth(ul);
	if(minWidth > minMenuWidth)
	{
		minMenu = ul;
		minMenuWidth = minWidth;
		debug(layoutDebug , "minMenuWidth: "+minMenuWidth);
	}
	
	var parentList = ul.closest('li').closest('ul');
	if(parentList.size() > 0)
	{
		getMinMenuWidth(parentList);
	}
}



function processlistWidth(ul)
{
	var cwArr 		= str_array(data(ul, cWAtt));
	var noItems 	= cwArr.length;
	var ulWidth 	= actualWidth(ul);
	var arrows		= false;
	
	if(ulWidth > mSpace)
	{
		mSpace-=arrowMargin;
		arrows = true;
		for(var i=noItems-1; i >= 0; i--)
		{
			//if the list widht is greater 
			//than the space avaiable
			if(ulWidth > mSpace)
			{
				//remove last list item width
				ulWidth = ulWidth - cwArr[i];
			}
			else
			{
				//else stop
				break;
			}
		}
	}
	
	//set sitemap width
	$("#sitemap").width(ulWidth);
	//debug(layoutDebug , "set sitemap width: "+ulWidth+", mSpace: "+mSpace );
	
	//deafult remove arrows
	toggleArrows(arrows);
}






