//jQuery plugin dosoftInput

/*jslint white: true, browser: true, devel: true, windows: true, evil: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, maxerr: 200, maxlen: 120 */

(function($) {
	$.fn.dosoftinput = function(options) {
		return new DoSoftInput(this, options);
	};
	
	var DoSoftInput = function(el, options) {
		this.el = $(el);
		this.interval = null;
		this.inFocus = false;
		this.options = {
				softClass: 'soft',
				softText: 'change me',
				softTestEmptyFunction:null,
				softToggleFunction:null
		};
		if (options) {$.extend(this.options, options);}
		this.initialize();
	};
	
	DoSoftInput.prototype = {
		
		initialize: function () {
			var self = this;
			
			//change to soft if empty
			if (self.emptyTest(this.el)) {
				self.toggleDefaultContent(this, false);//show default
			}
			self.interval = setInterval(function(){self.intervalCheck(self);}, 1500);
			
			//set up events
			self.el.live('focusin',function(e){
				self.inFocus = true;
				//if($(this).val() == self.options.softText) {
				if (self.emptyTest($(this))) {
					self.toggleDefaultContent(this, true);//hide default
				} else {
					//select all text
					$(this).select();		
				}
			});
			self.el.live('focusout', function (e)
			{
				self.inFocus = false;
				if (self.emptyTest($(this))) {
					//add default string and blur
					self.toggleDefaultContent(this, false);//show default
				}
			}); 
			
			//store itself into the element
			self.el.data('dosoftinput', self);
			
		},
		emptyTest: function(el) {
			var self = this;
			if(self.options.softTestEmptyFunction) {
				return self.options.softTestEmptyFunction(el);
			} else {
				var tt = el.val() == '' || el.val() == self.options.softText;
				return tt;
			}
		},
		toggleDefaultContent: function(el, hideDefault) {
			var self = this;
			if(this.options.softToggleFunction) {
				this.options.softToggleFunction(el, hideDefault);
			}
			else {
				if(hideDefault) {
					$(el).removeClass(self.options.softClass).val('');
				} else {
					if(self.options.softText) {
						$(el).val(self.options.softText);
					}
					$(el).addClass(self.options.softClass);
				}
			}
			
		},
		intervalCheck: function(self) {
			if(self.inFocus) return;
			if(self.el.val() == '') {
				//add default string and blur
				self.el.val(self.options.softText).addClass(self.options.softClass);
			}
		},
		
		//API
		cleanInput: function() {
			//console.log(this.el.val() + ', ' + this.options.softText);
			//console.log(this.el.val() == this.options.softText);
			if(this.el.val() == this.options.softText) {
				this.el.val('');
			}
		},
		isPostable: function() {
			return !(	this.el.val() == this.options.softText || 
						this.el.val() == '');
		}
	};
	
})(jQuery); 
