/**
 * aka void main()
 */
$(function() {

    Chiz.initAjax();
    Chiz.Gallery();
    Chiz.SideSlider.init();

    if (Chiz.interfaceName === 'home_page'){
        Chiz.SlideShow.init();
    }
    if (Chiz.interfaceName === 'advantage_cat'){
        Chiz.MyGalleryInit();
    }
});


/**
 * Глобальный неймспейс
 */
Chiz = new Object();

/** @type {Object} неймспейс проекта */
Chiz = function(undef) {
    return {
        undefined : undef
    }
}();

//----- Общие настройки---------------------------------------------------------

/** @type {String} url для ajax запроса */
Chiz.AJAX_URI = '/json/';

/** @type {Number} Значение прозрачности для оверлея */
Chiz.overlayOpacity = 0.6;

/** @type {string} Значение цвета для оверлея */
Chiz.overlayColor = "#333333";

/** @type {String} id сессии из командной строки */
Chiz.SESS_ID = '';
if (window.location.toString().match(/SESS_ID=(\d+)/))
    Chiz.SESS_ID = RegExp.$1;

//------------------------------------------------------------------------------

//----- Общие функции ----------------------------------------------------------

/**
 * Выполняет Ajax запрос с JSON-ответом
 * @param {Object} data Данные
 * @param {Function} handler Обработчик
 */
Chiz.getJSON = function(data, handler) {
    if (Chiz.SESS_ID)
        data['SESS_ID'] = Chiz.SESS_ID;
    $.post(Chiz.AJAX_URI, data, handler, 'json');
}

/**
 * Настройки для Ajax запросов
 */
Chiz.initAjax = function() {
    var $body = $(document.body);
    function waitingState(state) {
        if (state) {
            $body.addClass('waiting');
        } else {
            $body.removeClass('waiting');
        }
    }

    $(document)
        .ajaxStart(function() {
            waitingState(true);
        })
        .ajaxStop(function() {
            waitingState(false);
        })
        .ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
            alert('Произошла ошибка при загрузки данных. Попробуйте перезагрузить страницу.');
            waitingState(false);
        });
}

/**
 *  Слой - оверлей
 */
Chiz.Overlay = function(){
    var $overlay = null;

    function _show(){
        if (!$overlay){
              $overlay = $(document.createElement('div'))
                         .addClass('overlay')
                         .css({
                              opacity: Chiz.overlayOpacity
                         }).hide()
                         .appendTo(document.body);
        }
        $overlay.show();
        if (Browser.isIE6)
            $overlay.css({
                position : 'absolute',
                height : document.body.scrollHeight
            });
    }

    function _hide(){
        $overlay.hide();
    }

    return {
        show: function(){
            _show();
        },
        hide: function(){
            _hide();
        },
        onclick: function(handler){
            $overlay.unbind("click");
            $overlay.click(handler);
        }
    }
}();

//------------------------------------------------------------------------------

//----- Интерфейсные функции ---------------------------------------------------

/**
 * Обработчик дерева в каталоге продукции
 */
function treeWalker(obj){
   var li = obj.parentNode;
   while ((li) && (li.tagName != 'LI')) li = li.parentNode;
   li.className = (li.className == "act")?"":"act";
   return false;
}

/**
 * Показ галереи на сайте
 */

Chiz.Gallery = function(){
    $(".gallery a").fancybox({ overlayOpacity: Chiz.overlayOpacity,
                               overlayColor: Chiz.overlayColor,
                               titlePosition: "over"});
}

/**
 * Показ видео-ролика из шапки сайта
 */
Chiz.Video = function(params){
    var video = $("#video");
    if(video.length>0){
        var code = $(video).find(".hd");
        $(video).find(".v-show").fancybox({ autoScale: false,
                                            titleShow: false,
                                            overlayOpacity: Chiz.overlayOpacity,
                                            overlayColor: Chiz.overlayColor,
                                            width: 640,
                                            height: 350,
                                            href: params.href,
                                            type: 'swf',
                                            swf: params.fvars });
    }
}

/**
 *  Функция для показа слайдов на главной странице
 */
Chiz.SlideShow = function(){

    var $screen = null;     // Контейнер экранов, в котором все вертится
    var $screen_one = null; // Основной экран
    var $screen_two = null; // Дополнительный экран
    var $shield = null;     // Шильдик слева внизу

    var timer = null;       // таймер анимации смены картинки
    var timeout = null;     // таймаут сеанса картинки
    var preload = true;     // флаг загруженности картинки

    var dwPosFrom = 0;      // позиция смещения
    var dwPosTo = 0;        // позиция смещения
    var upPosFrom = 0;      // позиция смещения
    var upPosTo = 0;        // позиция смещения

    var i = 0;              // счетчик итераций
    var sidx = 0.2;         // начальный коэффициент скорости анимации
    var fidx = 0.3          // конечный коэффициент
    var idx = sidx;         // текущий коэффициент

    var timeOutTime = 5500; // время таймаута сеанса
    var duration = 50;      // продолжительность шага анимации

    var images = new Array();  // картинки для экранов

    /* Подготовка сладшоу */
    function prepare(){
        dwPosFrom = $screen.width();
        $screen_one = $(document.createElement("div"))
                        .addClass("screen")
                        .css({ width: dwPosFrom+"px",
                               height: $screen.height()+"px",
                               backgroundPosition: "0 0",
                               backgroundRepeat: "no-repeat",
                               zIndex: 11})
                        .appendTo($screen);
        $screen_two = $(document.createElement("div"))
                        .addClass("screen")
                        .css({ width: dwPosFrom+"px",
                               height: $screen.height()+"px",
                               backgroundRepeat: "no-repeat"})
                        .appendTo($screen);


        Chiz.getJSON({_do: "get_sliders" },function(data){
            images = data;
            if(images.length>0){
                var img = new Image;
                img.onload = function(){
                    set(images[0]);
                    if(images.length>1){
                        play();
                    }
                }
                img.src = images[0].src;
            }
            });
    }

    function set(image){
        $screen_one.css({backgroundImage: "url("+image.src+")",
                         backgroundPosition: "0 0"})
                    .addClass("w-cur");
        $screen_two.css({ backgroundPosition: Math.round($screen.width())+"px 0"});

        if(!$shield){
            $shield = $(document.createElement("div"))
                        .addClass("shield")
                        .appendTo($screen);
        }
        if(image.link!=""){
            $shield.html("");
            var $a = $(document.createElement("a"))
                        .attr({href: image.link})
                        .html(image.title)
                        .appendTo($shield);
            $screen_one.click(function(){ window.location = $a.attr("href"); });
        }else{
            $shield.html(image.link);
        }

    }

    function play(){
        i++;
        if(i>=images.length) i = 0;
        var img = new Image;
        preload = true;
        img.onload = function(){ preload = false; slide(); }
        timeout = window.setTimeout(function(){
                                        window.clearTimeout(timeout);
                                        timeout = null;
                                        slide(); },timeOutTime);
        img.src = images[i].src;
    }

    function slide(){
        if((!preload)&&(!timeout)){
            $screen_one.unbind().removeClass("w-cur");;
            $shield.hide();
            dwPosFrom = $screen.width();
            dwPosTo = 0;
            upPosFrom = 0;
            idx = sidx;
            upPosTo = -$screen.width();
            $screen_two.css({ backgroundImage: "url("+images[i].src+")",
                              backgroundPosition: dwPosFrom+"px 0" })
            timer = window.setInterval(animate,duration);
        }
    }

    function animate(){
        if(Math.abs(dwPosTo - dwPosFrom)>=1){
            if(Math.abs(dwPosTo - dwPosFrom)<=5){
                idx = fidx;
            }
            dwPosFrom = dwPosFrom-(dwPosFrom - dwPosTo )*idx;
            upPosFrom = upPosFrom-(upPosFrom - upPosTo )*idx;
            $screen_one.css({backgroundPosition: Math.round(upPosFrom)+"px 0"});
            $screen_two.css({backgroundPosition: Math.round(dwPosFrom)+"px 0"});
        }else{
            window.clearInterval(timer);
            set(images[i]);
            $shield.fadeIn(300,play);
        }
    }

    return {
        init: function(){
            $screen = $("#hp-screen");
            if($screen.length>0){
                prepare();
            }
        }
    }
}();

/**
 * Инициализация галерей преимуществ
 */
Chiz.MyGalleryInit = function(){
    $(".advantage-item").each(function() {
        this.gallery = new Chiz.MyGallery({ container: this,
                                            content: $(this).find(".advantage-content").html(),
                                            width: 400,
                                            height: 460,
                                            padding: 30});
    });
};


/**
 * Галерея преимуществ
 */
Chiz.MyGallery = function(params) {
    this.container = params.container;
    this.content = params.content || '';
    this.width = params.width || 460;
    this.height = params.height || 480;
    this.padding = params.padding || 10;
    this.fadeSpeed = 300;

    this.items = new Array();
    this.currentIndex = -1;
    this.drew = false;

    this.setup();
}

Chiz.MyGallery.prototype = {
    setup: function() {
        var self = this;
        $("a>img", self.container).each(function(i) {
                self.items.push({src: this.parentNode.href,
                                 title: this.parentNode.title});
            });
        $("h2 a", self.container).click(function() { self.showGallery(); return false; });
    },
    showGallery: function() {
        var self = this;
        if (!self.drew){
            self.draw()
        }else {
            self.$overlay.fadeTo(self.fadeSpeed, Chiz.overlayOpacity);
            self.$wrap.fadeIn(self.fadeSpeed);
            self.show(0);
        }
    },
    draw: function() {
        var self = this;
        self.$overlay = $("<div id='fancybox-overlay'></div>").css({ display: 'none',
                                                                     backgroudColor: Chiz.overlayColor})
                                                              .appendTo(document.body)
                                                              .fadeTo(self.fadeSpeed, Chiz.overlayOpacity)
                                                              .click(function() { self.close(); });
        self.$wrap = $("<div id='fancybox-wrap'></div>").css({ display: 'none',
                                                               width: self.width + self.padding*2,
                                                               height: self.height + self.padding*2,
                                                               left: Math.round((document.body.clientWidth - self.width - self.padding*2)/2),
                                                               top: Math.round((document.body.clientHeight - self.height - self.padding*2)/2)})
                                                        .appendTo(document.body)
                                                        .fadeIn(self.fadeSpeed);
        self.$outer = $("<div id='fancybox-outer'></div>").appendTo(self.$wrap);
        $("<div id='fancybox-bg-n' class='fancybox-bg'></div><div id='fancybox-bg-ne' class='fancybox-bg'></div><div id='fancybox-bg-e' class='fancybox-bg'></div><div id='fancybox-bg-se' class='fancybox-bg'></div><div id='fancybox-bg-s' class='fancybox-bg'></div><div id='fancybox-bg-sw' class='fancybox-bg'></div><div id='fancybox-bg-w' class='fancybox-bg'></div><div id='fancybox-bg-nw' class='fancybox-bg'></div>").appendTo(self.$outer);
        self.$inner = $("<div id='fancybox-content'></div>").css({ width: self.width,
                                                                 height: self.height,
                                                                 left: self.padding,
                                                                 top: self.padding})
                                                          .appendTo(self.$outer);
        self.$close = $("<a id='fancybox-myclose'></a>").appendTo(self.$outer).click(function() { self.close(); });
        self.$prev = $("<a id='fancybox-myleft'></a>").appendTo(self.$outer).click(function() { self.showPrev(); });
        self.$next = $("<a id='fancybox-myright'></a>").appendTo(self.$outer).click(function() { self.showNext(); });
        if (self.items.length > 1) {
            self.$nav = $("<div id='fancybox-mynav'></div>").appendTo(self.$outer);
            for (var i = 0; i < self.items.length; i ++) {
                $("<a rel='"+i+"'></a>").html(i*1 + 1).appendTo(self.$nav).click(function() { self.show(parseInt(this.rel)); });
            }
        }
        $("<div id='fancybox-mycontent' class='text'></div>").appendTo(self.$inner).html(self.content);
        self.$image = $("<div id='fancybox-myimage'></div>").appendTo(self.$inner);
        self.drew = true;
        self.show(0);
    },
    show: function(idx) {
        var self = this;

        if (idx == self.currentIndex || idx < 0 || idx > self.items.length - 1) return;

        self.$image.empty();

        var img = new Image();
        img.title = self.items[idx].title;
        img.src = self.items[idx].src;
        $(img).appendTo(self.$image);
        if (self.items[idx].title != '') {
            var $title = $("<div id='fancybox-mytitle'></div>").appendTo(self.$image);
            $("<ins></ins>").css({opacity: .6}).appendTo($title);
            $("<p></p>").html(self.items[idx].title).appendTo($title);
        }

        $("a.active", self.$nav).removeClass("active");
        $("a[rel='"+idx+"']", self.$nav).addClass("active");
        self.currentIndex = idx;
        self.checkScrolls();
    },
    showPrev: function() {
        var self = this;
        self.show(self.currentIndex - 1);
    },
    showNext: function() {
        var self = this;
        self.show(self.currentIndex + 1);
    },
    checkScrolls: function() {
        var self = this;
        if (self.currentIndex <= 0) self.$prev.hide()
        else self.$prev.show();
        if (self.currentIndex >= self.items.length - 1) self.$next.hide()
        else self.$next.show();
    },
    close: function() {
        var self = this;
        self.$overlay.fadeOut(self.fadeSpeed);
        self.$wrap.fadeOut(self.fadeSpeed);
    }
}

/**
 * Обработка правого выползающего меню
 */
Chiz.SideSlider = function(){

    var $sliderdom = null;
    var $slider_shadow = null;
    var $slider = null;

    var scrollElement = null;

    var sliderShown = false;


    function create(container){
        scrollElement = document.documentElement || document.body;

        $sliderdom = $(document.createElement("div"))
                        .addClass("r-slider-cont")
                        .appendTo(document.body);
        $slider_shadow = $(document.createElement("div"))
                        .addClass("r-slider-shadow")
                        .appendTo(document.body);
        $(window).resize(function() { resize(); });
        $slider = $(document.createElement("div"))
                        .addClass("r-slider")
                        .html(container.html())
                        .appendTo($sliderdom);
        $(document.createElement("div"))
                        .addClass("sl-bg")
                        .css({opacity:"0.85"})
                        .appendTo($slider);
        $tag = $(document.createElement("div"))
                        .addClass("r-slider-tag")
                        .appendTo($slider)
                        .click(function(){ toggleSlide(); })
        if(Browser.isIE6){
            $(window).scroll(function() { moveSlide(); })
        }
        resize();
    }

    function resize(){
        if(document.body.offsetWidth<=1000){
            $sliderdom.css({ width: "1000px",
                            left: "0px"});
            $slider_shadow.css({ left: "1000px"});
        }else{
            if(document.body.offsetWidth>=1100){
                var left = parseInt((document.body.offsetWidth - 1100)/2);
                $sliderdom.css({ width: "1100px",
                                left: left+"px"})
                $slider_shadow.css({ left: left+1100+"px"});
            }else{
                $sliderdom.css({ width: document.body.offsetWidth+"px",
                                 left: "0px"});
                $slider_shadow.css({ left: document.body.offsetWidth+"px"});
            }
        }
    }

    function toggleSlide() {
        if (!sliderShown) {
            sliderShown = true;
            if(Browser.isIE6||Browser.isIE7){ $sliderdom.css("zIndex",1); }
            $slider.stop(true, true)
                   .animate({ right: "0" }, {duration: 300, complete: function() {
                                                                                    if(!Browser.isIE6){
                                                                                        $sliderdom.css("position","absolute");
                                                                                        $slider_shadow.css({position:"absolute",
                                                                                                            top: scrollElement.scrollTop+5+"px"});
                                                                                    }

                                                                                    $slider.css({ top: scrollElement.scrollTop+50+"px" })
                                                                                           .addClass("r-s-shown");
                                                                                  } });
        } else {
            sliderShown = false;
            $slider.stop(true, true)
                   .animate({ right: "-"+$slider.width()+"px" },{duration: 300, complete: function() {
                                                                                        if(!Browser.isIE6){
                                                                                            $sliderdom.css("position","fixed");
                                                                                            $slider_shadow.css({position:"fixed",
                                                                                                                top: 5+"px"});
                                                                                            $slider.css({ top: 50+"px" });
                                                                                        }
                                                                                        if(Browser.isIE6||Browser.isIE7){
                                                                                            $sliderdom.css("zIndex",0);
                                                                                        }
                                                                                        $slider.removeClass("r-s-shown"); }});
        }
    }

    function moveSlide() {
        var delta = scrollElement.scrollTop+50;
        var slideHeight = $slider.outerHeight(true);
        var eps = slideHeight - scrollElement.clientHeight;
        if (eps > 0) { delta -= eps; }
        if (delta < 50) { delta = 50; }
        $slider.css({top: delta});
        $slider_shadow.css({top: delta-50});
    }

    return {
        init: function(){
            var sl_cont = $("#adds-block");
            if(sl_cont.length>0){
                create(sl_cont);
            }
        }
    }
}();

//------------------------------------------------------------------------------
