var years = 4;
var seasons = 14;
var seasonHeight = 300;

var logoHeight = 114;
var logoWidth = 313;
var logoMinHeight = 43;

var ie = false;

$(document).ready(function() {
    if ($.browser.msie) {
        ie = true;
        // IE6 не поддерживается.
        if($.browser.version=="6.0") {
            $('body').empty();
            $('body').append($('<div class="ie6" style="line-height: ' + (tools.getVisibleHeight() - 20) + 'px;">Извините, но у вас устаревший браузер.</span>'));
            $('body').append($('<div id="footer" class="">' +
                '<span class="copyright">Copyright 2006 &mdash; 2010 Nile Studio. All rights reserved.</span>' +
                '<span class="address">125009 Москва, Столешников пер., д.6, стр.1</span>' +
                '<span class="phone">(+7 495) 726-36-81, (+7 495) 692-47-31</span>' +
                '<span class="mail"><a href="mailto:studio@nile.ru">studio@nile.ru</a></span>' +
                '</div>'));
            return false;
        }
    }
    main.init();
});

 var tools = {
    // Расчет общей высоты страницы с учетом прокрутки
    getPageHeight: function() {
        return (document.body.scrollHeight > document.body.offsetHeight) ?
            document.body.scrollHeight : document.body.offsetHeight;
    },

    // Расчет позиции полосы прокрутки
    getBodyScrollTop: function() {
        return self.pageYOffset ||
            (document.documentElement && document.documentElement.scrollTop) ||
            (document.body && document.body.scrollTop);
    },

    // Получить высоту видимой области экрана
    getVisibleHeight: function() {
        var height;
        if (typeof window.innerHeight != 'undefined') {
            height = window.innerHeight;
        }  else if (typeof document.documentElement != 'undefined'
                    && typeof document.documentElement.clientWidth != 'undefined'
                    && document.documentElement.clientWidth != 0) {
            height = document.documentElement.clientHeight;
        }
        return height;
    },

    // Получить именованный список сезонов
    getCurrentSeason: function() {
        var date = new Date(2010, 11);
        var year = date.getFullYear(); // Текущий год
        var month = date.getMonth(); // Текущий месяц

        seasonsArr = ['winter', 'winter', 'spring', 'spring', 'spring',
                      'summer', 'summer', 'summer', 'fall', 'fall', 'fall', 'winter'];
        // Определяем сезон старта
        var season = seasonsArr[month];

        return [year, month, season];
    },

    getClientWidth: function () {
        return document.compatMode=='CSS1Compat' &&
        !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
    },

    mousePosition: function(e) {
        var x = 0, y = 0;
        if (!e) e = window.event;
        if (e.pageX || e.pageY) {
            x = e.pageX;
            y = e.pageY;
        }
        else if (e.clientX || e.clientY) {
            x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
            y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
        }
        return {"x":x, "y":y};
    },

    getElementPosition: function(elemId) {
        var elem = document.getElementById(elemId);
        var w = elem.offsetWidth;
        var h = elem.offsetHeight;
        var l = 0;
        var t = 0;
        while (elem) {
            l += elem.offsetLeft;
            t += elem.offsetTop;
            elem = elem.offsetParent;
        }
        return {"left":l, "top":t, "width": w, "height":h};
    }

};

var main = {
    init: function() {
        gallery.init();
        // Проверяем наличие элементов главной страницы
        if ($('#timeline').length > 0) {
            timeline.init();
            works.init();
            works.redraw(0);
            twitter.init();
        }

        if ($('body.city').length > 0) {
            city.init();
        }

        if ($('#tele2').length > 0) {
            tele.init();
        }

        if ($('body.hobbyhorse').length > 0) {
            hobbyhorse.init();
        }

        sBox.init();
        var pageHeight = tools.getPageHeight();
        var clientHeight = tools.getVisibleHeight();
        var scrollOnePercent = Math.ceil((pageHeight - clientHeight) / 100);  // Пикселей в одном проценте высоты
        var $background = $('#background');
        if ($.browser.msie && parseInt($.browser.version) <=6) {
            return;
        }

        $('#options a').click(function(e) {
            $(this).blur();
        });

        window.onscroll = function(event) {
            var currentScrollPosition = tools.getBodyScrollTop();
            // Сначала надо почтитать на сколько % прокрутили страницу
            var scrollPercent = Math.ceil(currentScrollPosition / scrollOnePercent);
            var bgId = Math.ceil(scrollPercent / 4);
            if (bgId > 0) {
                $background.attr('style', 'background:url(/img/bgs/' + bgId + '.png) repeat;');
            } else {
                $background.css('background', 'url(/img/bgs/1.png) repeat;');
            }

            if ($('#timeline').length > 0) {
                main.logoResize(scrollPercent);
                timeline.redraw(scrollPercent);
                works.redraw(scrollPercent);
            } else if ($('#swist').length > 0) {
                swist.move(currentScrollPosition, event);
            }

            if ($('#tele2').length > 0) {
                tele.backgroundMove();
            }

            if ($('body.volgadream').length > 0) {
                volgadream.move(currentScrollPosition);
            }
        }

        document.onmousemove = function(e) {
            if ($('body.hobbyhorse').length > 0) {
                hobbyhorse.rotate(e);
            }
        }
        
        if ($('body.cz').length > 0) {
            var min_height = 900; // Минимальная высота контента этой страницы
            var contentHeight = (tools.getVisibleHeight() > min_height) ? tools.getVisibleHeight() : min_height;
            $('body.cz').css('height', contentHeight + 'px');
            $(window).resize(function() {
                var cz_pageHeight = tools.getVisibleHeight();
                if (cz_pageHeight > min_height) {
                    $('body.cz').css('height', cz_pageHeight + 'px');
                } else {
                    $('body.cz').css('height', min_height + 'px');
                }
            });
        }
    },

    logoResize: function(scrollPercent) {
        var $logo = $('#logo img');
        var scaleFactor = logoWidth / logoHeight;
        var logoOnePercentHeight = (logoHeight - logoMinHeight) / 100;
        var newHeight = logoHeight - logoOnePercentHeight * scrollPercent;
        $logo.css('height', newHeight);
        $logo.css('width', newHeight * scaleFactor);

        // Теперь надо поднять немного таймлайн
        $('#timeline').css('top', newHeight + 35 + 'px');
    }
};

var timeline = {
    minHeight: 0,
    seasonsCount: 0,

    init: function() {
        var currentSeason = tools.getCurrentSeason();
        var $timeline = $('#timeline');
        var seasonsCount = 0;
        for (var i = 0; i < years; i++) {
            if (i === 0) {
                this.seasonsCount += timeline.printSeasons(currentSeason[0], currentSeason[2]);
            } else {
                this.seasonsCount += timeline.printSeasons((currentSeason[0] - i));
            }
        }
        $('body').height(this.seasonsCount* seasonHeight);
        $('#background').height(this.seasonsCount * seasonHeight);
        $('#blackBack').height(this.seasonsCount * seasonHeight);
    },

    printSeasons: function(year, initSeason) {
        var counter = 0;
        var seasonsArr = ['winter', 'fall', 'summer', 'spring'];
        var seasonsArrRu = ['зима', 'осень', 'лето', 'весна'];
        switch(initSeason) {
            case 'winter':
                var index = 0;
                break;
            case 'fall':
                var index = 1;
                break;
            case 'summer':
                var index = 2;
                break;
            case 'spring':
                var index = 3;
                break;
            default:
                var index = 0;
                break;
        }
        for (var i = index; i < seasonsArr.length; i++) {
            counter++;
            $('#timeline').append('<div class="season" id="' + seasonsArr[i] +'_' + year + '"><span>' + year + '<br>' + seasonsArrRu[i] + '</span></div>');
        }
        return counter;
    },

    redraw: function() {
        var $season = $('div.season');
        var seasonMinHeight = Math.ceil(
            (tools.getVisibleHeight() - (parseInt($('#logo>img').css('height')) + 20))
            / (this.seasonsCount + 1)
        );
        var scrollOnePercent = Math.ceil(tools.getPageHeight() / 100);
        var scrollPercent = tools.getBodyScrollTop() / scrollOnePercent;
        var heightOnePercent = Math.ceil((seasonHeight - seasonMinHeight) / 100);
        var newHeight = seasonHeight - scrollPercent * heightOnePercent;
        $season.each(function(i, item) {
            $(this).css('height', newHeight);
        });
    }
};

var works = {
    init: function() {
        if (typeof data != 'undefined') {
            for (var i = 0; i < data.works.length; i++) {
                var work = data.works[i];
                $workLink = $('<a href="' + work.link + '" class="link' + work.id + '"><img src="/img/blank.gif" width="' + work.width + '" height="' + work.height + '"></a>');
                $work = $('<div class="work" id="work' + work.id + '"></div>');
                var $workImage = $('<img src="' + work.image + '" alt="' + work.title + '">');
                $work.css('position', 'absolute');
                $work.css('left', work.left + '%');
                $work.css('top', work.top + '%');
                $work.css('width', work.width + 'px');
                $work.css('height', work.height + 'px');
                $text = $('<span class="description"></span>').html(work.text);
                $text.css('left', work.textPosLeft);
                $text.css('top', work.textPosTop);
                if (typeof work.textWidth !== 'undefined' && work.textWidth > 0) {
                    $text.css('width', work.textWidth + 'px');
                }

                $work.append($workImage).append($text);
                $('#timeline').append($workLink);
                $('#' + work.season).append($work);

                // Накладываем сверху ссылку
                var workPosition = $work.position();
                var workImagePosition = $workImage.position();
                var seasonPosition = $('#' + work.season).position();
                workPosition.top += seasonPosition.top;
                var imagePositionLeft = 0;
                if ($workImage.css('left') != 'auto') {
                    imagePositionLeft = parseInt($workImage.css('left'));
                }
                var imagePositionTop = 0;
                if ($workImage.css('top') != 'auto') {
                    imagePositionTop = parseInt($workImage.css('top'));
                }
                var positionTop = Math.round(workPosition.top + imagePositionTop);
                var positionLeft = Math.round(workPosition.left + imagePositionLeft);
                $workLink.css('left', Math.round(positionLeft));
                $workLink.css('top', Math.round(positionTop));
                $workLink.css("height", work.height + "px");
                $workLink.css("width", work.width + "px");
            }
        }
    },

    redraw: function(scrollPercent) {
        var works = data.works;
        for (var i = 0; i < works.length; i++) {
            var work = works[i];
            var $work = $('#work' + work.id);
            var $workImage = $work.children('img');
            // Ресайзим кортинку
            if (work.height !== work.minHeight) {
                var scaleFactor = work.width / work.height;
                var imageOnePercentHeight = (work.height - work.minHeight) / 100;
                var newHeight = Math.round(work.height - imageOnePercentHeight * scrollPercent);
                var newWidth  = Math.round(newHeight * scaleFactor);
                imageCurrentHeight = parseInt($workImage.css('height'));
                imageCurrentWidth = parseInt($workImage.css('width'));
                $workImage.css('height', newHeight);
                $workImage.css({'width':newWidth, 'left':Math.abs(work.width - newWidth) / 2 + 'px'});

                // Считаем на сколько % уменьшилось изображение
                heightPercent = newHeight * 100 / work.height;
                widthPercent = newWidth * 100 / work.width;

                // Позиционируем текст
                var $workText = $work.children('span');
                $workText.css('top', Math.round(work.textPosTop / 100 * heightPercent));
                if (work.textPosLeft >= 0) {
                    $workText.css('left', Math.round(work.textPosLeft / 100 * widthPercent + Math.abs(work.width - newWidth) / 2));
                } else {
                    $workText.css('left', Math.round(work.textPosLeft / 100 * widthPercent));
                }

                // Проверяем необходимость ресайза блока с текстом
                if (typeof work.textMinWidth !== 'undefined' && work.textMinWidth > 0 && work.textMinWidth != work.textWidth) {
                    var textWidth = 0;
                    // Если не задана начальная ширина - принимаем ее равной ширине картинки
                    if (typeof work.textWidth !== 'undefined' && work.textWidth > 0) {
                        textWidth = parseInt(work.textWidth);
                    } else {
                        textWidth = work.width;
                    }
                    textOnePercentWidth = ((textWidth - work.textMinWidth) / 100);
                    $workText.css('width', Math.round((textWidth - textOnePercentWidth * scrollPercent)));
                }
            }

            // Накладываем сверху ссылку
            var $workLink = $('a.link' + work.id);
            var workPosition = $work.position();
            var workImagePosition = $work.children('img').position();
            var seasonPosition = $work.parent('div.season').position();
            workPosition.top += seasonPosition.top;
            var imagePositionLeft = 0;
            if ($workImage.css('left') != 'auto') {
                imagePositionLeft = parseInt($workImage.css('left'));
            }
            var imagePositionTop = 0;
            if ($workImage.css('top') != 'auto') {
                imagePositionTop = parseInt($workImage.css('top'));
            }
            var positionTop = Math.round(workPosition.top + imagePositionTop);
            var positionLeft = Math.round(workPosition.left + imagePositionLeft);
            $workLink.css({'left' : Math.round(positionLeft) + 'px', 'top' : Math.round(positionTop) + 'px'});
            $workLink.height($workImage.height());
            $workLink.width($workImage.width());
        }
    }
};

var sBox = {
    init: function() {
        $('#selectbox  span.selected').click(function(event) {
            if ($(this).hasClass('ul')) { return false; }
            $('#options').toggle();
            $("#selectbox").toggleClass('active');
            event.preventDefault();
        });

        $('body').click(function(event) {
            if (event.target.tagName !== 'a' && event.target.className !== 'selected') {
                $('#options').hide();
                $("#selectbox").removeClass('active');
            }
        });
    },

    hide: function(event) {

    }
};

var swist = {
    move: function(scrollPosition, event) {
        var pageHeight = parseInt($('#swistToScroll').css('height'));
        var pageClientHeight = tools.getVisibleHeight();
        var pageWidth = tools.getClientWidth();
        var scrollPercent = Math.round((scrollPosition) / ((pageHeight - pageClientHeight) / 100));
        var backgroundPosition = Math.round(scrollPercent * ((pageHeight - pageWidth) / 100));

        $('#swist').css('background-position', '-' + backgroundPosition + 'px 0px');
    }
};

var city = {
    init: function() {
        $city = $('#content');
        $navigate = $('div.navigate');
        $links = $navigate.children('a');
        $links.each(function(i, item) {
            $(this).click(function(event) {
                if ($(event.target).hasClass('selected')) {
                    return false;
                } else {
                    $('div.navigate a.selected').removeClass('selected');
                    var className = $(event.target).attr('class');
                    var $toHide = $city.children('div:visible');
                    var $toShow = $('#' + className);
                    $('body').removeClass($toHide.attr('id')).addClass($toShow.attr('id'));
                    if (ie) {
                        var html = $toHide.html();
                        $toHide.empty();
                        $toHide.hide();
                        $toHide.append(html);
                        $toShow.show();
                    } else {
                        $toHide.css('display', 'none');
                        $toShow.fadeIn(300);
                    }
                    $(event.target).addClass('selected');
                    return true;
                }
            });
        });
    }
}

var gallery = {
    init: function() {
        $gallery = $('div.gallery');
        if (typeof $gallery !== 'undefined' && $gallery.length > 0) {
            $gallery.each(function(i, elem) {
                var imagesContainer = $(this).children('div.images');
                var link = $(this).children('div.controls').children('a');
                var images = imagesContainer.children('img');
                var $progress = $(this).children('div.controls').children('span.progress');
                var $description = $(this).children('div.controls').children('span.description');
                var firstImage = imagesContainer.children('img:first');
                $progress.text('1/' + images.length);
                $description.text($(firstImage).attr('alt'));
                $(firstImage).fadeIn(300);
                imagesContainer.css({width : $(firstImage).width(), height : $(firstImage).height()});
                $(link).click(function(event){
                    $(event.target).blur();
                    if ($(event.target).attr('class') == 'left') {
                        for (i = 0; i < images.length; i++) {
                            if ($(images[i]).css('display') != 'none') {
                                if (i !== 0 ) {
                                    $(images[i]).hide();
                                    $(images[i - 1]).fadeIn(100);
                                    imagesContainer.animate({width : $(images[i - 1]).width(), height : $(images[i - 1]).height()});
                                    $description.text($(images[i - 1]).attr('alt'));
                                    $progress.text(i + '/' + images.length);
                                } else {
                                    $(images[i]).hide();
                                    $(images[images.length - 1]).fadeIn(300);
                                    imagesContainer.animate({width : $(images[images.length - 1]).width(), height : $(images[images.length - 1]).height()});
                                    $description.text($(images[images.length - 1]).attr('alt'));
                                    $progress.text(images.length  + '/' + images.length);
                                }
                                break;
                            }
                        }
                    } else {
                        for (i = 0; i < images.length; i++) {
                            if ($(images[i]).css('display') != 'none') {
                                if (i != (images.length - 1)) {
                                    $(images[i]).hide();
                                    $(images[i + 1]).fadeIn(300);
                                    imagesContainer.animate({width : $(images[i + 1]).width(), height : $(images[i + 1]).height()});
                                    $description.text($(images[i + 1]).attr('alt'));
                                    $progress.text((i + 2) + '/' + images.length);
                                } else {
                                    $(images[i]).hide();
                                    $(images[0]).fadeIn(300);
                                    imagesContainer.animate({width : $(images[0]).width(), height : $(images[0]).height()});
                                    $description.text($(images[0]).attr('alt'));
                                    $progress.text('1/' + images.length);
                                }
                                break;
                            }
                        }
                    }
                });

                images.click(function() {
                    for (i = 0; i < images.length; i++) {
                        if ($(images[i]).css('display') != 'none') {
                            if (i != (images.length - 1)) {
                                imagesContainer.animate({width : $(images[i + 1]).width(), height : $(images[i + 1]).height()}, 300);
                                $(images[i]).fadeOut(300);
                                $(images[i + 1]).fadeIn(300);
                                $description.text($(images[i + 1]).attr('alt'));
                                $progress.text((i + 2) + '/' + images.length);
                            } else {
                                imagesContainer.animate({width : $(images[0]).width(), height : $(images[0]).height()}, 300);
                                $(images[i]).fadeOut(300);
                                $(images[0]).fadeIn(300);
                                $description.text($(images[0]).attr('alt'));
                                $progress.text('1/' + images.length);
                            }

                            break;
                        }
                    }
                })

            });
        }
    }
}

var tele = {
    init: function() {
        // Горизонтальная прокрутка колесом мыши
        $('body').mousewheel(function(event, delta) {
            delta = delta * -1; // Инвертируем колесо мыши
            var currentScrollPosition = tele.getBodyScrollLeft();
            var newScrollPosition = currentScrollPosition + (delta * 50);
            $('html, body').animate({scrollLeft: newScrollPosition}, 0);
        });
    },

    backgroundMove: function() {
        $('#tele2 div.bm').each(function() {
            var factor = $(this).attr('class').substr(10);
            var currentScrollPosition = tools.getBodyScrollTop();
            $(this).css('background-position', Math.round(currentScrollPosition * (factor / 10) * -1 ) + 'px 0px');
        });
    },

    getBodyScrollLeft: function() {
        return self.pageYOffset ||
            (document.documentElement && document.documentElement.scrollLeft) ||
            (document.body && document.body.scrollLeft);
    }
}

var twitter = {
    messages: null,
    current: 0,
    init: function(){
        $('#twitter').append(
                $(document.createElement('span'))).append(
                $(document.createElement('p')));
        $.getJSON('/get_twitter.php',{},function(json){
            twitter.messages=json.twitter;
            twitter.swap();
        });
    },

    swap: function(){
        twitter.current=twitter.current % twitter.messages.length;
        var message=twitter.messages[twitter.current];
        var $twitter_p=$('#twitter');
        var msg_html=message.msg;
        if(msg_html.search(/http:\/\//)>=0){
            msg_html=msg_html.replace(/(http:\/\/[^"\s]+)/g,'<a href="$1" target="_blank">$1</a>');
        }
        $twitter_p.children('p').html(msg_html);
        $twitter_p.children('span').text(message.at);
        twitter.current++;
        setTimeout('twitter.swap()',15*1000);
    }
}

var volgadream = {
    move: function(scrollPosition) {
        var pageHeight = parseInt($('body').css('height'));
        var pageClientHeight = tools.getVisibleHeight();
        var pageWidth = tools.getClientWidth();
        var scrollPercent = Math.round((scrollPosition) / ((pageHeight - pageClientHeight) / 100));
        var backgroundPosition = (Math.round(scrollPercent * ((pageHeight - pageWidth) / 100)) - 1300);
        $('#ship').css('background-position', backgroundPosition+ 'px 0px');

        $('body.volgadream div.bm').each(function() {
            var factor = $(this).attr('class').substr(10);
            var currentScrollPosition = tools.getBodyScrollTop();
            $(this).css('background-position', Math.round(currentScrollPosition * (factor / 10) * -1 ) + 'px 0px');
        });
    }
}

var hobbyhorse = {
    prevMousePosition: 0,

    init: function() {
        var $images = $('#vis img');
        var firstImage = $images.get(0);
        $(firstImage).show();
    },

    rotate: function(e) {
        var $images = $('#vis img');
        var mousePosition = tools.mousePosition(e);
        var visitsPosition = tools.getElementPosition('vis');
        if (mousePosition.y > visitsPosition.top &&
            mousePosition.y < (visitsPosition.top + visitsPosition.height)) {
            var deltaTop = mousePosition.y - visitsPosition.top;
            var imgNumber = Math.ceil(deltaTop / 50);
            if (imgNumber > 10) {
                imgNumber = 10;
            }
            $image = $('#vis img:visible');
            $image.attr('src', '/img/hobbyhorse/' + imgNumber + '.png');
        }
    }
}

