/**
 * Default text - jQuery plugin for setting default text on inputs
 *
 * Author: Weixi Yen
 * Email: [Firstname][Lastname]@gmail.com
 * Copyright (c) 2010 Resopollution
 *
 * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
 * Project home: http://www.github.com/weixiyen/jquery-defaultText
 * Version: 0.1.0
 */
(function($){
    $.defaultText = function(opts) {
        var selector = 'input:text[title]',
            ctx = opts && opts.context ? opts.context : 'body',
            css = opts && (opts.css || opts.css === null) ? opts.css : 'default',
            form_clear = [{selector: 'form', type:'submit'}];
            clear_events = opts && opts.clearEvents ? opts.clearEvents : form_clear;

        $(ctx).delegate(selector, 'focusin', function(e){
            //e.stopPropagation();
            onFocus($(this));
        }).delegate(selector, 'focusout', function(e){
            //e.stopPropagation();
            var ele = $(this),
                title = ele.attr('title'),
                val = ele.val();
            if ($.trim(val) === '' || val === title) ele.val(title).addClass(css); 
        });

        $(selector).trigger('focusout');

        $.each(clear_events, function(i, event){

            var type = event.type,
                ele = $(event.selector),
                len = ele.length;

            if (ele.size()) {
                var ev_queue = $.data( ele.get(0), "events" );

                if (ev_queue) {
                    for (var x=0; x < len; x++) {
                    	if ($.data( ele.get(x), "events" )[type]) {
                        
                    		$.data( ele.get(x), "events" )[type].unshift({
	                            type : type,
	                            guid : null,
	                            namespace : "",
	                            data : undefined,
	                            handler: function() {
	                                blink();
	                            }
	                        });
                    	}
                    }
                } else {
                    ele.bind(type, function(){
                        blink();
                    });
                }
            } 
        });

        function onFocus(ele) {
            var title = ele.attr('title'),
                val = ele.val();
            ele.removeClass(css);
            if (title === val) ele.val('');
        }

        function blink(){
            $(selector).each(function(){
                onFocus($(this));
            });
            setTimeout(function(){
                $(selector).trigger('focusout'); 
            }, 1);
        }
    }
})(jQuery);
