var sfsCommandeExpressForm = Class.create({
    options: {
        errorClassName: 'error',
        nameFormat: null,
        isValid: true
    },
    initialize: function(form, options)
    {
        this.form = $(form);
        Object.extend(this.options, options || {});
        Object.extend(this, options || {});
        
        if (!Object.isUndefined(this.form)) {
            this.form.observe('submit', this.onSubmit.bindAsEventListener(this));
            this.determineFormElements();
        }
    },
    determineFormElements: function()
    {
        this.elements = Array();
        var elements = this.form.getElements();
        
        if (Object.isArray(elements)) {
            elements.each(
                function(element) {
                    /*if (element.value.toUpperCase() == 'NA') {
	                    element.value = '';
                    }*/
	                if (element.type.toLowerCase() == 'checkbox') {
                        element.observe('click', this.onChecked.bindAsEventListener(this,element));
                    }
                    this.elements[this.elements.length] = element;
                },
                this
            );
        }
    },
    postExecute: function(response)
    {
        if (response.status == status.SUCCESS) {
            var message = response.data.message;
            var container = $('confirm_ajout');
            container.update(message);
            Effect.Appear(container);
            new Effect.Highlight(container);
            
            var totquantity = response.data.totquantity;
            var container_totquantity_topmenu = $('totquantity_topmenu');//this.form.previous('div.confirm_inscription');
            container_totquantity_topmenu.update(totquantity);
            new Effect.Highlight(container_totquantity_topmenu, {startcolor:'#80B61C'});
            
            var quantity = response.data.quantity;
            var container2 = this.form.previous('div.added_quantity_commande_express');
            container2.down('span').update(quantity);
            Effect.Appear(container2);
            new Effect.Highlight(container2);
            var myurl=document.location.href;
            if (myurl.indexOf("shopping-cart")>0)
            {
            	document.location.reload();
            }
        }
        else if(response.status == status.ERROR)
        {
            var container2 = this.form.previous('div.added_quantity_commande_express');
            Effect.BlindUp(container2);
        }
    },
    onSubmit: function()
    {
        this.clearErrors();
        var elements = this.form.getElements();
        var ajaxRequest = new sfsAjax.Request(this.form.action, {parameters: this.form.serialize()});
        var response = ajaxRequest.getResponse();
        this.options.isValid = false;
        
        if (response.status == status.ERROR)
        {
            this.options.isValid = false;
            this.setErrors(response);
        }
        else if (response.status == status.SUCCESS) {
            this.options.isValid = true;
        }
        else {
            alert('Reponse inconnue');
        }
        
        return this.postExecute(response);
    },
    clearErrors: function()
    {
    	Element.update('commande_error_liste', '');
    },
    clear: function()
    {
        var elements = this.form.getElements();
        elements.each(
            function (element) {
                element.reset();
            }
        );
    },
    isValid: function()
    {
        return this.options.isValid;
    },
    setErrors: function(response)
    {
        var errors = response.errors;
        $H(errors).each(
            function(error) {
                this.showError(error)
            },
            this
        );
    },
    showError: function(error)
    {
        var error = error.value;
        
        if (!Object.isString(error)) {
            var fieldValueHash = $H(error);
            var subFieldName = '';
            
            fieldValueHash.each(
                function(e) {
                    subFieldName = e.key;
                    error = e.value;
                }
            );
        }
               
        if (Object.isUndefined(error)) {
            var error = error.value;
        }
        
        var advice = '<ul class="' + this.options.errorClassName + '"><li>' + error + '</li></ul>';
        Element.insert('commande_error_liste', advice);
    },
    getFieldByName: function(fieldName)
    {
        var field = '';
        this.elements.each(
            function(element) {
                if (element.name == fieldName) {
                    field = element;
                }
            }
        );
        return field;
    }
});