// JavaScript Document
var galleryCode = "gallery";
var showreelCode = "_showreel";
var current = "start";
var currentBackgroundImage = 0;
var drag = false;
var startPos = 0;

var myMethods = {
    addOnClickEvent: function(e, code){
        element = $(e);
        element.setAttribute('onclick', Prototype.Browser.IE ? 
            function() { eval(code) } : code);
        return element;
    }, 
    fade: function(e, startOpacity, endOpacity, time, override) {
        Fade(e.id, startOpacity, endOpacity, time, override);
        return $(e);
    }, 
    changeOpacity: function(e, opacity) {
        ChangeOpacity(opacity, e.id);
        return $(e);
    },
    blend: function(e, newImage, time) {
        BlendImages(e.id, newImage, time);
        return $(e);
    }
};

Element.addMethods(myMethods);

function GetRandom(min, max)
{
    if (min > max)
        return -1;
    
    if (min == max)
        return min;
    
    return min + parseInt(Math.random() * (max - min + 1));
}

function SetRandomBackgroundImage(forceNew)
{
    var random = currentBackgroundImage;
    
    while (random == currentBackgroundImage)
        random = GetRandom(1, 3);
    
    //if (random == currentBackgroundImage && !forceNew)
    //    return;
    
    var img = 'img/bg_' + random + '.jpg';
    
    if ($('background').src != '')        
        $('background').blend(img, 1000);        
    else
    {
        $('background').changeOpacity(0).src = img;
        $('background').fade(0, 100, 1000);
    }
    
    currentBackgroundImage = random;
}

function PreloadBackgroundImages()
{
}

function Init()
{
    $('menu').select('a').each(
        function (e) { e.addOnClickEvent('Link(this)'); });
    
    PreloadBackgroundImages();
    
    SetRandomBackgroundImage();
}



function OnLoadComplete()
{
    if (current == galleryCode)
        InitGallery();
    
    $('content').style.display = 'block';
    $('scrollbar').style.display = 'block';
    
    var h = $(current).getHeight();
    
    if (h > 455)
    {
        $('scroller').style.height = (455 - (h - 455)) + 'px';
        $('scroller').onmousedown = function(e) { drag = true; startPos = $(e).pointerY(); };
        $('scroller').style.cursor = 'pointer';
        document.onmouseup = function() { drag = false; };
        document.onmousemove = function(e) {
            if (drag)
            {
                var mouseY = $(e).pointerY();
                var t = $('scroller').positionedOffset().top + mouseY - startPos;
                var lastPosition = $('gallery').positionedOffset().top;
            
                if (t > 0 && t < 446 - (455 - (h - 455)))
                {
                    var lastPosition = t;
                    $('scroller').style.top = t + "px";
                    $('gallery').style.top = (lastPosition + (lastPosition - t)) + 'px';
                }
            }
        }
    }
    else
    {
        $('scroller').style.height = '446px';
        $('scroller').style.top = '0px';
        $('scroller').onmousedown = null;
        document.onmouseup = null;
        document.onmousemove = null;
        $('scroller').style.cursor = '';
    }
}

function Show(url)
{
    if ($('big').src == url)
        return;
    
    if ($('big').src != '')
        BlendImages('big', url, 500);
    else
    {
        $('big').changeOpacity(0).src = url;
        $('big').fade(0, 100, 500);  
    }   
}

function InitGallery()
{
    $(current).select('img:not([class=shooting_info])').each(
        function (e) {
            var imgUrl = e.src.replace(/\/thumb/g, '');

            if ($('big').src == "")
                Show(imgUrl);
            
            e.addOnClickEvent("Show('" + imgUrl + "')");
        });
}

function Link(e)
{    
    $('menu').childElements().each(
        function(e){ e.className = ''; }); 
    
    $('content').getElementsBySelector('div[class="innerContent"]').each(
        function(e){e.hide();});
    
    e.parentNode.className = 'active';
    
    if (e.innerHTML == galleryCode)
    {        
        BlendImages('background', 'img/bg_gallery.jpg', 1000);
        $('image_gallery').style.display = 'block';
        if (!Prototype.Browser.IE)
        {
            ChangeOpacity(0, 'image_gallery');
            Fade('image_gallery', 0, 100, 1000);
        }
    }
    else
    {
        SetRandomBackgroundImage(current == galleryCode);
        
        if (current == galleryCode)
        {
            if (!Prototype.Browser.IE)
                $('image_gallery').fade(100, 0, 1000);
            else
                $('image_gallery').hide();
        }
    }    
    
    if (!$(e.innerHTML))
    {
        var div = document.createElement('div');
        div.id = e.innerHTML;
        div.className = 'innerContent';
        
        $('content').appendChild(div);
    }
        
    if ($(e.innerHTML) && e.innerHTML != showreelCode)
    {
        new Ajax.Updater(e.innerHTML, url + 'ajax.php', 
            { parameters: { c: e.innerHTML }, onComplete: OnLoadComplete });

        $(e.innerHTML).style.display = 'block';
    }
    else if (e.innerHTML == showreelCode)
    {
        $('content').hide();
        $('scrollbar').hide();
        $('image_gallery').hide();
        $('showreel_container').style.display = 'block';
    }
    
    new Ajax.Updater('toolbar', url + 'ajax.php', 
            { parameters: { m: 'tools', c: e.innerHTML }} );
    
    if (current == showreelCode)
    {
        $('showreel_container').hide();
        $('scrollbar').style.display = 'block';
        $('content').style.display = 'block';
        if (e.innerHTML == galleryCode)
            $('image_gallery').style.display = 'block';
    }
    
    current = e.innerHTML;
}

function ChangeOpacity(opacity, id)
{
    var s = $(id).style;
    var o = (opacity / 100);
    s.opacity = o;
    s.MozOpacity = o;
    s.KhtmlOpacity = o;
    s.filter = "alpha(opacity=" + opacity + ")";
}

var currentFade = new Array();

function Fade(id, startOpacity, endOpacity, time, override)
{
    if (currentFade[id] && override)
      for (i = 0; i < currentFade[id].length; i++)
        clearTimeout(currentFade[id][i]);
    
    var speed = Math.round(time / 100);
    var timer = 0;
    
    currentFade[id] = new Array();
    
    if (startOpacity > endOpacity)
    {
        for (var i = startOpacity; i >= endOpacity; i--)
        {
            currentFade[id][i] = setTimeout("ChangeOpacity(" + i + ",'" + id + "')", 
                (timer * speed));
            timer++;
        }
    }
    else if (startOpacity < endOpacity)
    {
        for (var i = startOpacity; i <= endOpacity; i++)
        {
            currentFade[id][i] = setTimeout("ChangeOpacity(" + i + ",'" + id + "')", 
                (timer * speed));
            timer++;
        }
    }
}

function SetNewImageAndFadeIn(id, newImage, time)
{
    $(id).src = newImage;
    $(id).changeOpacity(0).fade(0, 100, time);
}

function BlendImages(id, newImage, time)
{
    $(id).fade(100, 0, time);
    setTimeout("SetNewImageAndFadeIn('" + id + "','" + newImage + "'," + time + ")", time);
}

