﻿/*** General ***/

var FormerMouseUpHandler=null;
var FormerMouseMoveHandler=null;

function ElementAbsoluteX(Element){
    var X=0;
    while (Element){
        X+=Element.offsetLeft;
        Element=Element.offsetParent;
    }
    return X;
}

function ElementAbsoluteY(Element){
    var Y=0;
    while (Element){
        Y+=Element.offsetTop;
        Element=Element.offsetParent;
    }
    return Y;
}

function PageScrollLeft(){
    var ScrollLeft=0;
    if (typeof(window.pageYOffset)=="undefined"){
        ScrollLeft=document.documentElement.scrollLeft;
    } else {
        ScrollLeft=window.pageXOffset;
    }
    return ScrollLeft;
}

function PageScrollTop(){
    var ScrollTop=0;
    if (typeof(window.pageYOffset)=="undefined"){
        ScrollTop=document.documentElement.scrollTop;
    } else {
        ScrollTop=window.pageYOffset;
    }
    return ScrollTop;
}

function IsBeyondHalfScreenX(X){
    return X>document.body.offsetWidth/2;
}

function GetXmlHttpObject(){
    var xmlHttp=null;
    try {
        xmlHttp=new XMLHttpRequest();
    } catch(e) {
        try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}





/*** Group Hover ***/

var ChartGroupValueRangeMin=0;
var ChartGroupValueRangeMax=0;
var ChartGroupXPos=0;
var ChartGroupWidth=0;
var ChartGroupBox=null;
var ChartGroupBoxX=0;
var ChartGroupBoxY=0;
var ChartGroupHoverBox=null;
var ChartGroupHoverBar=null;

function SetupChartGroupHoverAction(Element, MinValue, MaxValue){
    ChartGroupValueRangeMin=MinValue;
    ChartGroupValueRangeMax=MaxValue;
    ChartGroupXPos=ElementAbsoluteX(Element);
    ChartGroupWidth=Element.offsetWidth;
    ChartGroupBox=document.getElementById("ChartGroupBox");
    ChartGroupHoverBox=document.getElementById("ChartGroupHoverBox");
    ChartGroupHoverBar=document.getElementById("ChartGroupHoverBar");
    ChartGroupBoxX=ElementAbsoluteX(ChartGroupBox);
    ChartGroupBoxY=ElementAbsoluteY(ChartGroupBox);
    Element.onmousemove=ChartGroupMouseMove;
    Element.onmouseout=ChartGroupMouseOut;
    ChartGroupHoverBar.onmouseover=ChartGroupHoverBarMouseOver;
    ChartGroupHoverBar.onmouseout=ChartGroupHoverBarMouseOut;
}

function ChartGroupMouseMove(e){
    if (!e){
        var e=window.event;
    }
    if (!SliderControlTarget){
        return;
    }
    var NewVal=((SliderControlTarget.scrollLeft+e.clientX+2-ChartGroupXPos)/ChartGroupWidth)*(ChartGroupValueRangeMax-ChartGroupValueRangeMin)+ChartGroupValueRangeMin;
    var NewUnit="";
    if (typeof(window["ChartUnitBaseValues"])!="undefined" && typeof(window["ChartUnitDescriptors"])!="undefined"){
        var UnitNum=0;
        for (UnitNum=0; UnitNum<ChartUnitBaseValues.length; UnitNum++){
            if (NewVal>=ChartUnitBaseValues[UnitNum]){
                NewVal/=ChartUnitBaseValues[UnitNum];
                NewUnit=" "+ChartUnitDescriptors[UnitNum];
            }
        }
    }
    NewVal=Math.floor(NewVal);
    ChartGroupHoverBox.innerHTML=NewVal+NewUnit;
    if (IsBeyondHalfScreenX(e.clientX-ChartGroupBoxX)){
        ChartGroupHoverBox.style.left=SliderControlTarget.scrollLeft+e.clientX-ChartGroupBoxX-ChartGroupHoverBox.offsetWidth-10+"px";
    } else {
        ChartGroupHoverBox.style.left=SliderControlTarget.scrollLeft+e.clientX-ChartGroupBoxX+15+"px";
    }
    ChartGroupHoverBar.style.left=SliderControlTarget.scrollLeft+e.clientX-ChartGroupBoxX+"px";
    ChartGroupHoverBox.style.visibility="visible";
    ChartGroupHoverBar.style.visibility="visible";
    return false;
}

function ChartGroupMouseOut(e){
    if (!e){
        var e=window.event;
    }
    ChartGroupHoverBox.style.visibility="hidden";
    ChartGroupHoverBar.style.visibility="hidden";
    return false;
}

function ChartGroupHoverBarMouseOver(e){
    if (!e){
        var e=window.event;
    }
    ChartGroupHoverBox.style.visibility="visible";
    ChartGroupHoverBar.style.visibility="visible";
    return false;
}

function ChartGroupHoverBarMouseOut(e){
    if (!e){
        var e=window.event;
    }
    ChartGroupHoverBox.style.visibility="hidden";
    ChartGroupHoverBar.style.visibility="hidden";
    return false;
}



/*** Slider Control ***/

var SliderControlLeftLimit=0;
var SliderControlRightLimit=0;

var SliderControlTarget=null;
var SliderControlTargetScrollMax=0;

var SliderBox=null;
var SliderBoxX=0;
var SliderControl=null;
var SliderBoxAlt=null;
var SliderBoxAltX=0;
var SliderControlAlt=null;
var SliderControlMouseDownX=null;
var SliderControlX=0;
var SliderControlStartX=0;

function InitSliderControl(){
    SliderBox=document.getElementById("LinearChartSliderBox");
    SliderBoxX=ElementAbsoluteX(SliderBox);
    SliderControl=document.getElementById("LinearChartSliderControl");
    SliderBoxAlt=document.getElementById("LinearChartSliderBoxAlt");
    SliderBoxAltX=ElementAbsoluteX(SliderBoxAlt);
    SliderControlAlt=document.getElementById("LinearChartSliderControlAlt");
    SliderControlTarget=document.getElementById("LinearChart");
    SliderControlTarget.scrollLeft=0;
    SliderControl.style.visibility="visible";
    SliderControlAlt.style.visibility="visible";
    SliderControl.onmousedown=SliderControlMouseDown;
    SliderControlAlt.onmousedown=SliderControlMouseDown;
    SliderControl.parentNode.onmousedown=SliderBarMouseDown;
    SliderControlAlt.parentNode.onmousedown=SliderBarMouseDown;
}


function SliderControlMouseDown(e){
    if (!e){
        var e=window.event;
    }
    if (!SliderControlTarget){
        return;
    }
    SliderControlMouseDownX=e.clientX-SliderBoxX;
    SliderControlStartX=SliderControlX;
    SliderControlTargetScrollMax=SliderControlTarget.scrollWidth-SliderControlTarget.offsetWidth;
    SliderControlRightLimit=SliderControl.parentNode.offsetWidth-SliderControl.offsetWidth;
    FormerMouseUpHandler=document.onmouseup;
    document.onmouseup=SliderControlMouseUp;
    FormerMouseMoveHandler=document.onmousemove;
    document.onmousemove=SliderControlDrag;
    return false;
}

function SliderBarMouseDown(e){
    if (!e){
        var e=window.event;
    }
    if (e.clientX<=SliderControl.offsetLeft || e.clientX>=SliderControl.offsetLeft+SliderControl.offsetWidth){
        SliderControlMouseDown(e);
        SliderControlStartX=e.clientX-SliderBoxX-(SliderControl.offsetWidth/2);
        SliderControlDrag(e);
    }
    return false;
}

function SliderControlMouseUp(e){
    if (!e){
        var e=window.event;
    }
    SliderControlMouseDownX=null;
    document.onmouseup=FormerMouseUpHandler;
    document.onmousemove=FormerMouseMoveHandler;
    return false;
}

function SliderControlDrag(e){
    if (!e){
        var e=window.event;
    }
    if (!SliderControlTarget){
        return;
    }
    if (SliderControlMouseDownX!=null){
        var NewX=SliderControlStartX+e.clientX-SliderBoxX-SliderControlMouseDownX;
        if (NewX>SliderControlRightLimit){
            NewX=SliderControlRightLimit;
        }
        if (NewX<SliderControlLeftLimit){
            NewX=SliderControlLeftLimit;
        }
        SliderControlX=NewX;
        SliderControl.style.left=NewX+"px";
        SliderControlAlt.style.left=NewX+"px";
        SliderControlTarget.scrollLeft=SliderControlX/SliderControlRightLimit*SliderControlTargetScrollMax;
    }
    return false;
}







/*** Chart Item Details Box ***/

var ChartItemDetailBox=null;
var ChartItemDetailBoxMouseDownX=null;
var LinearChartMainBox=null;
var ChartItemDetailBoxX=10;
var ChartItemDetailBoxY=200;
var ChartItemDetailBoxStartX=0;
var ChartItemDetailBoxStartY=0;
var ItemAds=new Array();
var CurrentlyDetailedItem=0;

function InitChartItemDetailBox(){
    ChartItemDetailBox=document.getElementById("ChartItemsDetailAreaTitleBar");
    LinearChartMainBox=document.getElementById("LinearChartMainBox");
    ChartItemDetailBox.parentNode.style.top=LinearChartMainBox.offsetTop+"px";
    ChartItemDetailBox.onmousedown=ChartItemDetailBoxMouseDown;
    ChartItemDetailBox.parentNode.style.left=ChartItemDetailBoxX+"px";
    ChartItemDetailBox.parentNode.style.top=ChartItemDetailBoxY+"px";
}

function ChartItemDetailBoxMouseDown(e){
    if (!e){
        var e=window.event;
    }
    ChartItemDetailBoxMouseDownX=e.clientX;
    ChartItemDetailBoxStartX=ChartItemDetailBoxX;
    ChartItemDetailBoxMouseDownY=e.clientY;
    ChartItemDetailBoxStartY=ChartItemDetailBoxY;
    FormerMouseUpHandler=document.onmouseup;
    document.onmouseup=ChartItemDetailBoxMouseUp;
    FormerMouseUpHandler=document.onmousemove;
    document.onmousemove=ChartItemDetailBoxDrag;
    return false;
}

function ChartItemDetailBoxMouseUp(e){
    if (!e){
        var e=window.event;
    }
    ChartItemDetailBoxMouseDownX=null;
    ChartItemDetailBoxMouseDownY=null;
    document.onmouseup=FormerMouseUpHandler;
    document.onmousemove=FormerMouseMoveHandler;
    return false;
}

function ChartItemDetailBoxDrag(e){
    if (!e){
        var e=window.event;
    }
    if (ChartItemDetailBoxMouseDownX!=null && ChartItemDetailBoxMouseDownY!=null){
        ChartItemDetailBoxX=ChartItemDetailBoxStartX+e.clientX-ChartItemDetailBoxMouseDownX;
        if (ChartItemDetailBoxX<0){
            ChartItemDetailBoxX=0;
        }
        ChartItemDetailBox.parentNode.style.left=ChartItemDetailBoxX+"px";
        ChartItemDetailBoxY=ChartItemDetailBoxStartY+e.clientY-ChartItemDetailBoxMouseDownY;
        if (ChartItemDetailBoxY<0){
            ChartItemDetailBoxY=0;
        }
        ChartItemDetailBox.parentNode.style.top=ChartItemDetailBoxY+"px";
    }
    return false;
}

function ShowChartItemDetails(Title, DetailImageURL, ItemID, AddToHistory){
    CancelUnPreviewCountdown();
    if (ItemID && ChartItemDetailBox){
        var Element=document.getElementById("LinearChartItemDetails_"+ItemID);
        var TargetTitle=document.getElementById("ChartItemsDetailAreaTitle");
        var TargetElement=document.getElementById("ChartItemsDetailInterior");
        var TargetHistory=document.getElementById("ChartItemsDetailHistory");
        if (Element && TargetTitle && TargetElement && TargetHistory){
            TargetTitle.innerHTML=unescape(Title);
            TargetElement.innerHTML="";
            if (DetailImageURL){
                TargetElement.innerHTML+="<img src=\""+DetailImageURL+"\" width=\"100\" border=\"0\" alt=\""+Title+"\">";
            }
            TargetElement.innerHTML+=Element.innerHTML;
            if (AddToHistory==null || AddToHistory==true){
                TargetHistory.innerHTML="<div><a href=\"#\" onClick=\"HideChartItemInHistory(this); return false;\" style=\"float: right;\">X</a><a href=\"#\" onClick=\"ShowChartItemDetails('"+escape(Title)+"', "+(DetailImageURL?"'"+DetailImageURL+"'":null)+", "+ItemID+", false); return false;\">"+Title+"</a></div>"+TargetHistory.innerHTML;
                TargetHistory.scrollTop=0;
            }
        }
        ShowChartItemDetailBox(true);
        if (AddToHistory){
            IsInDetailPreview=false;
            PreviewFormerBoxState=document.getElementById("ChartItemsDetailBox").style.visibility;
            TrackItemClick(ItemID);
        } else {
            DisplayItemAd(ItemID);
        }
        CurrentlyDetailedItem=ItemID;
    }
}

function ShowChartItemDetailBox(State){
    var Element=document.getElementById("ChartItemsDetailBox");
    if (Element){
        if (State){
            Element.style.visibility="visible";
        } else {
            Element.style.visibility="hidden";
        }
    }
}

function HideChartItemInHistory(Caller){
    Caller.parentNode.style.position="absolute";
    Caller.parentNode.style.visibility="hidden";
}


function TrackItemClick(ItemID){
    var Connection=GetXmlHttpObject();
    if (Connection){
        Connection.onreadystatechange=function(){
            if (Connection.readyState==4){
                Connection=null;
            }
        };
        Connection.open("GET", "/ajax/GetLinearChartItemAd.aspx?ItemID="+ItemID+"&TrackClick=1", true);
        Connection.send(null);
    }
}

function DisplayItemAd(ItemID){
    if (ItemID){
        var AdElement=document.getElementById("ChartItemsDetailAdBox");
        if (AdElement){
            var Now=new Date();
            if (ItemAds[ItemID]==null){
                ItemAds[ItemID]=new Object();
                ItemAds[ItemID].Connection=null;
                ItemAds[ItemID].LoadTime=0;
                ItemAds[ItemID].AdData="";
            }
            if (Now.getTime()<=ItemAds[ItemID].LoadTime+10000){
                AdElement.innerHTML=ItemAds[ItemID].AdData;
	            return;
            }
            if (ItemAds[ItemID].Connection==null){
        	    ItemAds[ItemID].Connection=GetXmlHttpObject();
                if (ItemAds[ItemID].Connection){
                    AdElement.innerHTML="";
                    ItemAds[ItemID].Connection.onreadystatechange=function(){
                        if (ItemAds[ItemID].Connection.readyState==4){
                            ItemAds[ItemID].LoadTime=Now.getTime();
                            ItemAds[ItemID].AdData=ItemAds[ItemID].Connection.responseText;
                            if (CurrentlyDetailedItem==ItemID){
	                            AdElement.innerHTML=(ItemAds[ItemID].AdData=ItemAds[ItemID]?ItemAds[ItemID].AdData:"");
	                        }
	                        ItemAds[ItemID].Connection=null;
                        }
                    };
                    ItemAds[ItemID].Connection.open("GET", "/ajax/GetLinearChartItemAd.aspx?ItemID="+ItemID, true);
                    ItemAds[ItemID].Connection.send(null);
                }
            }
        }
    }
}




/*** Item Hover ***/

var HoveringOverItem=null;
var IsInDetailPreview=false;
var PreviewFormerDetailTitle=null;
var PreviewFormerDetailBody=null;
var PreviewFormerBoxState=null;
var PreviewFormerBoxZIndex=null;
var UnPreviewCountdown=null;

function HighlightItemPointer(Caller, ItemID, State){
    HoveringOverItem=Caller;
    var ParentBox=document.getElementById("LinearChartItemBox_"+ItemID);
    var Pointer=document.getElementById("LinearChartItemPointer_"+ItemID);
    if (ParentBox && Pointer){
        if (State){
            Pointer.style.backgroundColor="#eeeeee";
            Pointer.style.borderWidth="2px";
            PreviewFormerBoxZIndex=ParentBox.style.zIndex;
            ParentBox.style.zIndex="1000";
            ParentBox.style.marginLeft="-1px";
        } else {
            Pointer.style.backgroundColor="transparent";
            Pointer.style.borderWidth="1px";
            ParentBox.style.zIndex=PreviewFormerBoxZIndex;
            ParentBox.style.marginLeft="0px";
        }
    }
}

function PreviewItemDetails(Title, DetailImageURL, ItemID, AddToHistory){
    if (UnPreviewCountdown){
        UnPreviewItemDetails(true);
    }
    if (!SliderControlTarget){
        return;
    }
    if (!IsInDetailPreview){
        IsInDetailPreview=true;
        
        var DetailBox=document.getElementById("ChartItemsDetailBox");
        PreviewFormerDetailTitle=document.getElementById("ChartItemsDetailAreaTitle").innerHTML;
        PreviewFormerDetailBody=document.getElementById("ChartItemsDetailInterior").innerHTML;
        PreviewFormerDetailAd=document.getElementById("ChartItemsDetailAdBox").innerHTML;
        PreviewFormerBoxState=DetailBox.style.visibility;
        
        // Handle overlap
//        var ItemLeftX=ElementAbsoluteX(HoveringOverItem)-SliderControlTarget.scrollLeft;
//        var ItemRightX=ItemLeftX+HoveringOverItem.offsetWidth;
//        var ItemTopY=ElementAbsoluteY(HoveringOverItem)-PageScrollTop();
//        var ItemBottomY=ItemTopY+HoveringOverItem.offsetHeight;
//        var BoxLeftX=ElementAbsoluteX(DetailBox);
//        var BoxRightX=BoxLeftX+DetailBox.offsetWidth;
//        var BoxTopY=ElementAbsoluteY(DetailBox);
//        var BoxBottomY=BoxTopY+DetailBox.offsetHeight;
//        if ((BoxLeftX<ItemLeftX && BoxRightX>ItemLeftX) || (BoxLeftX<ItemRightX && BoxRightX>ItemRightX)){
//            if ((BoxTopY<ItemTopY && BoxBottomY>ItemTopY) || (BoxTopY<ItemBottomY && BoxBottomY>ItemBottomY)){
//                var OutTop=BoxBottomY-ItemTopY;
//                var OutBottom=ItemBottomY-BoxTopY;
//                var OutLeft=BoxRightX-ItemLeftX;
//                var OutRight=ItemRightX-BoxLeftX;
//                var MinOut=Math.min(OutTop, OutBottom, OutLeft, OutRight);
//                if (OutTop==MinOut){
//                    ChartItemDetailBoxY=ItemTopY-DetailBox.offsetHeight;
//                }
//                if (OutLeft==MinOut){
//                    ChartItemDetailBoxX=ItemLeftX-DetailBox.offsetWidth;
//                }
//                if (OutBottom==MinOut || ChartItemDetailBoxY<0){
//                    ChartItemDetailBoxY=ItemBottomY;
//                }
//                if (OutRight==MinOut || ChartItemDetailBoxX<0){
//                    ChartItemDetailBoxX=ItemRightX;
//                }
//                DetailBox.style.left=ChartItemDetailBoxX+"px";
//                DetailBox.style.top=ChartItemDetailBoxY+"px";
//            }
//        }
        
        ShowChartItemDetails(Title, DetailImageURL, ItemID, false);
    }
}

function UnPreviewItemDetails(Immediate){
    if (!Immediate){
        CancelUnPreviewCountdown();
        UnPreviewCountdown=setTimeout("UnPreviewItemDetails(true);", 10);
        return;
    }
    if (IsInDetailPreview){
        IsInDetailPreview=false;
        document.getElementById("ChartItemsDetailAreaTitle").innerHTML=PreviewFormerDetailTitle;
        document.getElementById("ChartItemsDetailInterior").innerHTML=PreviewFormerDetailBody;
        document.getElementById("ChartItemsDetailAdBox").innerHTML=PreviewFormerDetailAd;
        document.getElementById("ChartItemsDetailBox").style.visibility=PreviewFormerBoxState;
        PreviewFormerDetailTitle=null;
        PreviewFormerDetailBody=null;
        PreviewFormerBoxState=null;
    }
}

function CancelUnPreviewCountdown(){
    if (UnPreviewCountdown){
        clearTimeout(UnPreviewCountdown);
    }
}





/*** Chart Class Support ***/

var ItemClassesIndex=new Array();
var ItemClasses=new Array();
var ClassColorsIndex=new Array();
var ClassColors=new Array();

function SetClassSelectors(ClassIDList, State){
    var Element=null;
    for (LoopVar=0; LoopVar<ClassIDList.length; LoopVar++){
        Element=document.getElementById("ChartClassSelector_"+ClassIDList[LoopVar]);
        if (Element){
            Element.checked=State;
        }
    }
    // Populate ItemClasses on first run
    if (ItemClassesIndex.length<=0){
        for (AssocLoop=0; AssocLoop<ChartClassItemAssociations.length; AssocLoop++){
            if (ItemClasses[ChartClassItemAssociations[AssocLoop].ItemID]==null){
                ItemClassesIndex.push(ChartClassItemAssociations[AssocLoop].ItemID);
                ItemClasses[ChartClassItemAssociations[AssocLoop].ItemID]=new Array();
            }
            ItemClasses[ChartClassItemAssociations[AssocLoop].ItemID].push(ChartClassItemAssociations[AssocLoop].ClassID);
        }
    }
    // Populate ClassColors on first run
    if (ClassColorsIndex.length<=0){
        for (AssocLoop=0; AssocLoop<ChartClassItemAssociations.length; AssocLoop++){
            if (ClassColors[ChartClassItemAssociations[AssocLoop].ClassID]==null){
                ClassColorsIndex.push(ChartClassItemAssociations[AssocLoop].ClassID);
                ClassColors[ChartClassItemAssociations[AssocLoop].ClassID]=ChartClassItemAssociations[AssocLoop].ClassColor;
            }
        }
    }
    UpdateClassIndicators();
}

function UpdateClassIndicators(){
    var Selectors=document.getElementById("LinearChartClassBox").getElementsByTagName("input");
    var SelectedClasses=new Array();
    for (SelLoop=0; SelLoop<Selectors.length; SelLoop++){
        if (Selectors[SelLoop].checked){
            SelectedClasses.push(Selectors[SelLoop].getAttribute("name"));
        }
    }
    for (ItemLoop=0; ItemLoop<ItemClassesIndex.length; ItemLoop++){
        var ItemID=ItemClassesIndex[ItemLoop];
        var Element=document.getElementById("LinearChartItemBox_"+ItemID);
        if (Element){
            // Hide all class indicators
            for (ColorLoop=0; ColorLoop<ItemClasses[ItemID].length; ColorLoop++){
                var ClassColor=ClassColors[ItemClasses[ItemID][ColorLoop]];
                var Indicators=Element.getElementsByTagName("div");
                for (IndLoop=0; IndLoop<Indicators.length; IndLoop++){
                    if (Indicators[IndLoop].getAttribute("name")=="ChartClassIndicator_"+ClassColor){
                        Indicators[IndLoop].style.visibility="hidden";
                        Indicators[IndLoop].style.position="absolute";
                    }
                }
            }
            Element.style.visibility="hidden";
            // Show the selected class indicators
            for (ClassLoop=0; ClassLoop<SelectedClasses.length; ClassLoop++){
                for (ItemClassLoop=0; ItemClassLoop<ItemClasses[ItemID].length; ItemClassLoop++){
                    if (ItemClasses[ItemID][ItemClassLoop]==SelectedClasses[ClassLoop]){
                        var Indicators=Element.getElementsByTagName("div");
                        for (IndLoop=0; IndLoop<Indicators.length; IndLoop++){
                            if (Indicators[IndLoop].getAttribute("name")=="ChartClassIndicator_"+ClassColors[SelectedClasses[ClassLoop]]){
                                Element.style.visibility="visible";
                                Indicators[IndLoop].style.visibility="visible";
                                Indicators[IndLoop].style.position="relative";
                            }
                        }
                    }
                }
            }
        }
    }
}

function ShowFirstChildInPopup(Element, State){
    if (!LinearChartMainBox || !SliderControlTarget){
        return;
    }
    var Popup=document.getElementById("ChartGeneralPopup");
    if (Element && Popup){
        if (Element.childNodes[0]){
            Popup.innerHTML=Element.childNodes[0].innerHTML;
            Popup.style.visibility=(State?"visible":"hidden");
            if (Element.offsetParent.offsetLeft-SliderControlTarget.scrollLeft>LinearChartMainBox.offsetWidth/2){
                Popup.style.left=ElementAbsoluteX(Element)-SliderControlTarget.scrollLeft-Popup.offsetWidth-10+"px";
            } else {
                Popup.style.left=ElementAbsoluteX(Element)-SliderControlTarget.scrollLeft+10+"px";
            }
            if (ElementAbsoluteY(Element)>ElementAbsoluteY(LinearChartMainBox)+LinearChartMainBox.offsetHeight/2){
                Popup.style.top=ElementAbsoluteY(Element)-Popup.offsetHeight-10+"px";
            } else {
                Popup.style.top=ElementAbsoluteY(Element)+10+"px";
            }
        }
    }
}

function CollapseOrExpandClass(Element){
    if (!Element){
        return;
    }
    var SubItems=Element.parentNode.getElementsByTagName("a");
    for (SubItemLoop=0; SubItemLoop<SubItems.length; SubItemLoop++){
        if (SubItems[SubItemLoop].innerHTML=="-"){
            SubItems[SubItemLoop].innerHTML="+";
        }
    }
    if (Element.parentNode.className=="LinearChartClassSelectorExpanded"){
        Element.parentNode.className="LinearChartClassSelectorCollapsed";
        Element.innerHTML="+";
    } else {
        Element.parentNode.className="LinearChartClassSelectorExpanded";
        Element.innerHTML="-";
    }
    var SubLists=Element.parentNode.getElementsByTagName("ul");
    for (LoopVar=0; LoopVar<SubLists.length; LoopVar++){
        if (SubLists[LoopVar].parentNode==Element.parentNode){
            if (Element.parentNode.className=="LinearChartClassSelectorExpanded"){
                SubLists[LoopVar].style.visibility="visible";
                SubLists[LoopVar].style.position="relative";
            } else {
                SubLists[LoopVar].style.visibility="hidden";
                SubLists[LoopVar].style.position="absolute";
            }
        } else {
            SubLists[LoopVar].style.visibility="hidden";
            SubLists[LoopVar].style.position="absolute";
            SubLists[LoopVar].parentNode.className="LinearChartClassSelectorCollapsed";
        }
    }
}
