(function($){
  
  $.fn.confirm_fields = function(options){
    
    // extend settings
    this.settings = $.extend({}, $.fn.confirm_fields.defaults, options || {});
    
    return init.call(this);
  };
  
  // default settings
  $.fn.confirm_fields.defaults = {
    timestamp: 0,
    required: false,
    error_message: 'Please complete the form',
    error_elements: null,
    submit_button: null
  };
  
  
  function init(){
    
    // self
    var self = this;
    
    // confirmation field
    this.settings.match_field = $('#' + $(this).attr('id') + '_confirmation');
    
    // timestamp
    touch.call(self);
    
    // listeners
    this.settings.match_field.bind('keyup', function(){
      setTimeout(function(){ match.call(self); }, 1500);
      touch.call(self);
    });
    
    this.settings.submit_button.click(function(){
      if(self.settings.required){
        if($(self).val() == ''){
          alert(self.settings.error_message);
          return false;
        }
      }
      return match.call(self, true);
    });
    
    // return
    return this;
  };
  
  function touch(){
    this.settings.timestamp = timestamp();
  }
  
  function timestamp(){
    return new Date().getTime();
  }
  
  function match(force){
    if(timestamp() - this.settings.timestamp > 1250 || force){
      var a = $(this).val();
      var b = this.settings.match_field.val();
      if(a == '' || b == '' || a == b){
        this.settings.error_elements.hide();
        return true;
      }
      else {
        this.settings.error_elements.show();
        return false;
      }
    }
  }
  
})(jQuery);

