// Scroll: Setup Scrolling Stuff

var currentSection  = "my1-pane";  // The default loaded section on the page
var tabTag  	          = "-tab";
var paneTag 	          = "-pane";




// Get current section
function getCurrentSection()
{
 return currentSection;
}


// Set current section
function setCurrentSection(section)
{
 currentSection = section;
}




// Scroll the page manually to the position of element "link", passed to us.
function ScrollSection(link, scrollArea, offset)
{
	// Store the last section, and update the current section
	if (currentSection == link)
	{
		return;
	}
	
	lastSection = currentSection;
	currentSection = link;
	
	// Change the section highlight.
	// Extract the root section name, and use that to change the background image to 'top', revealing the alt. state
    sectionTab = currentSection.split("-")[0] + tabTag;
    document.getElementById(sectionTab).className = "active";

	
    if (lastSection)
	{
	    lastTab = lastSection.split("-")[0] + tabTag;
	    document.getElementById(lastTab).className = "inactive";
	}

    
	// Get the element we want to scroll, get the position of the element to scroll to
	theScroll = document.getElementById(scrollArea);
	position = findElementPos(document.getElementById(link));


	// Get the position of the offset div -- the div at the far left.
	// This is the amount we compensate for when scrolling
	if (offset != "")
	{
		offsetPos = findElementPos(document.getElementById(offset));
		position[0] = position[0] - offsetPos[0];
	}

	scrollStart(theScroll, theScroll.scrollLeft, position[0]);
}





// Scroll the page using the arrows
function ScrollArrow(direction, toolbar, scrollArea, offset)
{
    //  
	toolbarElem = document.getElementById(toolbar);
	
	delete toolbarNames;
	toolbarNames = new Array();
	
    
	// Find all the <li> elements in the toolbar, and extract their id's into an array.
	if (toolbarElem.hasChildNodes())
	{
		var children = toolbarElem.childNodes;
		
		for (var i = 0; i < children.length; i++) 
		{
			if (toolbarElem.childNodes[i].tagName == "LI")
			{
				toolbarNames.push(toolbarElem.childNodes[i].id.split("-")[0]);
			}
		}
	}

	
    
	// Now iterate through our array of tab names, find matches, and determine where to go.
	for (var i = 0; i < toolbarNames.length; i++)
	{		
		if (toolbarNames[i] == currentSection.split("-")[0])
		{
			if (direction == "left")
			{
				if (i - 1 < 0)
				{
					gotoTab = toolbarNames[toolbarNames.length - 1];
				}
				else
				{
					gotoTab = toolbarNames[i - 1];
				}
			}
			else
			{  
				if ((i + 1) > (toolbarNames.length - 1))
				{
					gotoTab = toolbarNames[0];
				}
				else
				{ 
					gotoTab = toolbarNames[i + 1];
				}
			}
		}
	}
	
	
	// Go to the section name!
	ScrollSection(gotoTab+paneTag, scrollArea, offset);
}




// Animated Scroll Functions
// Scrolls are synchronous -- only one at a time.
var scrollanim = {time:0, begin:0, change:0.0, duration:0.0, element:null, timer:null};



function scrollStart(elem, start, end)
{
	if (scrollanim.timer != null) 
	{
		clearInterval(scrollanim.timer);
		scrollanim.timer = null;
	}
	
	scrollanim.time 	     = 0;
	scrollanim.begin       = start;
	scrollanim.change    = end - start;
	scrollanim.duration  = 25;
	scrollanim.element  = elem;
	
	// Horizontal Scrollen
	scrollanim.timer = setInterval("scrollHorizAnim();", 15);
}



// Horizontal Scrollen
function scrollHorizAnim()
{
	if (scrollanim.time > scrollanim.duration)
	{
		clearInterval(scrollanim.timer);
		scrollanim.timer = null;
	}
	else
	{
		move = sineInOut(scrollanim.time, scrollanim.begin, scrollanim.change, scrollanim.duration);
		scrollanim.element.scrollLeft = move;
		scrollanim.time++;
	}
}




// 
function sineInOut(t, b, c, d)
{
	return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
}



// Utility: Find the Y position of an element on a page. Return Y and X as an array
function findElementPos(elemFind)
{
	var elemX = 0;
	var elemY = 0;
	
	do 
	{
		elemX += elemFind.offsetLeft;
		elemY += elemFind.offsetTop;
	} 
	while ( elemFind = elemFind.offsetParent )


	return Array(elemX, elemY);
}



