function preventMultipleSubmission (event) {
    var button = $(Event.element(event));
    
    button.insert({
        'after': new Element('input', {
            type: 'button',
            'class': 'button medium',
            value: 'Processing Order...'
        })});
    button.wrap(new Element('div').hide());
}


document.observe("dom:loaded", function() {
/*  var forms = $$('form:not([rel~="nofocus"])');
  if (forms.size() > 0) {
    forms[0].focusFirstElementBySelectors(['input[class~=field-with-errors]','input[rel~=focus]']);
  }*/
  
  if($('process_order'))  
    $('process_order').observe('click', preventMultipleSubmission.bindAsEventListener());
});


Event.addBehavior.reassignAfterAjax = true;
Event.addBehavior({
  'input[prefix], textarea[prefix]' : function(e) {
    var prefix = this.readAttribute("prefix");
    this._prefix = prefix;
    
    if (this.value.empty() || this.value == prefix) {
      this.value = prefix;
      this.addClassName("default");
    }
  },
  
  'input[prefix]:focus, textarea[prefix]:focus' : function(e) {
    if (this.value == this._prefix) {
      this.removeClassName("default");
      this.setCaretPosition(this.value.length);
    }  
  },

  'input[prefix]:blur, textarea[prefix]:blur' : function(e) {
    if (this.value.empty()) {
      this.value = this._prefix;
      this.addClassName("default");
    }  
  },
  
  'input[default], textarea[default]' : function(e) {
    var def = this.readAttribute("default");
    
    this._label = new Element('label', { 'class': 'default', 'for': this.id }).update(def);
    this.insert({before: this._label});
    if (!this.value.empty() && def != this.value) {
      this._label.hide();
    }
    
    var offsetTop = parseInt(this.getStyle('paddingTop'), 10) + 1;
    var offsetLeft = parseInt(this.getStyle('paddingLeft'), 10) + 3;
    
    this._label.clonePosition(this, { setWidth: false, setHeight: false, offsetLeft: offsetLeft, offsetTop: offsetTop });
  },
  
  'input[default]:keydown, textarea[default]:keydown' : function(e) {
    if (e.keyCode > 46 && e.keyCode != 224) {
      this._label.hide();
    }
  },
  
  'input[default]:keyup, textarea[default]:keyup' : function(e) {
    if (!this.value.empty()) {
      this._label.hide();
    }
  },
  
  'input[default]:blur, textarea[default]:blur' : function(e) {
    if (this.value.empty()) {
      this._label.show();
    }
  },
  
  'textarea[maxlength]' : function(e) {
    this._maxlength = parseInt(this.readAttribute('maxlength'), 10);
  },
  
  'textarea[maxlength]:keyup' : function(e) {
    this.value = $F(this).slice(0, this._maxlength);
  },
  
  'textarea[maxlength]:keypress' : function(e) {
    if ($F(this).length > this._maxlength) {
      Event.stop(e);
    }
  },
  
  'form.bling:submit' : function(e) {
    $$('input[prefix], input[default], textarea[prefix], textarea[default]').each(function (input) {
      if (input.value == input._default)
        input.value = "";
    });
  },

  'form.bling input[type=submit]' : function(e) {
    Form.Element.enable(this);
  },

  'form.bling input[type=submit]:click' : function(e) {
    setTimeout(function () {
      this.addClassName('disabled');
      Form.Element.disable(this);
    }.bind(this), 0);
  },
  
  'textarea.resizable' : function (e) {
    new ResizableTextarea(this);
  }
});

Form.Element.ModifiedForm = {
  fakeIDs: ['hideous', 'unlovely', 'horrible', 'frightful', 'awful', 'ghastly', 'vile', 'revolting'],
  findFirstElement: function(form) {
    var elements = Form.getElements(form).findAll(function(element) {
      return 'hidden' != element.type && !element.disabled && !Form.Element.ModifiedForm.fakeIDs.any(function (id) { return element.id==id; });
    });
    
    return elements.findAll(function(element) {
      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()) && !['radio', 'checkbox', 'submit'].include(element.type) && element.readAttribute('rel') != 'nofocus';
    }).sortBy(function(element) { return element.tabIndex }).first();
  },
  
  focusFirstElement: function(form) {
    form = $(form);
    var el = form.findFirstElement();
    
    if (el) {
      Form.Element.activate(el);
    }
    return form;
  },
  
  focusFirstElementBySelectors: function(form, selectors) {
    var input = null;
    
    selectors.each(function (selector) {
      var focusElements = $$(selector);
      if (focusElements.size() > 0) {
        input = focusElements[0];
        throw $break;
      }
    });
    
    input ?
      Form.Element.activate(input) :
      $(form).focusFirstElement();
  }
};
Object.extend(Element.Methods.ByTag, { "FORM": Object.clone(Form.Element.ModifiedForm) });


Form.Element.CaretPosition = {
  getCaretPosition: function (element) {
    element = $(element);
  
    var caretPosition = 0;
    if (Prototype.Browser.IE) {
      var selection = document.selection.createRange();
      selection.moveStart('character', -element.value.length);
      caretPosition = element.value.length;
    } else {
      caretPosition = element.selectionEnd;
    }
    return caretPosition;
  },
  
  setCaretPosition: function (element, position) {
    element = $(element);
    
    if (Prototype.Browser.IE) {
      var selection = document.selection.createRange();
      selection.moveStart('character', -element.value.length);
      selection.moveStart('character', position);
      selection.moveEnd('character', 0);
      selection.select();
    } else {
      element.selectionStart = position;
      element.selectionEnd = position;
      element.focus();
    }
  }
};

Object.extend(Element.Methods.ByTag, {
  "INPUT":    Object.clone(Form.Element.CaretPosition),
  "SELECT":   Object.clone(Form.Element.CaretPosition),
  "TEXTAREA": Object.clone(Form.Element.CaretPosition)
});