/**
 * Класс для работы с формами "В корзину" в меню
 * @namespace Ocean5.Basket
 */

Ocean5.Basket.CForms = function() {


    /** @type {Array} Массив форм на странице */
    var forms = new Array();

    var _chInput;

    var dTimeout, dInterval;

    /**
     * Найти форму по Id
     * @param {Number} id Идентификатор
     */
    function getFormById(id) {
        for (var i = 0; i < forms.length; i++)
            if (forms[i].objectId == id)
                return forms[i];
        return null;
    }

    /**
     * Хэндлер отправки формы
     */
    function _submitHandler() {
        Ocean5.Basket.addToBasket();
        return false;
    }

    return {
        /**
         * Инициализировать формы
         * @param {Object} items хэш элементво (id : count)
         */
        init : function(items) {
            $('#content .products form')
                .each(function() {
                    var cForm = new Ocean5.Basket.CForm(this);
                    if ((cForm.objectId) && (items[ cForm.objectId ]))
                        cForm.updateState(items[ cForm.objectId ]);
                    forms.push(cForm);
                })
                .find('input.int').inputArrowCounter().end()
                .find('input.float').inputFloat().end();

                $('#content .products .pic a').fancybox({ overlayOpacity: Ocean5.overlayOpacity,
                                                          overlayColor: Ocean5.overlayColor,
                                                          titlePosition: "over"
                                                        });
        },

        /**
         * Обновить форму по id
         * @param {Number} id
         * @param {Number} count
         */
        updateFormById : function(id, count) {
            var form = getFormById(id);
            if (form)
                form.updateState(count);
        },

        getFormById : getFormById
    }
};

/**
 * Форма в меню
 * @param {Object} formEl
 */
Ocean5.Basket.CForm = function(formEl) {
    var self = this;

    /** @type {Object} DOM-элемент формы */
    this.form = formEl;

    /** @type {Number} идентифиткатор объекта */
    this.objectId = 0;

    /** @type {Object} DOM-элемент инпут количества */
    this.countInput = null;

    for (var i = 0; i < this.form.elements.length; i++) {
        if (this.form.elements[i].name == 'id') {
            this.objectId = this.form.elements[i].value;
        } else if (this.form.elements[i].name == 'count') {
            this.countInput = this.form.elements[i];
        }
    }
    this.form.onsubmit = function() {
        self.submit();
        return false;
    }
};

Ocean5.Basket.CForm.prototype = {
    updateState : function(count) {
        if (count > 0)
            this.message(count);
        else
            this.message('');
        this.countInput.value = 1;
        this.enable();
    },
    setLoadingState : function() {
        this.message('');
        this._$message.addClass('loading');
    },
    submit : function() {
        if (this.disabled)
            return;
        count = this.countInput.value.replace(/,/,".");
        var count = parseFloat(count) || 0;
        if(count>0){
            this.setLoadingState();
            this.disable();
            Ocean5.Basket.add(this.objectId, count);
        }
    },
    disable : function() {
        this.disabled = true;
    },
    enable : function() {
        this.disabled = false;
    },
    message : function(text) {
        if (!this._$message)
            this._$message = $(document.createElement('div'))
                                .addClass('message')
                                .attr({'title':'Уже в корзине'})
                                .appendTo($(this.form));
        this._$message.removeClass('loading');
        this._$message.html(text).show();
    }
};

