(function($) {
	
	FancyInput_class = function(element,options)
	{
		var elem = $(element);
		var ops = options != undefined ? options : {};
		var self = this;
		var status = false;
		
		
		// Private interface
		
		var default_value = elem.attr('default');
		
		if(elem.val() != default_value) elem.addClass('data');
		
		elem.focusin(function(e){
			elem.addClass('focus');
			if(elem.val() == default_value) elem.val('');
			elem.addClass('data');
			self._on_focusin(self);
		})
		
		elem.focusout(function(e){
			elem.removeClass('focus');
			if(elem.val() == '') elem.val(default_value);
			if(elem.val() == default_value) elem.removeClass('data');
			self.status = elem.hasClass('data');
			self._on_focusout(self);
			
		})
		
		elem.change(function(e){
			//elem.addClass('focus');
			if(elem.val() == default_value) 
			{
				elem.removeClass('data')
			} else
			{
				elem.addClass('data');
			}
			
			//self._on_focusin(self);
		})
		
		// Public interface
		return {
	 		setup: function() {
	 			self._on_focusin = (ops.on_focusin != undefined ) ? ops.on_focusin : function(){};
	 			self._on_focusout = (ops.on_focusout != undefined ) ? ops.on_focusout : function(){};
	 		},
	 		reset: function(){
	 			elem.removeClass('data')
	 			elem.val(default_value)
	 		}
	 	}
	}		
	$.fn.fancyInput = function(options){
		return $.fn.encapsulatedPlugin('fancyInput', FancyInput_class, this, options);	
	}

})(jQuery);
