(function($) {
  $.fn.inlineLabel = function(labelText, deleteOnSubmit) {
    var disabledColor = "#ccc";

    $(this).each(function() {
      var $input = $(this);
      var enabledColor = $input.css('color');
      var useText = labelText ? labelText : $input.attr('title');
      var $form = $input.parents('form:first');
      
      if($input.attr('tagName') == 'textarea') {
        var type = 'textarea';
      } else {
        var type = $input.attr('type').toLowerCase();
      }

      switch(type) {
        case 'password': 
          doPasswordField();
          break;
        case 'textarea':
        case 'text':
          doTextField();
          break;
      }
			
			/* Run initial blur event */
			$input.blur();
			
			/* Attach blur and focus events to text and textarea inputs */
			function doTextField() {
        function focused() {
          $input.css('color', enabledColor);
          if($input.val() == useText) {
            $input.val('');
          }
          $input.blur(blured);
        }

        function blured() {
          if(!$input.val()) {
            $input.val(useText);
          }

          if($input.val() == useText) {
            $input.css('color', disabledColor);
          } else {
            $input.css('color', enabledColor);
          }
          $input.focus(focused);
        }
        
        $input.blur(blured);
        $form.submit(focused);
      }

      /* Attach blur and focus events to password inputs */
      function doPasswordField() {
        var passwordReplaced = false;
        var $replacement = makePasswordReplacement();

        function focused() {
          if(!passwordReplaced) {
            return;
          }
          
          $replacement.replaceWith($input);
          passwordReplaced = false;
          $input.blur(blured);
        }

        function blured() {
          if(passwordReplaced) {
            return;
          }
          
          if(!$input.val()) {
            $input.replaceWith($replacement);
            passwordReplaced = true;
            $replacement.focus(function() {
              focused();
              $input.focus();
            });
          }
        }

        function makePasswordReplacement() {
          // You can't change the type of a password field so this is the workaround
          var replacementHtml = $('<div>')
            .append($input.clone())
            .html().replace('type="password"', 'type="text"');
          return $(replacementHtml).css('color', disabledColor).val(useText);
        }
        
        $input.blur(blured);
        $form.submit(focused);
      }
    });
    return $(this);
  }
}) (jQuery);
