﻿// Popup Layers

function ShowPopupLayer(LayerID, buttonPath)
{
    try{
        var pnlPopUp = document.getElementById(LayerID);
        var pnlHeader = GetHeaderPanel(pnlPopUp)
        var ScreenDim = GetScreenDimensions()
        var ScrollPos = GetScrollDistance()
        var pnlBody = GetBodyPanel(pnlPopUp)
        var objImg = ""
        
        //if the button path is specified, precache it so it starts loading
        if(buttonPath != "" && typeof buttonPath != 'undefined'){
            objImg = new Image();
            objImg.src = buttonPath;}
        
        pnlPopUp.style.display = ""
        pnlPopUp.className = "DefaultPopup"
        pnlPopUp.style.height = 'auto';
        pnlBody.style.height = 'auto';
        pnlBody.style.overflow = '';
        /*temporary hasLayout hack for body panel so that it has a visible width */
        pnlBody.style.height = '0'
        
        //Add the Close Button
        AddCloseButton(pnlHeader, objImg)
        
        //get the width and ensure a minimum of 500 pixels wide and a max of the screen width
        pnlBody.style.height = 'auto'
        var HeaderWidth = GetHeaderWidth(pnlHeader);
        var HardSetWidth = pnlPopUp.style.width.replace(/\D/g, '');
        var DefaultWidth = pnlPopUp.parentNode.clientWidth; 
        //If there's a hard set width on the panel, use that, don't readjust because it's deliberate.
        if (HardSetWidth == ''){
            if (DefaultWidth < 500)
                DefaultWidth = 500
            if (pnlBody.clientWidth > DefaultWidth)
                DefaultWidth = pnlBody.clientWidth;
            if (HeaderWidth > DefaultWidth)
                DefaultWidth = HeaderWidth;
            if (DefaultWidth > ScreenDim[1]){
                DefaultWidth = ScreenDim[1]; 
                pnlBody.style.overflow = "auto"
            } 
        }else{
            DefaultWidth = HardSetWidth
        }
        
        //move to 0,0
        pnlPopUp.style.position = 'absolute'
        pnlPopUp.style.left = 0
        pnlPopUp.style.top = 0
        pnlPopUp.style.width = DefaultWidth + "px"
        /* BEGIN hasLayout hack - DO NOT REMOVE */
        pnlBody.style.width = (DefaultWidth - 1) + "px" 
        /* END hasLayout hack - DO NOT REMOVE */
        
        //Get the body height and the frame height
        var FrameHeight = pnlPopUp.clientHeight - pnlBody.clientHeight;        
        //Set the height if necessary      
        if(parseInt(pnlPopUp.clientHeight, 10) > parseInt(ScreenDim[0], 10)){
            pnlPopUp.style.height = ScreenDim[0] + "px"    
            pnlBody.style.height = (ScreenDim[0] - FrameHeight) + "px"
            pnlBody.style.overflow = "auto"
        }
        
        
        //Center it on the screen
        pnlPopUp.style.left = (((ScreenDim[1] - DefaultWidth) / 2) + ScrollPos[1]) + "px";
        pnlPopUp.style.top = (((ScreenDim[0] - pnlPopUp.clientHeight) / 2) + ScrollPos[0]) + "px";
    }catch(e){
        /*alert(e.message)*/}
}

//Returns the total width of all header contents.  They may be floated, so the width needs to accommodate them all.
function GetHeaderWidth(pnlHeader){
    var intEls = 0;var intWidth = 0
    var nodes = pnlHeader.childNodes;
    for(intEls=0;intEls<nodes.length;intEls++){
        if(typeof nodes[intEls].clientWidth != 'undefined' && nodes[intEls].tagName.toLowerCase() != 'div'){
            intWidth = intWidth + parseInt(nodes[intEls].clientWidth,10);}
    }
    return intWidth + 5;
}


function GetHeaderPanel(pnlPopUp)
{
    var HeaderPanel
    if(pnlPopUp.childNodes[1].className == 'PanelHeaderPermanent'){ 
        HeaderPanel = pnlPopUp.childNodes[1];
    }else{
        HeaderPanel = pnlPopUp.childNodes[0];
    } 
    return HeaderPanel;
}

function GetBodyPanel(pnlPopUp)
{
    var pnlBody
    if(pnlPopUp.childNodes[0].className == 'PanelHeaderPermanent'){
         pnlBody = pnlPopUp.childNodes[1];
    }else{
        pnlBody = pnlPopUp.childNodes[3];}    
    return pnlBody
}

function GetScreenDimensions()
{
    var ScreenHeight
    var ScreenWidth
    
    //Get window height/width
    if(window.innerHeight)
        ScreenHeight = window.innerHeight;
    else
        ScreenHeight = document.body.parentNode.clientHeight;  
    if(window.innerWidth)
        ScreenWidth = window.innerWidth;
    else
        ScreenWidth = document.body.parentNode.clientWidth; 
    return [ScreenHeight, ScreenWidth]
}

function GetScrollDistance()
{
    var ScrollTop = 0
    var ScrollLeft = 0
    
    if (window.pageYOffset)
        ScrollTop = window.pageYOffset;
    else if(typeof(document.body.parentElement) != 'undefined')
        ScrollTop = document.body.parentElement.scrollTop;
    else
        ScrollTop = document.body.scrollTop; 
        
   if (window.pageXOffset)
        ScrollLeft = window.pageXOffset;
    else if(typeof(document.body.parentElement) != 'undefined')
        ScrollLeft = document.body.parentElement.scrollLeft;
    else
        ScrollLeft = document.body.scrollLeft; 
   
    return [ScrollTop, ScrollLeft]    
}

function AddCloseButton(pnlHeader, button)
{
    //Create the Close link
    var aTags = pnlHeader.getElementsByTagName('a');
    if(CheckForCloseButton(pnlHeader, aTags)){
        //create the close element            
        CloseThis = document.createElement('a');
        var closeButton = ""
        if (typeof button != 'undefined' && button != ''){
            closeButton = document.createElement('img');
            closeButton.src = button.src;
            closeButton.alt = "close";
            CloseThis.appendChild(closeButton)
        }else{
            CloseThis.innerHTML = 'X';
        }
        CloseThis.style.paddingRight = '2px';
        CloseThis.id = 'CloseLink' + pnlHeader.id
        CloseThis.onclick = function(){this.parentNode.parentNode.style.display = 'none'};            
        CloseThis.className = 'link';          
        pnlHeader.appendChild(CloseThis) 
        AppendCloseButton(pnlHeader, CloseThis, aTags);
        MoveContents(pnlHeader, aTags);
        var ndClear = document.createElement('div');
        ndClear.style.clear = 'both'
        pnlHeader.appendChild(ndClear)
        if(pnlHeader.clientHeight < 2)
            pnlHeader.style.height = '1.5 em';   
        if(pnlHeader.style.display != '')
            pnlHeader.style.display = '';          
    }
}

function CheckForCloseButton(pnlHeader, aTags){
    var i=0;
    if (aTags.length < 1)
        return true;
    else{
        for(i=0;i<aTags.length;i++)
            if(aTags[i].className != "rssLink")
                return false;
    }
    return true;
}

function MoveContents(pnlHeader, aTags){
    for(i=0; i < aTags.length; i++)
        SetFloat(aTags[i],'right');
    var sTags = pnlHeader.getElementsByTagName('span');
    for(i=0; i < sTags.length; i++)
        SetFloat(sTags[i],'left');
}

function SetFloat(el,dir){
    if(document.all)
        el.style.styleFloat = dir
    else
        el.style.cssFloat = dir
}

function AppendCloseButton(pnlHeader,closeButton, aTags){
    if(aTags.length < 1)      
        pnlHeader.appendChild(closeButton);
    else
        pnlHeader.insertBefore(closeButton, aTags[0]);
}


