var old_style = false;

function screenshot(evt, image_name)
{
    close_all();

    var div = document.getElementById("image_"+image_name);
    if(!div)
    { return true; }

    div.style.visibility = "hidden";

    var top_pos = mouseY(evt);
    var bottom_pos = top_pos+div.clientHeight;
    var window_bottom = getScrollPosition()+getWindowHeight();
    if(bottom_pos > (window_bottom-10))
    { top_pos = window_bottom - (div.clientHeight + 10); }
    if(top_pos < getScrollPosition())
    { top_pos = getScrollPosition(); }

    var left = Math.round((mouseX(evt) - div.offsetWidth/2));
    if(left + div.offsetWidth > getWindowWidth())
    { left = Math.round((left - div.offsetWidth/2)); }
    if(left < 0)
    { left = 0; }

    div.style.left = left+"px";
    div.style.top = top_pos+"px";
    div.style.visibility = "visible";

    return false;
}

function close_screenshot(image_name)
{
    var div = document.getElementById("image_"+image_name);
    if(div)
    { real_close(div); }

    return false;
}

function real_close(div)
{
    div.style.visibility = "hidden";
    div.style.top = 0;
    div.style.left = 0;

    return;
}

function close_all()
{
    var divs = document.getElementsByTagName("div");
    for(var i=0; i<divs.length; ++i)
    {
        var div = divs[i];
        if(div.getAttribute("class") == "image_float" ||
           div.getAttribute("className") == "image_float")
        { real_close(div); }
    }
}
function load_screenshots()
{
    if(typeof document.createElementNS == "undefined")
    { old_style = true; }

    document.onkeypress = close_on_escape;

    var divs = document.getElementsByTagName("div");
    for(var i=0; i<divs.length; ++i)
    {
        var div = divs[i];
        if(div.getAttribute("class") == "image_float" ||
           div.getAttribute("className") == "image_float")
        {
            var match = /^image_(.+)/.exec(div.getAttribute("id"));
            if(!match || !match[1] || !match[1].length)
            { continue; }

            var close_paragraph = createElement("p");
            var close_link = createElement("a");
            var link_text = document.createTextNode("Close");
            close_link.setAttribute("class", "clickable");
            close_link.setAttribute("className", "clickable");
            close_link.setAttribute("bib_action", "close");
            close_link.appendChild(link_text);
            close_paragraph.appendChild(close_link);
            div.appendChild(close_paragraph);

            var image_paragraph = createElement("p");
            var image = createElement("img");
            image.setAttribute("alt", div.getAttribute("title"));
            image.setAttribute("title", div.getAttribute("title"));
            image.setAttribute("src", "/images/apollo/"+match[1]+".png");
            image_paragraph.appendChild(image);
            div.appendChild(image_paragraph);
        }
    }
}
function body_click(evt)
{
    var visible_div;
    var divs = document.getElementsByTagName("div");
    for(var i=0; i<divs.length; ++i)
    {
        var div = divs[i];
        if((div.getAttribute("class") == "image_float" || div.getAttribute("className") == "image_float") &&
            div.style.visibility == "visible")
        {
            visible_div = div;
            break;
        }
    }

    if(visible_div)
    {
        var node = (evt.target) ? evt.target : evt.srcElement;
        if(node.getAttribute("bib_action") == "close")
        { return real_close(visible_div); }

        if(node.nodeType == 1 &&
            (node.nodeName.match(/^img$/i) && node.getAttribute("alt") == "Screenshot" ||
             node.nodeName.match(/^a$/i) && node.getAttribute("title") == "Screenshot") )
        {
            if(node.nodeName.match(/^img$/i))
            { node = node.parentNode; }
            var match = /'(.+)'/.exec(node.getAttribute("onclick"));
            if(match && match[1] && match[1].length)
            {
                if("image_"+match[1] == visible_div.getAttribute("id"))
                { return; }
            }
        }

        var clicked_div;
        do
        {
            if(node.nodeType == 1 && node.nodeName.match(/^DIV$/i))
            { clicked_div = node; }
        } while(!clicked_div && (node = node.parentNode));

        if(!clicked_div || (clicked_div.getAttribute("id") != visible_div.getAttribute("id")))
        { real_close(visible_div); }
    }
}

function close_on_escape(e)
{
    e = e ? e : window.event;
    var key;
    if(e.keyCode)
    { key = e.keyCode; }
    else
    { key = e.which; }

    if(key == 27)
    { close_all(); }
}

function createElement(element)
{
    if(!old_style)
    { return document.createElementNS("http://www.w3.org/1999/xhtml", element); }
    else
    { return document.createElement(element); }
}

function mouseX(evt)
{
    if (evt.pageX) return evt.pageX;
    else if (evt.clientX)
        return evt.clientX + (document.documentElement.scrollLeft ?
            document.documentElement.scrollLeft :
            document.body.scrollLeft);
    else return null;
}
function mouseY(evt)
{
    if (evt.pageY) return evt.pageY;
    else if (evt.clientY)
        return evt.clientY + (document.documentElement.scrollTop ?
            document.documentElement.scrollTop :
            document.body.scrollTop);
    else return null;
}
function getWindowWidth()
{
    if (window.self && self.innerWidth)
    { return self.innerWidth; }
    if (document.documentElement &&
        document.documentElement.clientWidth)
    { return document.documentElement.clientWidth;}
    if(document.body && document.body.clientWidth)
    { return document.body.clientWidth; }
    return 0;
}
function getWindowHeight()
{
    if (window.self && self.innerHeight)
    { return self.innerHeight; }
    if (document.documentElement &&
        document.documentElement.clientHeight)
    { return document.documentElement.clientHeight;}
    if(document.body && document.body.clientHeight)
    { return document.body.clientHeight; }
    return 0;
}
function getScrollPosition()
{
    return (document.documentElement.scrollTop) ? document.documentElement.scrollTop : window.pageYOffset;
}
