﻿$j(document).ready(function() {
    $j("a._blank").attr('target', '_blank');
    $j("img.absmiddle").attr('align', 'absmiddle');
    activatePages();
    // Alarm PopUp
    //activateAlertPopup();
    activateArrowEffect();
	updMenu();
	activateCheckActive();
	
	//show disqus form
	$j("h2 .show_disqus").click(function() { 
  		$j("#disqus_thread").toggle();
	});
});

/*
techitif: 05-07-2011 - корректировка верхнего меню
*/
function updMenu() {
	$j("#mainMenu ul li.current").prev().find('span').addClass('shover');
	$j("#mainMenu ul li").hover(
	  function () { 
		$j(this).prev().find('span').addClass('shover'); 
	  },
	  function () {
		if (!$j(this).hasClass('current')) { $j(this).prev().find('span').removeClass('shover'); }
	  }
	);
}

/*
techitif: 23-07-2011 - исправление бага со стрелкой
*/
var bActW = true;
function activateCheckActive() {
	function onBlur() { bActW = false; };
	function onFocus(){ bActW = true; };
	if (/*@cc_on!@*/false) { // check for Internet Explorer
		document.onfocusin = onFocus;
		document.onfocusout = onBlur;
	} else {
		window.onfocus = onFocus;
		window.onblur = onBlur;
	}
}

function activateArrowEffect() {
    window.setInterval(function() {
        var link = $j('.jcarousel-next');
        
		function callback() {
			setTimeout(function() {
				link.hide().fadeIn();
			}, 100 );
		};
        
        if (link.size() > 0 && (link.attr('disabled') === 'false') && bActW) {
            link.effect("fade", {
                direction: 'right',
                times: 3
            }, 500, callback);
        }
    }, 4000);
}

//-- Activate PopUp

var popup_width;
var popup_height;
var current_hash = null;
function activatePopUps(){		
    popup_width = $j('.popup_product').width();
    popup_height = $j('.popup_product').height();
    $j('.popup_link').livequery('click', function(){
        var id = $j(this).parent().attr('id').split('_');
        showPopUp();
        setContentPopUp( id[1] );
        current_hash = window.location.hash;
        window.location.hash = '#pr-' + id[1];
    });
    $j('#popup_product .popup_close').livequery('click', function(){
        $j.unblockUI();
        $j('#popup_product .popup_content').empty().addClass('loading');
        window.location.hash = current_hash;
    });
}

function activateMainPage() {
    activateMainCarousel();
}

// Номер следующего стенда
var NEXT_STAND_NUM = false;
// Продукты только одного бренда
var PRODUCTS_ONLY_ONE_BRAND = false;
// Количество эллементов в карусели
var STANDS_COUNT = 0;
// Карусель
var CAROUSEL = false;

var standForBrandLoaded = true;

var first = true;
function activateMainCarousel() {
    // Показывать продукты одного бренда?
    PRODUCTS_ONLY_ONE_BRAND = $j('#PRODUCTS_ONLY_ONE_BRAND').val() == 'false' ? false : true;
    // Устанавливаем размер коллекции
    STANDS_COUNT = $j('#standsCount').val();

    $maincarousel = $j('#maincarousel');
    $maincarousel.jcarousel_remake({
        initCallback: function (carousel, state) {
            //            // Выносим в глобальную область видимости
            CAROUSEL = carousel;
            CAROUSEL.shift = false;
            CAROUSEL.countItem = 3;
            CAROUSEL.cash = {};
            /**
             * shift collection of elements
             */
            CAROUSEL.shiftData = function(direction) {
                direction = (direction=='left'?-1:1);
                this.shift = true;
                $j.each($j(this.list).children(), function(index, item) {
                    var jindex = $j(item).attr('jcarouselindex') ;
                    var jindexNew = Number(jindex)+Number(direction) ;
                    $j(item).removeClass('jcarousel-item-' + jindex)
                    .removeClass('jcarousel-item-' + jindex + '-horizontal');
                    $j(item).addClass('jcarousel-item-' + jindexNew)
                    .addClass('jcarousel-item-' + jindexNew + '-horizontal');
                    $j(item).attr('jcarouselindex',jindexNew );
                });
            };
            CAROUSEL.getLength = function() {
                return Number($j(this.list).children().length);
            };
            CAROUSEL.removeFirst = function() {
                if(this.getLength()>this.countItem) {
                    this.remove(1);
                    this.shiftData('left');
                    this.shift = true;
                    this.locked = false;
                    this.last = this.countItem;
                    this.scroll(this.countItem-1, false)
                }
            };
            /**
             * get current stand
             */
            CAROUSEL.getStand = function() {
                return this.get(this.first);
            };
            /**
             * add element first to caorusel element collection
             */
            CAROUSEL.prependAdd = function(html) {
                this.add(0, html);
                this.shiftData();
                this.last++;
                CAROUSEL.scroll(CAROUSEL.last, false)
                if(CAROUSEL.getLength() > CAROUSEL.countItem) {
                    this.remove(this.getLength());
                }
            };
            CAROUSEL.hasBind = function(e, c){
                var B=e.data("events");
                return(B&&B[c])
            },
            /** replace standert jcarousel.next method */
            CAROUSEL.next = function() {
                if(this.locked_buttons == false) {
                    this.lockButtons();
                    this.stopAuto();
                    if (this.tail != null && !this.inTail)
                        this.scrollTail(false);
                    else {
                        if((this.options.wrap == 'both' || this.options.wrap == 'last') && this.options.size != null && this.last == this.options.size) {
                            this.scroll(1);
                        /* возможно следует перенести NEXT_STAND_NUM, STANDS_COUNT и другие свойства слайдера в  CAROUSEL */
                        } else if(NEXT_STAND_NUM == this.options.size) {
                            //                        this.lockCarousel();
                            this.unlockCarousel();
                            return;
                        } else {
                            this.scroll(this.first + this.options.scroll);
                        }
                    }
                } else {
                    return false;
                }
            },
            CAROUSEL.prev = function() {
                if(this.locked_buttons == false || this.checkLastStand()) {
                    this.lockButtons();
                    this.stopAuto();

                    if (this.tail != null && this.inTail)
                        this.scrollTail(true);
                    else
                        this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'first') && this.options.size != null && this.first == 1) ? this.options.size : this.first - this.options.scroll);
                }
            },
            /**
         * Sets the states of the prev/next buttons.
         *
         * @name buttons
         * @type undefined
         * @cat Plugins/jCarousel
         */
            CAROUSEL.buttons = function(n, p) {
                if (n == undefined || n == null) {
                    var n = !this.locked_buttons && !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'first') || this.options.size == null || this.last < this.options.size);
                    if (!this.locked_buttons && !this.locked && (!this.options.wrap || this.options.wrap == 'first') && this.options.size != null && this.last >= this.options.size)
                        n = this.tail != null && !this.inTail;
                }

                if (p == undefined || p == null) {
                    var p = !this.locked_buttons && !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'last') || this.first > 1);
                    if (!this.locked_buttons && !this.locked && (!this.options.wrap || this.options.wrap == 'last') && this.options.size != null && this.first == 1)
                        p = this.tail != null && this.inTail;
                }
                var self = this;
//                this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
//                this.buttonPrev[p ? 'bind' : 'unbind'](this.options.buttonPrevEvent, this.funcPrev)[p ? 'removeClass' : 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', p ? false : true);

                if(this.hasBind(this.buttonNext, this.options.buttonNextEvent) == null && n) {
                    this.buttonNext['bind'](this.options.buttonNextEvent, this.funcNext);
                } else if(this.hasBind(this.buttonNext, this.options.buttonNextEvent) != null && !n) {
                    this.buttonNext['unbind'](this.options.buttonNextEvent, this.funcNext);
                }
                if(this.hasBind(this.buttonPrev, this.options.buttonPrevEvent) == null && p) {
                    this.buttonPrev['bind'](this.options.buttonPrevEvent, this.funcPrev)['removeClass'](this.className('jcarousel-prev-disabled')).attr('disabled', false);
                } else if(this.hasBind(this.buttonNext, this.options.buttonNextEvent) != null && !p) {
                    this.buttonPrev['unbind'](this.options.buttonPrevEvent, this.funcPrev)['addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', true);
                }
                    this.buttonNext[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
                    this.buttonPrev[p ? 'removeClass' : 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', p ? false : true);


                if (this.buttonNext.length > 0 && (this.buttonNext[0].jcarouselstate == undefined || this.buttonNext[0].jcarouselstate != n) && this.options.buttonNextCallback != null) {
                    this.buttonNext.each(function() {
                        self.options.buttonNextCallback(self, this, n);
                    });
                    this.buttonNext[0].jcarouselstate = n;
                }
                if (this.buttonPrev.length > 0 && (this.buttonPrev[0].jcarouselstate == undefined || this.buttonPrev[0].jcarouselstate != p) && this.options.buttonPrevCallback != null) {
                    this.buttonPrev.each(function() {
                        self.options.buttonPrevCallback(self, this, p);
                    });
                    this.buttonPrev[0].jcarouselstate = p;
                }
            },
            CAROUSEL.lockCarousel = function() {
                this.lock();
                this.lockButtons();
            },
            CAROUSEL.unlockCarousel = function() {
                this.unlock();
                this.locked_buttons = false;
                if(NEXT_STAND_NUM == this.options.size) {
                    this.locked_buttons = true;
                }
                var prev = this.checkFirstStand()?null:true;
                var next = this.checkLastStand()?null:true;
                this.buttons(next,prev);
            },
            /**
             * check if element is first in collection
             * @param int hash
             */
            CAROUSEL.checkFirstStand = function(hash) {
                var stand_info = Array();
                var id = $j(CAROUSEL.list.first().children().get(1)).children().first().attr('id');
                if(typeof(id)!='undefined') {
                    var _match = id.split('_');
                    stand_info['standNum'] = parseInt(_match[1]);
                    if(stand_info['standNum'] == 1) {
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    if(hash == 0) {
                        return true;
                    } else {
                        return false;
                    }
                }
            }
            /**
             * check if element is last in collection
             * @param int hash
             */
            CAROUSEL.checkLastStand = function() {
                if(this.last == this.options.size || NEXT_STAND_NUM == this.options.size) {
                    return true;
                } else {
                    return false;
                }
            },
            // Карусель брендов
            activateBrandsCarousel();
        // Переключение м/ж
        //            activateSwitchSex();
        },
        buttonNextCallback: function() {
            return false;
        },
        itemLoadCallback: function (carousel, state) {
            // Загружаем только один раз (в initCallback выносить нельзя, возникнут проблемы с lock/unlock(binds кнопок) при первой загрузке)
            if (first) {
                // Проверяем нет ли начальных данных в хеше
                activateByHash();
                // Товары
                activatePopUps();
                first = false;
            }

            // Устанавливаем действия при загрузке эллементов
            mycarousel_itemLoadCallback(state);
        },
        animation: "slow",
        scroll: 1,
        size: STANDS_COUNT//,
    //wrap: 'circular'
    });
    activateFiltersSize();
}
function activateFiltersSize() {
    FILTERS = {
        sizeClass: 'size_',
        allSize: 'size_all',
        history: {},
        filters: {
            sizes   : [],
            sex     : []
        },
        clothesSizeArray: [
        'XS','S','M','L','XL','XL','XXL','XXXL'
        ],
        shoesSizeArray: [
//        '31,5','32','32,5','33','33,5','34','34,5',
        '35','35,5','36','36,5',
        '37','37,5','38','38,5','39','39,5','40','40,5','41','41,5','42','42,5',
        '43','43,5','44','44,5','45','45,5','46','46,5','47'
        ],
        slider: $j( "#slider-range" ),
        setFilterArray: function(filterArray) {
            this.filterArray = eval('this.'+filterArray);
            this.setDataForSlider();
        },
        setDataForSlider: function() {
            if(typeof(this.filterArray) != 'undefined') {
                this.slider.slider({
                    max: this.filterArray.length-1,
                    values: [ 0, this.filterArray.length-1]
                });
                this.setFilterSizeData();
                $j( "#amount" ).html( this.filterArray[this.slider.slider( "values", 0 )] +
                    " - " + this.filterArray[this.slider.slider( "values", 1 )] );
            }
        },
        setFilterSizeData: function() {
            /* for size*/
            var sizeMin = this.slider.slider( "values", 0 );
            var sizeMax = this.slider.slider( "values", 1 );
            var min = this.slider.slider( "option", "min" );
            var max = this.slider.slider( "option", "max" );
            this.filters.sizes = [];
            for(var i=sizeMin; i<=sizeMax; i++) {
                this.filters.sizes[this.filters.sizes.length] = this.sizeClass + this.filterArray[i];
            }
        },
        clearOldFilters: function(collection) {
            collection.each(function(){
                var $this = $j(this);
                if ($this.hasClass('s_hidden')) {
                    if ($j.browser.msie) {
                        $this.fadeIn(function(){
                            $j(this).removeClass('s_hidden');
                        });
                    } else {
                        $this.animate({
                            'opacity': '1'
                        }, function(){
                            $j(this).removeClass('s_hidden');
                        });
                    }
                }
            });
        },
        setFilterParamsToHistory: function() {
            if(typeof(this.filterArray)!= 'undefined') {
                this.history.filterArray = this.filterArray;
                this.history.min = this.slider.slider( "option", "min" );
                this.history.max = this.slider.slider( "option", "max" );
            } else {
                delete this.history.filterArray;
                delete this.history.min;
                delete this.history.max;
            }
            if($j('.current_sex').size()){
                this.history.sex = $j('.current_sex');
            } else {
                delete this.history.sex
            }
        },
        //        needFiltration: function() {
        //            if(typeof(this.history.filterArray) == 'undefined') {
        //                return true
        //            } else if(this.history.filterArray.length == this.filterArray.length &&
        //                this.history.min == this.slider.slider( "option", "min" ) &&
        //                this.history.max == this.slider.slider( "option", "max" )) {
        //                for(var i=0; i<this.history.filterArray.length; i++){
        //                    if(this.history.filterArray[i] != this.filterArray[i]) {
        //                        return true;
        //                    }
        //                }
        //                return false;
        //            } else {
        //                return true;
        //            }
        //        },
        filtrate: function(stand) {
            var collection = stand.find('.standProduct');
            var filter = this;
            collection.each(function(){
                var $this = $j(this);
                var hasPass = false;
                if(filter.filters.sizes.length == 0 && filter.filters.sex.length == 0) {
                    hasPass = true;
                } else {
                    if(filter.filters.sex.length > 0) {
                        for(var k=0; k<filter.filters.sex.length; k++) {
                            if($this.hasClass(filter.filters.sex[k])) {
                                if($this.hasClass(filter.allSize)) {
                                    hasPass = true;
                                    break;
                                }else if(filter.filters.sizes.length > 0) {
                                    for(var i=0; i<filter.filters.sizes.length; i++) {
                                        if ($this.hasClass(filter.filters.sizes[i])) {
                                            hasPass = true;
                                            break;
                                        }
                                    }
                                } else {
                                    hasPass = true;
                                    break;
                                }
                            }
                        }
                    } else {
                        if($this.hasClass(filter.allSize)) {
                            hasPass = true;
                        } else {
                            for(var i=0; i<filter.filters.sizes.length; i++) {
                                if ($this.hasClass(filter.filters.sizes[i])) {
                                    hasPass = true;
                                    break;
                                }
                            }
                        }
                    }
                }
                if(!hasPass) {
                    if (! $this.hasClass('s_hidden')) {
                        if ($j.browser.msie) {
                            $this.fadeOut(function(){
                                $j(this).addClass('s_hidden');
                            });
                        } else {
                            $this.animate({
                                'opacity': '0.2'
                            }, function(){
                                $j(this).addClass('s_hidden');
                            });
                        }
                    }
                } else {
                    if ($j.browser.msie) {
                        $this.fadeIn(function(){
                            $j(this).removeClass('s_hidden');
                        });
                    } else {
                        $this.animate({
                            'opacity': '1'
                        }, function(){
                            $j(this).removeClass('s_hidden');
                        });
                    }

                }
            });
        },
        init: function() {
            this.activateSwitchSize();
            this.activateSwitchSex();
        },

        activateSwitchSize: function() {
            var filter = this;
            var size_switch = $j('.size_switch');
            var sizeData = $j('#sizeData');

            size_switch.bind('click', function(){
                var $this = $j(this);
                if ($this.hasClass('current_size')) {
                    size_switch.removeClass('current_size');
                    sizeData.hide();
                    delete filter.filterArray;
                    filter.filters.sizes = [];
                    filter.filtrate(CAROUSEL.getStand());
                } else {
                    size_switch.removeClass('current_size');
                    $this.addClass('current_size');
                    var filterArray = $this.attr('title') + 'SizeArray';
                    if(typeof(filterArray) != 'undefined') {
                        filter.setFilterArray(filterArray);
                        filter.filtrate(CAROUSEL.getStand());
                        sizeData.show();
                    }
                }
            });
            this.slider.slider({
                range: true,
                min: 0,
                slide: function( event, ui ) {
                    $j( "#amount" ).html(  filter.filterArray[ui.values[ 0 ]] + " - " + filter.filterArray[ui.values[ 1 ]] );
                },
                stop: function(event, ui) {
                    filter.setFilterSizeData();
                    filter.filtrate(CAROUSEL.getStand());
                }
            });
            filter.setFilterArray('shoesSizeArray');
                        filter.filtrate(CAROUSEL.getStand());
                        sizeData.show();
        },
        activateSwitchSex: function() {
            var $sex_switch = $j('.sex_switch');
            var filter = this;
            $sex_switch.bind('click', function(){
                var $this = $j(this);
                if ($this.hasClass('current_sex')) {
                    $sex_switch.removeClass('current_sex');
                    filter.filters.sex = [];
                    filter.filtrate(CAROUSEL.getStand());
                } else {
                    $sex_switch.removeClass('current_sex');
                    $this.addClass('current_sex');
                    filter.setFilterSexData($this.attr('title'));
                    filter.filtrate(CAROUSEL.getStand());
                }
            //                switchSex();
            });
        },
        setFilterSexData: function(sex) {
            if(sex == 'male') {
                this.filters.sex = ['sex_u','sex_m'];
            } else {
                this.filters.sex = ['sex_u','sex_f'];
            }
        }
    //        function switchSex() {
    //            var $sex_m = $j('.sex_m');
    //            var $sex_f = $j('.sex_f');
    //            var $sex_u = $j('.sex_u');
    //            var $current_sex = $j('.current_sex');
    //
    //            if ( $current_sex.size() == 0) {
    //                showSex($sex_m);
    //                showSex($sex_f);
    //                showSex($sex_u);
    //            } else {
    //                var sex = $current_sex.attr('title');
    //                if (sex == 'male') {
    //                    hideSex($sex_f);
    //                    showSex($sex_m);
    //                } else {
    //                    hideSex($sex_m);
    //                    showSex($sex_f);
    //                }
    //            }
    //        }

    //        function showSex($sex) {
    //            // Не самый лучший алгоритм (каждый раз проходим по одним и тем же обьектам, нужно сделат ьпроход по только, что загруженному стенду)
    //            $sex.each(function(){
    //                var $this = $j(this);
    //                if ($this.hasClass('s_hidden')) {
    //                    if ($j.browser.msie) {
    //                        $this.fadeIn(function(){
    //                            $j(this).removeClass('s_hidden');
    //                        });
    //                    } else {
    //                        $this.animate({
    //                            'opacity': '1'
    //                        }, function(){
    //                            $j(this).removeClass('s_hidden');
    //                        });
    //                    }
    //                }
    //            });
    //        }
    //
    //        function hideSex($sex) {
    //            // Не самый лучший алгоритм (каждый раз проходим по одним и тем же обьектам, нужно сделат ьпроход по только, что загруженному стенду)
    //            $sex.each(function(){
    //                var $this = $j(this);
    //                if (! $this.hasClass('s_hidden')) {
    //                    if ($j.browser.msie) {
    //                        $this.fadeOut(function(){
    //                            $j(this).addClass('s_hidden');
    //                        });
    //                    } else {
    //                        $this.animate({
    //                            'opacity': '0.2'
    //                        }, function(){
    //                            $j(this).addClass('s_hidden');
    //                        });
    //                    }
    //                }
    //            });
    //        }
    }
    FILTERS.init();
}
function activateByHash() {

    var hash_info_product = getHashDataProduct();
    // Найден хеш продукта
    if (hash_info_product != null) {
        // дублирование кода
        setContentPopUp(  hash_info_product );
        showPopUp();
        firstLoadWithoutHash();
        return;
    }

    var hash_info_stand = getHashDataStand();
    // Найден хеш стенда
    if (hash_info_stand != null) {
        firstLoadWithHash(hash_info_stand);
        return;
    }

    // Хеш пустой
    firstLoadWithoutHash();
}

function mycarousel_itemLoadCallback(state) {
    if (state == 'init') {
        //                CAROUSEL.lockCarousel();
        // Переключаем бренд, если нужно
        toggleBrandIfNeed();
        // все нужные действия уже сделаны в firstLoadWithoutHash и firstLoadWithHash
        // сюда вынести не получается, так как callback функция после ajax запроса, выполняется после того, как скрипт оказываеися в этой точке
        // в идеале продвижение этой функции нужно застопорить до выполнения всех ajax запросов
        return;

    } else if (state == 'next') {
        if(CAROUSEL.shift == false) {
            CAROUSEL.lockCarousel();
            //
            // Устанавливаем хеш
            activateChangeHashStand();
            // Если это последний эллемент, следующий стенд загружать не нужно
            //            if (CAROUSEL.last == STANDS_COUNT) {
            if (CAROUSEL.checkLastStand()) {
                //                CAROUSEL.unlockButtons();
                CAROUSEL.unlockCarousel();
                FILTERS.filtrate(CAROUSEL.getStand());
                return;
            }

            // При следующих загрузках, номер следующего стенда, можно просто увеличивать, так как стенды идут по порядку (если нет, номер нужно определять в success: function())
            NEXT_STAND_NUM++

            // Переключаем бренд, если нужно
            toggleBrandIfNeed();

            // Проверяем не загружен, ли уже следующий стенд (например стенд загрузили, а потом нажали кнопку назад)
            if ($j('.vitrina:eq(' + CAROUSEL.last + ')').size() > 0) {
                //                CAROUSEL.unlockButtons();

                CAROUSEL.unlockCarousel();
                FILTERS.filtrate(CAROUSEL.getStand());
                return false;
            }
            // Загружаем следующий стенд
            loadNextStend();



        } else {
            CAROUSEL.shift = false;
        }
    } else if (state == 'prev') {
        if(CAROUSEL.shift == false) {
            CAROUSEL.lockCarousel();
            // Устанавливаем хеш
            //            activateChangeHashStandPrev();
            activateChangeHashStand();
            // Все предидущии позиции загружены (TODO: удалять просмотренные позиции)
            NEXT_STAND_NUM = Number(NEXT_STAND_NUM) > 1 ? NEXT_STAND_NUM-1 : NEXT_STAND_NUM;
            // Если это первый эллемент, предидущий стенд загружать не нужно
            if (CAROUSEL.checkFirstStand(getHashDataStand()) == true) {
                //        CAROUSEL.unlockButtons();
                CAROUSEL.unlockCarousel();
                FILTERS.filtrate(CAROUSEL.getStand());
                return;
            }

            // Переключаем бренд, если нужно
            toggleBrandIfNeed();

            // Проверяем не загружен, ли уже предидущий стенд (например стенд загрузили, а потом нажали кнопку вперед, потом назад)
            if (CAROUSEL.last > 1) {
                CAROUSEL.unlockCarousel();
                FILTERS.filtrate(CAROUSEL.getStand());
                return false;
            }

            // Загружаем предидущий стенд

            loadPrevStend(NEXT_STAND_NUM);
            return;
        } else {
            CAROUSEL.shift = false;
        }
    }

}

function firstLoadWithoutHash () {
    var stand_info = getStendInfo(); // не самое лучшее решение
    if(stand_info) {
        // При первой загрузке узнаем номер следующего стенда
        // Номер текущего стенда, может быть больше 1, если напр. отсчет начинается с бренда (страница бренда) или загрузка по хеш
        // номер следующего стенда = номер текущего стенда + 1 (стенды идут по порядку)
        NEXT_STAND_NUM = stand_info['standNum'] + 1;
        // CAROUSEL - не успевает инициализироватся (при первом заходе в itemLoadCallback CAROUSEL.last = undefined, и только после задержки (ajax запрос) устанавливается в 1 (в callback ajax запроса) )
        // Уже решили проблему перемещением инит кода в itemLoadCallback
        // CAROUSEL.last = 1;

        // Загружаем следующий стенд
        loadNextStend();

        // Загружаем предидущий стенд
        //loadPrevStend();

        // Действия после полной загрузки карусели (не эллемента, а всей карусели)
        activateAfterCarouselLoaded();
    }
}

function firstLoadWithHash (newStandNum) {
    newStandNum = newStandNum<CAROUSEL.options.size-1?newStandNum:CAROUSEL.options.size-1;
    replaceCurrentStand(newStandNum);

    // номер следующего стенда = номер текущего стенда + 1 (стенды идут по порядку)
    NEXT_STAND_NUM = newStandNum + 1;
    //    NEXT_STAND_NUM = newStandNum;

    // Загружаем следующий стенд
    if(CAROUSEL.checkLastStand(getHashDataStand()) == false) {
        loadNextStend();
    } else {
        CAROUSEL.add(CAROUSEL.last + 1, '');
        window.setTimeout(function(){CAROUSEL.unlockCarousel()},400);
       
    }
    // Загружаем предидущий стенд
    if(CAROUSEL.checkFirstStand(getHashDataStand()) == false) {
        loadPrevStend();
    }
        CAROUSEL.unlockCarousel();
//    CAROUSEL.unlockButtons();
//    CAROUSEL.buttons();


}

function loadNextStend() {
    if(typeof(CAROUSEL.cash[NEXT_STAND_NUM])!='undefined') {
        CAROUSEL.add(CAROUSEL.last + 1, CAROUSEL.cash[NEXT_STAND_NUM]);
        if(CAROUSEL.getLength()> CAROUSEL.countItem) {
            CAROUSEL.removeFirst();
        }
        CAROUSEL.unlockCarousel();
        FILTERS.filtrate(CAROUSEL.getStand());
    } else {
        jQuery.ajax({
            url: "/ajax/?module=catalog&method=GetStandHTMLByNum",
            type: "POST",
            dataType: 'html',
            timeout: 100000,
            error: function(){
                ajaxError();
            },
            success: function(html) {
                // в оCarousel отсчет с 1, CAROUSEL.last равно текущему эллементу
                // Добавляем следующий эллемент
                if(html.length > 0) {
                    CAROUSEL.cash[NEXT_STAND_NUM] = html;
                    CAROUSEL.add(CAROUSEL.last + 1, html);
                    if(CAROUSEL.getLength()> CAROUSEL.countItem) {
                        CAROUSEL.removeFirst();
                    }
                }
                // Так делать нельзя, НО
                // Блокировка должна происходить сразу, после нажатия на кнопки навигации
                // Блокировка прописана в самом плагине, а вот отключаем мы ее сдесь
                // Такая вот каша получилась
                CAROUSEL.unlockCarousel();
                //            CAROUSEL.unlockButtons();


                // Если нужно устанавливаем фильтр
                FILTERS.filtrate(CAROUSEL.getStand());
            //            switchSex();
            },
            data: {
                'id': NEXT_STAND_NUM,
                'PRODUCTS_ONLY_ONE_BRAND': PRODUCTS_ONLY_ONE_BRAND
            }
        });
    }
}

//function switchSex() {}
function loadPrevStend() {
    if(typeof(CAROUSEL.cash[NEXT_STAND_NUM - 2])!='undefined') {
        CAROUSEL.unlockCarousel();
        CAROUSEL.prependAdd(CAROUSEL.cash[NEXT_STAND_NUM - 2]);
        FILTERS.filtrate(CAROUSEL.getStand());
    } else {
        jQuery.ajax({
            url: "/ajax/?module=catalog&method=GetStandHTMLByNum",
            type: "POST",
            dataType: 'html',
            scroll: scroll,
            timeout: 100000,
            error: function(){
                ajaxError();
            },
            success: function(html) {
                // в оCarousel отсчет с 1, CAROUSEL.last равно текущему эллементу
                // Добавляем предидущий эллемент
                CAROUSEL.unlockCarousel();
                CAROUSEL.cash[NEXT_STAND_NUM - 2] = html;
                CAROUSEL.prependAdd(html);
                // Так делать нельзя, НО
                // Блокировка должна происходить сразу, после нажатия на кнопки навигации
                // Блокировка прописана в самом плагине, а вот отключаем мы ее сдесь
                // Такая вот каша получилась
                //            CAROUSEL.unlockButtons();
                // Если нужно устанавливаем фильтр
                FILTERS.filtrate(CAROUSEL.getStand());
            //            switchSex();
            },
            data: {
                'id': (NEXT_STAND_NUM - 2),
                'PRODUCTS_ONLY_ONE_BRAND': PRODUCTS_ONLY_ONE_BRAND
            }
        });
    }
}

function replaceCurrentStand(newStandNum) {
    jQuery.ajax({
        url: "/ajax/?module=catalog&method=GetStandHTMLByNum",
        type: "POST",
        dataType: 'html',
        timeout: 100000,
        error: function(){
            ajaxError();
        },
        success: function(html) {
            // CAROUSEL.last равно текущему эллементу
            // Заменяем текущий элемент
            CAROUSEL.add(CAROUSEL.last, html);
            // Устанавливаем номер следующего стенда, на основе загруженной информации (стенды идут по порядку)
            // номер следующего стенда = номер текущего стенда + 1
            NEXT_STAND_NUM = newStandNum + 1;
            // Действия после полной загрузки карусели (не эллемента, а всей карусели)
            activateAfterCarouselLoaded();

            // Если нужно устанавливаем фильтр
            FILTERS.filtrate(CAROUSEL.getStand());
            //            switchSex();

            // Переключаем бренд, если нужно
            toggleBrandIfNeed();
            CAROUSEL.unlockCarousel();
        },
        data: {
            'id': newStandNum
        }
    });
}

function loadStandByBrand(brandID) {
    // Нельзя использовать, так мы вызываем CAROUSEL.next();
    // CAROUSEL.lock();
    if(standForBrandLoaded) {
        standForBrandLoaded = false;
        jQuery.ajax({
            url: "/ajax/?module=catalog&method=GetStandHTMLByBrandId",
            type: "POST",
            dataType: 'html',
            timeout: 100000,
            error: function(){
                ajaxError();
                standForBrandLoaded = true;
            },
            success: function(html) {

                // убиваем предыдущий набор єлементов
                CAROUSEL.reset();
                CAROUSEL.lockCarousel();
                CAROUSEL.add(1, html);
                // Устанавливаем номер следующего стенда, на основе загруженной информации
                var stand_info = getStendInfo(html);
                activateChangeHashStand();
                if(stand_info) {
                    // номер следующего стенда = номер текущего стенда + 1 (стенды идут по порядку)
                    NEXT_STAND_NUM = stand_info['standNum']+1;

                    // Загружаем следующий стенд
                    loadNextStend();
                    // Загружаем предидущий стенд
                    if(CAROUSEL.checkFirstStand(getHashDataStand()) == false) {
                        loadPrevStend();
                    }

                    // Если нужно устанавливаем фильтр
                    FILTERS.filtrate(CAROUSEL.getStand());
                    //                switchSex();
                    standForBrandLoaded = true;
                }
            },
            data: {
                'id': brandID
            }
        });
    }
}

function activateAfterCarouselLoaded() {
    $maincarousel = $j('#maincarousel');
    $maincarousel.css({
        'visibility':'visible'
    });
}

function getStendInfo(html) {
    var stand_info = Array();
    var $this = html ? $j(html) : $j('.vitrina:first');
    var id =  $this.attr('id');
    if(typeof(id)!='undefined') {
        var _match = id.split('_');
        stand_info['standNum'] = parseInt(_match[1]);
        stand_info['standBrand'] = parseInt(_match[3]);
        return stand_info;
    } else {
        return false
    }
}

function getHashDataStand() {
    var hash = getHash();
    if (hash == null) {
        return;
    }
    var matches = hash.match(/^stand-(\d+)$/);
    if (matches == null) {
        return;
    }
    return (parseInt(matches[1]) - 1);
}

function getHashDataProduct() {
    var hash = getHash();
    if (hash == null) {
        return;
    }
    var matches = hash.match(/^pr-(\d+)$/);
    if (matches == null) {
        return;
    }
    return matches[1];
}

function getHash() {
    if( window.location.href.indexOf('#')>-1 ){
        return window.location.href.replace(/(.*)(#)(.*)/, '$3')
    } else {
        return null;
    }
}

function toggleBrandIfNeed() {
    // Переключаем бренд, если нужно
    var stand_info = getStendInfo($j(CAROUSEL.get(CAROUSEL.last).html())); // не самое лучшее решение
    if(stand_info) {
        setCurrentBrand('#brand_' + stand_info['standBrand']);
    }
    return;
}

function setCurrentBrand(obj) {
    $j('#brands_menu a').removeClass('vis');
    $j(obj).addClass('vis');
}

function activateBrandsCarousel() {
    // Показывать продукты одного бренда?
    PRODUCTS_ONLY_ONE_BRAND = $j('#PRODUCTS_ONLY_ONE_BRAND').val() == 'false' ? false : true;

    activateSwitchBrands();

/*var $brandscarousel = $j('#brandscarousel');
		$brandscarousel.jcarousel({
			initCallback: function (carousel, state) {
				$brandscarousel.css({'visibility':'visible'});

				// Переключение стендов по брендам
				activateSwitchBrands();
			},
			animation: "slow",
			scroll: 1
		});*/
}

function activateSwitchBrands() {
    // Если это страница бренда, то линки должны быть прямые
    if (PRODUCTS_ONLY_ONE_BRAND) {
        return;
    }
    var $brands = $j('#brands_menu a');
    $brands.bind('click', function(){
        if(standForBrandLoaded == true) {
            var id = $j(this).attr('id').split('_');
            setCurrentBrand('#brand_' + id[1]);
            loadStandByBrand(id[1]);
        }
        return false;
    });
}

function activateChangeHashStand() {
    // Доделать для страницы бренда
    if (PRODUCTS_ONLY_ONE_BRAND) {
        return;
    }

    var stand_info = getStendInfo($j(CAROUSEL.get(CAROUSEL.last).html())); // не самое лучшее решение
    if (NEXT_STAND_NUM == 0) {
        return;
    }
    if(stand_info) {
        window.location.hash = '#stand-' + (stand_info['standNum'] + 1);
    //        window.location.hash = '#stand-' + (stand_info['standNum']);
    }
}
function activateChangeHashStandInit() {
    // Доделать для страницы бренда
    if (PRODUCTS_ONLY_ONE_BRAND) {
        return;
    }

    var stand_info = getStendInfo($j(CAROUSEL.get(CAROUSEL.last).html())); // не самое лучшее решение
    if (NEXT_STAND_NUM == 0) {
        return;
    }
    if(stand_info) {
        window.location.hash = '#stand-' + (stand_info['standNum']-1);
    }
}
function activateChangeHashStandPrev() {
    // Доделать для страницы бренда
    if (PRODUCTS_ONLY_ONE_BRAND) {
        return;
    }

    var stand_info = getStendInfo($j(CAROUSEL.get(CAROUSEL.last).html())); // не самое лучшее решение
    if (NEXT_STAND_NUM == 0) {
        return;
    }
    if(stand_info) {
        //        alert(stand_info['standNum']);
        window.location.hash = '#stand-' + (stand_info['standNum']);
    }
}

// -- Activate Product --

function activateProduct() {
    activationForm();
    activationThumbs();
    activateProductZoom();
    activateQuestionForm();
}

function activateQuestionForm() {
    $j('#question_sent').click(function(){
        var $form = $j('#question_form');
        $j('input[name=question]', $form).val($j(this).attr('title'));
        $form.submit()
    });
}

// -- Activate PopUp

var popup_width;
var popup_height;
var current_hash = null;
function activatePopUps(){
    popup_width = $j('.popup_product').width();
    
    popup_height = $j('.popup_product').height();
    $j('.popup_link').live('click', function(event){
        var id = $j(this).parent().attr('id').split('_');
        showPopUp();
        setContentPopUp( id[1] );
        current_hash = window.location.hash;
        window.location.hash = '#pr-' + id[1];
        event.preventDefault();
    });
    $j('#popup_product .popup_close').live('click', function(event){
        $j.unblockUI();
        $j('#popup_product .popup_content').empty().addClass('loading');
        window.location.hash = current_hash;
        event.preventDefault();
    });
}

function showPopUp(){
    $j.blockUI({
        message: $j('#popup_product'),
        css: {
            left: 	($j(window).width() - popup_width) /2 + 'px',
            top:  	($j(window).height() - popup_height) /2 + 'px',
            width:	popup_width,
            height:	popup_height,
			cursor: 'default',
            border: ''
        },
        overlayCSS: {
			cursor: 'default',
            background: 'url(/images/bg-pop.png)'
        }
    });
}

function setContentPopUp( id ){
    $j.ajax({			// $j.getJSON(
        url: "/ajax/?module=catalog&method=GetProductHTML",
        type: "POST",
        dataType: 'html',
        timeout: 100000,
        error: function(){
            ajaxError();
        },
        success: function( html ) {

            $j('#popup_product .popup_content').removeClass('loading').html(html);
            activateProduct();

        /*if( json.error==0 ) {

					$j('#popup_product .popup_content').removeClass('loading').html(json.html);
					activateProduct();

				} else {
					alert(json.messadge);
				}*/
        },
        complete: function(){
        },
        // Parametrs
        data: {
            'id':id
        }
    });
}

function activationForm(){
    $j('#submitform').bind('click', function(){
        $j('#order_form').submit();
    });
}

function activationThumbs(){
    var $thumbs_img				= $j('#product_thumbs img:not(.flash, .mediaLink)');
    var $bigphoto				= $j('#product_bigphoto');
    var $bigphotos_container	= $j('#product_bigphotos');

    $j($thumbs_img.get(0)).addClass('curr_thumb');

    $thumbs_img.bind('mouseover', function(){
        $j('#product_thumbs img').removeClass('curr_thumb')
//        $thumbs_img.removeClass('curr_thumb');
        $j(this).addClass('curr_thumb');
        var index 		= $thumbs_img.index( this );
		index ++;
        var $next_image = $j('a.jqzoom:eq('+(index)+')').clone().hide();
        $bigphoto.html( $next_image );
        $next_image.fadeIn();
        //  ,  -  live (  ,    )
        activateProductZoom();
    });
    $j('#product_thumbs img.flash').bind('mouseover', function(){
        $j('#product_thumbs img').removeClass('curr_thumb')
        $j(this).addClass('curr_thumb');
        $bigphoto.html('<embed ' + $j(this).attr('ref') + ' type="application/x-shockwave-flash">')
    });

    $j('img:first', $thumbs_img).addClass('curr_thumb');
    //console.log($j('a.jqzoom:first', $bigphotos_container).clone() );
    $bigphoto.html( $j('a.jqzoom:first', $bigphotos_container).clone() );
}

function activateProductZoom(){
    $j(".jqzoom").jqzoom({
        zoomWidth: 263,
        zoomHeight: 462,
        showEffect:'fadein',
        hideEffect:'fadeout',
        fadeinSpeed: 'fast',
        fadeoutSpeed: 'medium',
        xOffset: 10
    });
}

// -- Pages --

function activatePages() {
    popup_width = $j('.popup_product').width();
    popup_height = $j('.popup_product').height();
    $j('.popup_page_link').live('click', function(event){
        $j.blockUI({
            message: $j('#page_popup'),
            css: {
                left: 	($j(window).width() - popup_width) /2 + 'px',
                top:  	($j(window).height() - popup_height) /2 + 'px',
                width:	popup_width,
                height:	popup_height,
                border: ''
            }
        });
        event.preventDefault();
    });
    $j('#page_popup .popup_close').bind('click', function(){
        $j.unblockUI();
    });
}

// -- Contact --

function activateContactForm(){
    var $contacts_form 	= $j('#contacts_form');
    var $errorContainer	= $j('div.errorContainer');

    $contacts_form.validate({
        onkeyup: false,
        //errorClass:'errorInput',
        //validClass:'defaultInput',
        errorContainer: $errorContainer,
        errorLabelContainer: $j("ol", $errorContainer),
        wrapper: 'li',
        highlight: function(element, errorClass) {
            $j(element).fadeOut(function() {
                $j(element).fadeIn();
            });
        },
        errorPlacement: function(error, element) {},
        rules: {
            "user[fio]":"required",
            "user[email]": {
                required:true,
                email:true
            },
            "user[text]":"required",
            securimage_code_value: "required"
        },
        messages: {
            "user[fio]": {
                required: 'Пожалуйста, введите Ваше ?мя (от 3 до 50 символов)'
            },
            "user[email]": {
                required: 'Пожалуйста, введите Ваш адрес электронной почты (от 3 до 50 символов)',
                email: "Некорректный e-mail"
            },
            "user[text]": {
                required: 'Пожалуйста, введите текст сообщения'
            },
            securimage_code_value: {
                required: 'Пожалуйста, введите защитный код'
            }
        }//,
    /* Бред, но без success глючит форма( не снимаются error стили) */
    //success: function(label) {}
    });
}

// -- Callback --

function activateCallbackForm(){
    var $contacts_form 	= $j('#callback_form');
    var $errorContainer	= $j('div.errorContainer');

    $contacts_form.validate({
        onkeyup: false,
        errorContainer: $errorContainer,
        errorLabelContainer: $j("ol", $errorContainer),
        wrapper: 'li',
        highlight: function(element, errorClass) {
            $j(element).fadeOut(function() {
                $j(element).fadeIn();
            });
        },
        errorPlacement: function(error, element) {},
        rules: {
            "user[phone]":"required",
            "user[text]":"required",
            securimage_code_value: "required"
        },
        messages: {
            "user[phone]": {
                required: 'Пожалуйста, введите Ваш телефон'
            },
            "user[text]": {
                required: 'Пожалуйста, введите текст сообщения'
            },
            securimage_code_value: {
                required: 'Пожалуйста, введите защитный код'
            }
        }
    });
}

// -- Shopping cart Form --

function activateUserCitySelect(cities, delivers) {
    $j('select#city').change(function(){
        var val = $j('select#city').val();
        var $scud_select = $j('select#scud');
        var $wrapper_scud_select = $scud_select.parent().show();

        $j('option', $scud_select).remove();
        if (val == 'Киев') {
            $wrapper_scud_select.hide();
			setDelivery('kiev', delivers);
            return;
        }
        if (val == 'Киевская область') {
            $j('#shipping option:eq(3)').attr('selected', 'selected');
            $wrapper_scud_select.hide();
			setDelivery('kiev', delivers);
            return;
        }
		var attr = $j('select#city option:selected').attr('rel');
		if (attr && (attr == 'elsecity')) {
            $wrapper_scud_select.hide();
			setDelivery('else', delivers);
            return;
		}

		setDelivery('ukraine', delivers);
        var $option = $j('<option>-- Выберите склад на который будет доставлен Ваш заказ --</option>').val('');
        $scud_select.append($option);
        for (city in cities) {
            if (city == val) {
                for(scud in cities[city]) {
                    var scud_text = cities[city][scud].title  + ' ' + cities[city][scud].adress + ' ' + cities[city][scud].phone;
                    $option = $j('<option>' + scud_text + '</option>').attr('val', scud_text);
                    $scud_select.append($option);
                }
                break;
            }
        }
        $option = $j('<option>Необходимо уточнить</option>').attr('val', 'Необходимо уточнить');
        $scud_select.append($option);
        // Поле становится обязательным для ввода
        $scud_select.rules('add', 'required');
    });
}

function setDelivery(type, delivers) {
	var $deliv_el = $j('#shipping');
	$deliv_el.empty();
	
	if (($deliv_el.attr('rel') == 'true') && (type != 'else')) {
		type = 'free';
	}

	for (deliv in delivers) {
		if (delivers[deliv].type == type) {
			$deliv_el.append( '<option value="'+delivers[deliv].value+'">'+delivers[deliv].description+'</option>' );
		}
	}
	return;
}

function activatePhoneMask() {
    $j('#phone').mask('(999)999-99-99');
}

// -- Addithional --

function ajaxError(){
    alert("Ошибка при передаче данных! Попробуйте снова");
}

function reloadPage(){
    window.location.reload();
    return;
}

function checkResponse( responseText ){
    if( typeof(responseText)=='undefined' ){
        alert("Ошибка при передаче данных! Попробуйте снова");
        return false;
    }

    var json = eval( "(" + responseText + ")" );
    if( typeof(json.error)=='undefined' ){
        alert("Ошибка при передаче данных! Попробуйте снова");
        return false;
    }

    return json;
}

function activateCalendar( range ){
    // Календарь
    $j(".calendar").datepicker({
        //mandatory: true,
        yearRange: range,
        dateFormat: $j.datepicker.ATOM
    }).attr("readonly", "readonly");
}

function var_dump(obj) {
    var result = null;
    for (var i in obj)
        result += 'object' + '.' + i + ' = ' + obj[i] + '\n';
    return result;
}

function activateblock(){
    $j.blockUI({
        css: {
            border: 'none',
            padding: '15px',
            backgroundColor: '#000',
            '-webkit-border-radius': '10px',
            '-moz-border-radius': '10px',
            opacity: '.5',
            color: '#fff'
        },
        overlayCSS:{
            'z-index': 1007
        }
    });
}

function deactivateblock(){
    $j.unblockUI();
}

function you_are_sure(str){
    return confirm(str);
}
