
YAHOO.namespace('tui');
YAHOO.tui.slider = function(collectionClass) {
  this.collectionClass = collectionClass;
  this.containers = false;
  this.tabcontainer = false;
  this.slider = false;
  this.sliderNav = false;
  this.pageWidth = false;
  this.init();
};

YAHOO.tui.slider.prototype.init = function() {
  // Gather all containers with the collectionClass class
  this.containers = YAHOO.util.Dom.getElementsByClassName(this.collectionClass, 'div');
  
  if (this.containers.length < 1) {
    return; // Do nothing if no matching divs found
  }
  
  // Create a new DIV with the container width, hidden overflow, and position relative
  this.slider = document.createElement('div');
  YAHOO.util.Dom.addClass(this.slider, 'tuisliderbox');
  YAHOO.util.Dom.addClass(this.slider, 'container');
  

  // transplant the containers into it
  // Alter each container to be position: absolute, position containers side by side
  // Create navigation & attach behaviours
  this.sliderNav = document.createElement('div');
  YAHOO.util.Dom.addClass(this.sliderNav, 'tuislidernav');
  YAHOO.util.Dom.addClass(this.sliderNav, 'container');

  this.pageWidth = YAHOO.util.Dom.getRegion(this.containers[0]).right - YAHOO.util.Dom.getRegion(this.containers[0]).left;
  var initialHeight = YAHOO.util.Dom.getRegion(this.containers[0]).bottom - YAHOO.util.Dom.getRegion(this.containers[0]).top;
  this.slider.style.height = initialHeight + 'px';
  
  this.containers[0].parentNode.replaceChild(this.slider, this.containers[0]);

  for(i in this.containers) {
    this.slider.appendChild(this.containers[i]);
    this.containers[i].style.position = 'absolute';
    this.containers[i].style.left = (i * this.pageWidth) + 'px';
    if (!this.containers[i].id) {
      YAHOO.util.Dom.generateId(this.containers[i], 'tuisliderpage');
    }
    
    // var link = document.createElement('a');
    // link.innerHTML = parseInt(i) + 1;
    // link.href = '#'+this.containers[i].id;
    // 
    // this.sliderNav.appendChild(link);
    // YAHOO.util.Event.addListener(link,'click',this.showPage,{'slider':this, 'page':i});
    
    var prevlink = YAHOO.util.Dom.getElementsByClassName('prev', 'a', this.containers[i]);
    if (prevlink) 
    {
      YAHOO.util.Event.addListener(prevlink,'click',this.showPage,{'slider':this, 'page':i - 1});      
    }
    
    var nextlink = YAHOO.util.Dom.getElementsByClassName('next', 'a', this.containers[i]);
    if (nextlink) 
    {
      YAHOO.util.Event.addListener(nextlink,'click',this.showPage,{'slider':this, 'page':parseInt(i) + 1});      
    }
    
    var navlinks = YAHOO.util.Dom.getElementsByClassName('pagelink', 'a', this.containers[i]);
    if (navlinks)
    {
      YAHOO.util.Event.addListener(navlinks,'click',this.gotolinkPage,{'slider':this, 'page': 0});      
    }
    
  }
  
      
  YAHOO.util.Dom.insertBefore(this.sliderNav, this.slider);

};

YAHOO.tui.slider.prototype.showPage = function(e, o) {
  YAHOO.util.Event.stopEvent(e);
  var attributes = { 
      scroll: { to: [o.page*o.slider.pageWidth, 0] } 
  }; 
  
  var r = YAHOO.util.Dom.getRegion(o.slider.containers[o.page]);

  var att2 = {
    height: { to: (r.bottom - r.top) }
  };

  var anim = new YAHOO.util.Scroll(o.slider.slider, attributes, 0.5, YAHOO.util.Easing.easeBoth);
  var anim2 = new YAHOO.util.Anim(o.slider.slider, att2, 0.5, YAHOO.util.Easing.easeBoth);
  
  anim.animate();
  anim2.animate();
}

YAHOO.tui.slider.prototype.gotolinkPage = function(e, o) {
  YAHOO.util.Event.stopEvent(e);

  var p = YAHOO.util.Event.getTarget(e);
  if (p.tagName != 'A')
  {
    p = YAHOO.util.Dom.getAncestorByTagName(p, 'a');
  }
  
  o.page = p.href.match(/\d+$/) - 1;
  o.slider.showPage(e,o);
}



YAHOO.tui.initSlider = function() {
  var slider = new YAHOO.tui.slider('tuislider');
  YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('toplink', 'a'),'click',slider.gotolinkPage,{'slider':slider, 'page': 0});
};

YAHOO.util.Event.onDOMReady(YAHOO.tui.initSlider);

