 //
 // ScrollEffects.js 
 //
 // Used to scroll our tabbed view, display our download popup, and display the giant dialog.
 // Requires: Effects.js
 //
 // Not for redistribution.
 // Scroll: Setup Scrolling Stuff

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

 // 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], "horiz");
 // return false;
 }

 // Scroll the page using the arrows

 function ScrollArrow(direction, toolbar, scrollArea, offset) {

 toolbarElem = document.getElementById(toolbar);
 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, direction)
 {
 //console.log("scrollStart from "+start+" to "+end+" in direction "+direction);

 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;

 if (direction == "horiz") {
 scrollanim.timer = setInterval("scrollHorizAnim();", 15);
 }
 else {
 scrollanim.timer = setInterval("scrollVertAnim();", 15);
 }
 }

 function scrollVertAnim()
 {
 if (scrollanim.time > scrollanim.duration) {
 clearInterval(scrollanim.timer);
 scrollanim.timer = null;
 }
 else {
 move = sineInOut(scrollanim.time, scrollanim.begin, scrollanim.change, scrollanim.duration);
 scrollanim.element.scrollTop = move;
 scrollanim.time++;
 }
 }

 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++;
 }
 }

 //console.log("Initialized");
