//----------------------
// PlusMinus
// Author Nick Crohn
//----------------------

var plusMinus = {
  initialize: function(event) {
    this.links = $$("#nav a");
    this.galleryLinks = $$("#gallery-nav a");
    this.mainView = $("main-view");
    this.galleryView = $("gallery-view");

    // Position the swap view to the left of the main view
    this.viewWidth = 594;
    this.viewHeight = 380;

    this.observeLinks();
    this.observeGalleryLinks();
  },

  observeLinks: function() {
    var tot = this.links.length;
    for(var i=0;i<tot;i++) {
      this.links[i].observe("click", this.goToPage.bind(this));
    }
  },

  observeGalleryLinks: function() {
    var tot = this.galleryLinks.length;
    for(var i=0;i<tot;i++) {
      this.galleryLinks[i].observe("click", this.goToImage.bind(this));
    }
  },

  resetLinkStates: function() {
    var tot = this.links.length;
    for(var i=0;i<tot;i++) {
      var el = this.links[i].parentNode;
      var cn = el.className;
      var re = new RegExp("(nav\-item.?)(.*)");
      var state = cn.match(re);
      if(state[2] == "-active") {
        cn = state[1];
      }
      el.className = el.className.replace(el.className, cn);
    }
  },

  resetGalleryLinks: function() {
    var tot = this.galleryLinks.length;
    for(var i=0;i<tot;i++) {
      var el = this.galleryLinks[i].parentNode;
      $(el).removeClassName("active");
    }
  },

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

    while(a.nodeName.toLowerCase() != "a") {
      a = a.parentNode;
    }

    this.resetLinkStates();

    var cn = a.parentNode.className;
    var re = new RegExp("nav\-item.?");
    var state = cn.match(re);
    cn = state+"-active";
    a.parentNode.className = a.parentNode.className.replace(a.parentNode.className, cn);

    var pages = $$("#main-view div.page");
    var tot = pages.length;
    var id = null;
    for(var i=0;i<tot;i++) {
      if(a.href.match("#"+pages[i].id)) {
        id = i;
      }
    }
    
    new Effect.Morph(this.mainView, {
        style: {
          left: -(id*this.viewWidth)+"px"
        }
      });
  },

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

    while(a.nodeName.toLowerCase() != "a") {
      a = a.parentNode;
    }

    this.resetGalleryLinks();

    a.parentNode.addClassName("active");

    var images = $$("div.gallery-images img");
    var tot = images.length;
    var id = null;
    for(var i=0;i<tot;i++) {
      if(a.href.match("#"+images[i].id)) {
        id = i;
      }
    }
    
    new Effect.Morph(this.galleryView, {
        style: {
          top: -(id*this.viewHeight)+"px"
        }
      });
  },

  getContentForID: function(id) {
    id = id.split("#")[1];
    return $(id).innerHTML;
  }
};

document.observe("dom:loaded", plusMinus.initialize.bind(plusMinus));
