/**
* @author Jasper Haggenburg
* @url http://jpunt.nl/
* Based on Remy Sharp jquery.hint: http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/
*/

(function ($) {

$.fn.hint = function (blurClass, blankClass) {
		if (!blurClass)		blurClass 	= 'blur';
		if (!blankClass) 	blankClass 	= 'blank';
    
    return this.each(function () {	
        var $input = $(this),
            title = $input.attr('title'),
            $form = $(this.form),
            $win = $(window),
            cursor_timeout;

				function setBlankHint() {
					//Set hint and class
					$input.val(title).addClass(blankClass).removeClass(blurClass);
					//Set cursor to start
					cursor_timeout = setTimeout(function() {
						$input.setCursorPosition(0)
					},10);
				}

				function remove() {
					//Remove hint
					if(this.value === title) 	
						$input.val('').removeClass(blurClass).removeClass(blankClass);
				}

        function onFocus() {
        	if(this.value === title)
        		setBlankHint();
        }

				function onBlur() {
					if(this.value === '') 		
						$input.val(title);
					if(this.value === title) 	
						$input.addClass(blurClass).removeClass(blankClass);
				}
				
				function onKeyDown(e) {
      		var ignored_keys = [8, 16, 17, 18, 91, 93];
        	if(this.value === title && !$input.hasClass(blurClass) && $.inArray(e.keyCode, ignored_keys) == -1) {
        		//User begins typing
        		$input.val('').removeClass(blurClass).removeClass(blankClass);
      		} else if(this.value === '') {
      			//Set hint
      			setBlankHint();
      		}
				}

				function onKeyUp() {
        	if(this.value == '') 
        		setBlankHint();
				}				

        // only apply logic if the element has the attribute
        if (title) { 
        		if($input.val()==='') $input.val(title);
            // on blur, set value to title attr if text is blank
            $input.unbind('focus').focus(onFocus).unbind('keydown').keydown(onKeyDown).unbind('keyup').keyup(onKeyUp).unbind('blur').blur(onBlur).blur(); // now change all inputs to title
            // clear the pre-defined text when form is submitted
            $form.submit(remove);
            $win.unload(remove); // handles Firefox's autocomplete
        }
    });
};


//http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
$.fn.setCursorPosition = function(pos) {
  this.each(function(index, elem) {
    if (elem.setSelectionRange) {
      elem.setSelectionRange(pos, pos);
    } else if (elem.createTextRange) {
      var range = elem.createTextRange();
      range.collapse(true);
      range.moveEnd('character', pos);
      range.moveStart('character', pos);
      range.select();
    }
  });
  return this;
};

})(jQuery);
