/**
 * Form
 * 
 * @require     MooTools
 * @require     Nb_Form_Select
 * 
 * @author      Steffen Maechtel <s.maechtel@netzbewegung.com>
 * @version     1.00 alpha
 */

Nb_Form = new Class({
    Implements: Events,
    initialize: function(element, config)
    {
        this.config = config || {};

        this.form = element;
        
        this.form.addEvent('submit', this.onSubmit.bindWithEvent(this));
        
        this.tooltipTimeout = null;
        this.tooltipCurrent = null;

    },
    onSubmit: function(event)
    {
        if (this.config.url)
        {
            event.stop();

            var options = {
                url: this.config.url,
                onComplete: this.onSubmitCallComplete.bind(this)
            }
            
            new Request.JSON(options).post(this.form);
        }
    },
    onSubmitCallComplete: function (response)
    {
        try 
        {
            if (response.success)
            {
                var dimensions = $('canvas').getDimensions();
                
                layer = new Nb_Layer();
                layer.create(response.data.html);
                layer.setStyles({
                    left: parseInt(dimensions.width / 2, 10) - 309,
                    top: parseInt(dimensions.height / 2, 10) - 172
                });
                layer.show();
                
                this.fireEvent('formSuccess', layer.element);
            }
            else
            {
                var element = this.form.elements[response.errors[0].fieldName];
                
                if (element[0] && element[0].get('type') == 'radio')
                {
                    element = element[0];
                }
                
                if (this.tooltipTimeout)
                {
                    $clear(this.tooltipTimeout);
                    this.tooltipCurrent.hideAndDestroy();
                }
                
                var offsetY = 0;
                var offsetX = -110;
                
                // ie8 bugfix
                element = $(element);
                
                // tooltip position
                var formDimensions    = this.form.getDimensions();
                var elementPosition   = element.getPositionNb(this.form);
                var elementDimensions = element.getDimensions();
                var position          = {bottom: formDimensions.height - elementPosition.y + 17, left: elementPosition.x + elementDimensions.width - 95};
                
                
                
                
                
                this.tooltipCurrent = new Nb_Tooltip(response.errors[0].message);
                this.tooltipCurrent.create(this.form, 'bottom');
                this.tooltipCurrent.setStyles(position);
                this.tooltipCurrent.show();
                
                this.tooltipTimeout = this.tooltipCurrent.hideAndDestroy.delay(3000, this.tooltipCurrent);
                
                if (element.getStyle('display') != 'none')
                {
                    element.focus();
                }

            }
        }
        catch (e)
        {
            alert(e.message);
        }
        
            
    },
    initUserControls: function(focus)
    {
        //focus = focus || document.body;

        // select
        this.form.getElements('.usercontrol-select').each(function(element) 
        {
            
            options = {
                selectCurrentInner: 1,
                intOffsetListWidth: -3
            };
            
            new Nb_Form_Select(element, options);
        }); 
        
        // radio groups
        var radioGroups = {};
        this.form.getElements('.usercontrol-radio').each(function(element) 
        {
            if (!radioGroups[element.get('name')])
            {
                options = {};
                radioGroups[element.get('name')] = new Nb_Form_Radio(this.form, element.get('name'), options);
            }
        }.bind(this));
        
        // checkbox
        
        this.form.getElements('.usercontrol-checkbox').each(function(element)
        {
            options = {};
            
            new Nb_Form_Checkbox(element, options)
        })
        
    }
});

