﻿// JScript File

function Popover(parent, domId)
{
    var m_elHead, m_elBody, m_elPopover, m_elFoot, m_elTitle, m_elCloseGlyph, m_elFirstFocus;
    var m_elBackground, m_elPopover, m_shadowIframe;
    var m_fncDismissCallback;
    var m_context;
    var m_buttons = {};
    var m_this = this;
    var m_helper = new web.w3.dom.CleanupHelper();
    this.onclose = new sys.Event();
    var m_objData = null; // dialog data
    
    this.init = function()
    {
        m_elBackground = document.createElement("DIV");
        m_elBackground.className = "popoverModal";
        m_elBackground.style.display = "none";
        
        if(sys.env.userAgent.isMozilla())
        {
            m_elBackground.style.opacity = 0.4;
            m_elBackground.style.mozOpacity = 0.4;
        }
        else
        {
            m_elBackground.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=40)";
        }
        
        m_elPopover = document.createElement("DIV");
        m_elPopover.className = "popover";
        if(domId) m_elPopover.id = domId + "";
        
        m_elPopover.style.display = "none";
        
        m_elPopover.innerHTML = "<table cellpadding='4' cellspacing='0' border='0' style='width:100%;table-layout:fixed;'>" +
                                    "<tr style='display:none;'><td><a href='#' class='popoverFirstFocus'>&nbsp;</a></td></tr>" +
                                    "<tr><td class='popoverHead'></td></tr>" +
                                    "<tr><td style='overflow-y:auto;'></td></tr>" +
                                    "<tr style='display:none;'><td class='popoverLine'><div class='line'>&nbsp;</div></td></tr>" + 
                                    "<tr style='display:none;'><td class='popoverFoot'></td></tr>" +
                                "</table>";
        
        m_shadowIframe = document.createElement("iframe");
        m_shadowIframe.frameBorder = "0";
        m_shadowIframe.className = "popoverShadow";
        m_shadowIframe.style.display = "none";
        
        if(sys.env.userAgent.isMozilla())
        {
            m_shadowIframe.style.opacity = 0.7;
            m_shadowIframe.style.mozOpacity = 0.7;
        }
        else
        {
            m_shadowIframe.style.filter = "progid:DXImageTransform.Microsoft.Blur(pixelradius=1.5,MakeShadow=True,shadowOpacity=10)";
        }
        
        document.body.appendChild(m_shadowIframe);
        document.body.appendChild(m_elBackground);
        document.body.appendChild(m_elPopover);
        
        if(parent)
        {
            m_elPopover.style.zIndex = parent.getZIndex() + 3;
        }

        m_shadowIframe.style.zIndex = m_elPopover.currentStyle.zIndex - 2;
        m_elBackground.style.zIndex = m_elPopover.currentStyle.zIndex - 1;
        
        m_elHead = m_elPopover.getElementsByTagName("table")[0].rows[1].cells[0];
        m_elBody = m_elPopover.getElementsByTagName("table")[0].rows[2].cells[0];
        m_elFoot = m_elPopover.getElementsByTagName("table")[0].rows[4].cells[0];
        
        m_elHead.innerHTML = "<table cellpadding='0' cellspacing='0' border='0' style='width:100%;'>" +
                                "<tr>" +
                                    "<td class='popoverTitle'>&nbsp;</td>" +
                                    "<td style='width:20px;'>" +
                                        "<a class='popoverCloseGlyph' href='#' onclick='event.returnValue=false;return false;' title='Close'>" +
                                            "<img name='closeIcon' src='" + MapVirPath("/images/glyph_close_rest.gif") + "' alt='Close' style='border:solid 0px;' />" +
                                        "</a>" +
                                    "</td>"
                                "</tr>" +
                            "</table>";
                            
        m_elTitle = m_elHead.getElementsByTagName("table")[0].rows[0].cells[0];
        m_elCloseGlyph = m_elHead.getElementsByTagName("table")[0].rows[0].cells[1].getElementsByTagName("a")[0];
        m_elCloseGlyph.attachEvent("onclick", CloseGlyph_Click);
        
        m_elFirstFocus = m_elPopover.getElementsByTagName("table")[0].rows[0].cells[0].getElementsByTagName("a")[0];
        
        m_helper.attachEvent(null, m_elPopover, "onkeypress", DocumentBody_KeyPress);
        
    }
    
    function DocumentBody_KeyPress()
    {
        if(27 == event.keyCode)
        {
            m_this.hide();
            event.returnValue = false;
            return false;
        }
    }
    
    function DocumentBody_Click()
    {
        if(event && !m_elPopover.contains(event.srcElement))
        {
            m_this.bringToFront();
        }
    }
    
    function CloseGlyph_Click()
    {
        m_this.hide();
    }
    
    function Button_Click()
    {
        var button = m_buttons[event.srcElement.name];
        if(m_fncDismissCallback)
        {
            if(!m_fncDismissCallback(button.name, m_context)) return;
        }
        m_this.hide();
    }
    
    this.onresize = new sys.Event("onresize");
    
    this.getZIndex = function()
    {
        return parseInt(m_elPopover.currentStyle.zIndex);
    }
    
    this.dispose = function() 
    {
        if(m_elCloseGlyph) m_elCloseGlyph.detachEvent("onclick", CloseGlyph_Click);
        m_elPopover = null;
        m_elHead = m_elBody = m_elFoot = m_elTitle = m_elCloseGlyph = null;
        m_elBackground = m_elPopover = m_shadowIframe = null;
        for(var p in m_buttons)
        {
            if(typeof(p) == "string") m_buttons[p] = null;
        }
        m_elFirstFocus = null;
        m_helper.dispose();
        this.onresize.dispose();
    }
    
    this.refreshBackground = function()
    {
        m_elBackground.style.width = document.documentElement.scrollWidth + "px";
        if(document.documentElement.scrollHeight < document.documentElement.clientHeight)
        {
            m_elBackground.style.height = document.documentElement.clientHeight + "px";
        }
        else
        {
            m_elBackground.style.height = document.documentElement.scrollHeight + "px";
        }
    }
    
    this.setTitle = function(title)
    {
        m_elTitle.innerHTML = title; 
    }
    
    this.addButton = function(name, text, disabled)
    {
        m_elPopover.getElementsByTagName("table")[0].rows[3].style.display = "";
        var button = document.createElement("input");
        button.type = "button";
        button.style.width = "100px";
        button.value = text;
        button.name = name;
        button.disabled = !!disabled;
        button.attachEvent("onclick", Button_Click);
        m_buttons[name] = button;
        m_elFoot.appendChild(button);
        return button;
    }
    
    this.getButton = function(name)
    {
        return m_buttons[name];
    }
    
    this.setContents = function(contents)
    {
        m_elBody.innerHTML = "";
        if(typeof contents == "string") m_elBody.innerHTML = contents;
        else m_elBody.appendChild(contents);
    }
    
    this.getContents = function()
    {
        return m_elBody.childNodes[0];
    }
    
    this.setWidth = function(width, blnNoLocate)
    {
        if(width) m_elPopover.style.width = parseInt(width) + "px";
        if(!blnNoLocate) setTimeout(locate, 0);
    }
    
    this.setHeight = function(height, blnNoLocate)
    {
        if(height) m_elPopover.style.height = parseInt(height) + "px";
        if(!blnNoLocate) setTimeout(locate, 0);
    }
    
    this.getHeaderHeight = function()
    {
        var l = web.w3.dom.Layout.calc(m_elHead);
        return l.height;
    }
    
    this.getBodyHeight = function()
    {
        var l = web.w3.dom.Layout.calc(m_elBody);
        return l.height;
    }
    
    function Popover_Resized()
    {   
        locate();
        
        m_this.onresize.fire();
    }
    
    function locate()
    {
        m_elPopover.style.display = "block";
    
        var layout = web.w3.dom.Layout.calc(m_elPopover);
        var dlgLeft = document.documentElement.scrollLeft + (document.documentElement.clientWidth - layout.width) / 2;
        var dlgTop = document.documentElement.scrollTop + (document.documentElement.clientHeight - layout.height) / 2;
        
        if(dlgLeft < 0) dlgLeft = 8;
        if(dlgTop < 0) dlgTop = 8;
        
        m_elBackground.style.display = "block";
        m_elBackground.style.top = "0px";
        m_elBackground.style.width = document.documentElement.scrollWidth + "px";
        if(document.documentElement.scrollHeight < document.documentElement.clientHeight)
        {
            m_elBackground.style.height = document.documentElement.clientHeight + "px";
        }
        else
        {
            m_elBackground.style.height = document.documentElement.scrollHeight + "px";
        }
        
        m_elPopover.style.left = dlgLeft + "px";
        m_elPopover.style.top =  dlgTop + "px";
        
        m_shadowIframe.style.display = "block";
        
        var dx = 1, dy = 1;
        if(sys.env.userAgent.isMozilla())
        {
            dx += 2;
            dy += 2;
        }
        
        m_shadowIframe.style.left = (dlgLeft + dx) + "px";
        m_shadowIframe.style.top = (dlgTop + dy) + "px";
        m_shadowIframe.style.width = layout.width + "px";
        m_shadowIframe.style.height = layout.height + "px"; 
    }
    
    this.show = function(dismissCallback, context)
    {
        m_fncDismissCallback = null;
        m_context = null;
        
        locate();
        
        m_fncDismissCallback = dismissCallback;
        m_context = context;
        
        this.bringToFront();
        
        m_helper.attachEvent("resize", m_elPopover, "onresize", Popover_Resized);
        m_helper.attachEvent("focus", document.body, "onclick", DocumentBody_Click);
    }
    
    this.bringToFront = function()
    {
        var focus = web.w3.dom.findFocusableElement(m_elPopover, m_elFirstFocus, true);
        if(focus)
        {
            setTimeout(function() {try {focus.focus();}catch(e){}}, 1); 
        }
    }
    
    this.hide = function()
    {
        m_elBackground.style.display = "none";
        m_elPopover.style.display = "none";
        m_shadowIframe.style.display = "none";
        m_helper.detachEventGroup("resize");
        m_helper.detachEventGroup("focus");
        
        if(parent) parent.bringToFront();
        
        this.onclose.fire();
    }
    
    this.setBackgroundColor = function(color)
    {
        m_elPopover.style.backgroundColor = color;
    }
    
    this.getVisible = function()
    {
        return m_elPopover.style.display != "none";
    }
    
    this.setVisible = function(bVisible)
    {
        m_elPopover.style.display = bVisible ? "block" : "none";
    }
    
    this.setDialogData = function(objData)
    {
        m_objData = objData;
    }
    
    this.getDialogData = function()
    {
        return m_objData;
    }
    
    this.setSize = function(w, h, f)
    {
        this.setWidth(w, true);
        this.setHeight(h, true);
        locate();
        if(f) f();
    }
}

var g_eventViewLargePopover = null;

function event_view_large(path)
{
    if(null == g_eventViewLargePopover)
    {
        g_eventViewLargePopover = new Popover(null, "event_view_large_popover");
        g_eventViewLargePopover.init();
        
        var contents = "<table style='width:100%;border-collapse:collapse;' cellpadding='0' cellspaing='0'>" +
                            "<tr>" +
                                "<td style=\"vertical-align:middle;text-align:center;\">" +
                                    "<img style=\"border-width:0px;text-align:center;vertical-align:middle;\" alt=\"\" src=\"\" />" +
                                    "<span style=\"display:none;\"><img src='" + MapVirPath("/images/animated_loading.gif") + "' alt='' style='vertical-align:middle;text-align:center;' />Loading...</span>" +
                                "</td>" +
                            "</tr>" +
                        "</table>";
        
        g_eventViewLargePopover.setTitle("Dialog");
        g_eventViewLargePopover.setContents(contents);
    }
    
    var objContents = g_eventViewLargePopover.getContents();
    if(objContents)
    {    
        var elImg = objContents.getElementsByTagName("img");
        elImg.src = null;
        
        if(elImg && elImg.length > 0)
        {
            elImg = elImg[0];
            elImg.style.display = "none";
         
            var elLoading = objContents.getElementsByTagName("span")[0];
            elLoading.style.display = "";
            
            var objImg = new Image();
            
            g_eventViewLargePopover.setDialogData(objImg);
            g_eventViewLargePopover.show();
            g_eventViewLargePopover.setSize(200, 40 + g_eventViewLargePopover.getHeaderHeight());
            
            objImg.onload = function() 
            { 
                objImg.onload = objImg.onerror = null; 

                //
                // display and relocate the dialog only if it's still visible to
                // prevent it from being shown even if the user has closed the dialog. 
                //
                if(g_eventViewLargePopover.getVisible() && 
                   g_eventViewLargePopover.getDialogData() == objImg)
                {
                    g_eventViewLargePopover.setSize(
                        objImg.width + 8, 
                        objImg.height + 8 + g_eventViewLargePopover.getHeaderHeight(), 
                        function()
                        {
                            setTimeout(
                                function(){
                                    elLoading.style.display = "none";
                                    elImg.style.display = "";
                                    elImg.src = MapImagePath(path);
                                }, 1
                              );
                         }
                     );
                }
            }
            
            objImg.onerror = function() { objImg.onload = objImg.onerror = null;  }
            objImg.src = MapImagePath(path);
        }
    }
}

