var picbox_rel_name = '(picbox:)(.*)';
var picbox_relindex = 2;
var change = 1;

var picbox_srcs = new Array();
var picbox_titles = new Array();
var opened_id ;
var opened_group;
var dia_active = 0;

var widthFactor = 0.5;
var heightFactor = 0.7;
var picPadding = 5;

window.onload = picbox_init;

document.onkeydown = function(event)
{
    if(!event) 
        event = window.event;
    if(picbox_srcs[opened_group] != undefined)
    {
        if(opened_id > 0 && (event.keyCode == 90 || event.keyCode == 34 || event.keyCode == 37))
        {
            load_picture(opened_group, opened_id - 1);
        }
        else if(opened_id < (picbox_srcs[opened_group].length - 1) && (event.keyCode == 87 ||event.keyCode == 33 || event.keyCode == 39))
        {
            load_picture(opened_group, opened_id + 1);
        }
        else if(event.keyCode == 27 || event.keyCode == 67 || event.keyCode == 35)
        {
            close_picbox();
        }
        else if (event.keyCode == 68)
        {
            if(dia_active == 0)
            {
                start_dia();
            }
            else
            {
                stop_dia();
            }
        }
    }
}

function opacity (id, start_value, end_value, msec)
{
    var speed = Math.round(msec / 100);
    var timer = 0;

    if(start_value > end_value)
    {
        for(i = start_value; i >= end_value; i--)
        {
            setTimeout("set_opac(" + i + ",'" + id + "')", (timer * speed));
            timer++;
        }
        if(end_value == 0)
        {
            setTimeout("document.getElementById('" + id + "').style.display = 'none'", msec);
        }
    }
    else if(start_value < end_value)
    {
        for(i = start_value; i <= end_value; i++)
        {
            setTimeout("set_opac(" + i + ",'" + id + "')", (timer * speed));
            timer++;
        }
    }
}

function set_opac (opacity, id)
{
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

function rel_to_array ()
{
    var images = document.getElementsByTagName("a");
    matches = new Array;
    for(var i = 0; i < images.length; i++)
    {
        matches = images[i]["rel"].match(picbox_rel_name);
        if(matches)
        {
            gmatch = matches[picbox_relindex];

            if(picbox_srcs[gmatch] == undefined)
            {
                picbox_srcs[gmatch] = new Array();
            }

            if(picbox_titles[matches[picbox_relindex]] == undefined)
            {
                picbox_titles[matches[picbox_relindex]] = new Array();
            }
            id = picbox_srcs[matches[picbox_relindex]].length ;
            group = matches[picbox_relindex];

            images[i].picboxID = id;
            images[i].picboxGroup = group;
            images[i].onclick = function(evt)
            {
                open_picbox(this.picboxGroup, this.picboxID);
            };

            picbox_srcs[group][id] = images[i].href;
            picbox_titles[group][id] = images[i].title;

            images[i].href = "javascript:void(0)";
        }
    }
}

function load_picture (group, id)
{
    opened_id = id;
    opened_group = group;
    var src = picbox_srcs[group][id];
    var title = '';
    if(picbox_titles[group][id] != undefined)
    {
        title = picbox_titles[group][id];
    }

    document.getElementById('picbox_pic').src = src;

    pic = new Image();
    pic.src = src;
    var oldHeight = pic.height;
    var oldWidth = pic.width;
    if(window.innerWidth)
    {
        var winWidth = window.innerWidth;
        var winHeight = window.innerHeight;
    }
    else
    {
        if (window.document.documentElement && window.document.documentElement.clientHeight)
        {
            var winHeight = window.document.documentElement.clientHeight;
            var winWidth = window.document.documentElement.clientWidth;
        }
	else
        {
            var winHeight = window.document.body.offsetHeight;
            var winWidtht = window.document.body.offsetWidth;
        }
    }
    var factor = (widthFactor * winWidth) / oldWidth;
    if((factor * oldHeight) > (heightFactor * winHeight))
    {
        factor = (heightFactor * winHeight) / oldHeight;
    }
    if(window.innerWidth)
    {
        document.getElementById('picbox_pic').style.height = factor * oldHeight + 'px';
        document.getElementById('picbox_pic').style.width = factor * oldWidth + 'px';

        document.getElementById('picbox_light').style.left = (0.5 * (winWidth
                                                                    - 2 * picPadding
                                                                    - (document.getElementById('picbox_pic').width < 400
                                                                       ? 400
                                                                       : document.getElementById('picbox_pic').width))) + 'px';
    }
    else
    {
        document.getElementById('picbox_pic').style.height = factor * oldHeight;
        document.getElementById('picbox_pic').style.width = factor * oldWidth;

        document.getElementById('picbox_light').style.left = (0.5 * (winWidth
                                                                - 2 * picPadding
                                                                - (document.getElementById('picbox_pic').width < 400
                                                                   ? 400
                                                                   : document.getElementById('picbox_pic').width)));
    }

    document.getElementById('picbox_title').innerHTML = title;
    if(id > 0)
    {
        document.getElementById('picbox_back').style.display = 'block';
    }
    else
    {
        document.getElementById('picbox_back').style.display = 'none';
    }

    if(id < (picbox_srcs[group].length - 1))
    {
        document.getElementById('picbox_forward').style.display = 'block';
    }
    else
    {
        document.getElementById('picbox_forward').style.display = 'none';
    }

    document.getElementById('picbox_num_act').innerHTML = id + 1;
    document.getElementById('picbox_num_all').innerHTML = picbox_srcs[group].length;
}

function open_picbox (group, id)
{
    document.getElementById('picbox_overlay').style.display = 'block';
    document.getElementById('picbox_light').style.display = 'block';
    document.getElementById('picbox_back').style.display = 'block';
    document.getElementById('picbox_forward').style.display = 'block';
    load_picture(group, id);
    opacity('picbox_overlay', 0, 80, 400);
    opacity('picbox_light', 0, 100, 300);
    opacity('picbox_back', 0, 100, 300);
    opacity('picbox_forward', 0, 100, 300);
}

function dia_next ()
{
    if(opened_id < (picbox_srcs[group].length - 1))
    {
        opened_id++;
    }
    else
    {
        opened_id = 0;
    }
    fade_picture(opened_group, opened_id);
}

function start_dia ()
{
    dia_active = 1;
    document.getElementById('picbox_start_dia').style.display = 'none';
    document.getElementById('picbox_stop_dia').style.display = 'block';
    if(picbox_srcs[opened_group].length > 1)
    {
        dia_active = 2;
        dia_interval = window.setInterval("dia_next()",breaktime);
    }
}

function stop_dia ()
{
    if(dia_active == 2)
    {
        window.clearInterval(dia_interval);
    }
    dia_active = 0;
    document.getElementById('picbox_start_dia').style.display = 'block';
    document.getElementById('picbox_stop_dia').style.display = 'none';
}

function picbox_init ()
{
    rel_to_array();

    document.getElementById('picbox_back').onclick = function () { load_picture(opened_group, opened_id - 1); };

    document.getElementById('picbox_forward').onclick = function () { load_picture(opened_group, opened_id + 1); };

    document.getElementById('picbox_close').onclick = close_picbox;

    document.getElementById('picbox_overlay').onclick = close_picbox;

    document.getElementById('picbox_start_dia').onclick = start_dia;

    document.getElementById('picbox_stop_dia').onclick = stop_dia;

    document.getElementById('picbox_overlay').style.height = document.body.scrollHeight + 'px';
    document.getElementById('picbox_overlay').style.width = document.body.scrollWidth + 'px';

}

function close_picbox ()
{
    if(dia_active >= 1)
    {
        stop_dia();
    }

    opacity('picbox_light', 100, 0, 200);
    opacity('picbox_overlay', 80, 0, 300);
    opacity('picbox_back', 100, 0, 200);
    opacity('picbox_forward', 100, 0, 200);
}

function fade_picture (group, id)
{
    opened_id = id;
    opened_group = group;

    var src = picbox_srcs[group][id];
    var title = '';
    if(picbox_titles[group][id] != undefined)
    {
        title = picbox_titles[group][id];
    }
    if(change)
    {
        opacity('picbox_picture', 100, 5, 200);
        opacity('picbox_title', 100, 5, 200);

        pic = new Image();
        pic.src = src;
        var oldHeight = pic.height;
        var oldWidth = pic.width;

        if(window.innerWidth)
    {
        var winWidth = window.innerWidth;
        var winHeight = window.innerHeight;
    }
    else
    {
        if (window.document.documentElement && window.document.documentElement.clientHeight)
        {
            var winHeight = window.document.documentElement.clientHeight;
            var winWidth = window.document.documentElement.clientWidth;
        }
	else
        {
            var winHeight = window.document.body.offsetHeight;
            var winWidtht = window.document.body.offsetWidth;
        }
    }
    var factor = (widthFactor * winWidth) / oldWidth;
    if((factor * oldHeight) > (heightFactor * winHeight))
    {
        factor = (heightFactor * winHeight) / oldHeight;
    }

        if(window.innerWidth)
        {
            setTimeout("document.getElementById('picbox_pic').style.height = " + (factor * oldHeight) + " + 'px'", 200);
            setTimeout("document.getElementById('picbox_pic').style.width = " + (factor * oldWidth) + " + 'px'", 200);

            setTimeout("document.getElementById('picbox_light').style.left = "
                       + (0.5 * (winWidth - 2 * picPadding - ((factor * oldWidth) < 400 ? 400 : factor * oldWidth))) + " + 'px'", 200);
        }
        else
        {
            setTimeout("document.getElementById('picbox_pic').style.height = " + (factor * oldHeight), 200);
            setTimeout("document.getElementById('picbox_pic').style.width = " + (factor * oldWidth), 200);

            setTimeout("document.getElementById('picbox_light').style.left = "
                       + (0.5 * (winWidth - 2 * picPadding - ((factor * oldWidth) < 400 ? 400 : factor * oldWidth))), 200);
        }

        setTimeout("document.getElementById('picbox_pic').src = '" + src + "'",200);



        setTimeout("document.getElementById('picbox_title').innerHTML = '" + title + "'",200);

        setTimeout("opacity('picbox_pic', 0, 100, 350)",200);
        setTimeout("opacity('picbox_title', 0, 100, 350)",200);
    }
    else
    {
        document.getElementById('picbox_pic').src = src;
        document.getElementById('picbox_title').innerHTML = title;
        setTimeout("opacity('picbox_pic', 0, 100, 250)",100);
        setTimeout("opacity('picbox_title', 0, 100, 250)",100);
    }
    if(id > 0)
    {
        document.getElementById('picbox_back').style.display = 'block';
    }
    else
    {
        document.getElementById('picbox_back').style.display = 'none';
    }

    if(id < (picbox_srcs[group].length - 1))
    {
        document.getElementById('picbox_forward').style.display = 'block';
    }
    else
    {
        document.getElementById('picbox_forward').style.display = 'none';
    }
    document.getElementById('picbox_num_act').innerHTML = id + 1;
    document.getElementById('picbox_num_all').innerHTML = picbox_srcs[group].length;
}


