var Layer = Class.create({
  initialize : function(controller, options) {
    //optional parameters workaround
    options = options || {};

    //make self a reference to this
    var self = this;

    //set controller
    this.controller = controller;
  },

  load : function() {
    new Ajax.Request(this.controller, {
      method : 'get',
      onSuccess : function(response) {
        var wrapper = $('layer-wrapper');
          wrapper.update(response.responseText);
          wrapper.setStyle({
            left : (document.viewport.getWidth() - wrapper.getWidth()) / 2 + 'px',
            top : (document.viewport.getHeight() - wrapper.getHeight()) / 2 + 'px'
          });
          wrapper.show();
          this.setup();
      }.bind(this)
    });
  },

  setup : function() {
    var wrapper = $('layer-wrapper');

    var closeLinks = wrapper.select('.l-close');
    if(closeLinks.length > 0) {
      closeLinks[0].observe('click', function(event) {
        this.wrapper.hide();
      }.bind({
        wrapper : wrapper
      }));
    }

    var submitLinks = wrapper.select('.af-submit');
    if(submitLinks.length > 0) {
      submitLinks[0].observe('click', function(event) {
        var ajaxForms = this.wrapper.select('.ajax-form');
        if(ajaxForms.length > 0) {
          Form.request(ajaxForms[0], {
            onSuccess : function(transport) {
              if(transport.responseText == 'valid') {
                this.wrapper.hide();
              }
              else {
                this.wrapper.update(transport.responseText);
                this.setup();
              }
            }.bind(this)
          });
        }
      }.bind({
        wrapper : wrapper,
        setup : this.setup
      }));
    }
  }
});
