﻿
//Display a dropdown div nested within another div
function DisplayDropDownDiv(sParentId, sChildId) {
    $("#" + sParentId).parent().find("#" + sChildId).slideDown('fast').show(); //Drop down the subdiv on click  

    $("#" + sParentId).parent().find("#" + sChildId).hover(function () {
    }, function () {
        $("#" + sParentId).parent().find("#" + sChildId).slideUp('slow'); //Hide DropDown on mouse out
    });
}


//Optional_ContainerId  - Id of container position should be relative from 
//Optional_HideMenu     - Hide DropDown on mouse out                        - Default True
//Optional_TopOverflow  - Aditional vertical positioning relativ to button  - Default 15
//Optional_LeftOverflow - Aditional horizontal positioning relativ to button- Default 15
function jQueryDropDown(    ButtonId, 
                            DisplayPanelId,
                            Optional_ContainerId, 
                            Optional_HideDropDown,
                            Optional_TopOverflow,
                            Optional_LeftOverflow) {
    //Handle optional input default values
    var ContainerId     = Optional_ContainerId  == null ? "XXXXX"   : Optional_ContainerId;
    var HideDropDown    = Optional_HideDropDown == null ? true      : Optional_HideDropDown;
    var TopOverflow     = Optional_TopOverflow  == null ? 15        : Optional_TopOverflow;
    var LeftOverflow    = Optional_LeftOverflow == null ? 15        : Optional_LeftOverflow;

    //Calculate DropDown Panel Position
    var iLeft, iTop;
    iLeft = GetPosition_Left(ButtonId, ContainerId, $("#" + DisplayPanelId).width()) + LeftOverflow;
    iTop = GetPosition_Top(ButtonId, ContainerId, $("#" + DisplayPanelId).height()) + TopOverflow;

    //alert("ContainerId: " + ContainerId + " - Left: " + iLeft + " - Top: " + iTop);
    $("#" + DisplayPanelId).css("left", iLeft + "px");
    $("#" + DisplayPanelId).css("top", iTop + "px");

    $("#" + DisplayPanelId).slideDown('fast').show();

    if (HideDropDown) {
        $("#" + DisplayPanelId).hover(function () {
        }, function () {
            $("#" + DisplayPanelId).slideUp('slow'); //Hide DropDown on mouse out
        });
    }
}

//Helpfunctions
function GetPosition_Left(ButtonId, MaxContainerId, PanelWidth) 
{
    var posleft = 0;
    obj = $("#" + ButtonId).get(0);
    if (obj) 
    {
        //alert("id: " + obj.id + " - Offset: " + obj.offsetTop + " - Scrolltop: " + obj.scrollTop);
        posleft = obj.offsetLeft;
        posleft -= obj.scrollLeft;

        if (obj.id != MaxContainerId)
            while ((obj = obj.offsetParent) != null) 
            {
                //alert("id: " + obj.id + " - Offset: " + obj.offsetTop + " - Scrolltop: " + obj.scrollTop);

                posleft += obj.offsetLeft;
                posleft -= obj.scrollLeft;
                if (obj.id == MaxContainerId)
                    break;
            }
        
        //Clear Window Edge
        var windowedge = $(window).width();
        if (MaxContainerId != "XXXXX") 
            windowedge = $("#" + MaxContainerId).width();

        if (windowedge - posleft < PanelWidth) {
            posleft = windowedge - PanelWidth;
        }
    }
    
    //alert("windowedge:" + windowedge + " - posleft:" + posleft + " - PanelWidth:" + PanelWidth);
    return posleft;
}

function GetPosition_Top(ButtonId, MaxContainerId, PanelHeight) 
{
    var postop = 0;
    var obj = $("#" + ButtonId).get(0);
    if (obj) 
    {
        //alert("id: " + obj.id + " - Offset: " + obj.offsetTop + " - Scrolltop: " + obj.scrollTop);
        postop = obj.offsetTop;
        postop -= obj.scrollTop;
    
        if (obj.id != MaxContainerId)
            while ((obj = obj.offsetParent) != null) 
            {
                //alert("id: " + obj.id + " - Offset: " + obj.offsetTop + " - Scrolltop: " + obj.scrollTop);
                postop += obj.offsetTop;
                postop -= obj.scrollTop;
    
                if (obj.id == MaxContainerId)
                    break;
            }
        
        //Clear Window Edge
        var windowedge = $(window).height();
        if (MaxContainerId != "XXXXX")
            windowedge = $("#" + MaxContainerId).height();

        if (windowedge - postop < PanelHeight)
            postop = windowedge - PanelHeight;
    }

    return postop;
}  
