/*\**************************************************************************************\
|+| The MIT License
||| 
|+| Copyright (c) 2010 Vorspire, Vita-Nex
||| 
|+| 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($)
{
	$.fn.extend(
	{
		//Attach an event handler that fires when the element has been changed via Keyup/KeyDown
		onChange: function(work)
		{
			var obj = $(this);
			var e = jQuery.Event('onChange');
			var handled = true;

			obj.bind(e.type, function(event) { work(event); });

			obj.bind('keydown', function(event)
			{
				if (!handled)
				{
					obj.trigger(e.type, [event]);
					handled = true;
				}
				else
				{ handled = false; }
			});

			obj.bind('keyup', function(event)
			{
				if (!handled)
				{
					obj.trigger(e.type, [event]);
					handled = true;
				}
				else
				{ handled = false; }
			});

			return obj;
		},

		//Attach an event handler that fires after the element has been changed via Keyup/KeyDown
		onChanged: function(work)
		{
			var obj = $(this);
			var e = jQuery.Event('onChanged');
			var handled = false;

			obj.bind(e.type, function(event) { work(event); });

			obj.bind('keydown', function(event)
			{
				if (!handled)
				{
					obj.trigger(e.type, [event]);
					handled = true;
				}
				else
				{ handled = false; }
			});

			obj.bind('keyup', function(event)
			{
				if (!handled)
				{
					obj.trigger(e.type, [event]);
					handled = true;
				}
				else
				{ handled = false; }
			});

			return obj;
		}
	});
})(jQuery);
