// JavaScript Document




//**************************************************************************************
// GENERAL FUNCTIONS:
//**************************************************************************************

//----------------------------------------------------------------
// FUNCTION REPLACES ALL OCCURENCES OF ASUBSTRING IN ASTRING WITH AREPLACEMENT:
//----------------------------------------------------------------
function replaceAll(aString, aSubstring, aReplacement)
{
	if (aString == '') return '';
	var theString = aString;
	var arrSplit = theString.split(aSubstring);
	var theLength = arrSplit.length
	var result = '';
	for (var i=0; i<arrSplit.length - 1; i++) result += arrSplit[i] + aReplacement;
	result += arrSplit[theLength - 1];
	return result;
}
//----------------------------------------------------------------


//----------------------------------------------------------------
// FUNCTION REMOVES ALL CHARS IN THE ARRAY ARRCHARSTOSTRIP FROM ASTRING:
//----------------------------------------------------------------
function stripChars(aString, arrCharsToStrip)
{
	if (aString == '') return '';
	var theString = aString;
	for (var i=0; i<arrCharsToStrip.length; i++)
	{
		theString = replaceAll(theString, arrCharsToStrip[i], "");
	}
	return theString;
}
//----------------------------------------------------------------



//----------------------------------------------------------------
// FUNCTION DETERMINES IF THEVALUE MATCHES ANY OF THE VALUES IN ARRVALUESTOMATCH:
//----------------------------------------------------------------
function matchValues(theValue, arrValuesToMatch)
{
	for (var i=0; i < arrValuesToMatch.length; i++) 
	{
		if (theValue == arrValuesToMatch[i]) return true;
	}
	return false;
}
//----------------------------------------------------------------





//----------------------------------------------------------------
// FUNCTION REMOVES ALL CHARS IN THE ARRAY ARRCHARSTOSTRIP FROM ASTRING:
//----------------------------------------------------------------
function trimString(aString)
{
	if (aString == '') return '';
	if(replaceAll(aString, " ", "") == "") return '';

	var theString = aString;
	var theLength = theString.length; 
	var firstIndexOfNonSpace = 0;
	var lastIndexOfNonSpace = theLength - 1;
	var i;

	for (i=0; i<theLength; i++)
	{
		if (theString.substr(i,1) != ' ')
		{
			firstIndexOfNonSpace = i;
			break;
		}
	}
	
	if (i == theLength) return '';

	for (i = theLength - 1; i>=0; i--)
	{
		if (theString.substr(i,1) != ' ')
		{
			lastIndexOfNonSpace = i;
			break;
		}
	}
	
	return theString.substr(firstIndexOfNonSpace, lastIndexOfNonSpace - firstIndexOfNonSpace + 1);
}
//----------------------------------------------------------------











//----------------------------------------------------------------
// FUNCTION RETURNS THE LAST DAY OF THE MONTH FOR THE SPECIFIED MONTH AND YEAR:
//----------------------------------------------------------------
function getMaxDayOfMonth(aMonth0, aYear0)
{
	// aMonth0 is assumed to be an integer between 1 and 12 inclusive:
	if (matchValues(aMonth0, [1,3,5,7,8,10,12])) return 31;
	if (matchValues(aMonth0, [4, 6, 9, 11])) return 30;
	if (matchValues(aMonth0, [2])) 
	{
		if ( (aYear0 % 4) == 0)
			{ return 29; }
		else
			{return 28; }
	}
}
//----------------------------------------------------------------



//----------------------------------------------------------------
// FUNCTION RETURNS THE ULTIMATE PAGE COORDINATES OF THE ELEMENT OBJELEMENT:
//----------------------------------------------------------------
function getUltimatePosition(objElement)
{
	var the_top = document.getElementById("nav_table");
	var arrParents = new Array();
	var i=0; var tempNode;
	arrParents[0] =  objElement.offsetParent;
	if (arrParents[0] == the_top)
	{
		return [objElement.offsetLeft, objElement.offsetTop];
	}
	do 
	{
		i++;
 		arrParents[i] = arrParents[i-1].offsetParent;
	} while(arrParents[i] != the_top)
	
	
	var totalX; var totalY;
	totalX = objElement.offsetLeft;
	totalY = objElement.offsetTop;
	for(i=0; i < arrParents.length - 1; i++)
	{
		tempNode = arrParents[i];
		totalX += tempNode.offsetLeft;
		totalY += tempNode.offsetTop;
	}
	
	

	return [totalX, totalY];
}
//----------------------------------------------------------------



/*
//----------------------------------------------------------------
// FUNCTION RETURNS THE ULTIMATE PAGE COORDINATES OF THE ELEMENT OBJELEMENT:
//----------------------------------------------------------------
function getUltimatePosition(objElement)
{
	var arrParents = new Array(); 
	var i=0; var tempNode;
	arrParents[0] =  objElement.offsetParent;
	if (arrParents[0] == document.body)
	{
		return [objElement.offsetLeft, objElement.offsetTop];
	}
	do 
	{
		i++;
 		arrParents[i] = arrParents[i-1].offsetParent;
	} while(arrParents[i] != document.body)
	
	var totalX; var totalY;
	totalX = objElement.offsetLeft;
	totalY = objElement.offsetTop;
	for(i=0; i < arrParents.length - 1; i++)
	{
		tempNode = arrParents[i];
		totalX += tempNode.offsetLeft;
		totalY += tempNode.offsetTop;
	}

	return [totalX, totalY];
}
//----------------------------------------------------------------
*/



//----------------------------------------------------------------
// SAME AS ABOVE FUNCTION, EXCEPT ASSUMES THE ELEMENT IN QUESTION IS
// THE SOURCE OF AN EVENT.
//----------------------------------------------------------------
function getElementPosition(theElement)
{
	var coors = getUltimatePosition(theElement);
	return coors;	
}
//----------------------------------------------------------------


//----------------------------------------------------------------
// FUNCTION DETERMINES WHETHER X IS IN THE INTERVAL ARRINTERVAL:
//----------------------------------------------------------------
function isInInterval(x, arrInterval)
{
	var a = arrInterval[0];
	var b = arrInterval[1];
	
	if ((a <= x) && (x <= b)) return true;
	return false;
}	
//----------------------------------------------------------------





//----------------------------------------------------------------
// FUNCTION WHETHER INTERVALS ARRCOORS1 AND ARRCOORS2 OVERLAP:
//----------------------------------------------------------------
function intervalsOverlap(arrCoors1, arrCoors2)
{
	var a1 = arrCoors1[0];
	var b1 = arrCoors1[1];
	
	var a2 = arrCoors2[0];
	var b2 = arrCoors2[1];
	
	if ( isInInterval(a1, [a2,b2]) ||  isInInterval(b1, [a2,b2]) ||  isInInterval(a2, [a1,b1]) ||  isInInterval(b2, [a1,b1]) ) return true;
	return false;
}	
//----------------------------------------------------------------




//----------------------------------------------------------------
// FUNCTION DETERMINES WHETHER LAYERS OBJEL1 AND OBJEL2 OVERLAP:
//----------------------------------------------------------------
function overlap(objElement1, objElement2)
{
	var coors1 = getUltimatePosition(objElement1);
	var coors2 = getUltimatePosition(objElement2);

	var width1 = objElement1.offsetWidth;
	var height1 = objElement1.offsetHeight;

	var xMin1 = coors1[0];
	var yMin1 = coors1[1];

	var xMax1 = xMin1 + width1;
	var yMax1 = yMin1 + height1;

	var width2 = objElement2.offsetWidth;
	var height2 = objElement2.offsetHeight;

	var xMin2 = coors2[0];
	var yMin2 = coors2[1];

	var xMax2 = xMin2 + width2;
	var yMax2 = yMin2 + height2;


	if ( intervalsOverlap([xMin1,xMax1],[xMin2,xMax2]) &&  intervalsOverlap([yMin1,yMax1],[yMin2,yMax2]) )
	{return true;}
	else
	{return false;}
}
//----------------------------------------------------------------


//----------------------------------------------------------------
// OBJECT STORES INFO ON MENU LAYERS AND PROPS: 
//----------------------------------------------------------------
function setNavHeaderMenus(headerID, childMenuID, H_V)
{
	var headerObjTD = document.getElementById(headerID);
	var childMenuLayer = document.getElementById(childMenuID);
	var coors = getElementPosition(headerObjTD);
	
	switch(H_V) // horiz_or_vert is defined in begin_tags from the globals in includes
	{
		case 'VERT':	
			childMenuLayer.style.left = coors[0] + headerObjTD.offsetWidth;
			childMenuLayer.style.top = coors[1] - 1;
			break;
		case 'HORIZ':	
			childMenuLayer.style.left = coors[0] -1 ;
			childMenuLayer.style.top = coors[1] + headerObjTD.offsetHeight;
			break;
	}
}
//----------------------------------------------------------------




