﻿/*
* 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], input.defaultText, textarea[title], textarea.defaultText',
            ctx = opts && opts.context ? opts.context : 'body',
            css = opts && opts.css ? opts.css : 'default',
            form_clear = [{ selector: 'form', type: 'submit'}];
        clear_events = opts && opts.clearEvents ? form_clear.concat(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').length > 0 ? ele.attr('title') : ele.data('title')),
                val = ele.val();
            if ($.trim(val) === '' || val === title) ele.val(title).addClass(css);

        });

        $(selector).trigger('focusout');

        $.each(clear_events, function (i, event) {
            var sel = event.selector,
                type = event.type,
                ele = $(sel),
                len = ele.length;

            if (ele.size()) {
                var ev_queue = $.data(ele.get(0), "events");

                if (ev_queue) {
                    for (var x = 0; x < len; x++) {
                        $.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.data('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);
        }

        $(selector).each(function () {
            $(this).data('title', $(this).attr('title'));
            $(this).removeAttr('title');
            $(this).addClass('defaultText');
        });
    }
})(jQuery);
