/**
 * @brief  Watch Input box
 * @author NHN (developers@xpresseingine.com)
 **/
(function($){

var class_name = '_watch_input';

$.fn.watch_input = function(settings)
{
	if (this.length == 0) return false;
	if (this.length > 1) {
		this.each(function(){ $(this).watch_input(settings) });
		return true;
	}
	if (!$.isFunction(settings.oninput)) return false;
	if (this.hasClass(class_name)) return false;

	this[0].__wi_oninput = settings.oninput;
	this.addClass(class_name).keydown(_onkeydown).focus(_onfocus).blur(_onblur);

	return this;
};

var timer = null, val = '', ie=$.browser.msie;

function _onkeydown(event)
{
	if ($(this).val() != val) {
		val = $(this).val();
		this.__wi_oninput();
	}
}

function _onfocus(event)
{
	var self = $(this);

	val = self.val();
	if (ie) return true;

	(function fn() {
		if ( (self.val() != val) && $.isFunction(self[0].__wi_oninput) ) {
			val = self.val();
			self[0].__wi_oninput();
		}

		timer = setTimeout(arguments.callee, 100);
	})();
}

function _onblur(event)
{
	val = '';
	if (!ie && timer) {
		clearTimeout(timer);
		timer = null;
	}
}

})(jQuery);
