// TODO: to extend default val() jQuery method for defaultValue check
// to make possible val() return empty string if field value have default value
(function ($) {
	$.unescapeHtml = function (s) {
		$([
			[/&amp;/igm, '&'], 
			[/&quot;/igm, '"'], 
			[/&lt;/igm, '<'], 
			[/&gt;/igm, '>']
		]).each(function () {
			s = s.replace(this[0], this[1]);
		});
		return s;
	};
	
	$.fn.defaultValue = function (params) {
		return this.each(function () {
			var t = $(this),
				defOpts = t.metadata(),
				opts = {};
			if (typeof params != 'undefined' && typeof params.defaultValue != 'undefined') {
				defOpts.prevDefaultValue = defOpts.defaultValue+'';
				$.extend(opts, defOpts, params);
			}
			else {
				$.extend(opts, defOpts);
			}
			$.data(t[0], 'metadata', opts);
			if (t.is(':input') && typeof opts.defaultValue != 'undefined') {
				var tt = opts.defaultValue;
				if (typeof opts.prevDefaultValue != 'undefined') {
					if (t.val() == opts.prevDefaultValue) {
						t.val('');
					}
				}
				tt = $.unescapeHtml(tt);
				var clr = opts.clearOnSubmit;
                $(['focus', 'blur']).each(function () {
                	t.unbind(this+'.defaultValue').bind(this+'.defaultValue', $.fn.defaultValue.h1);
                });
				t.trigger('blur');
				if (/*typeof clr == 'undefined' || */clr === true) {
					t.parents('form').unbind('submit.defaultValue').bind('submit.defaultValue', $.fn.defaultValue.h2);
				}                                
            }                                   
        });              
     };
     
     $.fn.defaultValue.h1 = function (e) {
		var el = $(this);
		var v = $.trim(el.val());
		var tt = el.metadata().defaultValue;
		switch (e.type) {
			case 'blur':
				if (v.length == 0) {
					if (!el.is('input[type=text],textarea')) {
						el.data('originalType', el.attr('type'));
						try {
							el[0].type = 'text';	
						}
						catch (e) {}
					}
					el.addClass('default').val(tt);
				}
				break;
			case 'focus':
				if (v == tt) {
					if (el.data('originalType')) {
						try {
							el[0].type = el.data('originalType');	
						}
						catch (e) {}
					}
					el.removeClass('default').val('');
				}
				break;
		}
	};
	
	$.fn.defaultValue.h2 = function (e) {
		var el = $(this);
		var v = $.trim(el.val());
		var tt = el.metadata().defaultValue;
		if (v == tt) {
			el.removeClass('default').val('');
		}
	};
	
	 
	 $(function (e) {
        $('.defaultValue').defaultValue();
     });
     
})(jQuery);
