/**
Class: FormRefiller

Note:
    Mootools Verion (Tested on Mootools v1.11) of the ImprovedFormRefiller.js
    Will put the Title of empty Input in its Value.
    Removes it, when clicked into.
    If nothing was filled in, restores the default.
    Removes any default values before sending the form.

Arguments:
    form_element - the form element whose input fields will be refilled
    options - optional
    
Options:
    className - the css class of the input field to worry about (default: 'refill')
    passWordClassName - the class of passWord fields to add/remove (some browsers dont provide changing password fields input type)
                        if given the title attribute will be ignored
    
Example:
    (start code)
    <form name="login" id="login" action="" method="post">
        <input type="text" name="UserName" id="login_username" title="Benutzername" class="refill" />
        <input type="password" name="UserPassword" id="login_password" title="Password" class="refill password_desc" />
    </form>
    
    window.addEvent('domready', function()
    {
       new FormRefiller( $('login') );
    });
    
    // for all Forms on the site do:
    
    window.addEvent('domready', function()
    {
        $$('form').each(function(form_element)
        {
            new FormRefiller(form_element);
        });
    }); 
    (end)
*/
var FormRefiller = new Class({

    Implements: [Options],

    options:
    {
        className:  'refill',
        passWordClassName: false
    },
    
    initialize: function(form_element, options)
    {
        this.setOptions(options);
        this.formElement = form_element;
        
        if (!this.formElement)
        {
            return;
        }
        
        this.clearOnBeforeSend = false;
        this.formElement.getElements('input.'+this.options.className).each(function(input_element)
        {
            this.clearOnBeforeSend = true;
            
            if( '' == input_element.get('value') && ('password' != input_element.get('type') || !this.options.passWordClassName))
            {
                input_element.set('value', input_element.get('title'));
            }
            
            if('password' == input_element.get('type') && this.options.passWordClassName)
            {
                if(!input_element.hasClass(this.options.passWordClassName))
                {
                    input_element.addClass(this.options.passWordClassName);
                }
            }
            
            input_element.addEvent('focus', function(evt)
            {
                evt = new Event(evt);
                this.emptyField(evt.target);
            }.bind(this));
            
            input_element.addEvent('blur', function(evt)
            {
                evt = new Event(evt);
                this.refillField(evt.target);
            }.bind(this));
        
        }.bind(this));
        
        if(this.clearOnBeforeSend)
        {
            this.formElement.addEvent('submit', function()
            {
                this.removeFormDefaults();
            }.bind(this));
        }
    },
    
    emptyField: function(field)
    {
        if ((field.get('value') == field.get('title')) && ('hidden' != field.get('type')))
        {
            field.set('value', '');
        }
        
        if('password' == field.get('type') && this.options.passWordClassName)
        {
            field.removeClass(this.options.passWordClassName);
        }
    },

    refillField: function(field)  
    {  
        if('password' == field.get('type') && this.options.passWordClassName && '' == field.get('value'))
        {
            field.addClass(this.options.passWordClassName);
        }
        
        if ( ('password' != field.get('type') || !this.options.passWordClassName) && '' == field.get('value'))
        {
            field.set('value', field.get('title'));
        }
    },
    
    removeFormDefaults: function()
    {
        this.formElement.getElements('input.'+this.setOptions.className).each(function(input_element)
        {
            this.emptyField(input_element)
        });
        
    }

});

window.addEvent('domready', function()
{
   new FormRefiller( $('newsletter') );
   new FormRefiller( $('newsletter_alt') );
});
