// Global variable
var IPRT  = {};
IPRT.SHADE = {DIVS:[], STEPSIZE:15, CYCLE:0.01};
IPRT.SHADE.DIVSObject = function (idName, initialHeight, upTimer, downTimer) {
	this.idName = idName;
	this.initialHeight = initialHeight;
	this.upTimer = upTimer;
	this.downTimer = downTimer;
};

// Initialize shaded divisions
IPRT.initShade = function () {
	var i, shadeArray = [], shadeCount = 0;
	shadeArray = document.getElementsByTagName('div');
	
	// Find heights of all divisions with the word 'shade' in the ID
	for (i = 0; i < shadeArray.length; i++) {	
		if ( shadeArray[i].id.indexOf('shade') > -1 ) {
			IPRT.SHADE.DIVS[shadeCount] = new IPRT.SHADE.DIVSObject();
			IPRT.SHADE.DIVS[shadeCount].idName = shadeArray[i].id;
			IPRT.SHADE.DIVS[shadeCount].initialHeight = 
				document.getElementById(IPRT.SHADE.DIVS[shadeCount].idName).offsetHeight;
			shadeCount += 1;
		}
	}
};

// Toggle shade icon and animate roll up or roll down
IPRT.shadeDiv = function (inElement) {

	// Hide
	if (document.images[inElement + 'icon'].src.indexOf('down') > 0) {
	
		document.images[inElement + 'icon'].src = '../assets/icons/shade_up.png';	
		document.getElementById(inElement).style.height = IPRT.SHADE.DIVS[IPRT.getId(inElement)].initialHeight + 'px';
		IPRT.rollUp(inElement);
	}
	
	// Show
	else {		
		document.images[inElement + 'icon'].src = '../assets/icons/shade_down.png';	
		document.getElementById(inElement).style.height = '0px';
		IPRT.rollDown(inElement);
	}
};

// Animate roll up
IPRT.rollUp = function (inElement) {
	
	// Stop rolling down
	clearTimeout(IPRT.SHADE.DIVS[IPRT.getId(inElement)].downTimer);

	// Get current dimensions
	var currentHeight = IPRT.getPixels(inElement, 'height' );

	// Shrink dimensions until close to zero, then set to zero on last step
	if ( currentHeight > 0 && currentHeight > IPRT.SHADE.STEPSIZE) {
		document.getElementById(inElement).style.height = (currentHeight - IPRT.SHADE.STEPSIZE) + 'px';		
		IPRT.SHADE.DIVS[IPRT.getId(inElement)].upTimer = 
			setTimeout(function () {IPRT.rollUp(inElement);}, (IPRT.SHADE.CYCLE * 1000) );
	 }
	 else {
	 	document.getElementById(inElement).style.height = '0px';
	}
};

// Animate roll down
IPRT.rollDown = function (inElement) {
	
	// Stop rolling down
	clearTimeout(IPRT.SHADE.DIVS[IPRT.getId(inElement)].upTimer);

	// Get current dimensions
	var currentHeight = IPRT.getPixels(inElement, 'height' );

	// Grow dimensions and loop if not fully revealed
	if ( currentHeight <=  IPRT.SHADE.DIVS[IPRT.getId(inElement)].initialHeight) {		
		document.getElementById(inElement).style.height = (currentHeight + IPRT.SHADE.STEPSIZE) + 'px';		
		IPRT.SHADE.DIVS[IPRT.getId(inElement)].downTimer = 
			setTimeout(function () {IPRT.rollDown(inElement);}, (IPRT.SHADE.CYCLE * 1000) );
	 }
};

// Get element id from element id name
IPRT.getId = function (inElement) {
	var i;
	for (i = 0; i < IPRT.SHADE.DIVS.length; i++) {	if (inElement == IPRT.SHADE.DIVS[i].idName) { return (i); } }
	return 0;
};

// Crossbrowser get pixel value
IPRT.getPixels = function (inElement, inProp) { return (parseInt(IPRT.getStyle(inElement, inProp), 10 ) ); };

// Crossbrowser get style
IPRT.getStyle = function (inElement, inProp) {
	var element = document.getElementById(inElement);
	if (element.currentStyle) {	return (element.currentStyle[inProp]);}
	
	else if (window.getComputedStyle) {
			return (document.defaultView.getComputedStyle(element, null).getPropertyValue(inProp));
	}
	return null;
};