var Render = {
    intro       :       '',
    swap_in     :       '',
    swap_out    :       '',
    executor    :       '',
    preLoader   :       '',
    bgImage     :       '',
    soundStatus :       0,
    soundMP3    :       '/sound/pasta_sauce_please_proud_music_128.mp3',
    soundObject :       '',

    initialize: function() {
        
        Render.setOnExit();    
        Render.createCloseButton();
        
        //nutralize style
        //$('logo').removeClassName('hide');
        //$('content').removeClassName('hide');
        //$('center').removeClassName('hide');
        //$$('.sound')[0].removeClassName('hide');

        Render.swap_in      =       new Animation('/images/swap_in_movie/', 'swap_in', 'swap_in-animation', '11');
        Render.swap_out     =       new Animation('/images/swap_out_movie/', 'swap_out', 'swap_out-animation', '9');
        Render.preLoader    =       $$('.preloader')[0];
        Render.bgImage      =       new Image();
        Render.bgImage.src  =       '/images/bg.png';

        if ( !document.referrer.include( window.location.host ) ) {
            $('logo').hide();
            $$('.sound')[0].hide();
            $('center').hide();
            $('content').hide();
        
            Render.intro    =   new Animation('/images/intro_movie/', 'intro', 'intro-animation', '28');
            Render.executor =   new PeriodicalExecuter(Render.preLoad, 1.0);
        } else {
            //prepare elements
            $('content').hide();
            
            Render.initSound();
            Render.swapIn();
        }
    
    },

    initSound: function() {
        if ( document.location.pathname == "/" ) {
            if ( !Render.getSessionVar('soundStatus') ) {
                Render.soundStatus = 0;
            } else {
                if ( Render.getSessionVar('soundStatus') == 0 ) {
                    Render.soundStatus = 1;
                } else {
                    Render.soundStatus = 0;
                }
            }
            Event.observe($$('.sound')[0], 'click', Render.actionSound); 
            Event.observe($$('.sound')[0], 'mouseover', function(){ this.style.cursor = 'pointer'; }); 
            Render.actionSound();
        } else {
            $$('.sound')[0].hide();
        }
    },

    actionSound: function() {
        if (Render.soundStatus == 0) {
            $$('.sound')[0].style.backgroundImage = 'url(/images/button_sound_on.gif)';
            if ( Render.soundObject ) {
                $$('body')[0].insert(Render.soundObject);
            }
            Sound.enable();
            Sound.play( Render.soundMP3, { replace:true } );
            Render.soundStatus = 1;
        } else {
            $$('.sound')[0].style.backgroundImage = 'url(/images/button_sound_off.gif)';
            Sound.enable();
            Sound.play( '', { replace:true } );
            Sound.disable();
            Render.soundObject = $('sound_global_0').remove();
            Render.soundStatus = 0;
        }
        Render.setSessionVar('soundStatus', Render.soundStatus);
    },

    preLoad: function() {
        if ( Render.intro.isLoaded() && 
                Headers.isLoaded() && Render.swap_in.isLoaded() && Render.swap_out.isLoaded()) {
            Render.executor.stop();
            Render.preLoader.style.display = 'none';
            Render.startIntroAnimation();
            Render.initSound();
        }
    },

    setOnExit: function() {
        var objs = $$('a');
        for ( var i = 0; i < objs.length; i ++ ) {
            objs[i].onclick =   function () {
                                    if ( Render.swap_out.checkStatus() == 1 ) {
                                        Render.hideContent(this.href);
                                        return false;
                                    } else {
                                        return true;
                                    }
                                };
        }
    },
    
    setSessionVar: function( str, value ) {
        //set session cookie
        document.cookie = str + "=" + value;
    },
    
    getSessionVar: function( str ) {
        //set begin index to 1st letter of value ("W")
        if ( document.cookie.indexOf( str ) < 0 ) {
            return false;
        }
        var beginindex = document.cookie.indexOf( str ) + str.length + 1;
        var endindex = beginindex;
        //while we haven't hit ";" and it's not end of cookie
        while (document.cookie.charAt(endindex) != ";" && endindex <= document.cookie.length) {
            endindex++;
        }
        return document.cookie.substring(beginindex, endindex);
    },

    createCloseButton: function() {
        var button = new Element('img', {'class' : 'close', src: '/images/button_close.gif'});
        Event.observe(button, 'click', Render.hideContent);
        Event.observe(button, 'mouseover', function(){ this.style.cursor = 'pointer'; });
        $('content').insert({top: button});
    },
    
    startIntroAnimation: function() {
        $('logo').appear();
        if ( document.location.pathname == "/") {
            $$('.sound')[0].appear();
        }
        Render.intro.onComplete = Render.showMain;
        Render.intro.start();
    },

    showMain: function() {
        $('center').appear({afterFinish: Render.swapIn});
    },

    swapIn: function() {
        new Effect.Opacity('headers-show', {from: 1.0, to: 0.8, duration: 0.5 });
        Render.swap_in.onComplete = Render.showContent;
        Render.swap_in.start();
    },

    showContent: function() {
        $('content').appear();
    },

    hideContent: function( url ) {
        new Effect.Opacity('content', {from: 1.0, to: 0.0, duration: 0.5, afterFinish: function() { Render.swapAway(url); }});
    },

    swapAway: function( url ) {
        new Effect.Opacity('headers-show', {from: 0.8, to: 1.0, duration: 0.5 });
        window.setTimeout(  function() {
                                Render.swap_in.destroy();
                            }, 100);
        Render.swap_out.onComplete =    function() { 
                                            if ( typeof(url.indexOf) != 'undefined') {
                                                Render.go(url);
                                            }
                                        };
        Render.swap_out.start();
    },

    go: function( url ) {
        var a = new Element('a', {href: url, style: "display: none;"});
        if( !a.click ) {
            window.location = url;
            return;
        }
        $$("body")[0].appendChild(a);
        a.click();
    }
        
};

//Event.observe(window, 'load', Render.initialize);
document.observe("dom:loaded", Render.initialize);

