(function($, window, undefined){
  $.fn.extend({
    inputPlaceholder : function (settings) {
      // Csak TEXT és PASSWORD típusú INPUT mezők kellenek.
      var inputs = this.filter('input:text,input:password'),
          iph = '.inputPlaceholder',
          focus = 'focus' + iph,
          blur = 'blur' + iph,
          clearValues;

      if (settings === 'remove') {
        inputs.unbind(iph);
        return this;
      }

      // A beállításokat kiegészítjük az alapértelmezettekkel.
      settings = $.extend({
          'blurClass'    : '',
          'focusClass'   : '',
          'clearOnSubmit': true,
          'useAttribute' : false
        }, settings);

      if (inputs.length) {
        inputs.each(function () {
          var field = $(this),
              placeholder = settings.useAttribute ?
                field.attr(settings.useAttribute) :
                field.val();

          field.bind(focus, function(event) {
              // Eltároljuk az aktuális értéket későbbi felhasználásra.
              var fieldValue = field.val();

              // A mező értéke megegyezik az alapértelmezett értékkel, akkor ürítsük ki.
              if (placeholder === fieldValue) {
                field.val('').removeClass(settings.blurClass).addClass(settings.focusClass);
              }
            }).bind(blur, function (event) {
              // Eltároljuk az aktuális értéket későbbi felhasználásra.
              var fieldValue = field.val();

              // A mező értéke üres, rakjuk bele az alapértelmezettet.
              if (!fieldValue) {
                field.val(placeholder).removeClass(settings.focusClass).addClass(settings.blurClass);
              }
            }).triggerHandler(blur);
        });

        // Üríteni kell a mezőt a form elküldésekor?
        if (settings.clearOnSubmit) {
          clearValues = function () {
            inputs.each(function () {
              // Minden elemen végig kell mennünk `each`-csel
              // mivel a `triggerHandler` csak az első elemen hajtja végre az eseményt.
              $(this).triggerHandler(focus);
            });
          };
          inputs.closest('form').bind('submit' + iph, clearValues);
          $(window).bind('unload' + iph, clearValues);
        }
      }

      return this;
    }
  });
}(jQuery, this));