// /////////////////////////////////////////////////////////////////////////
//
// Name:  		motionpack.js
// Function:	Creates functions for use in a
// Author: 		Alec Eriksson
// 
// Copyright: 	Copyright 2009 USRA Lunar & Planetary Institute
// 				All rights reserved
//
// /////////////////////////////////////////////////////////////////////////

var timerlen = 5;
var slideAniLen = 500;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var endWidth = new Array();
var moving = new Array();
var dir = new Array();
var dim = new Array();

// //////////////////////////////////////////////////////////////////////////
// Function detects if you want to hide or reveal based on display property
// Variables:  
//		objname - passes the div you want to collapse
//		d1 - direction in which you the reveal to move (down or right)
// 		d2 - direction in which to move during hide (up or left)
// //////////////////////////////////////////////////////////////////////////

function toggleslide(objname,d1,d2,spd){
	if(document.getElementById(objname).style.display == 'none') {
		slideAniLen = spd;
		reveal(objname,d1);
		// toggleslide_t1 = setTimeout("toggleslide('dnav_drawer','right','left','500')",11000)
	}
	else {
		slideAniLen = spd;
		hide(objname,d2);
	}
}

function reveal(objname,d1) {
	// don't start moving something that's already moving
	if(moving[objname]) {
		return;
	}
	// cannot slide down something that is already visible
	if (document.getElementById(objname).style.display != "none") {
    	return;
	}
	moving[objname] = true;
	dir[objname] = d1;
	startslide(objname);
}
 
function hide(objname,d2) {
	if(moving[objname]) {
		return;
	}
	// cannot slide up something that is already hidden
	if(document.getElementById(objname).style.display == "none") {
		return; 
	}
	moving[objname] = true;
	dir[objname] = d2;
	startslide(objname);
}

function startslide(objname){
  obj[objname] = document.getElementById(objname);
 
  endHeight[objname] = parseInt(obj[objname].style.height);
  endWidth[objname] = parseInt(obj[objname].style.width);
    
  startTime[objname] = (new Date()).getTime();
 
  if (dir[objname] == "down") {
    obj[objname].style.height = "1px";
  }
  if (dir[objname] == "right") {
  	obj[objname].style.width = "1px";
  }
 
  obj[objname].style.display = "block";
  timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}

function slidetick(objname) {
	var elapsed = (new Date()).getTime() - startTime[objname];
	
	if (elapsed > slideAniLen) {
		endSlide(objname);
	}
	else {
		if (dir[objname] == "left" || dir[objname] == "right") {
			var d = Math.round(elapsed / slideAniLen * endWidth[objname]);
			if(dir[objname] == "left") {
	  			d = endWidth[objname] - d;
			}
			obj[objname].style.width = d + "px";
		}
		else if (dir[objname] == "up" || dir[objname] == "down") {
			var d = Math.round(elapsed / slideAniLen * endHeight[objname]);
			if(dir[objname] == "up") {
	  			d = endHeight[objname] - d;
			}
			obj[objname].style.height = d + "px";
		} 
				
	}
	return;
}

// Clears out the timer and sets the visibility of the div to none if it was being hidden
// Cleans up the arrays and removes the entries related to objname
function endSlide(objname) {
	clearInterval(timerID[objname]);
	
	if (dir[objname] == "left" || dir[objname] == "up") {
		obj[objname].style.display = "none";
		document.getElementById("navDrawerPullArrow").style.backgroundPosition = "0px 17px"
	}
	
	if (dir[objname] == "up" || dir[objname] == "down") {
		obj[objname].style.height = endHeight[objname] + "px";
	} else if (dir[objname] == "left" || dir[objname] == "right") {
		obj[objname].style.width = endWidth[objname] + "px";
	}
	
	if (dir[objname] == "right" || dir[objname] == "down") {
		document.getElementById("navDrawerPullArrow").style.backgroundPosition = "0px 0px"
	}
	
	delete(moving[objname]);
	delete(timerID[objname]);
	delete(startTime[objname]);
	delete(endHeight[objname]);
	delete(endWidth[objname]);
	delete(obj[objname]);
	delete(dir[objname]);
	
	return;
}

// Function to collapse the drawer after a set period of time
