// vim: set tabstop=4 shiftwidth=4 foldmethod=marker expandtab :
/**
 * Generic popover code
 *
 * @depends onload.js for SafeAddOnload()
 * @depends ajax.js for getObject()
 * @depends fade.js for fading in object
 * @depends dhtml.js for ensureElementFromObject()
 * 
 * @author terry chay <tychay@mac.com>
 * @author some ideas come from lightbox.js by
 *      Lokesh Dhakar <http://huddletogether.com/projects/lightbox/>
 * @author getPageScroll and getPageSize come from quirksmode.org
 * @copyright Creative Commons Attribution 2.5 License
 *      <http://creativecommons.org/licens/by/2.5/>
 * @todo follow scroll capture.
 */
// get_page_scroll() {{{
/**
 * Returns array with x,y page scroll values.
 * @author quirksmode.org
 */
function get_page_scroll()
{
    var yScroll;
    if (self.pageYOffset) {
        yScroll = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {  // Explorer 6 Strict 
        yScroll = document.documentElement.scrollTop;
    } else if (document.body) {// all other Explorers
        yScroll = document.body.scrollTop;
    }   
    arrayPageScroll = new Array('',yScroll);
    return arrayPageScroll;
}
// }}}
// get_page_size() {{{
/**
 * Returns array with page width, height and window width, height
 *
 * @author quirksmode.org
 * @author Edit for Firefox by pHaez
 */
function get_page_size()
{
    var xScroll, yScroll;
    
    if (window.innerHeight && window.scrollMaxY) {  
        xScroll = document.body.scrollWidth;
        yScroll = window.innerHeight + window.scrollMaxY;
    } else if (document.body.scrollHeight > document.body.offsetHeight){
        // all but Explorer Mac {{{
        xScroll = document.body.scrollWidth;        yScroll = document.body.scrollHeight;
        // }}}
    } else {
        // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari {{{
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
        // }}}
    }

    var windowWidth, windowHeight;
    if (self.innerHeight) {
        // all except Explorer {{{
        windowWidth = self.innerWidth;
        windowHeight = self.innerHeight;
        // }}}
    } else if (document.documentElement && document.documentElement.clientHeight) {
        // Explorer 6 Strict Mode {{{
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
        // }}}
    } else if (document.body) {
        // other Explorers {{{
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
        // }}}
    }
    // for small pages with total height less then height of the viewport {{{
    if(yScroll < windowHeight){
        pageHeight = windowHeight;
    } else {
        pageHeight = yScroll;
    }
    // }}}
    // for small pages with total width less then width of the viewport {{{
    if(xScroll < windowWidth){
        pageWidth = windowWidth;
    } else {
        pageWidth = xScroll;
    }
    // }}}
    arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
    //alert(new Array(pageWidth,pageHeight,windowWidth,windowHeight,xScroll,yScroll));
    return arrayPageSize;
}
// }}}

// {{{ show_popover(popOver,popWidth,popHeight,innerHtml)
/**
 * @param innerHtml (optional) If provided, it will allow you to set the
 *      innerHtml
 */
function show_popover(popOver,popWidth,popHeight,innerHtml)
{
    var overlay_obj  = getObject('overlay');
    ensureElementFromObject(overlay_obj);
    overlay_obj.style.display = 'block';
    overlay_obj.setOpacity(0);
    overlay_obj.fade(5,0,25,5,5,5);

    var popover_obj  = getObject(popOver);
    ensureElementFromObject(popover_obj);
    var page_sizes   = get_page_size();
    var page_scrolls = get_page_scroll();

    // set height of overlay to take up whole page and show {{{
    overlay_obj.style.height  = (page_sizes[1] + 'px');
    overlay_obj.style.display = 'block';
    // }}}
    // center popover {{{
    var popover_top = page_scrolls[1] + ((page_sizes[3] - popHeight)/2);
    var popover_left = ((page_sizes[0] - popWidth)/2);
    popover_obj.style.top = (popover_top < 0) ? '0px' : popover_top + 'px';
    popover_obj.style.left = (popover_left < 0) ? '0px' : popover_left + 'px';
    // }}}
    // show popover
    if (innerHtml) { popover_obj.innerHTML = innerHtml; }
    popover_obj.style.zIndex   = '100';
    popover_obj.setOpacity(0);
    popover_obj.fade(100,0,100,10,10,10);
    popover_obj.style.display = 'block';
    // after image is loaded, update the overlay height as might have changed {{{
    page_sizes = get_page_size();
    overlay_obj.style.height  = (page_sizes[1] + 'px');
    // }}}
}
// }}}
// {{{ hide_popover(popover)
function hide_popover(popover)
{
    var overlay_obj  = getObject('overlay');
    var popover_obj  = getObject(popover);
    overlay_obj.style.display = 'none';
    popover_obj.style.display = 'none';
    return false;
}
// }}}
// {{{ init_popover()
function init_popover()
{
    var insert = false;
    var overlay_obj = getObject('overlay');
    if ((typeof overlay_obj != 'object') || (overlay_obj == null)) {
        var body_obj = document.getElementsByTagName('body').item(0);    
        overlay_obj = document.createElement('div');
        insert = true;
    }
    ensureElementFromObject(overlay_obj);

    overlay_obj.setAttribute('id','overlay');
    overlay_obj.style.position        = 'absolute';
    overlay_obj.style.top             = '0px';
    overlay_obj.style.left            = '0px';
    overlay_obj.style.width           = '100%';
    overlay_obj.style.backgroundColor = '#000000';
 
    // Necessary for IE -- item shows up and cuts off the top links
    overlay_obj.style.display         = 'none';

    
//    overlay_obj.style.display         = 'block';
//    overlay_obj.style.zIndex          = '990';

    overlay_obj.setOpacity(0);

    if (insert) {
        body_obj.insertBefore(overlay_obj, body_obj.firstChild);
    }
}
// }}}
SafeAddOnload(init_popover);
