Event.observe(window, 'load', function(event) {
  Responder.initializeFor($('pagewrapper'));
  Event.observe(document.body, 'DOMNodeInserted', Responder.onDOMNodeInserted);
});

var InlineUploadForm = Responder.create('.upload_form');
Object.extend(InlineUploadForm.prototype, {  
  onChangeFile: function(event) {
    this.filename.update($A(this.file.value.split(/\/|\\/)).last());
    this.save.show();
  },
  
  onSuccessForm: function(event, response) {
    this.link.updateContent(response.responseText);
  },
  
  onClickSave: function(event) {
    this.form.addClassName('busy');
    this.form.submit();
  },
  
  onLoadFrame: function(event) {
    var remoteDocument = this.frame.contentDocument || this.frame.contentWindow.document;

    if (remoteDocument && remoteDocument.body && remoteDocument.body.firstChild) {
      var fragment = document.createDocumentFragmentFromHTML(remoteDocument.body.innerHTML);
      var element  = Element.first(fragment);

      this.container.parentNode.replaceChild(element, this.container);
      if (IE) {
        Event.dispatch({ type: 'DOMNodeInserted', target: element });
      }
    }
  }
});

InlineUploadForm.Selectors = {
  form: 'form.upload',
  file: 'input.file',
  filename:  '.filename',
  browse:    '.browse',
  save:      '.save',
  text:      'textarea',
  frame:     'iframe'
};

var Cart = Responder.create('#cart');
Object.extend(Cart.prototype, {
  initialize: function(container) {
    this.container = container;
    this.list      = container.down('ul');
    this.create    = $('add_to_cart');

    if (this.create) {
      this.hijackLink('create');
      this.observe('create');
    }
  },
  
  onCreateSuccess: function(fragment) {
    var element = Element.first(fragment);
    
    if (element) {
      this.list.appendChild(element);
      element.hide();
      new Effect.Appear(this.container, { duration: 0.3, to: 0.999 });
      new Effect.Appear(element,       { duration: 0.3, to: 0.999 });
      
      if (IE) Event.dispatch({ type: 'DOMNodeInserted', target: element });
    }
  }
});
