(function() {

    //Segments
    var curLang = 'rus', curTab = 'projects', curProject;

    //Globals
    var newsObject = {}, isInited;

    function prepearText(text) {
        return text.replace(/\n/g, '<br/>').replace(/\s(\s)/g, '&nbsp;');        
    }
        
    function setUrl(lang, tab, project) {
        if ( typeof project == 'undefined' ) project = '';
        var base = (window.location.hash != '') ? window.location.href.split(window.location.hash)[0] : window.location.href;
        var newUrl = base + '#/' + lang + '/' + tab + '/' + project;
        $.history.load('/' + lang + '/' + tab + '/' + project);        
        window.location = newUrl;
        document.title = $('#initial_title').text() + " - " + $('#menu').find('li.ui-tabs-selected').find('span.' + lang).text();
        if (project != '') document.title = document.title + " - " + newsObject[project][lang + '_title'];
        if (typeof pageTracker != 'undefined') pageTracker._trackPageview(newUrl);
    }

    function parseUrl() {
        var url = window.location.href;
        var parts = url.split('#');
        if ( typeof parts[1] != 'undefined' ) {
            var segments = parts[1].split('/');
            if ( typeof segments[1] != 'undefined' ) curLang = segments[1];
            if ( typeof segments[2] != 'undefined' ) curTab = segments[2];
            if ( typeof segments[3] != 'undefined' ) curProject = segments[3];
        }
    };
    
    var onProjectRollupStart = function( panel ) {
                                
        if ( panel.parents('li.projects_section.maximized').length ) {
           
            var full_entry_meta = panel.find('div.full_entry_meta');
            if ( !full_entry_meta.hasClass('jspScrollable') ) full_entry_meta.jScrollPane();
                                       
            var full_entry_photos_accordion = panel.find('div.full_entry_photos_accordion');
            if ( !full_entry_photos_accordion.hasClass('ui-accordion') ) 
            {
                
                var diff = $.browser.mozilla ? 2 : 4;
                
                full_entry_photos_accordion.show().accordion({ 
                    event: 'mouseover',
                    fillSpace: 'true'
                }).bind( "accordionchangestart", function(event, ui) {
                    var iframe = ui.oldContent.find('iframe');
                    if ($.browser.msie && $.browser.version < '9') iframe.hide();
                }).bind( "accordioncreate", function(event, ui) {
                    console.log('accordioncreate'); console.log(ui);
                }).bind( "accordionchange", function(event, ui) {
                    var iframe = ui.newContent.find('iframe');
                    iframe.height(ui.newContent.height() - diff);
                    if ($.browser.msie && $.browser.version < '9') iframe.show();
                    panel.find('span.photo_num').text(ui.options.active + 1);
                });
                
                var newContent = full_entry_photos_accordion.find('.ui-accordion-content:first');
                newContent.find('iframe').height(newContent.height() - diff).show();
            }
           
        }
        
    };
    
    var onProjectRollupFinish = function(panel) {
        
        var project_id = panel.parent().attr('project_id');
        var sectionId = newsObject[project_id].sectionId;
        if ( $(sectionId).hasClass('maximized') ) {
            curProject = project_id;
            setUrl(curLang, curTab, curProject);
        }
            
    };
    
    var onNewsEntrySmallClick = function(event) {
                            
        var a = $(this);
        curProject = a.attr('project_id');
        var section = $(newsObject[curProject].sectionId);
        var sectionId = section.attr('id');
        if ( !section.hasClass('minimized') ) return false;
                
        var categoryTitle = section.find('> div.category_row_title');
        var sectionPrev = section.parent().find('> li.maximized')
        //var contentContainer = a.parents('div.contentContainer');
        var contentContainer = a.parent().parent().parent();
        var listItem = contentContainer.parent();

        if ( sectionPrev.length )
        {
            var contentContainerPrev = sectionPrev.find('> ul').find('> li').find('> div.handleSelected').next();
            var newsEntryFull = contentContainerPrev.find('div.news_entry_full');
            var categoryTitlePrev = sectionPrev.find('div.category_row_title').find('> div.' + curLang).css('display', 'none');
            
            newsEntryFull.animate({opacity: 0}, {
                queue:false,
                duration: 800,
                easing: 'swing'
            });
            
            sectionPrev.animate({height: '55px'}, {
                queue:false,
                duration: 800,
                easing: 'swing',
                complete: function() {
                    sectionPrev.removeClass('maximized').addClass('minimized');
                    categoryTitlePrev.css('display', '');
                    contentContainerPrev.css('width', '750px');
                    newsEntryFull.css('opacity', '1');
                    sectionPrev.find('> ul').find('> li').find('> div.handle').each(function(i, e) {
                        var el = $(e);
                        el.removeClass('handleOver');
                        el.unbind('click.accordion').bind('mouseover.accordion', {finalWidth: '750'}, onHandlerPress);
                    });
                }
            });
        }
                                
        var projects_content = $('#projects_content');
                                
        section.find('> ul').find('> li').find('> div.handle').each(function(i, e) {
            var el = $(e);
            el.unbind('mouseover.accordion').bind('click.accordion', {finalWidth: '980'}, onHandlerPress);
        });
        
        a.animate({opacity: 0}, {
            queue:false,
            duration: 800,
            easing: 'swing'
        });
        
        var marginTop = parseInt(projects_content.css('margin-top'));
        
        section.animate({height: '315px'}, {
            queue:false,
            duration: 800,
            easing: 'swing',
            step: function(now) {
                if (marginTop) projects_content.css('margin-top', -(now + 70) / 2 + 'px');
            },
            complete: function() {
            
                section.removeClass('minimized').addClass('maximized');
                contentContainer.css('width', '980px');
                
                a.css('opacity', '1');
        
                var full_entry_meta = contentContainer.find('div.full_entry_meta');
                if ( !full_entry_meta.hasClass('jspScrollable') ) full_entry_meta.jScrollPane();
                
                var marginTop = parseInt(projects_content.css('margin-top'));
                
                if (marginTop) {
                    //projects_content.css('margin-top', marginTop + 25 + 'px');
                    var top = projects_content.offset().top;
                    projects_content.css('top', top + 'px').css('marginTop', '0');
                }
                
                var full_entry_photos_accordion = contentContainer.find('div.full_entry_photos_accordion');
                if ( !full_entry_photos_accordion.hasClass('ui-accordion') )
                {
                    var diff = $.browser.mozilla ? 2 : 4;
                    
                    full_entry_photos_accordion.show().accordion({ 
                        event: 'mouseover',
                        fillSpace: 'true'
                    }).bind( "accordionchangestart", function(event, ui) {
                        var iframe = ui.newContent.find('iframe');
                        if ($.browser.msie && $.browser.version < '9') iframe.hide();
                    }).bind( "accordionchange", function(event, ui) {
                        var iframe = ui.newContent.find('iframe');
                        iframe.height(ui.newContent.height() - diff);
                        if ($.browser.msie && $.browser.version < '9') iframe.show();
                        contentContainer.find('span.photo_num').text(ui.options.active + 1);
                    });
                    
                    var newContent = full_entry_photos_accordion.find('.ui-accordion-content:first');
                    newContent.find('iframe').height(newContent.height() - diff).show();
                    
                }
                
            }
        });

        setUrl(curLang, curTab, curProject);
        
        return false;

    }

    parseUrl();
        
    $('body').addClass('lang_' + curLang);
    
    window.domCache = {
        presentations: $('#presentations'),
        conferences: $('#conferences'),
        concerts: $('#concerts')
    }

    $('#initial_title').text(document.title);

    var curYear = new Date().getFullYear();
    $('#copy').append(curYear);
    
    var curL = $('#' + curLang).get(0);
    var langIndex = $('#languagebar > li').index(curL);    
    $('#languagebar').show().hrzAccordion({
        eventTrigger:"mouseover", 
        openOnLoad: langIndex + 1, 
        cycle: false, 
        handlePosition: 'left', 
        fixedWidth: '90'
    });
    
    $('#languagebar').find('a').click(function() {
        var panel = $(this);        
        var newLang = panel.attr('href').split('#')[1];        
        if (newLang != curLang) {
            curLang = newLang;
            setUrl(curLang, curTab, curProject);
            $('body').removeClass('lang_rus lang_ukr lang_eng').addClass('lang_' + curLang);
        }
        return false;
    });
        
    
    var curT = $('#' + curTab).get(0);
    var tabIndex = $('#content > div').index(curT);
    $('#content').tabs({ 
        selected: tabIndex,
        select: function(event, ui) {
            var panel = $(ui.panel);
            if (panel.attr('id') == 'about' && !panel.find('div.static_content').hasClass('jspScrollable') && typeof isInited != 'undefined') {
                $('#about_overlay').show();
            }
        },
        show: function(event, ui) {
            
            var panel = $(ui.panel);
            
            if (panel.attr('id') == 'about' && !panel.find('div.static_content').hasClass('jspScrollable') && typeof isInited != 'undefined') {
                panel.find('div.static_content').jScrollPane();
                setTimeout(function() {
                    $('#about_overlay').hide();
                }, 800);
            }
            
            if (isInited) {
                if (panel.attr('id') != 'projects') curProject = undefined;
                curTab = panel.attr('id');
                setUrl(curLang, curTab, curProject);
            }
            
        },
        
        fx: { 
            opacity: 'toggle' 
        }
        
    }).show();
    
    ultraPromo = function() {
        
        $.ajax({
            async: true,
            url: 'update.xml?a=' + new Date().getTime(),
            dataType: 'xml',
            beforeSend: function() { $('#projects_preloader').show();  },
            error: function(msg) { $('#projects_preloader').hide();  },
            success: function(response) {
                
                response = $(response).find('promo');
                
                
                //Main init
                try {
                    
                    //Main projects tab
                    var eng = $('<div />').addClass('eng'), ukr = $('<div />').addClass('ukr'), rus = $('<div />').addClass('rus');
                    var meta_item_tpl = $('<div />').addClass('meta_item');
                    
                    var panelToOpen = Math.floor(Math.random()*3);
                    
                    response.find('> category').each(function(i, v) {
                        
                        v = $(v);
                        var divider, container, sectionId;
                        
                        switch (i) 
                        {
                            case 0: {
                                //purple
                                divider = '<img src="images/dividerpurple.png" />';
                                container = window.domCache.presentations;
                                sectionId = '#presentations';
                                break;
                            }
                            case 1: {
                                //green
                                divider = '<img src="images/dividergreen.png" />';
                                container = window.domCache.conferences;
                                sectionId = '#conferences';
                                break;
                            }
                            case 2: {
                                //blue
                                divider = '<img src="images/dividerblue.png" />';
                                container = window.domCache.concerts;
                                sectionId = '#concerts';
                                break;
                            }
                            default: {
                                divider = '<img src="images/dividerblue.png" />';
                                container = window.domCache.concerts;
                                sectionId = '#concerts';
                                break;
                            }
                        }
                        
                        //заголовок
                        var eng_title = eng.clone(), ukr_title = ukr.clone(), rus_title = rus.clone();
                        $titles = v.find('> title');

                        $titles.each(function(i, v) {
                            v = $(v);
                            eng_title.append(v.find('eng').text());
                            ukr_title.append(v.find('ukr').text());
                            rus_title.append(v.find('rus').text());
                            if (i != $titles.length - 1) {
                                eng_title.add(ukr_title).add(rus_title).append(divider);
                            }
                        });
                                                
                        $(sectionId + '_title').append(rus_title).append(ukr_title).append(eng_title);
                        
                        var accordion = $('<ul />').attr('id', container.attr('id') + '_gallery').addClass('category_accordion').appendTo(container);
                        
                        $news = v.find('> news');
                        
                        $news.each(function(i, v) {
                            var item = $(v);
                            var title = item.find('> title');
                            var specs = item.find('> spec');
                            var images = item.find('> image');
							var videos = item.find('> video');
                            var id = item.find('> id').text();
                            var top_photo = item.find('> thumb').text();
                            var eng_title = eng.clone(), ukr_title = ukr.clone(), rus_title = rus.clone();
                            var news_entry_small = $('<a class="news_entry_small" href="#"></a>');
                            var news_entry_full = $('<div class="news_entry_full"></div>');
                            var news_title = $('<div class="news_title"></div>').appendTo(news_entry_small);
                            var title_info = item.find('> info');
                            
                            var header_eng = title.find('eng').text();
                            var header_ukr = title.find('ukr').text();
                            var header_rus = title.find('rus').text();
                            
                            eng_title.append('<h3>' + title.find('eng').text() + '</h3>').append('<div class="news_title_info">' + title_info.find('eng').text() + '</div>').appendTo(news_title);
                            ukr_title.append('<h3>' + title.find('ukr').text() + '</h3>').append('<div class="news_title_info">' + title_info.find('ukr').text() + '</div>').appendTo(news_title);
                            rus_title.append('<h3>' + title.find('rus').text() + '</h3>').append('<div class="news_title_info">' + title_info.find('rus').text() + '</div>').appendTo(news_title);

                            news_entry_small.attr('id', 'projectId' + id).attr('project_id', id).css('background', '#090909 url(' + top_photo + ') right top no-repeat');
                            
                            //album
                            var full_entry_photos = $('<div class="full_entry_photos"></div>').appendTo(news_entry_full);
                            var full_entry_photos_accordion = $('<div class="full_entry_photos_accordion" style="display: none"></div>').appendTo(full_entry_photos);
                            var full_entry_photos_info = $('<div class="full_entry_photos_info"></div>')
                                .append('<div class="eng">Photo/Video - <span class="photo_num">1</span> of ' + (images.length + videos.length) + '</div>')
                                .append('<div class="ukr">Фотографiя/Вiдео - <span class="photo_num">1</span> з ' + (images.length + videos.length) + '</div>')
                                .append('<div class="rus">Фотография/Видео - <span class="photo_num">1</span> из ' + (images.length + videos.length) + '</div>')
                            .appendTo(full_entry_photos);

                            $.each(videos, function (i, video) {
                                $('<h3><a href="#"></a></h3>').appendTo(full_entry_photos_accordion);
                                var videoCode = $(video).text();
                                var tmpWrap = $('<div />').append(videoCode);
                                var tag = tmpWrap.find('iframe')
                                if ($.browser.msie && $.browser.version < '9') tag.css('display', 'none');
                                $('<div></div>').append(tag).appendTo(full_entry_photos_accordion);
                            });
                            
                            $.each(images, function (i, image) {
                                $('<h3><a href="#"></a></h3>').appendTo(full_entry_photos_accordion);
                                $('<div></div>')
                                    .css('background', 'transparent url(' + $(image).text() + ') left top no-repeat')
                                .appendTo(full_entry_photos_accordion);
                            });
                            
                            //meta
                            var full_entry_content = $('<div class="full_entry_content"></div>').appendTo(news_entry_full);
                            var full_entry_meta = $('<div class="full_entry_meta"></div>').appendTo(full_entry_content);
                            
                            $.each(specs, function (i, spec) {
                                spec = $(spec);
                                var meta_item = meta_item_tpl.clone();
                                var title = spec.find('> title');
                                var full_entry_meta_content = spec.find('text');
                                eng.clone().append('<h6>' + title.find('eng').text() + '</h6><div class="full_entry_meta_content">' + prepearText(full_entry_meta_content.find('eng').text()) + '</div>').appendTo(meta_item);
                                ukr.clone().append('<h6>' + title.find('ukr').text() + '</h6><div class="full_entry_meta_content">' + prepearText(full_entry_meta_content.find('ukr').text()) + '</div>').appendTo(meta_item);
                                rus.clone().append('<h6>' + title.find('rus').text() + '</h6><div class="full_entry_meta_content">' + prepearText(full_entry_meta_content.find('rus').text()) + '</div>').appendTo(meta_item);
                                if ( String( full_entry_meta_content.find('rus').text() ).length > 100 || String( title.find('rus').text() ).length > 25 ) meta_item.css('clear', 'both');
                                if ( i == specs.length - 1 ) meta_item.css('margin-bottom', '0');
                                meta_item.appendTo(full_entry_meta);
                            });
                            
                            full_entry_content.append(news_title.clone()).append(full_entry_meta);
                            
                            $('<li />').attr('project_id', id).append(news_entry_small).append(news_entry_full).appendTo(accordion);
                            
                            newsObject[id] = {content: news_title.html(), rus_title: header_rus, ukr_title: header_ukr, eng_title: header_eng, sectionId: sectionId};
                            
                        });
                        
                        if ( typeof curProject != 'undefined' && curProject != '' )
                        {                        
                            var firstSlide = '';
                        }
                        else
                        {
                            var firstSlide = ( i == panelToOpen ) ? Math.floor(Math.random()*($news.length - 1)) + 1 : '';
                        }
                                            
                        accordion.hrzAccordion({
                            eventTrigger:"mouseover", 
                            fixedWidth: '750', 
                            openOnLoad: firstSlide, 
                            handlePosition: 'left', 
                            openSpeed: 800,
                            closeSpeed: 800,
                            eventAction: onProjectRollupStart,
                            completeAction: onProjectRollupFinish
                        });
                        
                    });
                    
                    for (projectId in newsObject) $('#projectId' + projectId).click(onNewsEntrySmallClick);
                    
                    if ( typeof curProject != 'undefined' )
                    {                    
                        var listItem = $('#projectId' + curProject).parents('li.listItem');
                        var handle = listItem.find('> div.handle');
                        handle.mouseover();
                        setTimeout( function() {
                            handle.next().find('a.news_entry_small').click();
                        }, 600);
                    }
                    
                    //Clients tab
                    var clients = response.find('client');
                    var clientsContainer, counter = 0;
                    $.each(clients, function(i, client) {
                        if ( i % 4 == 0 ) {
                            clientsContainer = $('<li />').addClass('clietns_section').appendTo('#clients_content');                        
                        }                    
                        var bgColor = $(client).find('color').text() != '' ? $(client).find('color').text() : '#FFFFFF';
                        var thumb = $(client).find('thumb').text();
                        var logoContainer = $('<div />').addClass('logo_container').css('backgroundColor', bgColor)
                        .bind('click', function(e) {
                            e.stopImmediatePropagation();                            
                            var clientsAccordion = $(this).next();
                            var logo_containers = $(this).parent().find('div.logo_container');
                            logo_containers.animate({opacity: '0'},
                            {
                                queue: false,
                                easing: 'swing',
                                duration: 500,
                                complete: function() {                                
                                    clientsAccordion.show();
                                    logo_containers.hide();
                                }
                            });
                        }).appendTo(clientsContainer);
                        $('<span />').css('backgroundColor', bgColor).append( $('<img />').attr('src', thumb) ).append('&nbsp;').appendTo(logoContainer);
                        
                        var clients_accordion = $('<div />').addClass('clients_accordion').css('backgroundColor', bgColor)
                        .bind('mouseleave', function(e) {
                            e.stopImmediatePropagation();                        
                            $(this).hide();
                            var logo_containers = $(this).parent().find('div.logo_container');
                            logo_containers.show().animate({opacity: '1'}, {
                                queue: false,
                                easing: 'swing',
                                duration: 1000
                            });
                        }).appendTo(clientsContainer);
                        
                        
                        $('<div />').addClass('logo_client_rolled').append('<p></p>').append($('<img />').attr('src', thumb).attr('align', 'middle')).appendTo(clients_accordion);
                        counter++;
                        var client_items = $('<ul />').attr('id', 'client' + counter).addClass('client_accordion client_items container').appendTo(clients_accordion);
                        var ids = $(client).find('id');
                        $.each(ids, function(i, id) {
                            var id = $(id).text();
                            var content = $('<div />').addClass('news_title').css('color', bgColor).append(newsObject[id].content);
                            var itemLink = $('<a></a>').css('width', '500px').attr('href', '#' + id).addClass('itemLink').append(content);
                            var item = $('<li/>').addClass('listItem').append(itemLink).appendTo(client_items);
                            if ( ids.size() == 1 ) item.prepend('<div class="handle"></div>');
                        });

                        if ( ids.size() > 1 ) client_items.hrzAccordion({
                            eventTrigger:"mouseover", 
                            fixedWidth: '500', 
                            handlePosition: 'left', 
                            openSpeed: 800,
                            closeSpeed: 800,
                            openOnLoad: 1
                        });
                        
                        client_items.find('a').bind('click', function(e) {
                            var a = $(this);
                            curTab = 'projects';
                            curProject = a.attr('href').split('#')[1];
                            
                            $('#content').tabs('select', 1);
                            a.parents('.clients_accordion').mouseleave();                        
                            var listItem = $('#projectId' + curProject).parents('li.listItem');
                            var handle = listItem.find('> div.handle');                        
                            var projects_section = listItem.parents('li.projects_section');
                            if ( projects_section.hasClass('minimized') ){
                                handle.mouseover().click();
                                setTimeout( function() {
                                    handle.next().find('a.news_entry_small').click();
                                }, 600);
                            }
                            else {
                                handle.click();
                            }
                            
                            setUrl(curLang, curTab, curProject);
                            
                            return false;
                        });

                    });
                    
                    //About tab
                    var about = response.find('about');
                    var eng_about = eng.clone().append(prepearText(about.find('eng').text()));
                    var ukr_about = ukr.clone().append(prepearText(about.find('ukr').text()));
                    var rus_about = rus.clone().append(prepearText(about.find('rus').text()));
                    $('#about').find('.static_content').append(eng_about).append(ukr_about).append(rus_about);
                    if (curTab == 'about') {
                        $('#about').find('div.static_content').jScrollPane();
                    }
                    
                    //Contacts tab
                    var contacts = response.find('contacts');
                    var eng_contacts = eng.clone().append(prepearText(contacts.find('eng').text()));
                    var ukr_contacts = ukr.clone().append(prepearText(contacts.find('ukr').text()));
                    var rus_contacts = rus.clone().append(prepearText(contacts.find('rus').text()));
                    $('#contacts').find('div.static_content').append(eng_contacts).append(ukr_contacts).append(rus_contacts);

                } catch (e) {
                    
                    if (typeof console != 'undefined') console.log(e);
                    
                }
                
                isInited = true;
                
                $('#projects_preloader').hide();
                $('#about, #contacts').find('div.static_content_title').show();
                $('#projects_content').show();
                
            }
        });
        
    };

    (function($) {

        $(document).ready(function() {
            
            $.history.init(function(hash) {
                
                if ( !isInited ) 
                {   
                    ultraPromo();
                }
                else 
                {
                    var oldLang = curLang, oldTab = curTab, oldProject = curProject;
                    parseUrl();
                    if ( oldLang != curLang )
                    {
                        $('#languagebar').find('a[href*="' + curLang + '"]').parents('li.listItem').find('> div.handle').mouseover();
                        $('body').removeClass('lang_rus lang_ukr lang_eng').addClass('lang_' + curLang);
                    }
                    if ( oldTab != curTab )
                    {
                        var curT = $('#' + curTab).get(0);
                        var tabIndex = $('#content > div').index(curT);
                        $('#content').tabs('select', tabIndex);
                    }
                    if ( oldProject != curProject )
                    {
                        var listItem = $('#projectId' + curProject).parents('li.listItem');
                        var handle = listItem.find('> div.handle');
                        handle.mouseover().click();
                        setTimeout( function() {
                            handle.next().find('a.news_entry_small').click();
                        }, 600);
                    }
                }
                
            }, { unescape: "/" });
            
        });

    })(jQuery);

})();
