var slideDirection='up';
var SlideMenus=false;

// Setup the Active Shingle
function setActiveSlide(ele)
{
	//If the element is inactive
	if(ele.className!='slideMenu activeSlide')
	{
		// Create a list of SlideMenus if it does not already exist
		if(typeof(SlideMenus!="object"))	SlideMenus=$$(".slideMenu");
		
		// Set all other shingles to inactive
		for(x=0;x<SlideMenus.length;x++)
		{
			if(SlideMenus[x].className=='slideMenu activeSlide')
			{
				SlideMenus[x].className='slideMenu inactiveSlide';
				activeSlideNum=x;
			}
		}
		
		
		// Loop through and set slideDirection based off menu position
		for(x=0;x<SlideMenus.length;x++)	{	if(ele==SlideMenus[x])	{ if(activeSlideNum<x) {slideDirection='up'; } else { slideDirection='down'; }}}

		// Setup this shingle as the active one
		ele.className='slideMenu activeSlide';
		
		
		// Assign this shingles slide number
		thisSlideNum=ele.id.replace("slide",'');
		thisSlideNum=parseInt(thisSlideNum);
		
		// If it's the last item set it's bottom piece to active
		if((thisSlideNum+1)==SlideMenus.length)
		{
			var BottomPiece=$$('.slideLastBottom')[0];
			BottomPiece.className='slideLastBottomActive';
		}
		else
		{
			var BottomPiece=$$('.slideLastBottomActive')[0];
			if(typeof(BottomPiece)!="undefined") { BottomPiece.className='slideLastBottom'; }
		}
		
		// Direction Up
		if(slideDirection=='up')
		{
			slideDifference=(thisSlideNum-(activeSlideNum+1));
			//console.log(slideDifference);
			adjustTop(SlideMenus[activeSlideNum],17,'up',ele,slideDifference);
		}
		// Direction Down
		else
		{
			slideDifference=((activeSlideNum-1)-thisSlideNum);
			//console.log(slideDifference);
			adjustTop(ele,17,'down',ele,slideDifference);
		}
  }
}
// Defaults
var firstrun=true; // first run triggers timer.
/* animation is not complete.. meets true when invterval is cleared.  Set to false when an interval is created. */
var animationComplete=false;
function adjustTop(_element,_pixels,_dir,_invoker,_slideDif)
{
		//Disable menus for animation
		for(x=0;x<SlideMenus.length;x++) { SlideMenus[x].onmouseover=function(){return;};	}
		
		// Setup the _element to have a custom adjustedTop variable
		_element.adjustedTop=_element.style.top;
		_element.adjustedTop=parseInt(_element.adjustedTop.replace('px',''));
		
		
		// Define mininum top and the maximum top
		var minTop=(_element.id=="slide0") ? -102:-204;
		var maxTop=(_element.id=="slide0") ? 0:-102;
		if(!firstrun)
		{	
			switch(_dir)
			{
				case "up" :
					if(_element.adjustedTop>=minTop)
					{
						_element.adjustedTop=_element.adjustedTop-_pixels;
						_element.style.top=_element.adjustedTop+'px';
						if(_slideDif>0)
						{
							for(x=0;x<_slideDif;x++)
							{
								//console.log('attempting to move ' + SlideMenus[x+1] + ' to ' + (_element.adjustedTop-102) + ' min of ' + minTop );
								SlideMenus[x+1].style.top=(_element.adjustedTop-102)+'px';
								SlideMenus[x+1].adjustedTop=_element.adjustedTop-102;
							}
						}
							//console.log(_element.id + " is " + _element.adjustedTop);
					}
				break;
				
				case "down" :
					if(_element.adjustedTop<=maxTop)
					{
						_element.adjustedTop=_element.adjustedTop+(_pixels);
						_element.style.top=_element.adjustedTop+'px';
						//var thisSlideNum=_element.id;
						var thisSlideNum=parseInt(_element.id.replace('slide',''));
						if(_slideDif>0)
						{
						if(thisSlideNum>0)
						{
						
							//console.log('Slide Difference is' + _slideDif + ' this slide is' + thisSlideNum);
							for(x=thisSlideNum;x<=_slideDif;x++)
							{
								//console.log(x+1 + ":" + SlideMenus[x+1].adjustedTop + ' to ' + maxTop);
								SlideMenus[x+1].style.top=(_element.adjustedTop)+'px';
								SlideMenus[x+1].adjustedTop=(_element.adjustedTop);
							}
							/*for(x=thisSlideNum;x<=_slideDif;x++)
							{*/
								//console.log('attempting to move ' + SlideMenus[x+1].id + ':' + _element.adjustedTop + ' to ' + (_element.adjustedTop-102) + ' max of ' + maxTop );
								
							/*}*/
						}
						else
						{
							for(x=thisSlideNum+1;x<=_slideDif;x++)
							{
								//console.log(x + ":" + SlideMenus[x].adjustedTop + ' to ' + (maxTop-102));
								SlideMenus[x].style.top=(_element.adjustedTop-102)+'px';
								SlideMenus[x].adjustedTop=(_element.adjustedTop-102);
							}
						}
						//console.log(_element.id + " is " + _element.adjustedTop);
					}
					}
				break;
			}
		}
		else
		{
			animationComplete=false;
			resizeInterval=setInterval(function () { adjustTop(_element,_pixels,_dir,_invoker,_slideDif); },30);
			
		}
		firstrun=false;
		switch(_dir)
		{
			case "up" :
				if(_element.adjustedTop<=minTop)
				{
					clearInterval(resizeInterval);
					firstrun=true;
					animationComplete=true;
				}
			break;
			
			case "down" :
				if(_element.adjustedTop>=maxTop)
				{
					clearInterval(resizeInterval);
					firstrun=true;
					animationComplete=true;
				}
			break;
		}
		
		if(animationComplete)
		{
			//Enable menus for animation
			for(x=0;x<SlideMenus.length;x++) { SlideMenus[x].onmouseover=function(){setActiveSlide(this);};	}
		}
}

// Accordion style menu
function showAccord(ele)
{
	var accNav = document.getElementById('accordNav');
	var navText = document.getElementById('navText');
	var accord = document.getElementById(ele);
	if(accord.style.display=='none' && !accord.eleHeight)
	{
		setElementHeight(accord);
	}
	displaySpeed = (accord.eleHeight/700);
	displaySpeed = (displaySpeed<0) ? 0.2:displaySpeed;
	//console.log(subTree + " which is set to " + subTree.eleHeight + " high should be opening and moving at " + displaySpeed);
	accNav.className=(accord.style.display=='none') ? 'lessAccord':'moreAccord';
	navText.innerHTML=(accord.style.display=='none') ? 'Less Features':'More Features';
	Effect.toggle(accord, 'blind', {duration: displaySpeed});
}

function setElementHeight(ele)
{
	// Display block but hidden so the element has an offetHeight > 0
	var currentPosition = ele.style.position;
	ele.style.position='absolute';
	ele.style.visibility='hidden';
	ele.style.display='block';
	// Set Height
	ele.style.height = (ele.offsetHeight + 10) + 'px';
	ele.eleHeight = (ele.offsetHeight + 10);
	
	
	// Set the element back to normal
	ele.style.position = currentPosition;
	ele.style.display = 'none';
	ele.style.visibility = 'visible';

}