/*
 * Copyright (c) 2009 Patrick Lai <patrick.lai@stanford.edu>
 * 
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

(function($) {
	function startHint(element) {
    	$(element)
	    	.css({
	    		'color': '#aaaaaa',
	    		'font-style': 'italic'
	    	})
    		.attr('value', $(element).attr('title'));
	};
	
	function stopHint(element) {
		$(element)
	    	.css({
	    		'color': '',
	    		'font-style': ''
	    	})
    		.attr('value', '');
	};
	
	$.fn.extend({
		hint: function(options) {
			var defaults = {
				onBeforeFocus: function(element) { return false; },
				onAfterFocus: function(element) { return false; },
				onBeforeBlur: function(element) { return false; },
				onAfterBlur: function(element) { return false; }
			};

			var options = $.extend(defaults, options);

			this.focus(function() {
				options.onBeforeFocus(this);
			    
			    if ($(this).attr('value') == $(this).attr('title'))
			    	stopHint(this);
			    
			    options.onAfterFocus(this);
			})
				
			this.blur(function() {
				options.onBeforeBlur(this);
				
			    if ($(this).attr('value') == '')
			    	startHint(this);
			    
			    options.onAfterBlur(this);
			});

			return this.each(function() {
				startHint(this);
			});
		},
		resetHint: function() {
			return this.each(function() {
				startHint(this);
			});
		}
    });
})(jQuery);
