jQuery.fn.fselect = function(options){
    jQuery(this).data('index', false);
    return this.each(function(){
        var self= this;
        jQuery(this).find('li').each(function(index){
            $(this).click(function(){
                jQuery(self).find('li').removeClass('ui-selected');
                jQuery(this).addClass('ui-selected');
                jQuery(self).data('index', index);
                CheckOrderForm();
            });
        });
    });
}

jQuery.fn.switchable = function(options){
    var options = jQuery.extend({
        disabledClass: 'switchable-disaled',
        disableInputs: true,
        swapState: false
    }, options);
    return this.each(function(){
        var self= this;
        var $switchable = jQuery(this);
        var $relay = $switchable.find('.relay');
        $switchable.find('.switch input').change(function(){
            
            if(($(this).is(':checked') && !options.swapState) || (!$(this).is(':checked') && options.swapState)){
                if($switchable.hasClass(options.disabledClass)){
                    $switchable.removeClass(options.disabledClass)
                }
                if(options.disableInputs){
                    $relay.find('input, textarea').each(function(){
                        if(undefined !== $(this).attr('disabled')){
                            $(this).removeAttr('disabled');
                        }
                    })
                }
            }
            
            else{
                if(!$switchable.hasClass(options.disabledClass)){
                    $switchable.addClass(options.disabledClass)
                }
                if(options.disableInputs){
                    $relay.find('input, textarea').each(function(){
                        if(undefined == $(this).attr('disabled')){
                            $(this).attr('disabled', 'disabled');
                        }
                    })
                }
            }
        })
        .change();
    });
}

var OrderInfoWork = function(){
    $('.delete_all_items').click(function(event){
        if(!confirm('Удалить все товары из заказа?')){
            return false;
        }
        return true;
    });
    
    var $order_spec = $('#order_specification');
    $order_spec
    .wrapInner('<div id="order_specification_content">')
    .append($('<span class="pseudo_link" id="toggle_order_spec">Показать условия заказа</span>')
    .click(function(){
        var $content = $("#order_specification_content");
        if('none' == $content.css('display')){
            $(this).text('Скрыть условия заказа');
            $content.slideDown();
        }
        else{
            $(this).text('Показать условия заказа');
            $content.slideUp();
        }
    }))
    
    $("#order_specification_content").slideUp('fast');
    
    $('.delete_selected_items').click(function(event){
        if(!confirm('Удалить выделенные товары из заказа?')){
            return false;
        }
        return true;
    });
    
    var $order_info = $('#order_info');
    if($order_info.length){
        var $name = $order_info.find('input[name=name]');
        var $phone = $order_info.find('input[name=phone]');
        var $email = $order_info.find('input[name=email]');
        var $pickup = $order_info.find('input[name=pickup]');
        var $address = $order_info.find('textarea[name=address]');

        $submit_button = $order_info.find('button[type=submit]');

        var CheckOrderInfo = function(){
            var is_ok = true;
            if($name.val().length < 3){
                is_ok = false;
            }

            if($phone.val().length < 7 && $email.val().length < 8){
                is_ok = false;
            }

            if($address.length){
                if(!$pickup.is(':checked') && $address.val().length < 5){
                    is_ok = false;
                }
            }

            if(is_ok){
                if(undefined !== $submit_button.attr('disabled')){
                    $submit_button.removeAttr('disabled');
                }
            }
            else{
                if(undefined == $submit_button.attr('disabled')){
                    $submit_button.attr('disabled', 'disabled');
                }
            }
        }

        $order_info
            .find('input, textarea')
                .bind('keyup change', CheckOrderInfo)
                .end()
            .find('.switchable').switchable({
                swapState: true
            });

        CheckOrderInfo();
    }
}


var CheckOrderForm = function(){
    var pid = order_form.data('product-id');
    var ok = true;
    if(catalog[pid].sizes.length > 1  &&  $('.order_form_sizes ol').data('index') === false){
        ok = false;        
    }
    if(catalog[pid].colors.length > 1  &&  $('.order_form_colors ol').data('index') === false){
        ok = false;        
    }
    if(ok){
        if($('#add_product_button').attr('disabled')){ // ИЕ6-8 глючит без проверки
            $('#add_product_button').removeAttr('disabled').removeClass("disabled");
        }
    }
    else{
        $('#add_product_button').attr('disabled', 'disabled').addClass("disabled");
    }
}

var BindFotosEvents = function(){
    $('.product_fotos').each(function(){
        pid = $(this).data('product-id');
        $(this).find('a').each(function(){
            $(this).attr('rel', 'product'+pid);
        });
    })
    $('.product_fotos a').fancybox();
}

var InitOrderForm = function(){

    window.cart = $('.cart');
    window.order_form = $('#order_form');
    window.order_form.count = $('.order_form_count input');
    
    $(".make_order_button").click(ShowOrderForm);
    $("#close_order_form_button").click(HideOrderForm);
    $("#add_product_button").click(AddProduct);
    
    
    cart.data('default-positioning', {left: parseInt(cart.css('left')), top: parseInt(cart.css('top'))});  
    
    $('.cart').data('default-padding-left', cart.css('padding-left'));
    
    $("body").click(function(){
        if( !order_form.hasClass("hidden") && !order_form.hasClass('order_state_wait') && $('#fancybox-overlay').css('display') != 'block'){
            HideOrderForm();
        }
    });
    
    $("#order_decrement_count").click(function(){
        var c_value=parseInt(order_form.count.val());
        if(c_value>1){
            order_form.count.val(c_value-1).data('previous-value', c_value).change();
        }
        return false;
    })
    
    $("#order_increment_count").click(function(){
        var c_value=parseInt(order_form.count.val());
        order_form.count.val(c_value+1).data('previous-value', c_value).change();
        return false;
    })
    
    order_form.count.change(function(){
        if(isNaN($(this).val()) || $(this).val()<1){
            $(this)
            .val($(this).data('previous-value'))
        }
        else{
            $(this).data('previous-value', $(this).val());
        }
        if($(this).val()==1){
            $("#order_decrement_count").addClass('ui-disabled');
        }
        $('#order_sum').text(parseFloat(catalog[order_form.data('product-id')].price * $('#order-form-count').val(), 2 ).toFixed(2));
        $(this).stop(true,false).css('color', '#AAAA00').animate({'color': '#000000'}, {duration: 1200});
    })

    order_form.count.keyup(function(){order_form.count.change()});
    
    order_form.click(function(event){
        event.stopPropagation();
    })
}

var ShowOrderForm = function(){
    if( !order_form.hasClass("hidden")){
        HideOrderForm();
    }

    order_form.addClass('order_state_default');
    order_form.removeClass('order_state_wait');
    order_form.removeClass('order_state_repeat');
    
    var pid=$(this).data('product-id');
    order_form.data('product-id', pid);
    var pelement='#product_' + pid;
    
    var sizes_element = $('.order_form_sizes ol');
    var colors_element = $('.order_form_colors ol');
    sizes_element.empty();
    colors_element.empty();
    if(catalog[pid].sizes.length>1){
        for(var i=0; i<catalog[pid].sizes.length; i++){
            sizes_element.append('<li>' + catalog[pid].sizes[i] + '</li>');
        }
        $('.order_form_sizes').removeClass('hidden');
        sizes_element.fselect();
    }
    else{
        $('.order_form_sizes').addClass('hidden');
    }
    if(catalog[pid].colors.length>1){
        for(var i=0; i<catalog[pid].colors.length; i++){
            colors_element.append('<li>' + catalog[pid].colors[i] + '</li>');
        }
        $('.order_form_colors').removeClass('hidden');
        colors_element.fselect();
    }
    else{
        $('.order_form_colors').addClass('hidden');
    }
    order_form.count.val('1').data('previous-value', '1');
    order_form.count.change();
    
    $(this).addClass('hidden');
    order_form.appendTo(pelement + ' .order_helper').removeClass('hidden');
    CheckOrderForm();
    $(pelement).addClass('order_active_product').bind('click', function(event){
        event.stopPropagation();
    });

    var pos=order_form.offset();
    var height=order_form.height();
    
    var doc_height=$(window).height();
    var doc_scroll=$(window).scrollTop();
    
    if((doc_scroll + doc_height) < pos.top + height){
        $('html, body').animate({scrollTop:pos.top + height - doc_height + 50}, 'ease');
    }
    

    return false;    
}

var HideOrderForm = function(){
    var pid=order_form.data('product-id');

    $('#product_' + pid).unbind('click').removeClass('order_active_product').find('.make_order_button').removeClass('hidden');
    order_form.addClass('hidden').data('product-id', false);

    return false;
}

var AddProduct = function(){
    var pid = order_form.data('product-id');
    var ok = true;
    if(catalog[pid].sizes.length > 1  &&  $('.order_form_sizes ol').data('index') === false){
        ok = false;        
    }
    if(catalog[pid].colors.length > 1  &&  $('.order_form_colors ol').data('index') === false){
        ok = false;        
    }
    
    var data = {
        id: pid,
        count: order_form.count.val()
    };
    if(catalog[pid].sizes.length > 1)
        data.size = catalog[pid].sizes[$('.order_form_sizes ol').data('index')];
    if(catalog[pid].colors.length > 1)
        data.color = catalog[pid].colors[$('.order_form_colors ol').data('index')];
    
    order_form.removeClass('order_state_default');
    order_form.addClass('order_state_wait');
    order_form.removeClass('order_state_repeat');
    $(".make_order_button").addClass('invisible');
    
    $.ajax({
       url:'/ajax_add_product.php',
       type: 'POST',
       data: $.param(data),
       cache: false,
       dataType: 'xml',
       error: function(jqXHR, textStatus){
           alert('Ошибка при подклучении к серверу!');
            order_form.removeClass('order_state_default');
            order_form.removeClass('order_state_wait');
            order_form.addClass('order_state_repeat');
            $(".make_order_button").removeClass('invisible');
       },
       success: function(data, textStatus, jqXHR){
           var response = $(data).children('response').first();
           if(response.attr('status') == 'ok'){
                var count = response.children('count').text();
                var total_price = response.children('total_price').text();
                //Обновляем значения в корзине
                cart.find('#cart-count').text(count).end()
                    .find('#cart-total-price').text(total_price);
                if(cart.hasClass('cart_empty')){
                    cart.removeClass('cart_empty');
                }
               // Двигаем корзину в зону видимости
                var cart_offset = cart.offset();
                var cart_default_position = cart.data('default-positioning');
                var window_scroll={
                    left: $(window).scrollLeft(),
                    top: $(window).scrollTop()
                }
                if(cart_offset.left < window_scroll.left){
                    cart.css('left', (cart_default_position.left + window_scroll.left -cart_offset.left) + 'px');
                }
                if(cart_offset.top < window_scroll.top){
                    cart.css('top', (cart_default_position.top + window_scroll.top - cart_offset.top + 50) + 'px');
                }
                cart.css('background-color', '#313b68');
                cart.css('padding-left', '3em');
                // Делаем анимацию
                cart.stop(true, false)
                    .animate(
                        {paddingLeft: cart.data('default-padding-left')},
                        {
                            duration: 500
                        }
                    )
                    .animate(
                        {'backgroundColor': '#000000'},
                        {
                            duration: 2500,
                            easing: 'linear',
                            complete: function(){
                                //Возвращаем корзину на место
                                var to_x, to_y;
                                if(window_scroll.top < cart_offset.top + cart.height()){
                                    to_y = cart_default_position.top;
                                }
                                else{
                                    to_y = cart_default_position.top + window_scroll.top - cart_offset.top - cart.height();
                                }
                                
                                if(window_scroll.left < cart_offset.left + cart.width()){
                                    to_x = cart_default_position.left;
                                }
                                else{
                                    to_x = cart_default_position.left + window_scroll.left - cart_offset.left - cart.width();
                                }
                                
                                cart.animate(
                                    {
                                        top: to_y + 'px',
                                        left: to_x + 'px'
                                    },
                                    {
                                        duration: 500,
                                        easing: 'linear',
                                        complete: function(){
                                            cart.css('top', cart_default_position.top);
                                            cart.css('left', cart_default_position.left);
                                        }
                                    }
                                ); 
                        }
                    });
           }
           else{
                alert('Ошибка: '+ response.children('message').text());
                order_form.removeClass('order_state_default');
                order_form.removeClass('order_state_wait');
                order_form.addClass('order_state_repeat');
           }
            $(".make_order_button").removeClass('invisible');
           HideOrderForm();
       }
    });
}


