(function(jQuery)
{
	
	// this is the starting point of the plugin
	jQuery.fn.novalue = function(value)
	{
		// loop through each of the passed elements and then return them for chaining
		return this.each(function()
		{
			var input = $(this);
			assignValue(input, value);
			insertNoValue(input, value);
		});
	};
	
	// function assignValue
	function assignValue(input, value)
	{	
		var validElement = false;
		
		if (input.is('input:text'))
		{
			validElement = true;
		}
		else if (input.is('input:password'))
		{
			validElement = true;
		}
		else if (input.is('textarea'))
		{
			validElement = true;
		}
		
		if (validElement === true)
		{
			// get the parent form for the input
			var form = input.parents('form');
			if (form !== undefined)
			{
				form.bind('submit', {input: input, value: value}, formSubmitBind);
			}
			
			input.bind('blur', {value: value}, insertNoValueBind);
			input.bind('focus', {value: value}, removeNoValueBind);
		}
	};
	
	// function insertNoValue
	function insertNoValue(input, value)
	{
		if (input.is('input:text'))
		{
			if (input.val() === '') input.val(value);
		}
		else if (input.is('input:password'))
		{
			if (input.val() === '') input.val(value);
		}
		else if (input.is('textarea'))
		{
			if (input.val() === '') input.val(value);
		}	
	};
	
	// function removeNoValue
	function removeNoValue(input, value)
	{
		if (input.is('input:text'))
		{
			if (input.val() === value) input.val('');
		}
		else if (input.is('input:password'))
		{
			if (input.val() === value) input.val('');
		}
		else if (input.is('textarea'))
		{
			if (input.val() === value) input.val('');
		}	
	};
	
	// function formSubmit
	function formSubmit(input, value)
	{
		removeNoValue(input, value);
	};

	// function removeNoValueBind
	function removeNoValueBind(ev)
	{
		var value = ev.data.value;
		var input = $(ev.currentTarget);
		
		removeNoValue(input, value);
	};

	// function insertNoValueBind
	function insertNoValueBind(ev)
	{
		var value = ev.data.value;
		var input = $(ev.currentTarget);
		
		insertNoValue(input, value);
	};
	
	function formSubmitBind(ev)
	{
		var value = ev.data.value;
		var input = ev.data.input;
		
		formSubmit(input, value);	
	};
	
})(jQuery);