﻿<!--
var timer;
var stopTimer = false;
function DoExpandCollapse(strCurrentDisplayObj)
{
    var action = "";
    var objDisplay = document.getElementById(strCurrentDisplayObj);
    var totalScrollHeight = parseFloat(objDisplay.scrollHeight);
    if (parseFloat(objDisplay.style.height) == 0)
        action = "expand";
    else
        action = "collapse";
        
    stopTimer = false
    DoCollapseOrExpandAnimation(action, objDisplay.id, totalScrollHeight)
}

function DoCollapseOrExpandAnimation(action, cObjName, totalScrollHeight)
{
    var cHeight = 0;
    var cObj = document.getElementById(cObjName);
    if (action == "expand")
    {
        cHeight = parseFloat(cObj.style.height) + 75;
        if (cHeight < totalScrollHeight)
            cObj.style.height = cHeight + "px";
        else
        {
            cObj.style.height = totalScrollHeight + "px";
            clearTimeout(timer);
            stopTimer = true;
        }
    }
    else
    {
        cHeight = parseFloat(cObj.style.height) - 75;
        if (cHeight > 0)
            cObj.style.height = cHeight + "px";
        else
        {
            cObj.style.height = "0px";
            clearTimeout(timer);
            stopTimer = true;
        }
    }
    
    if (!stopTimer) timer = setTimeout("DoCollapseOrExpandAnimation('" + action + "', '" + cObj.id + "', " + totalScrollHeight + ")", 1);
}

function HTMLEncoder(strVal)
{
    var newVal = strVal.replace(/\&quot\;/gi, "[QUOTEDOUBLE]").replace(/\&/gi, "[AND]").replace(/\</gi, "[ARROWLEFT]").replace(/\>/gi, "[ARROWRIGHT]").replace(/\'/, "[QUOTESINGLE]").replace(/\"/gi, "[QUOTEDOUBLE]").replace(/\n/gi, "[NEWLINE]").replace(/\r/gi, "[RETURN]");
    return newVal;
}

function HTMLDecoder(strVal)
{
    var newVal = strVal.replace(/\[AND\]/gi, "&").replace(/\[ARROWLEFT\]/gi, "<").replace(/\[ARROWRIGHT\]/gi, ">").replace(/\[QUOTESINGLE\]/gi, "'").replace(/\[QUOTEDOUBLE\]/gi, "\"").replace(/\[NEWLINE\]/gi, "\n").replace(/\[RETURN\]/gi, "\r");
    return newVal;
}

function DocumentMethod()
{
    var DocumentMethod = "";
    if (document.body && (document.body.clientWidth || document.body.clientHeight)) 
        DocumentMethod = document.body;
    else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) 
        DocumentMethod = document.documentElement;
    return DocumentMethod;
}

function CalcBrowserDimensions()
{
    var browserWidth = 0, browserHeight = 0;
    if(typeof(window.innerWidth) == 'number') 
    {
        //Non-IE
        browserWidth = window.innerWidth;
        browserHeight = window.innerHeight;
    } 
    else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) 
    {
        //IE6+ standards compliant mod
        browserWidth = document.documentElement.clientWidth;
        browserHeight = document.documentElement.clientHeight;
    } 
    else if(document.body && (document.body.clientWidth || document.body.clientHeight)) 
    {
        //compatibility mode IE5.5+ - and works on IE6+ - but not very accurately to get browser dimensions
        browserWidth = document.body.clientWidth;
        browserHeight = document.body.clientHeight;
    }
    //alert(browserWidth + " : " + browserHeight);
    return [browserWidth, browserHeight];
}

function CalcScrolledHeightWidthAmt() 
{
    var scrollWidth = 0, scrollHeight = 0;
    if(typeof(window.pageYOffset) == 'number') 
    {
        //Netscape compliant
        scrollHeight = window.pageYOffset;
        scrollWidth = window.pageXOffset;
    } 
    else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))  
    {
        //IE6+ standards compliant mode
        scrollHeight = document.documentElement.scrollTop;
        scrollWidth = document.documentElement.scrollLeft;
    }
    else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) 
    {
        //compatibility mode IE5.5+ - and works on IE6+ - but not very accurately to get browser dimensions
        scrollHeight = document.body.scrollTop;
        scrollWidth = document.body.scrollLeft;
    } 
    return [scrollWidth, scrollHeight];
}

function GetPagePlusScrollAmt()
{
    var arrDimensions = CalcBrowserDimensions();
    var intWidth = arrDimensions[0];
    var intHeight = arrDimensions[1];
    //alert(intWidth + " : " + intHeight);
    
    var arrScrollDimensions = CalcScrolledHeightWidthAmt();
    var scrollWidth = arrScrollDimensions[0];
    var scrollHeight = arrScrollDimensions[1];
    //alert(scrollWidth + " : " + scrollHeight);
    
    intWidth += scrollWidth;
    intHeight += scrollHeight;
    //alert(intWidth + " : " + intHeight);
          
    return [intWidth, intHeight]; 
} 

function Trim(str)
{
    return str.replace(/^\s*|\s*$/g,"");
}

//finds IE version number
function GetIEVersionNumber() 
{
    var ua = navigator.userAgent;
    var MSIEOffset = ua.indexOf("MSIE ");
    if (MSIEOffset == -1)
        return 0;
    else
        return parseFloat(ua.substring(MSIEOffset + 5, ua.indexOf(";", MSIEOffset)));
}


//finds current XML version on client machine
function FindXMLVersion()
{
	var xmlVersion = ["4.0", "3.0", "2.6", "2.5", "2", "Microsoft", "MSXML"];
	var xmlDoc = "<?xml version=\"1.0\"?><Test>hellow World</Test>";
	var i, objXml, objXmlDom, strRetVal="";

	for (i=0; i <= xmlVersion.length-1; i++)
	{
		if (xmlVersion[i] == "Microsoft")
		{
			try 
			{
				objXML = new ActiveXObject("Microsoft.XMLDOM");
				objXML.async = false;
				if (objXML.loadXML(xmlDoc))
				{
					if (strRetVal == "") strRetVal = "Microsoft";
				}
			}
			catch (e)
			{
			}
		}
		else if (xmlVersion[i] == "MSXML")
		{
			try 
			{
				objXML = new ActiveXObject("Msxml.DOMDocument");
				objXML.async = false;
				if (objXML.loadXML(xmlDoc))
				{
					if (strRetVal == "") strRetVal = "Msxml";
				}
			}
			catch (e)
			{
			}
		}
		else if (xmlVersion[i] == "2")
		{
			try 
			{
				objXML = new ActiveXObject("Msxml2.DOMDocument");
				objXML.async = false;
				if (objXML.loadXML(xmlDoc))
				{
					if (strRetVal == "") strRetVal = "Msxml2";
				}
			}
			catch (e)
			{
			}
		}
		else
		{
			try 
			{
				objXML = new ActiveXObject("Msxml2.DOMDocument." + xmlVersion[i]);
				objXML.async = false;
				if (objXML.loadXML(xmlDoc))
				{ 
					if (strRetVal == "") strRetVal = "Msxml2";
				}
			}
			catch (e)
			{
			}	
		}
	}
	return strRetVal;
}

//==================================================================================================================

	//This is a series of function used for generating dynamic menus.
	var objRootMenuStart = "", histMenuActive = "";
	var cancelTimeOut = new Array(1);
	cancelTimeOut[0] = new Array();
	cancelTimeOut[1] = new Array();
	function GenMenu(e, curObj, menuStatus, navMenuDirection, lastNavMenuDirection, extraXPosSpace, extraYPosSpace, targetMenuName, menuImportPage, passValstoImportMenuPage, dispDimensionsExact)
	{
	    var newHistMenuActive = ""
	    if (document.getElementById("testarea")) var objTestArea = document.getElementById("testarea");
        if (menuStatus == "on")
        {
            curObj.style.cursor = "pointer";
            //objTestArea.innerHTML += "UBOUND S: " + cancelTimeOut[1].length + "<br>"
            for (var t=0; t<=cancelTimeOut[1].length-1; t++)
            {
                //objTestArea.innerHTML += "OPEN: " + targetMenuName + " - " + cancelTimeOut[0][t] + "<br>";
                if (targetMenuName.toLowerCase() == cancelTimeOut[0][t].toLowerCase())
                {
                    newHistMenuActive = eval("histMenuActive.replace(/" + targetMenuName + ",/gi, \"-\")");
                    window.clearTimeout(cancelTimeOut[1][t]);
                    //objTestArea.innerHTML += "OPEN1: " + targetMenuName + " - CANCEL: " + cancelTimeOut[0][t] + " - " + cancelTimeOut[1][t] + "<br>";
                    cancelTimeOut[0].splice(t, 1);
                    cancelTimeOut[1].splice(t, 1);
                    t--
                }
            }
   
            if (newHistMenuActive.search(/-/gi) > 0)
            {
                //objTestArea.innerHTML += "UBOUND M: " + cancelTimeOut[1].length + "<br>"
                var newHistMenuSeq = newHistMenuActive.slice(0, newHistMenuActive.search(/-/gi));
                for (var v=0; v<=cancelTimeOut[1].length-1; v++)
                {
                    //objTestArea.innerHTML += "OPEN: " + v + " : " + targetMenuName + " - " + cancelTimeOut[0][v] + "<br>";
                    if (eval("newHistMenuSeq.toLowerCase().search(/" + cancelTimeOut[0][v].toLowerCase() + ",/gi) >= 0"))
                    {
                        window.clearTimeout(cancelTimeOut[1][v]);
                        //objTestArea.innerHTML += "OPEN2: " + targetMenuName + " - CANCEL: " + cancelTimeOut[0][v] + " - " + cancelTimeOut[1][v] + "<br>";
                        cancelTimeOut[0].splice(v, 1);
                        cancelTimeOut[1].splice(v, 1);
                        v--
                    }
                }
            }
            //objTestArea.innerHTML += "UBOUND E: " + cancelTimeOut[1].length + "<br>"
   
            //-----------------------------------------------------------------------------------------------------
            if (!document.getElementById(targetMenuName))
            {
                //objTestArea.innerHTML += "BEFORE CREATE HIST: " + histMenuActive + "<br>";
                if (histMenuActive.search(/,/gi) >= 0)
                {
                    var arrHistMenuActive = histMenuActive.slice(0, histMenuActive.length-1).split(",");
                    var arrLastActiveMenu = arrHistMenuActive[arrHistMenuActive.length-1].split(":");
                    var lastActiveMenuTreeLevel = parseInt(arrLastActiveMenu[1]);
                    var arrTargetMenuName = targetMenuName.split(":");
                    var targetMenuNameTreeLevel = parseInt(arrTargetMenuName[1]);
                    //objTestArea.innerHTML += histMenuActive + " --- " + arrHistMenuActive[arrHistMenuActive.length-1] + "<br>"
                    //objTestArea.innerHTML += arrHistMenuActive[arrHistMenuActive.length-1] + " --- " + targetMenuName + "<br>"
                    if (lastActiveMenuTreeLevel == targetMenuNameTreeLevel) 
                    {
                        histMenuActive = eval("histMenuActive.replace(/" + arrHistMenuActive[arrHistMenuActive.length-1] + ",/gi, \"\")");
                        //objTestArea.innerHTML += arrHistMenuActive[arrHistMenuActive.length-1] + " : " + document.getElementById(Trim(arrHistMenuActive[arrHistMenuActive.length-1])) + "<br>";
                        if (document.getElementById(arrHistMenuActive[arrHistMenuActive.length-1]))
                        {
                            var objDestroy = document.getElementById(arrHistMenuActive[arrHistMenuActive.length-1]);
                            document.body.removeChild(objDestroy);
                            for (var y=0; y<=cancelTimeOut[1].length-1; y++)
                            {
                                if (cancelTimeOut[0][y].toLowerCase() == arrHistMenuActive[arrHistMenuActive.length-1].toLowerCase())
                                {
                                    window.clearTimeout(cancelTimeOut[1][y]);
                                    cancelTimeOut[0].splice(y, 1);
                                    cancelTimeOut[1].splice(y, 1);
                                    y--
                                }
                            }
                        }
                    }
                }
                histMenuActive += targetMenuName + ",";
                //objTestArea.innerHTML += "AFTER CREATE HIST: " + histMenuActive + "<br>";
        	
                var arrDimensionsScroll = GetPagePlusScrollAmt();
                intWidth = arrDimensionsScroll[0];
                intHeight = arrDimensionsScroll[1];
                //alert(intWidth + " : " + intHeight);
        	
                curObjWidth = curObj.offsetWidth;
                curObjHeight = curObj.offsetHeight;
                //alert(curObjWidth + " : " + curObjHeight);
 
                var arrLoc = FindPos(curObj, navMenuDirection, lastNavMenuDirection).split("||");
                var xPos = arrLoc[0];
                var yPos = arrLoc[1];
               
                var createdDIV = document.createElement("DIV");
                createdDIV.id = targetMenuName;
                createdDIV.style.position = "absolute";
                createdDIV.style.zIndex = 99;
                if ((targetMenuName == "calendarYearDropdown:1") || (targetMenuName == "calendarMonthDropdown:1")) createdDIV.style.zIndex = 100;
                var objLoadingDisplay = "<div style=\"background-color:#ffffff;border:solid 1px #000000;width:60px;height:50px;padding:3px;\">";
                objLoadingDisplay += "<div style=\"text-align:center;\"><img src=\"/images/spinner.gif\" border=0 style=\"width:16px;height:16px;\"></div>";
                objLoadingDisplay += "<div style=\"margin-top:7px;text-align:center;font-family:arial;font-weight:bold;font-size:8pt;\">Loading...</div>";
                objLoadingDisplay += "</div>";
                //createdDIV.innerHTML = objLoadingDisplay;
                document.body.appendChild(createdDIV);
                
                var strVals = intHeight + "|*|" + intWidth + "|*|" + navMenuDirection + "|*|" + lastNavMenuDirection + "|*|" + xPos + "|*|" + yPos + "|*|";
                strVals += extraXPosSpace + "|*|" + extraYPosSpace + "|*|" + targetMenuName;
                DisplayDynamicWindow(strVals, createdDIV, curObj, histMenuActive, objTestArea)

                //------------------------------------------------------------------------------------------------------

                if (document.all)
                    var poster = new ActiveXObject(FindXMLVersion() + ".XMLHTTP")
                else
                    var poster = new XMLHttpRequest();	
                    
                var strBuild = "<?xml version=\"1.0\"?><template>" + passValstoImportMenuPage + "</template>";
                poster.open("GET", menuImportPage, true);
                poster.onreadystatechange=function() {
                    if (poster.readyState == 4)
                    {
                        //alert(poster.responseText);
                        //document.getElementById("DataArea").innerHTML = poster.responseText;
                        if (poster.status == 200)
                        {
                            createdDIV.innerHTML = poster.responseText;
                            if ((dispDimensionsExact == "") || (dispDimensionsExact == "no") || (dispDimensionsExact == "xonly") || (dispDimensionsExact == "yonly"))
                            {
                                var strVals = intHeight + "|*|" + intWidth + "|*|" + navMenuDirection + "|*|" + lastNavMenuDirection + "|*|" + xPos + "|*|" + yPos + "|*|";
                                strVals += extraXPosSpace + "|*|" + extraYPosSpace + "|*|" + targetMenuName;
                                DisplayDynamicWindow(strVals, createdDIV, curObj, histMenuActive, objTestArea)
                            }
                            else
                            {
                                createdDIV.style.left = parseInt(extraXPosSpace) + "px";
                                createdDIV.style.top = parseInt(extraYPosSpace) + "px";
                            }
                            if (dispDimensionsExact == "xonly") createdDIV.style.left = parseInt(extraXPosSpace) + "px";
                            if (dispDimensionsExact == "yonly") createdDIV.style.top = parseInt(extraYPosSpace) + "px";
                            
                            //alert(createdDIV.style.left + " : " + createdDIV.style.top);
                            if (createdDIV) createdDIV.style.visibility = "visible";
                        } 
                    }
                }
                poster.send(strBuild);
            }
        }
        else
        {
            var valDelay = 250;
            //if (document.all)
            //    var tarElement = e.toElement;
            //else 
            //    var tarElement = e.relatedTarget;
            //var blnCurObjIsParent = ChkifParent(curObj, tarElement);
            //objTestArea.innerHTML += blnCurObjIsParent + " : " + curObj.tagName + " : " + (curObj == tarElement) + " : " + tarElement.tagName + "<br>"
            //if ((blnCurObjIsParent==false) && (curObj != tarElement))
            //{      
                var iUbound = cancelTimeOut[0].length;
                var iTOUbound = cancelTimeOut[1].length;
                if (Trim(histMenuActive) != "")
                {
                    newHistMenuActive = histMenuActive.slice(0, histMenuActive.length-1);
                    if (newHistMenuActive.search(/,/gi) >= 0)
                    {
                        var arrHistMenuActive = newHistMenuActive.split(",");
                        for (var i=0; i<=arrHistMenuActive.length-1; i++)
                        {
                            cancelTimeOut[0][iUbound+i] = arrHistMenuActive[i];
                            cancelTimeOut[1][iTOUbound+i] = window.setTimeout("CloseMenu('" + arrHistMenuActive[i] + "')", valDelay);
                            //objTestArea.innerHTML += "CLOSE2: " + cancelTimeOut[0][iUbound+i] + " - " + cancelTimeOut[1][iTOUbound+i] + "<br>";
                        }
                    }
                    else
                    {
                        cancelTimeOut[0][iUbound] = newHistMenuActive;
                        cancelTimeOut[1][iTOUbound] = window.setTimeout("CloseMenu('" + newHistMenuActive + "')", valDelay);
                        //objTestArea.innerHTML += "CLOSE1: " + cancelTimeOut[0][iUbound] + " - " + cancelTimeOut[1][iTOUbound] + "<br>";
                    }
                }
                //objTestArea.innerHTML += "---------------------<br>"
            //}
        }
	}

    function DisplayDynamicWindow(strVals, createdDIV, curObj, histMenuActive, objTestArea)
    {
        var arrVals = strVals.split("|*|");
        var intHeight = arrVals[0];
        var intWidth = arrVals[1];
        var navMenuDirection = arrVals[2];
        var lastNavMenuDirection = arrVals[3];
        var xPos = arrVals[4];
        var yPos = arrVals[5];
        var extraXPosSpace = arrVals[6];
        var extraYPosSpace = arrVals[7];
        var targetMenuName = arrVals[8];
        //alert(extraXPosSpace + " : " + extraYPosSpace)
        
        var objRelativeParent = GetRelativeObjScrollAmount(curObj);
        if (objRelativeParent)
        {
            //alert(objRelativeParent.tagName + " : " + objRelativeParent.scrollTop);
            var valRelParentScrollTop = objRelativeParent.scrollTop;
            var valRelParentScrollLeft = objRelativeParent.scrollLeft;
            //alert(valRelParentScrollLeft + " : " + valRelParentScrollTop);
        }
        
        //objTestArea.innerHTML += "CREATED ID: " + createdDIV.id + "<br>";
        var createdDIVWidth = createdDIV.offsetWidth;
        var createdDIVHeight = createdDIV.offsetHeight;
        var getCurObjParentHist =  eval("histMenuActive.replace(/" + targetMenuName + ",/gi, \"\")");
        if (getCurObjParentHist != "")
        {
            var arrCurObjParentHist = getCurObjParentHist.slice(0, getCurObjParentHist.length-1).split(",");
            var objParentCheck = document.getElementById(arrCurObjParentHist[arrCurObjParentHist.length-1]);
            if (objParentCheck)
            {
                var arrLocALT = FindPos(objParentCheck, navMenuDirection, lastNavMenuDirection).split("||");
                if ((navMenuDirection == "left") || (navMenuDirection == "right"))
                    xPos = arrLocALT[0];
                else
                {
                    xPos = arrLocALT[0];
                    yPos = arrLocALT[1];
                }
                curObjWidth = objParentCheck.offsetWidth;
                curObjHeight = objParentCheck.offsetHeight;
            }
        }  
                
        switch (navMenuDirection)
        {
            case "right":
                if (valRelParentScrollLeft) xPos = (parseInt(xPos) - parseInt(valRelParentScrollLeft));
                if (valRelParentScrollTop) yPos = (parseInt(yPos) - parseInt(valRelParentScrollTop));
                
                //show menu on right side if there is enough space to do so
                createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) + parseInt(extraXPosSpace)) + "px";
                var bottomMenuEndPoint = (parseInt(yPos) + parseInt(createdDIVHeight) + parseInt(extraYPosSpace));
                var topMenuStartPoint = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace));
                if (bottomMenuEndPoint > intHeight)
                    createdDIV.style.top = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace)) + "px";
                else
                    createdDIV.style.top = (parseInt(yPos) + parseInt(extraYPosSpace)) + "px";

                var rightMenuEndPoint = (parseInt(xPos) + parseInt(curObjWidth) + parseInt(extraXPosSpace) + parseInt(createdDIVWidth));
                if (rightMenuEndPoint > intWidth)
                {
                    //show menu on left side if there isn't enough room on the right side
                    createdDIV.style.left = (parseInt(xPos) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace)) + "px";
                    
                    var bottomMenuEndPoint = (parseInt(yPos) + parseInt(createdDIVHeight) + parseInt(extraYPosSpace));
                    var topMenuStartPoint = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace));
                    if (bottomMenuEndPoint > intHeight)
                        createdDIV.style.top = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace)) + "px";
                    else
                        createdDIV.style.top = (parseInt(yPos) + parseInt(extraYPosSpace)) + "px";
                }
                break;
            case "left":
                if (valRelParentScrollLeft) xPos = (parseInt(xPos) - parseInt(valRelParentScrollLeft));
                if (valRelParentScrollTop) yPos = (parseInt(yPos) - parseInt(valRelParentScrollTop));
                
                //show menu on left side if there is enough space to do so
                createdDIV.style.left = (parseInt(xPos) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace)) + "px";
                
                var bottomMenuEndPoint = (parseInt(yPos) + parseInt(createdDIVHeight) + parseInt(extraYPosSpace));
                var topMenuStartPoint = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace));
                if (bottomMenuEndPoint > intHeight)
                    createdDIV.style.top = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace)) + "px";
                else
                    createdDIV.style.top = (parseInt(yPos) + parseInt(extraYPosSpace)) + "px";
                    
                var leftMenuStartPoint = (parseInt(xPos) - parseInt(createdDIVWidth)- parseInt(extraXPosSpace));
                if (leftMenuStartPoint < 0)
                {
                    //show menu on right side if there isn't enough room on the left side
                    createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) + parseInt(extraXPosSpace)) + "px";
                    
                    var bottomMenuEndPoint = (parseInt(yPos) + parseInt(createdDIVHeight) + parseInt(extraYPosSpace));
                    var topMenuStartPoint = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace));
                    if (bottomMenuEndPoint > intHeight)
                        createdDIV.style.top = (parseInt(yPos) + parseInt(curObjHeight) - parseInt(createdDIVHeight) - parseInt(extraYPosSpace)) + "px";
                    else
                        createdDIV.style.top = (parseInt(yPos) + parseInt(extraYPosSpace)) + "px";
                }
                break;
            case "bottom":
                if (valRelParentScrollLeft) xPos = (parseInt(xPos) - parseInt(valRelParentScrollLeft));
                if (valRelParentScrollTop) yPos = (parseInt(yPos) - parseInt(valRelParentScrollTop));
            
                var rightMenuEndPoint = (parseInt(xPos) + parseInt(createdDIVWidth) + parseInt(extraXPosSpace));
                var leftMenuStartPoint = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace));
                if (rightMenuEndPoint > intWidth)
                    createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace)) + "px";
                else if (leftMenuStartPoint < 0) 
                    createdDIV.style.left = (parseInt(xPos) + parseInt(extraXPosSpace)) + "px";
                else
                    createdDIV.style.left = (parseInt(xPos) + parseInt(extraXPosSpace)) + "px";   
                //show menu on bottom side if there is enough space to do so
                createdDIV.style.top = (parseInt(yPos) + parseInt(curObjHeight) + parseInt(extraYPosSpace)) + "px";
                //alert("top: " + createdDIV.style.top);

                var bottomMenuEndPoint = (parseInt(yPos) + parseInt(curObjHeight) + parseInt(extraYPosSpace) + parseInt(createdDIVHeight));
                //alert(bottomMenuEndPoint + " : " + intHeight);
                if (bottomMenuEndPoint > intHeight)
                {
                    var rightMenuEndPoint = (parseInt(xPos) + parseInt(createdDIVWidth) + parseInt(extraXPosSpace));
                    var leftMenuStartPoint = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace));
                    if (rightMenuEndPoint > intWidth) 
                        createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace)) + "px";
                    else if (leftMenuStartPoint < 0) 
                        createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) + parseInt(extraXPosSpace)) + "px";
                    else
                        createdDIV.style.left = (parseInt(xPos) + parseInt(extraXPosSpace)) + "px";
                    
                    //show menu on top side if there isn't any space on the bottom side
                    createdDIV.style.top = (parseInt(yPos) - parseInt(curObjHeight) - parseInt(extraYPosSpace)) + "px";
                }
                break;
            case "top":
                if (valRelParentScrollLeft) xPos = (parseInt(xPos) - parseInt(valRelParentScrollLeft));
                if (valRelParentScrollTop) yPos = (parseInt(yPos) - parseInt(valRelParentScrollTop));
                
                var rightMenuEndPoint = (parseInt(xPos) + parseInt(createdDIVWidth) + parseInt(extraXPosSpace));
                var leftMenuStartPoint = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace));
                if (rightMenuEndPoint > intWidth) 
                    createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace)) + "px";
                else if (leftMenuStartPoint < 0) 
                    createdDIV.style.left = (parseInt(xPos) + parseInt(extraXPosSpace)) + "px";
                else
                    createdDIV.style.left = (parseInt(xPos) + parseInt(extraXPosSpace)) + "px";
                
                //show menu on top side if there is enough space to do so
                createdDIV.style.top = (parseInt(yPos) - parseInt(curObjHeight) - parseInt(extraYPosSpace)) + "px";
                
                var topMenuStartPoint = (parseInt(yPos) - parseInt(curObjHeight) - parseInt(extraYPosSpace) - parseInt(createdDIVHeight));
                if (topMenuStartPoint < 0)
                {
                    var rightMenuEndPoint = (parseInt(xPos) + parseInt(createdDIVWidth) + parseInt(extraXPosSpace));
                    var leftMenuStartPoint = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace));
                    if (rightMenuEndPoint > intWidth) 
                        createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) - parseInt(createdDIVWidth) - parseInt(extraXPosSpace)) + "px";
                    else if (leftMenuStartPoint < 0) 
                        createdDIV.style.left = (parseInt(xPos) + parseInt(curObjWidth) + parseInt(extraXPosSpace)) + "px";
                    else
                        createdDIV.style.left = (parseInt(xPos) + parseInt(extraXPosSpace)) + "px";
                    
                    //show menu on bottom side if there isn't enough room on the top side
                    createdDIV.style.top = (parseInt(yPos) + parseInt(curObjHeight) + parseInt(extraYPosSpace)) + "px";
                }
                break;
            default:
                break;
        }
    }

	function CloseMenu(targetMenuName, tarParentID, tarParentTAGNAME)
	{
	    var curMenuDIV = document.getElementById(targetMenuName);
	    if (curMenuDIV) document.body.removeChild(curMenuDIV);
	    
	    histMenuActive = eval("histMenuActive.replace(/" + targetMenuName + ",/gi, \"\")");
	    //objTestArea.innerHTML += "DESTROY HIST: " + histMenuActive + "<br>";
	}
	
	function FindPos(obj, navMenuDirection, lastNavMenuDirection) 
	{
	    var curleft = curtop = 0;
	    if (obj.offsetParent) 
	    {
	        do
	        {
	            curleft += obj.offsetLeft;
	            curtop += obj.offsetTop;
	            switch (navMenuDirection)
	            {
	                case "left":
	                    if (parseInt(obj.style.paddingLeft)) curleft -= parseInt(obj.style.paddingLeft);
	                    break;
	                case "right":
	                    if (parseInt(obj.style.paddingLeft)) curleft += parseInt(obj.style.paddingLeft);
	                    break;
	                case "top":
	                    if (parseInt(obj.style.paddingTop)) curtop -= parseInt(obj.style.paddingTop);
	                    break;
	                case "bottom":
	                    if (parseInt(obj.style.paddingTop)) curtop += parseInt(obj.style.paddingTop);
	                    break;
	                default:
	                    break;
	            }
	        }
	        while (obj = obj.offsetParent) 
	    }
	    var retVal = curleft + "||" + curtop;
	    return retVal
    }

	function FindPosRelativeToParent(obj) 
	{
	    var curleft = curtop = 0;
	    if (obj.offsetParent) 
	    {
	        do
	        {
	            if (obj.style.position == "relative") break;
	            curleft += obj.offsetLeft;
	            curtop += obj.offsetTop;
	        }
	        while (obj = obj.offsetParent) 
	    }
	    var retVal = [curleft, curtop];
	    return retVal;
    }

    function GetRelativeObjScrollAmount(curObj)
    {
        var blnContinue = true;
        while (blnContinue)
        {
            if (curObj.parentNode)
            {
                curObj = curObj.parentNode;
                if (curObj.style.position == "relative") blnContinue = false;
            }
            if (Trim(curObj.tagName) == "BODY") blnContinue = false;
        }
        return curObj;
    }

    function FindParentObj(curObj)
    {
        var blnContinue = true;
        while (blnContinue)
        {
            if (curObj.parentNode)
            {
                curObj = curObj.parentNode;
                if (curObj.id)
                {
                    if (Trim(curObj.tagName.toUpperCase()) == "DIV")
                    {
                        //alert(curObj.id);
                        if (curObj.style.position == "absolute") blnContinue = false;
                    }
                }
            }
            if (Trim(curObj.tagName) == "BODY") blnContinue = false;
        }
        return curObj;
    }
    
    function FindFirstTagName(objParent, tagName)
    {
        var objReturn = "";
        if (objParent.childNodes)
        {
            for (var i=0; i<=objParent.childNodes.length; i++)
            {
                if (objParent.childNodes[i])
                {
                    if (objParent.childNodes[i].tagName)
                    {
                        //alert(objParent.childNodes[i].tagName)
                        if (objParent.childNodes[i].tagName.toLowerCase() == tagName.toLowerCase())
                        {
                            objReturn = objParent.childNodes[i];
                            break;
                        }
                    }
                }
            }
        }
        return objReturn;
    }
    
    function ChkifParent(curObj, tarElement)
    {
        var blnContinue = true, blnIsParent = false;
        if (tarElement)
        {
            var objTarget = tarElement;
            while (blnContinue)
            {
                if (objTarget.tagName)
                {
                    if (objTarget.tagName != "BODY")
                    {
                        if (objTarget.parentNode)
                        {
                            objTarget = objTarget.parentNode;
                            if (objTarget.tagName == "BODY")
                                break;
                            else
                            {
                                if (curObj == objTarget) 
                                {
                                    blnContinue = false
                                    blnIsParent = true;
                                }
                            }
                        }
                    }
                    else
                        break;
                }
                else
                    break;
            }
            return blnIsParent;
        }
    }
    
//-->
