var curFrameId = null;
var curSubFrameId = null;

var baseFrameHeight = 500;
var baseMainBarHeight = 33;
var baseSubBarHeight = 22;
var baseSubBarHeightWPadding = 25;
var minMainBarHeight = 8;
var minSubBarHeight = 10;
var mainBarFontSize = 20;
var subBarFontSize = 14;

var initial = true;

var barIds = new Array ( 
	{ name : 'barPortfolio', frame : "subPortfolio",		ready: true, subs : new Array( 
									{bar : "subbarPrint",		frame : "portPrint",	ready : false}, 
									{bar : "subbarApparel",	frame : "portApparel",	ready : false}, 
									{bar : "subbarWeb",		frame : "portWeb",		ready : false}, 
									{bar : "subbarPhoto",		frame : "portPhoto",	ready : false}, 
									{bar : "subbarLogo",		frame : "portLogo",		ready : false}
									) }, 
	{ name : 'barAbout',	frame : 'frameAbout',	ready : true, subs : new Array() }, 
	{ name : 'barNews',		frame : 'frameNews',	ready : true, subs : new Array() }, 
	{ name : 'barContact',	frame : 'frameContact',	ready : true, subs : new Array() }, 
	{ name : 'barShop',		frame : 'frameShop',	ready : true, subs : new Array() } 
	);

// frameId	subFrameId
// null		null	
//		Close cur Frame				
//		Close cur sub Frame
//		Unsquish all bars
// Val		null	
//		If Val != cur Frame then close cur	
//		Close cur sub Frame
//		Open Val Frame to 
//			1) full height
//			2) max height (if max is less than full)
//			3) height of sub frame bars (if it has subs)
//		Unsquish bar for Val
//		Squish all other bars
// Val		Val2	
//		If Val != cur Frame then close cur & Close cur sub Frame			
//		If Val2 != curSubFrame then close cur sub frame
//		Open Val Frame to full height
//		Open Val2 SubFrame
//		Unsquish bar for Val
//		Squish all other bars
// null		Val2	
//		Invalid
function Goto(frameId, subFrameId, maxHeight, dontShrinkOtherBars){
	var FrameAnim;
	var CurFrameAnim;
	var SubFrameAnim;
	var CurSubFrameAnim;
	var SquishBarAnim;
	var UnSquishBarAnim;

	// SETUP VARIABLES
	var foundBar = null;
	var subGroupHeight = 0;
	var clickedBarId = null;
	
	for (var i = 0; i < barIds.length; i++)
	{
		if (frameId == barIds[i]["frame"])
		{
			foundBar = barIds[i];
			clickedBarId = barIds[i]["name"];
			subGroupHeight = barIds[i]["subs"].length * baseSubBarHeightWPadding;
			continue;
		}
	}

	var expandTo;
	// If this bar has subgroups then just show the sub groups
	if (subGroupHeight == 0)
	{
		expandTo = baseFrameHeight;
	}
	else
	{
		// Either Expand to specified value or the max that the window can handle
		if (subFrameId != null)
		{
			expandTo = baseFrameHeight;
		}
		else{
			expandTo = subGroupHeight;
		}
	}

	maxHeight = (maxHeight == null ? expandTo : maxHeight);
	expandTo = Math.min(expandTo, maxHeight);
	//
	//
	// SETUP Animations
	var attributesFrame = {   
		height: { to: expandTo }   
	};   
	FrameAnim = new YAHOO.util.Anim(frameId, attributesFrame, 0.75, YAHOO.util.Easing.easeOutStrong);

	if(curFrameId != null){
		var attributesCurFrame = {   
			height: { to: (document.getElementById(curFrameId).nodeName.toUpperCase() == "DIV" ? 1 : 0) }   
		};   
		CurFrameAnim = new YAHOO.util.Anim(curFrameId, attributesCurFrame, 0.75, YAHOO.util.Easing.easeOutStrong);
	}

	var attributesSubFrame = {   
		height: { to: baseFrameHeight - subGroupHeight }   
	};   
	SubFrameAnim = new YAHOO.util.Anim(subFrameId, attributesSubFrame, 0.75, YAHOO.util.Easing.easeOutStrong);

	var attributesCurSubFrame = {   
		height: { to: 0 }   
	};   
	CurSubFrameAnim = new YAHOO.util.Anim(curSubFrameId, attributesCurSubFrame, 0.75, YAHOO.util.Easing.easeOutStrong);

	var attributesSquish = {   
		height: { to: minMainBarHeight }   
	};   

	var attributesUnsquish = {   
		height: { to: baseMainBarHeight }   
	};   

	if (frameId == null && subFrameId == null)
	{
		CurFrameAnim.animate();
		document.getElementById('close' + curBarId).style.display = "none";
		CurSubFrameAnim.animate();
		UnsquishBars();
	}

	if (frameId != null && subFrameId == null)
	{
		if(frameId != curFrameId && curFrameId != null){
			CurFrameAnim.animate();
			document.getElementById('close' + curBarId).style.display = "none";
		}

		if (curSubFrameId != null)
		{
			CurSubFrameAnim.animate();
		}
		FrameAnim.animate();
		document.getElementById('close' + clickedBarId).style.display = "";
		UnsquishBars(clickedBarId);
		if(dontShrinkOtherBars) 
			UnsquishBars();
		else
			SquishOtherBars(clickedBarId);
	}

	if (frameId != null && subFrameId != null)
	{
		if(frameId != curFrameId){
			CurFrameAnim.animate();
			document.getElementById('close' + curBarId).style.display = "none";
		}

		if(subFrameId != curSubFrameId){
			CurSubFrameAnim.animate();
		}

		FrameAnim.animate();
		document.getElementById('close' + clickedBarId).style.display = "";
		SubFrameAnim.animate();
		UnsquishBars(clickedBarId);
		if(dontShrinkOtherBars) 
			UnsquishBars();
		else
			SquishOtherBars(clickedBarId);
	}

	curBarId = ((frameId == null) ? "" : clickedBarId);
	
	curFrameId = frameId;
	curSubFrameId = subFrameId;
}

function UnsquishBars(barId){
	var attributes = {   
		height: { to: baseMainBarHeight }   
	};   

	// Do Expand/Squish for all of the bars that aren't the one specified
	for (var i = 0; i < barIds.length; i++)
	{
		if ((!barId) || (barId == barIds[i]["name"]))
		{
			animSquish = new YAHOO.util.Anim(barIds[i]["name"], attributes, 0.75, YAHOO.util.Easing.easeOutStrong); 
			animSquish.animate();
		}
	}
}

function SquishOtherBars(barId){
	if(!barId) return;

	var attributes = {   
		height: { to: minMainBarHeight }   
	};   

	// Do Expand/Squish for all of the bars that aren't the one specified
	for (var i = 0; i < barIds.length; i++)
	{
		if ((barId != barIds[i]["name"]))
		{
			animSquish = new YAHOO.util.Anim(barIds[i]["name"], attributes, 0.75, YAHOO.util.Easing.easeOutStrong); 
			animSquish.animate();
		}
	}
}

function navigateActiveFrame(frameId, subFrameId, maxHeight, dontShrinkOtherBars){
	var nextFrame, nextSubFrame, nextState;
	initial == false;

	if (frameId == curFrameId)
	{
		if (subFrameId == null)
		{	
			nextFrame = null;
			nextSubFrame = null;
		}
		else
		{
			if(subFrameId == curSubFrameId)
			{
				nextFrame = frameId;
				nextSubFrame = null;
			}
			else
			{
				nextFrame = frameId;
				nextSubFrame = subFrameId;
			}
		}
	}
	else
	{
		nextFrame = frameId;
		nextSubFrame = subFrameId;
	}

	nextState = nextFrame + ":" + nextSubFrame + ":" + maxHeight + ":" + dontShrinkOtherBars;

	YAHOO.util.History.navigate("myModule", nextState); 
}

function myModuleStateChangeHandler (state) {  
	// Update the UI of your module according to the "state" parameter   
	var parms = state.split(":");
	if (parms[0] == "null" || parms[0] == "undefined") parms[0] = null;
	if (parms[1] == "null" || parms[1] == "undefined") parms[1] = null;
	if (parms[2] == "null" || parms[2] == "undefined") parms[2] = null;
	if (parms[3] == "null" || parms[3] == "undefined" || parms[3] == "false") 
		parms[3] = false;
	else
		parms[3] = true;
	
	initial = parms[3];

	Goto(parms[0], parms[1], parms[2], parms[3]);
}


function getInnerHeight(){
	if (window.innerHeight)
	{
		return window.innerHeight;
	}
	else
	{
		return document.body.clientHeight;
	}
}

function setBaseFrameHeight(){
	baseFrameHeight = getInnerHeight() - (baseMainBarHeight * barIds.length) - 50;		
}

function expandBar(id){
	if (curBarId == "" || curBarId == id || initial) return;

	attributes = {   
		height: { to: baseMainBarHeight }
	};   
	var anim = new YAHOO.util.Anim(id, attributes, 0.25, YAHOO.util.Easing.easeOutStrong);
	anim.animate();
}

function collapseBar(id){
	if (curBarId == "" || curBarId == id || initial) return;

	attributes = {   
		height: { to: minMainBarHeight }
	};   
	var anim = new YAHOO.util.Anim(id, attributes, 0.25, YAHOO.util.Easing.easeOutStrong);
	anim.animate();
}

function isFrameReady(frameId){
	var frame = findFrame(frameId);

	if(frame["ready"]){
		return true;
	}
	else{
		//show loading dialog
		return false;
	}
}

function findFrame(frameId, curArray){
	if(!curArray) curArray = barIds;
	for(var i = 0; i < curArray.length; i++){
		if (curArray[i]["frame"] == frameId)
		{
			return curArray[i];
		}

		if(curArray[i]["subs"]){
			var ret = findFrame(frameId, curArray[i]["subs"]);
			if (ret)
			{
				return ret;
			}
		}
	}

	return false;
}

function setReady(frameId){
	var frame = findFrame(frameId);
	frame["ready"] = true;
}