$(function(){

    // Изменение количество на кол-во при ресайзе
    function toggleLabelNum(){
        if ($(window).width() < 1100) {
            $('.select-num-label').text('кол-во');
            $('#mention-mark .rating-text').hide();
        }
        else {
            $('.select-num-label').text('количество');
            $('#mention-mark .rating-text').show();
        }
    }
    toggleLabelNum();
    $(window).bind('resize', toggleLabelNum);

    $('.form-select')
        .addClass('css3boxShadow css3boxShadowCorners') // Накладываем тень на форму добавления
        .formselect('.pseudoselect');

    // Изменяем цену товара
    $('#product_select').plasticSelect('change', function(){
        showPriceRetail();
    });
    $('#count_select').plasticSelect('change', function(){
        showPriceRetail();
    });   
    showPriceRetail();

    // Показывает цену товара
    function showPriceRetail() {
        var ps = $('#product_select_pseudo');
        var count = $('#count_select').val();
        var priceRetail = $.trim( $('.plastic-select-selected .price-retail', ps).text() );
        $('.form-select #price-retail').text(priceRetail * count);
        $('#price-count').text(count);
    }
    
    // fix z-index for ie 7
    if ($.browser.msie && $.browser.version == "7.0"){
    	var z = 100;
    	$('.form-select-item').each(function(){
    		$(this).css('z-index', z--);
    	});
    }
});

//***

// Подмигивание корзины
function winkBasket() {
    if (!$('#basket-img').length) { return false; }
    var rateInc = 0.25;
    var $basketImg = $('#basket-img');
    var widthImg = $basketImg.outerWidth();
    var heightImg = $basketImg.outerHeight();
    $basketImg.animate({
        height: heightImg * (1 + rateInc),
        width: widthImg * (1 + rateInc),
        left: -1 * widthImg * rateInc / 2,
        top: -1 * heightImg * rateInc / 2
    }, 100, function(){
    });
    $basketImg.animate({
        height: heightImg,
        width: widthImg,
        left: 0,
        top: 0
    }, 100, function(){
    });
    return true;
}

// Анимация при добавлении в корзину
$.fn.moveIn = function(options) {
    options = $.extend({
        speedInc : 500,
        speedMove : 500,
        rateInc : 0.1,
        goal : {
            elem : null,
            x : null,
            y : null
        },
        border : 'none'
    }, options);

    var objWidth = $(this).outerWidth();
    var objHeight = $(this).outerHeight();

    var $goal = $(options.goal.elem);
    var goalX = options.goal.x != null ?
        options.goal.x + $goal.offset().left :
        $goal.outerWidth() / 2 + $goal.offset().left;
    var goalY = options.goal.y != null ?
        options.goal.y + $goal.offset().top :
        $goal.outerHeight() / 2 + $goal.offset().top;

    // Копируем объект
    var objClone = $(this).clone();
    $(objClone).css({
         top:           $(this).offset().top
        ,left:          $(this).offset().left
        ,border:        options.border
        ,position:      'absolute'
        ,'z-index':     10000
        ,'font-size':   $(this).css('font-size')
        ,'font-weight': $(this).css('font-weight')
    });
    $('body').append(objClone);

    // Увеличение
    if (options.rateInc) {
        var clnTop      = parseInt($(this).offset().top - objHeight * options.rateInc / 2);
        var clnLeft     = parseInt($(this).offset().left - objWidth * options.rateInc / 2);
        var clnWidth    = parseInt(objWidth * (1 + options.rateInc));
        var clnHeight   = parseInt(objHeight * (1 + options.rateInc));
        if ($(window).width() < (clnWidth + clnLeft)) {
            clnWidth = parseInt($(window).width() - clnLeft - 50);
            $(objClone).css('overflow', 'hidden');
        }
        if ($(window).height() < (clnHeight + clnTop)) {
            clnHeight = parseInt($(window).height() - clnTop - 50);
            $(objClone).css('overflow', 'hidden');
        }
        $(objClone).animate({
                 top:           clnTop
                ,left:          clnLeft
                ,width:         clnWidth
                ,height:        clnHeight
            },
            options.speedInc
        );
    }

    var endValue = $.extend({
        left : goalX,
        top : goalY
    }, options.endValue);
    $(objClone).animate(
        endValue,
        options.speedMove,
        function() {
            $(objClone).remove();
            if (typeof(options.callback) == 'function') {
                options.callback();
            }
        }
    );
}

// обработка формы заказа
$.fn.formselect = function() {
    // получаем button`ы формы
    var button = $('button', this);

    // получаем select`ы формы
    var select = $('select', this);

    // получаем форму
    var form = ("FORM" == $(this).attr('tagName')) ? $(this) : $(this).find('form:first');

    // отправка формы ч/з ajaxForm
    $(form).ajaxForm({
         'type':'POST'
        ,'data':{'js':1}
        ,'dataType':'json'
        ,'beforeSubmit':function(arr, $form, options) {
            // выводим уведомление о добавлении товара и блокируем кнопку формы добавления
            $('#basket .text')
                .attr('oldText', $('#basket .text').text())
                .text('Товар добавляется');
            $(button).expandButton('disable');
        }
        ,'complete':function(hxr, s){
            if ("success" != s) {
				if (confirm("action error: result code - " + s + "\nreload page?")) { window.location.reload(); }
			}
        }
        ,'success':function(r, s) {
            if ("success" != s) {
                $('#basket .text').text('Ошибка добавления');
                alert("can't add product (" + s + ")");
                $('#basket .text').text($('#basket .text').attr('oldText'));
                $(button).expandButton('enable');
            } else if (r.error) {
                $('#basket .text').text('Ошибка добавления');
                alert(r.error);
                $('#basket .text').text($('#basket .text').attr('oldText'));
                $(button).expandButton('enable');
            } else {
                // получение объектов для анимации добавления товара в корзину
                var moveinobj = false;
                if ($('#__description .description-gallery .images img:visible').length) {
                    moveinobj = $('#__description .description-gallery .images img:visible:first');
                } else if ($('.caption h1:visible').length) {
                    moveinobj = $('.caption h1:visible:first');
                } else if ($('.caption .h1:visible').length) {
                    moveinobj = $('.caption .h1:visible:first');
                }
                if (moveinobj) {
                    // запуск анимации добавления товара в корзину
                    moveinobj.moveIn({
                        speedInc: 300,
                        rateInc: 0.3,
                        goal: {
                            elem: '#basket',
                            x: 25,
                            y: 15
                        },
                        endValue : {
                            "font-size":6,
                            height:     0,
                            width:      0
                        },
                        callback: function(){
                            $('#basket')
                                .html( $(r.basket).html() )
                                .addClass('full');
                            $('#basket-button').expandButton();
                            $(button).expandButton('enable');
                            // запуск подмигивания корзины
                            winkBasket();
                        }
                    });
                } else {
                    $('#basket')
                        .html( $(r.basket).html() )
                        .addClass('full');
                    $('#basket-button').expandButton();
                    $(button).expandButton('enable');
                    // запуск подмигивания корзины
                    winkBasket();
                }
            }
        }
    });

    // Активация кнопок
    var activeButton = function() {
        var active = true;
        select.each(function(){
            if ("" == $(this).val()) {
                active = false;
            }
        });
        active ? $(button).expandButton('enable') : $(button).expandButton('disable');
    }

    // стилизуем кнопки формы, если они найдены
    if ($(button).length) {
        $(button).expandButton({disabled:true});

        // активация кнопок по умолчанию
        activeButton();
    }

    // Создаем псевдо селекты
    select.each(function(i){
        var selectcur = this;
        var id = $(selectcur).attr('id');
        var pseudo = $("#" + id + '_pseudo').clone();

        if (!pseudo.length || ($.browser.msie && ("6.0" == $.browser.version))) { return false; }

        // *****************
        // Таблица и слайдер

        // Количество элементов в псевдо селекте
        var maxSize = $('.plastic-select-option', pseudo).size();

        var slider = $('.slider', pseudo);

        // добавляем псевдоселект, если существует
        $(selectcur)
            .after(pseudo)
            .plasticSelect();

        if (1 < maxSize) {
            // Позиционируем полоску уровня
            var ypos = (maxSize == 2) ? 20 : -1 * (210 * (maxSize - 2) - 20);
            $('.options', pseudo).css({"background-position" : "-5px " + ypos + "px"});

            // Динамическое изменение ширины колонки в зависимости
            // от количества блоков в заголовке
            var size = $('.options .header span', pseudo).size();
            $('.options span', pseudo).css('width', '' + 100 / size + '%');

            // Дублируем блок со ссылками
            var links = $('.select-link', pseudo);
            var linksTop = $(links).clone();
            $(links).addClass('select-link-bottom');
            $(linksTop).addClass('select-link-top');
            $(pseudo).prepend(linksTop);

            $(slider)
                // Настраиваем высоту слайдера
                .height(20 * (maxSize - 1) + 'px')
                // Создаем слайдер
                .slider({
                    orientation:'vertical'
                    ,min:       1
                    ,max:       maxSize
                    ,step:      1
                    ,stop:      function() {
                        var pos = $(slider).slider('value');
                        var max = $(slider).slider('option', 'max');
                        pos = max + 1 - pos;
                        var value = $(selectcur).plasticSelect('valueByPos', pos);
                        $(selectcur).plasticSelect('value', value);
                        $(selectcur).plasticSelect('close');
                        activeButton();
                    }
                });

            // Смещение ползунка слайдера на выбранный пункт select`а
            var changeSlider = function() {
                $(slider).slider('value',
                    $(slider).slider('option', 'max')
                    -
                    $('.plastic-select-option.plastic-select-selected', pseudo).prevAll('.plastic-select-option').length
                );
            };
            changeSlider();

            // обработка изменения выбранного пункта
            $(selectcur).plasticSelect('change', function(){
                changeSlider();
                activeButton();
            });

            // Движение слайдера за селектом
            var moveBeyondSelect = function() {
                $(selectcur).plasticSelect('mouseenter', function(){
                    var options = $(this).parent('.options');
                    var index = $('.plastic-select-option', options).index( this );
                    var num = $('.plastic-select-option', options).size();
                    $(slider).slider('option', 'value', num - index);

                    // Хак, заставляющий Opera сделать paint указателя слайдера
                    $('.ui-slider-handle', slider).hide();
                    setTimeout(function(){$('.ui-slider-handle', slider).show()}, 0);
                });

                // Возвращение назад
                var pl = $(selectcur).next();
                $(".options", pl).mouseleave(function(){
                    $('.plastic-select-option', pl).each(function(i){
                        if ($(this).hasClass('plastic-select-selected')) {
                            var max = $(slider).slider('option', 'max');
                            $(slider).slider('option', 'value', max - i);

                            // Хак, заставляющий Opera сделать paint указателя слайдера
                            $('.ui-slider-handle', slider).hide();
                            setTimeout(function(){$('.ui-slider-handle', slider).show()}, 0);
                        }
                    });
                });
            }
            moveBeyondSelect();

            // !!! не понятно что делает эта команда
            // в данном случае ajaxForm делает 1 запрос
            // если раскомментировать ajaxForm делает 4 запроса
            // проверялось на
            // /goods/items/luzga-pillow-son/
            // /goods/items/luzga-pillow-son/#props
            // /goods/items/luzga-pillow-son/comments/
            $(selectcur).plasticSelect('trigger', 'change');
        } else { // if (1 < maxSize) {
            $(selectcur).plasticSelect("disable");
        }

        // *******************
        // Список с картинками

        // Показываем текст в select при наведении на item
        $('.options-image li', pseudo).mouseenter(function(){
            var parent = $(this).parents('.plastic-select');
            var value = $('input', this).val();
            var text = $('option[value=' + value + ']', selectcur).text();
            $('.plastic-select-text', parent).text(text);
        }).mouseleave(function(){
            var text = $('option:selected', selectcur).text();
            var parent = $(this).parents('.plastic-select');
            $('.plastic-select-text', parent).text(text);
        });

        // Скрол цветов при переполнении
        var freakscroll = {
            start : 0,
            pos : 0,
            num : $('.options-image .plastic-select-option', pseudo).size(),
            init : function() {
                if (this.num > 0) {
                    var self = this;
                    $('.freakscroll-button', pseudo).mousedown(function(){
                        $(this).addClass('freakscroll-active');
                    }).mouseup(function(){
                        $(this).removeClass('freakscroll-active');
                    });
                    $('.freakscroll-bottom .freakscroll-button', pseudo).click(function(){
                        self.next();
                    });
                    $('.freakscroll-top .freakscroll-button', pseudo).click(function(){
                        self.back();
                    });
                    if (this.num > 9) {
                        $('.freakscroll-bottom', pseudo).show();
                    }
                }
            },
            next : function() {
                var n = this.num - (this.pos + 7);
                if (n / 7 > 1) {
                    this.pos = this.pos + 7;
                    this.scrollToPos(this.pos);
                    $('.freakscroll-top, .freakscroll-bottom', pseudo).show();
                }
                else {
                    this.pos = this.num - 9;
                    this.scrollToPos(this.pos);
                    $('.freakscroll-bottom', pseudo).hide();
                    $('.freakscroll-top', pseudo).show();
                }
            },
            back : function() {
                if (this.pos / 7 > 1) {
                    this.pos = this.pos - 7;
                    this.scrollToPos(this.pos);
                    $('.freakscroll-top, .freakscroll-bottom', pseudo).show();
                }
                else {
                    this.pos = 0;
                    this.scrollToPos(this.pos);
                    $('.freakscroll-bottom', pseudo).show();
                    $('.freakscroll-top', pseudo).hide();
                }
            },
            scrollToPos : function(pos) {
                var left = -40 * pos;
                $('.options-image li', pseudo).css('margin-left', '20px');
                for (var i = 0; i < pos; i++) {
                    $('.options-image li:eq(' + i + ')', pseudo).css('margin-left', left + 40 * i);
                }
            }
        }
        freakscroll.init();
        return true;
    });
}
