var TreeCordian = new Class({
  
  initialize: function(what) {
    this.what = $(what);
    this.slides = [];
    $$('#'+ what +' ul li.parent a').each(function(link){
      this.setUpLink(link);
    }.bind(this))
  },
  
  setUpLink: function(link) {
    var childLinks = $(link.getParent().getNext().getChildren()[0]);
    
    //Do we need a scrollbar? 
    var h = childLinks.getSize().y.toInt();
    this.maxHeight = childLinks.getParent().getStyle('max-height').toInt();
    
    //Build the Slide Animation
    var slide = new Fx.Slide(childLinks, { duration: 1000, transition: Fx.Transitions.Pow.easeOut, link: 'cancel' });
    this.slides.push(slide);
    childLinks.ani = slide;
    childLinks.ani.hide();
    
    if(this.maxHeight < h) {
      this.addScrollBar(childLinks);
    }
    
    link.addEvent('click', function() {
      this.slides.each(function(slide) { slide.slideOut(); });
      this.toggleLinks(childLinks)
    }.bind(this));
    
  },
  
  toggleLinks: function(a) {
    $$('.sw').each(function(s) {
      s.setStyle('display', 'none');
    });
    a.ani.toggle('vertical');
    var sc = $('s'+a.id);
    if(sc) {
      if(!a.ani.open) {
        if(sc) {
          sc.setStyle('display', 'block');
        }
      } else {
        sc.setStyle('display', 'none');
      }
    }
  },
  
  addScrollBar: function(a) {
    //this is where we need to inject the scroll bar
    var d = a.ani.wrapper;
    var scroll = new Fx.Scroll(a.getParent().getParent(), { duration: 650, transition: Fx.Transitions.Quint.easeInOut, link: 'cancel' });
    
    var dw = new Element('div', { id: 's'+a.id, styles: {display: 'none', position: 'absolute', top: a.getParent().getParent().getPosition().y, left: a.getParent().getParent().getPosition().x} });
    dw.addClass('sw');
    dw.inject(document.body, 'top');
    
    var scrollWrapper = new Element('div', { styles: { height: this.maxHeight } });
    scrollWrapper.addClass('scrollWrapper');
    scrollWrapper.inject(dw, 'top');
    
    var scrollLine = new Element('div', { styles: { height: this.maxHeight * .8 } });
    scrollLine.addClass('scrollBarLine');
    scrollLine.inject(scrollWrapper, 'top');
    scrollWrapper.setStyle('height', scrollLine.getStyle('height') + 100);
    
    var scrollControl = new Element('div');
    scrollControl.addClass('scrollBarControl');
    scrollControl.set('html', '&bull;');
    scrollControl.inject(scrollWrapper, 'top');
    
    if(Browser.Engine.webkit) {
      scrollControl.setStyle('padding-left', 2);
    }
    
    var myMove = new Drag.Move(scrollControl, {container: scrollWrapper,
      
      onDrop: function(element, droppable){
        var difference = element.getPosition().y.toInt() - element.getParent().getPosition().y.toInt();
        this.start(0, difference);
      }.bind(scroll)
      
    });
    
  }
  
});