//////////////////////////////////////////////////////
// MooTools 1.2: FocusText Extension                //
// (c) Jordan Sherer 2008                           //
//////////////////////////////////////////////////////
/*
A class used to create a focus labed for input and textareas. The idea is simple, 
use the title / value of an input["text"] or textarea field to display what the 
input is used for. Then, when a user clicks to enter their relevant information
into the input field, the "label" (i.e., value) is erased. The user can then fill it out
without having to erase the value first. When a user hovers over the textarea, 
the user gets a hover of what the original label says (e.g., Enter Email Address). 
If the user erases their input, the original label is restored
*/

var FocusText = new Class({
    Implements:[Options],
    
    storageKeys:
    {
        original:"::FocusTextOriginal::"
    },
    
    options:
    {
        className:"focus_text",
        focusedClassName:"focused"
    },
    
    initialize:function(options)
    {
        var self = this;
        
        if(options != undefined && options != null)
            this.setOptions(options);
        
        $$("." + this.options.className).each(self.add_focus, self);
    },
    
    add_focus:function(element)
    {
        var self = this;
        var originalText = "";
        var type = element.nodeName;
        
        switch(type)
        {
            case "INPUT":
                originalText = element.get("value");
                break;
            case "TEXTAREA":
                originalText = element.get("html");
                break;
            default:
                return;
        }
        
        element.store(this.storageKeys.original, originalText);
        element.set("title", originalText);
        element.addEvent("focus", function(e){ self.perform_focus(element, e); });
    },
    
    perform_focus:function(sender, event)
    {
        var self = this; 
        
        sender.addClass(this.options.focusedClassName);
        
        var value = sender.get("value");
        var original = sender.retrieve(this.storageKeys.original, "");
        
        if(value == original)
        {
            sender.set("value", "");
        }
        
        sender.addEvent("blur", function(e){ self.perform_blur(sender, null); });
    },
    
    perform_blur:function(sender, event)
    {
        var self = this;
        sender.removeClass(this.options.focusedClassName);

        var value = sender.get("value");
        var original = sender.retrieve(this.storageKeys.original, "");

        if(value == original ||
           value.trim() == "")
        {
            sender.set("value", original);
        }

        sender.removeEvents("blur");
    }
});
/*
if(loader) loader.add(function(){
    new FocusText();
});
*/