var FooterPage = Class.create({
  initialize: function(){
    this.footer = $('footer');
    this.footer_page = $('footer_page');
    this.footer_page_content = $('footer_page_content');
    this.close_button = $('footer_page_header').select("a").first();

    this.bindEvents();
  },

  bindEvents: function(){
    this.footer.observe("click", this.footerClickEvent.bind(this));
    this.close_button.observe("click", this.closeButtonEvent.bind(this));
  },

  closeButtonEvent: function(event){
    event.stop();
    this.closeWindow();
  },

  footerClickEvent: function(event){
    var element = event.element();
    if(element.hasClassName("footer_page")){
      this.footerPageLinkClickEvent(event);
    }
  },

  footerPageLinkClickEvent: function(event){
    event.stop();
    var element = event.element();

    if( element.hasClassName("open") ){
      this.closeWindow();
    } else {
      this.openWindow(element.href);
      element.addClassName("open");
    }
  },

  closeWindow: function(){
    $$('.footer_page').invoke("removeClassName", "open");
    
    new Effect.Parallel([
      new Effect.Morph(this.footer_page, { sync: true, style: 'height: 0px; margin-top: -10px;' }), 
      new Effect.Fade(this.footer_page, { sync: true }) 
    ], { 
      duration: 0.5,
      afterFinish: function(){ $('footer_page').removeClassName("open"); }
    });
  },

  openWindow: function(url){
    $$('.footer_page').invoke("removeClassName", "open");
      
    new Ajax.Request(url, {
      method: 'get',
      onSuccess: this.openWindowResponse.bind(this)
    });
  },

  changeWindow: function(responseText){
    this.footer_page_content.fade({
      duration: .2,
      afterFinish: function(){
        $('footer_page_content').update(responseText);
        $('footer_page_content').appear({duration: .2});
      }
    });
  },

  slideWindow: function(responseText){
    this.footer_page_content.update(responseText);


    new Effect.Parallel([
      new Effect.Morph(this.footer_page, { sync: true, style: 'height: 300px; margin-top: -312px;' }), 
      new Effect.Appear(this.footer_page, { sync: true }) 
    ], { 
      duration: 0.5
    });

  },
  
  openWindowResponse: function(transport){
    var responseText = transport.responseText;

    if( this.footer_page.visible() ){
      this.changeWindow(responseText);
    } else {
      this.slideWindow(responseText);
    }
  }

});

document.observe("dom:loaded", function(){
  new FooterPage();
});

