var loading_image_file = '/inc/darkbox/darkbox_loading.gif';
var auto_resize = true;
var max_long_side = 900;

function darkbox_init()
{
    var anchors = document.getElementsByTagName('a');

    for (var i = 0; i < anchors.length; i++)
    {
        var anchor = anchors[i];
        if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == 'darkbox'))
        {
            anchor.onclick = function () { darkbox_show(this); return false;};
        }
    }

    var body = document.getElementsByTagName('body').item(0);

    var overlay = document.createElement('div');
    overlay.setAttribute('id','darkbox_overlay');
    overlay.onclick = function () {darkbox_close(); return false;}
    overlay.style.visibility = 'hidden';
    overlay.style.position = 'absolute';
    overlay.style.top = '0';
    overlay.style.left = '0';
    overlay.style.zIndex = '1000';
    overlay.style.width = '100%';
    body.insertBefore(overlay, body.firstChild);

    var content = document.createElement('div');
    content.setAttribute('id','darkbox_content');
    content.onclick = function () {darkbox_close(); return false;}
    content.style.visibility = 'hidden';
    content.style.position = 'absolute';
    content.style.zIndex = '1002';
    body.insertBefore(content, overlay.nextSibling);

    var image_preloader = new Image();
    image_preloader.onload=function()
    {
        var loading_image = document.createElement('img');
        loading_image.src = loading_image_file;
        loading_image.setAttribute('id', 'darkbox_loading_image');
        loading_image.style.position = 'absolute';
        loading_image.style.display = 'block';
        loading_image.style.zIndex = '1001';

        overlay.appendChild(loading_image);

        image_preloader.onload = function(){};
    }
    image_preloader.src = loading_image_file;
}

function darkbox_show(anchor)
{
    var dimensions = darkbox_get_dimensions();

    var darkbox_overlay = document.getElementById('darkbox_overlay');
    darkbox_overlay.style.width = dimensions[0] + 'px';
    darkbox_overlay.style.height = dimensions[1] + 'px';
    darkbox_overlay.style.visibility = 'visible';

    var darkbox_content = document.getElementById('darkbox_content');
    var loading_image = document.getElementById('darkbox_loading_image');

    if (loading_image)
    {
        loading_image.style.left = (((dimensions[0] - loading_image.width) / 2) + 'px');
        loading_image.style.top = (darkbox_get_yscroll() + ((dimensions[3] - loading_image.height) / 2) + 'px');
    }

    preload_image = new Image();
    preload_image.onload = function()
    {
        var img_width = preload_image.width;
        var img_height = preload_image.height;

        if (auto_resize)
        {
            if (img_width >= img_height)
                k = img_width / max_long_side;
            else
                k = img_height / max_long_side;

            var img_width = img_width / k;
            var img_height = img_height / k;

            if (img_width > preload_image.width)
            {
                img_width  = preload_image.width;
                img_height = preload_image.height;
            }
        }

        darkbox_content.style.left = (dimensions[0] - img_width) / 2 + 'px';
        darkbox_content.style.top = darkbox_get_yscroll() + ((dimensions[3] - img_height) / 2) + 'px';

        darkbox_content.style.width = img_width + 'px';

        darkbox_content.innerHTML = '<img src="' + anchor.getAttribute('href') + '" width="' + img_width + '" height="' + img_height + '" alt="' + anchor.getAttribute('title') + '" />';
        if (anchor.getAttribute('title')) darkbox_content.innerHTML += anchor.getAttribute('title');

        darkbox_content.style.visibility = 'visible';
        loading_image.style.visibility = 'hidden';

        preload_image.onload=function(){};

        return false;
    }

    preload_image.src = anchor.href;
}

function darkbox_close()
{
    document.getElementById('darkbox_overlay').style.visibility = 'hidden';
    document.getElementById('darkbox_content').style.visibility = 'hidden';
}

function darkbox_get_yscroll()
{
    var yScroll;

    if (self.pageYOffset)
    {
        yScroll = self.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop)
    {
        yScroll = document.documentElement.scrollTop;
    }
    else if (document.body)
    {
        yScroll = document.body.scrollTop;
    }

    return yScroll;
}

function darkbox_get_dimensions()
{
    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)
    {
        xScroll = document.body.scrollWidth;
        yScroll = document.body.scrollHeight;
    }
    else
    {
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
    }

    var windowWidth, windowHeight;

    if (self.innerHeight)
    {
        windowWidth = self.innerWidth;
        windowHeight = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight)
    {
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
    }
    else if (document.body)
    {
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
    }

    pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
    pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;

    return Array(pageWidth, pageHeight, windowWidth, windowHeight);
}

var old_onload = window.onload;
if (typeof window.onload != 'function')
{
    window.onload = darkbox_init;
}
else
{
    window.onload = function(){ old_onload(); darkbox_init(); }
}
