/*!
 * jQuery Placeholder plugin
 *
 * This plugin is used to support the HTML5 placeholder attribute on most non-HTML5-compliant browsers.
 * 
 * Usage: $.Placeholder.init({ color : "rgb(0,0,0)" });
 * 
 * Date: Sept 2011
 * Author: Otacon (byf1987_at_gmail.com)
 * Project page: https://code.google.com/p/jquery-placeholder-js/
 * Version: 1.1
 * Changelog: 
        1.0 Initial release
        1.1     Updated the code to meet jQuery plugin format. Enabled parameterized init.
 * Tested on: Chrome 10.0; IE6 (IETester); IE8 (IETester)
 * Known Issues: 
 *      Placeholder for Password is currently not supported
 */
(function($){ 
        $.Placeholder = {
                settings : {
                        color : "rgb(169,169,169)", // darkGrey does not work in ie
                        dataName : "original-font-color" // the name of the data tag used by this module
                },
                
                // -- Bind event to components --
                init : function(settings){
                        // Merge default settings with the ones provided
                        if(settings)
                        {
                                $.extend($.Placeholder.settings, settings);
                        }
                        
                        // -- Util Methods --   
                        var getContent = function(element){
                                return $(element).val();                
                        }
                
                        var setContent = function(element, content){
                                $(element).val(content);                
                        }
                        
                        var getPlaceholder = function(element){
                                return $(element).attr("placeholder");
                        }
                        
                        var isContentEmpty = function(element){
                                var content = getContent(element);
                                return (content.length === 0) || content == getPlaceholder(element);
                        }
                                
                        var setPlaceholderStyle = function(element){
                                $(element).data($.Placeholder.settings.dataName, $(element).css("color"));
                                $(element).css("color", $.Placeholder.settings.color);          
                        }
                        
                        var clearPlaceholderStyle = function(element){
                                $(element).css("color", $(element).data($.Placeholder.settings.dataName));              
                                $(element).removeData($.Placeholder.settings.dataName);
                        }
                        
                        var showPlaceholder = function(element){
                                setContent(element, getPlaceholder(element));
                                setPlaceholderStyle(element);   
                        }
                        
                        var hidePlaceholder = function(element){
                                if($(element).data($.Placeholder.settings.dataName)){
                                        setContent(element, "");
                                        clearPlaceholderStyle(element);
                                }
                        }
                        
                        // -- Event Handlers --
                        var inputFocused = function(){
                                if(isContentEmpty(this)){
                                        hidePlaceholder(this);          
                                }
                        }
                        
                        var inputBlurred = function(){
                                if(isContentEmpty(this)){
                                        showPlaceholder(this);
                                }
                        }
                        
                        var parentFormSubmitted = function(){
                                if(isContentEmpty(this)){
                                        hidePlaceholder(this);          
                                }       
                        }
                        
                        // -- Execution --
                        $("textarea, input[type='text']").each(function(index, element){
                                if($(element).attr("placeholder")){
                                        $(element).focus(inputFocused);
                                        $(element).blur(inputBlurred);
                                        $(element).bind("parentformsubmitted", parentFormSubmitted);
                                        
                                        // triggers show place holder on module init
                                        $(element).trigger("blur");
                                        // triggers form submitted event on parent form submit
                                        $(element).parents("form").submit(function(){
                                                $(element).trigger("parentformsubmitted");
                                        });
                                }
                        });
                        
                        return this;
                }
        }
})(jQuery);

