/*
@author    : Igor "SkAZi" Potapov <igor@potapoff.org>
@copyright : Plan-B Ltd.
@require   : MooTools 1.2, JKL.ParseXML
*/

var RIGHT_MENUS = [];
var CURRENT_PAGE = 'index';
var NOW_FLYING;
var LOADED = {};

if(LANGUAGE_CODE == 'ru'){
    var SITEMAP = {
        'about': [1,1],
        'press': [1,1],
        'contacts': [1,1],
        'main': [2,1],
        'hire': [3,1],
        'addresses': [1,2],
        'menu': [2,2],
        'shop': [3,2],
        'lifestyle': [1,3],
        'news': [2,3],
        'confectionery': [3,3],
        'card': [2,4]
    };
} else if(LANGUAGE_CODE == 'en'){
    var SITEMAP = {
        'about': [1,1],
        'press': [1,1],
        'contacts': [1,1],
        'main': [2,1],
        'addresses': [1,2],
        'menu': [2,2],
        'lifestyle': [1,3],
        'confectionery': [3,3],
        'card': [2,4]
    };
}
    
var SITEIMAGES = {
    'about': ["pic-1-1-1", "pic-1-1-2"],
    'press': ["pic-1-1-1", "pic-1-1-2"],
    'contacts': ["pic-1-1-1", "pic-1-1-2"],
    'hire': ["pic-3-1-1", "pic-3-1-2"],
    'addresses': ["pic-1-2-1", "pic-1-2-2"],
    'menu': ["pic-2-2-1", "pic-2-2-2"],
    'shop': ["pic-3-2-1", "pic-3-2-2"],
    'lifestyle': ["pic-1-3-1", "pic-1-3-2"],
    'news': ["pic-2-3-1", "pic-2-3-2"],
    'confectionery': ["pic-3-3-1"],
    'card': ["pic-2-4-1", "pic-2-4-2"]
}

var SITECONTROLLER = {
    
    'about': function( p ){
        if($('slide-element'))
            $('slide-element').getParent().tween('height', $('slide-element').getParent().getScrollSize().y);
        aboutPageAnimation('hide', 'hide');
        getPage('about-page', '/static/about-'+LANGUAGE_CODE+'/', '');
    },
    
    'press': function( p ){
        if($('slide-element'))
            $('slide-element').getParent().tween('height', $('slide-element').getParent().getScrollSize().y);
        aboutPageAnimation('hide', 'show');
        getPage('about-page', '/'+LANGUAGE_CODE+'/press/', '');
    },
    
    'contacts': function( p ){
        if($('slide-element'))
            $('slide-element').getParent().tween('height', $('slide-element').getParent().getScrollSize().y);
        aboutPageAnimation('show', 'hide');
        getPage('about-page', '/static/contacts-'+LANGUAGE_CODE+'/', '');
    },
    
    'hire': function( p ){
        getPage('hire-page', '/'+LANGUAGE_CODE+'/hire/', p);
    },
    
    'addresses': function( p ){
        
        requestForCities();
        
    },

    'menu': function( p ){
        if(!NOW_FLYING) return false;
        
        getPage($$('#menu-page .side')[0], '/'+LANGUAGE_CODE+'/menu/', '', function(){
            
            var i = $$('#menu-page .side li a').filter(function( item ){
                return item.get('href') == '#'+p;
            });
            
            if(i && i[0]) 
                menuClick(i[0], 'menu-page', '/'+LANGUAGE_CODE+'/menu')
            else
                menuClick($$('#menu-page .side li a')[0], 'menu-page', '/'+LANGUAGE_CODE+'/menu')
        });
    },
    
    'shop': function( p ){
        if(!NOW_FLYING) return false;
        
        getPage($$('#barista-page .side')[0], '/'+LANGUAGE_CODE+'/barista/', '', function(){
            
            var i = $$('#barista-page .side li a').filter(function( item ){
                return item.get('href') == '#'+p;
            });
            
            if(i && i[0]) 
                menuClick(i[0], 'barista-page', '/'+LANGUAGE_CODE+'/barista')
            else 
                getPage($$('#barista-page .content')[0], '/static/shop-'+LANGUAGE_CODE+'/', '');
        });
    },
    
    'lifestyle': function( p ){
        getPage('lifestyle-page', '/'+LANGUAGE_CODE+'/gallery', p||''+'/');
    },
    
    'news': function( p ){
        if(!NOW_FLYING) return false;
        
        getPage($$('#news-page .side')[0], '/'+LANGUAGE_CODE+'/news/', '', function(){
            var i = $$('#news-page .side li a').filter(function( item ){
                return item.get('href').replace(/^[^#]*#/, '') == p;
            });
            
            
            if(i && i[0]) 
                menuClick(i[0], 'news-page', '/'+LANGUAGE_CODE+'/news');
            else
                if(p){
                    listClick(p, 'news-page', '/'+LANGUAGE_CODE+'/news');
                    var setInitList = function(){
                        if($('news-rubric-id'))
                            setCurrent('news-page', $('news-rubric-id').value );
                        else
                            this.delay(400);
                    }
                    setInitList.delay(1000, setInitList);
                    
                } else
                    menuClick($$('#news-page .side li a')[0], 'news-page', '/'+LANGUAGE_CODE+'/news');
        });
    },
    
    'confectionery': function( p ){
        getPage('confectionery-page', '/static/confectionery-'+LANGUAGE_CODE+'/', '');
    },
    
    'card': function( p ){
        getPage('card-page', '/static/card-'+LANGUAGE_CODE+'/', '');
    }      
}


/////
// Функция смены текущего раздела
var changeScreen = function( position, params, ref ){

    $('preloader').fade('in');
    var name = position || 'main';
    var pos = SITEMAP[ name ];
    
    NOW_FLYING = (SITEMAP[name] != SITEMAP[CURRENT_PAGE]);

    if(SITECONTROLLER[ name ])
       SITECONTROLLER[ name ]( params ); 

    if(NOW_FLYING){
        
        new Chain().chain(
            function(){
                var that = this;
                preloadBackImages(SITEIMAGES[ name ], function(){
                    that.callChain();
                });
            },
            function(){
                if(name == 'main'){
                    $('logo').setStyle('cursor', 'default');
                    $('plan').fade('in');
                }
                else{
                    $('logo').setStyle('cursor', 'pointer');
                    $('plan').fade('out');
                }
                
                $('graphic-all').morph({
                    'marginLeft': -(pos[0]-1)*2010-1000,
                    'marginTop': -(pos[1]-1)*1230-1000
                });
                
                $('texts-all').morph({
                    'marginLeft': -(pos[0]-1)*2010-1000,
                    'marginTop': -(pos[1]-1)*1230-1000
                });
                
                CURRENT_PAGE = name;
                $('preloader').fade('out');
            }
        ).callChain();
        
    } else { $('preloader').fade('out'); }

    if(!ref)
        document.location.href = '#' + position  + (params || '');
        
    NOW_FLYING = false;

}


var getPage = function(element, address, params, success){
    
    var element = $( element );
    if(!element) return;
    
    element.fade('out');
    
    (function(){
        new Request.HTML({
            'url': address + (params || ''),
            'method': 'get',
            'onFailure': function(){
                element.fade('in');
            },
            'onSuccess': function( responseTree, responseElements, responseHTML, responseJavaScript ){
                
                element.set('html', responseHTML).fade('in');
                element.getElements('.scroll-content').each( makeScrollable );
                $exec(responseJavaScript);
                if(success) success();
                
                Mediabox.scanElement( element );
            }
        }).send();
    }).delay(400);
    
}


var menuClick = function( that, into, uri, ref ){

    var li = that.getParent('li');
    if(li.hasClass('active')) return false;
    var href = that.get('href').replace(/^[^#]*#/, '');

    that.getChildren('img').fireEvent('click');
    if(ref)
        document.location.href = '#'+CURRENT_PAGE+href+'/';

    getPage( $(into).getChildren('.content')[0], uri+href+'/', '', function(){

        that.getParent('ul').getChildren('.active').each(function( item ){
            item.removeClass('active');
        });
        that.getParent('ul').getElements('a.current').each(function( item ){
            item.removeClass('current');
        });        
        
        li.addClass('active');
    
    } );
    return false;
    
}


var listClick = function( that, into, uri, ref ){

    var href = ($type(that) != 'string')? that.getAttribute('href'): that;
    href = href.replace(/^[^#]*#/, '');

    if(ref)
        document.location.href = '#'+CURRENT_PAGE+href+'/';
    
    $(into).getElements('li.active').each(function( item ){
        item.removeClass('active');
    });

    getPage( $(into).getChildren('.content')[0], uri + href + '/', '');
    return false;
    
}


var newsBack = function( id ){
    var i = $$('#news-page .side li a[href$=/'+id+']');
    if(i && i[0])
        menuClick(i[0], 'news-page', '/'+LANGUAGE_CODE+'/news');

    return true;
}


var setCurrent = function(into, id){
    var i = $$('#' + into + ' .side li a[href$=/'+id+']');
    if(i && i[0])
        i[0].addClass('current');
    return false;
}


var link = function( id ){
    var page = id.match(/#\/?((?:\w|-)+)((\/\w+)*)\/?$/);
    if(page && page[1] && SITEMAP[page[1]])
        changeScreen( page[1], page[2], false );
    return false;
}




var addRightMenu = function(id, normal, hover, bold){
    
    if(!$(id)) return false;
    
    RIGHT_MENUS[id] = {
        'normal': normal,
        'hover': hover,
        'bold': bold
    };
    
    $(id).addEvents({
        'mouseover': rightMenuMouseOver,
        'mouseout': rightMenuMouseOut,
        'click': rightMenuMouseClick
    });
}

var rightMenuMouseOver = function(){
    if(!this.hasClass('active'))
        this.set('src', RIGHT_MENUS[this.id].hover[0]).set('width', RIGHT_MENUS[this.id].hover[1]);
}

var rightMenuMouseOut = function(){
    if(!this.hasClass('active'))
        this.set('src', RIGHT_MENUS[this.id].normal[0]).set('width', RIGHT_MENUS[this.id].normal[1]);
}

var rightMenuMouseClick = function(){
    $(this).getParent('ul').getElements('img.active').removeClass('active').each(function( item ){
        item.set('src', RIGHT_MENUS[item.id].normal[0]).set('width', RIGHT_MENUS[item.id].normal[1]);
    });
    this.addClass('active').set('src', RIGHT_MENUS[this.id].bold[0]).set('width', RIGHT_MENUS[this.id].bold[1]);
}
