(function($) {
	function RM_Form_Input_Title(obInput, options)
	{
		this.defaults = $.extend({
			useTitle		: true,
			allowCollisions	: true,
			styleMethod		: 'style',
			cssClass		: '',
			cssHintStyle	: {
				color: '#999'
			},
			cssDefaultStyle	: {
				color: '#000'
			},
			hintText		: ''
		}, options);
		this.inputState = false;
		this.input = $(obInput);
		//this.inputName = this.input.attr('name');
		this.init();
	}
	
	RM_Form_Input_Title.prototype.blurHandler = function()
	{
		this.inputState = this.input.val() != '';
		if (!this.defaults.allowCollisions)
			this.inputState = this.input.val() == this.defaults.hintText ? false : this.inputState;
		if (!this.inputState)
		{
			this.input.val(this.defaults.hintText);
			this.addHintStyle();
		}
		else
			this.removeHintStyle();
		this.input.attr('state', this.inputState);
	}
	
	RM_Form_Input_Title.prototype.addHintStyle = function()
	{
		if (this.defaults.styleMethod == 'style')
			this.input.css(this.defaults.cssHintStyle);
		else
			this.input.addClass(this.defaults.cssClass);
		//this.input.removeAttr('name');
	}
	
	RM_Form_Input_Title.prototype.removeHintStyle = function()
	{
		if (this.defaults.styleMethod == 'style')
			this.input.css(this.defaults.cssDefaultStyle);
		else
			this.input.removeClass(this.defaults.cssClass);
		//this.input.attr('name', this.inputName);
	};
	
	RM_Form_Input_Title.prototype.focusHandler = function()
	{
		if (this.inputState == true)
			return;
		if (this.input.val() == '' || this.input.val() == this.defaults.hintText)
			this.input.val('');
		this.removeHintStyle();
	}
	
	RM_Form_Input_Title.prototype.init = function()
	{
		var obSelf = this;
		this.defaults.hintText = this.defaults.useTitle ? this.input.attr('default') : this.defaults.hintText;
		this.input.blur(function()
		{
			obSelf.blurHandler();
		}).focus(function()
		{
			obSelf.focusHandler();
		});
		this.input.bind('title_check', function(){
			obSelf.blurHandler();
		});
		if (!this.input.is(':focus'))
			obSelf.blurHandler();
	}
	
	$.extend($.expr[':'], {
		focus: function(element) { 
			return element == document.activeElement; 
		}
	});
	
	/**
	 * Plugin itself
	 */
	$.fn.inputTitle = function(options, devState){
		return this.each(function() {
			var obTitle = new RM_Form_Input_Title(this, options);
			if (devState == true)
				return obTitle;
		});
	};
})(jQuery);


