$(function() {
    $('.to-basket').click(ajax.basket.add);
});


var ajax = {
    'basket': {
        'add': function(e) {
            if ((e) && (e.preventDefault)) {
                e.stopPropagation();
                e.preventDefault();
            }

            var id = $(this).attr('rel');
            if (id) return ajax.basket.addItem(id);

            var id = $(this).attr('rev');
            if (id) return ajax.basket.addSet(id);

            return false;
        },


        'addItem': function(id) {
            $.ajax({
                url : '/basket/add/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : {productId : id},
                success : ajax.basket.success
            });
        },


        'addSet': function(id) {
            $.ajax({
                url : '/basket/add/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : {setId : id},
                success : ajax.basket.success
            });
        },


        'success': function(data) {
            ajax.basket.animate(data, ajax.basket.updateBasketBlock);
        },


        'animate': function(data, callback) {
            var $img = $('.mainimg_'+data.id).eq(0);

            if ($img.length)
                ajax.basket.animateAction($img, data, callback);
            else
            {
                callback(data.basket);
                $('#b_popup').html(data.popup).css('display', 'block');
            }
        },


        'animateAction': function($img, data, callback) {
            var pos = $img.offset();
        	var result_pos = $('#basket-block').offset();

        	var img = document.createElement('img');

        	document.body.appendChild(img);

            $('#basket-block .more').mouseover();

        	$(img).width($img.width()).attr('src', $img.attr('src')).css({
                position: 'absolute',
                top: pos.top,
                left: pos.left,
                opacity: 0.9,
                'z-index': 600
            }).animate({
                top: result_pos.top + 70,
                left: result_pos.left + 40,
                width: 50
            }, 600, function(){
                $(this).remove();
                $('#basket-block').mouseout();
                window.setTimeout(function(){callback(data.basket);}, 400);
            });
        },


        'del': function(id, mode) {
            if (!id) return false;

            switch (mode) {
                case 'item':
                    var data = {productId : id};
                    break;

                case 'set':
                    var data = {setId : id};
                    break;

                default:
                    return false;
            }

            $.ajax({
                url : '/basket/del/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : ajax.basket.successBasket
            });
        },


        'update': function(id, mode, num) {
            if (!id) return false;

            switch (mode) {
                case 'item':
                    var data = {productId : id, count : num};
                    break;

                case 'set':
                    var data = {setId : id, count : num};
                    break;

                default:
                    return false;
            }

            $.ajax({
                url : '/basket/add/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : ajax.basket.successBasket
            });
        },


        'discount': function() {
            $.ajax({
                url : '/basket/discount/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : {},
                success : ajax.basket.successBasket
            });
        },


        'choose': function(id, mode, choose) {
            if (!id) return false;

            switch (mode) {
                case 'item':
                    var data = {productId : id, count : 1, choose : (choose?1:0)};
                    break;

                case 'set':
                    var data = {setId : id, count : 1, choose : (choose?1:0)};
                    break;

                default:
                    return false;
            }

            $.ajax({
                url : '/basket/add/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : ajax.basket.successBasket
            });
        },


        'successBasket': function(data) {
            ajax.basket.updateBasketBlock(data.basket);
            ajax.basket.updateTotalPrice(data.price);
        },


        'updateBasketBlock': function(data) {
            $('#basket-block').html(data);
            basketBlock({selector: '#basket-block'});
        },


        'updateTotalPrice': function(data) {
            var str = '';
            for (p in data) str += '<span>' + data[p] + '</span>';
            $('.big-price').html(str + '<ins>р</ins>');
        }
    },



    'user': {
        'register': function($form, callback) {
            var error = false;

            var mes = $form.find('.message');
            mes.html('');

            var data = {
                'email': $form.find('input[name="email"]').val()
            }

            if (!data.email) {
//                mes.html('<div style="color:#900;">Не все обязательные поля заполнены!</div>');
                $form.find('input[name="email"]').parent().find('.ph').show();
                error = true;
            }

            else if (!/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z_-]+\.)+[a-z]{2,4}$/i.test(data.email)) {
                mes.html('<div style="color:#900;">Некорректно указан <strong>Email</strong>!</div>');
                error = true;
            }


            if (!error) $.ajax({
                url : '/user/register/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : function(json){
                    if (json.bool) callback();
                    else mes.html('<div style="color:#900;">' + json.text + '</div>');
                }
            });
        },


        'login': function($form) {
            var error = false;

            var mes = $form.find('.message');
            mes.html('');

            var data = {
                'email': $form.find('input[name="email"]').val(),
                'password': $form.find('input[name="pass"]').val()
            }

            if (!data.email) {
//                mes.html('<div style="color:#900;">Вы не указали <strong>Email</strong>!</div>');
                $form.find('input[name="email"]').parent().find('.ph').show();
                error = true;
            }


            if (!error) $.ajax({
                url : '/user/login/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : function(json){
                    if (json.bool) window.location.href = (window.location.pathname == '/basket/order/') ? '/basket/order/' : '/user/';
                    else mes.html('<div style="color:#900;">' + json.text + '</div>');
                }
            });
        },


        'save': function($form) {
            var error = false;

            var mes = $form.find('.message');
            mes.html('');


            var data = {
                'address': $form.find('textarea[name="address"]').val(),
                'type': ($form.find('input[name="type"]').attr('checked') == 'checked') ? 2 : 1
            };
            var vars = ['password','firstname','name','phone','orgname','ur_address','fact_address','bank','inn','kpp','okp','rs','kors','bik'];

            for (p in vars)
                data[vars[p]] = $form.find('input[name="' + vars[p] + '"]').val();


            if (!error) $.ajax({
                url : '/user/save/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : function(json){
                    if (json.bool) {
                        mes.html('<div style="color:#090;">' + json.text + '</div>');
                        setTimeout(function(){window.location.href = '/user/';}, 2000);
                    }
                    else mes.html('<div style="color:#900;">' + json.text + '</div>');
                }
            });
        }
    },




    'order': {
        'send': function(data, callback) {
            $.ajax({
                url : '/basket/doneajax/',
                dataType : 'json',
                type : 'post',
                timeout : 10000,
                data : data,
                success : function(json) {
//                    alert(json.timer + ' ' + json.global_timer);
                    if (!json.status) {
                        var error = '';

                        for (p in json.error)
                            error += '<div style="color:#900;">' + json.error[p] + '</div>';

                        $('#order_message').html(error);
                    }
                    else callback(json.orderId);
                }
            });
        }
    }
};
