DesignCafe.Basket.Form = function() {

    var REQUIRED_FIELDS = ['person', 'phone', 'address'];

    var SCROLL_DURATION = 250;
    var SLIDE_DURATION = 400;

    var items = new Array();
    var $form = $();

    var minTotal = 0;

    var submiting = false;

    function init() {
        $form = $(document.getElementById('order-form'));
        var $inputs = $form.find('.items input')
            .inputArrowCounter({ clearButton : true })
            .bind('clear', _removeItemHandler)
            .bind('change', _updateItemHandler);
        for (var i = 0; i < $inputs.length; i++) {
            var $i = $inputs.eq(i);
            var $el = $i.parent().parent();
            var count = $i.val();
            var id = $i.get(0).id.substr(3);
            var price = '';
            var $s = $el.find('.price span');
            for (var j = 0; j < $s.length; j++)
                price += $s.eq(j).html().toString();
            price = parseFloat(price);
            items.push({
                id : id,
                count : count,
                price : price,
                el : $el
            });
        }
        $form.find('.submit span').click(function() { submit() });
        $form.submit(function() { return false; });

        var $minSum = $form.find('input[name="min_sum"]');
        if ($minSum.length)
            minTotal = parseFloat($minSum.val());

        updateTotal();
    }

    function _removeItemHandler() {
        var id = this.id.substr(3);
        DesignCafe.Basket.update(id, 0);
    }

    function _updateItemHandler() {
        var id = this.id.substr(3);
        DesignCafe.Basket.update(id, this.value);
    }


    function getItemById(id) {
        for (var i = 0; i < items.length; i++)
            if (items[i].id == id)
                return items[i];
        return null;
    }

    function updateTotal() {
        var total = 0;
        for (var i = 0; i < items.length; i++)
            total += items[i].price * items[i].count;
        $(document.getElementById('order-total-price')).html(total.toPrice());

        if (total < minTotal) {
            $form.find('.submit').hide();
            $form.find('.min-summ').show();
        } else {
            $form.find('.submit').show();
            $form.find('.min-summ').hide();

        }
    }

    function checkFields() {
        var flag = true;
        var fields = $form.serializeArray();

        $form.find('input,label').removeClass('error');
        for (var i = 0; i < fields.length; i++) {
            var val = fields[i].value.trim();
            if ((REQUIRED_FIELDS.indexOf(fields[i].name) > -1) && (!val)) {
                $form.find('input[name="' + fields[i].name + '"],textarea[name="' + fields[i].name + '"]')
                    .addClass('error')
                    .siblings('label')
                        .addClass('error');
                flag = false;
            }
        }
        if (!flag) {
            $(document.documentElement).animate({
                scrollTop : $form.offset().top - 10
            }, SCROLL_DURATION, 'swing');
        }
        return flag ? fields : null;
    }

    function submit() {
        var fields = checkFields();
        if ((!submiting) && (fields)) {
            var hash = {
                '_do' : 'submit_order'
            };
            for (var i = 0; i < fields.length; i++)
                hash[fields[i].name] = fields[i].value
            submiting = true;
            DesignCafe.getJSON(hash, _responseHandler);
        }
    }

    function _responseHandler(data) {
        if (data.ok) {
            if (data.content) {
                var $p = $(document.createElement('div'))
                    .addClass('text')
                    .html(data.content)
                    .hide()
                    .insertAfter($form);
                $form.slideUp(SLIDE_DURATION);
                $p.slideDown(SLIDE_DURATION);
            }
        } else {
            alert('Произошла ошибка при отправке заказа!');
        }
    }


// ---------
    init();

    return {
        updateItemById : function(id, count) {
            var item = getItemById(id);
            if (item) {
                item.count = count;
                item.el.find('input').val(count);
            }
            updateTotal();
        },
        removeItemById : function(id) {
            var item = getItemById(id);
            if (item) {
                item.el.remove();
                var idx = items.indexOf(item);
                items.splice(idx, 1);
            }
            updateTotal();
        }
    }
}

