var Dock = {
  
  initialize : function() {
    this.el = get('.the_dock');
    this.edge = get('.right_edge');
    this._boundHideDestroy = this._hideDestroy.bind(this);
    this.visible = false;
    
    this.edge.observe('mouseover', this.fadeIn.bind(this));
    get('.the_page').observe('mouseover', this.fadeOut.bind(this));
    
    get('.dock_page').observe('click', this.createPage.bind(this));
    get('.really_button').observe('click', this.maybeDestroy.bind(this));
    get('.really_button').observe('mouseout', this._boundHideDestroy);
    get('.dock_light').observe('click', this.toggleLights.bind(this));
    
    var setting = Setting.get('light_switch');
    this.toggleLights(setting.get('value'));
  },
  
  createPage : function() {
    var page = new Page({text : "", page_position : Page.defaultPosition(), menu_position : Page.size()});
    page.save();
    Menu.addMenuItem(page);
    Typewriter.loadPage(page);
    get('.text').focus();
  },
  
  maybeDestroy : function(e) {
    $(e).stop();
    var but = $(e).element();    
    if (but.style.opacity < 0.3) {
      but.setStyle({opacity:0.8});
      get('.page_backdrop').observe('click', this._boundHideDestroy);
    } else {
      but.setStyle({opacity:0});
      var page = Typewriter.page;
      if (Page.size() <= 1) {
        Typewriter.element.value = "";
        Typewriter.lazySave();
      } else {
        delete Typewriter.page;
        page.destroy();
        Menu.removeMenuItem(page);
        Typewriter.loadPage(Page.first());
      }
    }
  },
  
  _hideDestroy : function() {
    get('.really_button').setStyle({opacity:0});
    get('.page_backdrop').stopObserving('click', this._boundHideDestroy);
  },
  
  toggleLights : function(status) {
    status = (status == 'on') ? 'on' : (status == 'off') ? 'off' : null;
    var setting = Setting.get('light_switch');
    if (status == 'on' || (!status && (setting.get('value') == 'off'))) {
      $(document.body).addClassName('light');
      $(document.body).removeClassName('dark');
      setting.set('value', 'on');
    } else if (status == 'off' || (!status && (setting.get('value') == 'on'))) {
      $(document.body).removeClassName('light');
      $(document.body).addClassName('dark');
      setting.set('value', 'off');
    }
    setting.save();
  },
  
  fadeIn : function(e) {
    this.el.setStyle({opacity:1});
    this.visible = true;
  },
  
  fadeOut : function(e) {
    this.el.setStyle({opacity:0});
    this.visible = false;
  }
  
};