    /**
     * You can assign global slider options here
     * Possible options:
     * delay: number in milliseconds
     * activateEvent: event name string
     * deactivateEvent: event name string or null
     * hideOnShow: boolean
     */                              
    
    var sliderOptions = {
      delay:           600,
      activateEvent:   'mouseover',
      deactivateEvent: null,
      hideOnShow:      true
    }
    
    
    var SliderManager = {
      register: function(slider) {
        if (!this.sliders)
          this.sliders = [];
          
        this.sliders.push(slider);
      },
      
      activate: function(slider) {
        
        if (this.timeout)
          clearTimeout(this.timeout);
          
        this.timeout = setTimeout(
          function() {
            if (this.current && this.current != slider)
              this.current.deactivate();
              this.current = slider;
              
            slider.show();
          }, slider.defaults.delay);
      },
      
      deactivate: function(slider) {
        slider.hide();
      }
    }
    
    var Slider = Class.create({
      initialize: function(container) {
        
        var elements = container.immediateDescendants();
        
        if (elements.length < 2)
          return;
        
        // Overwritten by global options if supplied
        var defaults = {
          activateEvent:   'mouseover',
          deactivateEvent: null,
          hideOnShow:      true
        }
               
        Object.extend(defaults, arguments[1] || {});
        
        this.defaults = defaults;
        
        this.delay = defaults.delay / 1000;
        this.visible = false;
        this.triggerElement = elements[0];
        this.sliderElement = elements[1];       
              
        // Make first element listen for events to activate/deactivate (conditionally) this slider
        Event.observe(this.triggerElement, defaults.activateEvent, this.activate.bind(this));
        
        if (defaults.deactivateEvent)
          Event.observe(this.triggerElement, defaults.deactivateEvent, this.deactivate.bind(this));
      },
      
      activate: function() {
        SliderManager.activate(this);
      },
      
      deactivate: function() {
        SliderManager.deactivate(this);
      },
      
      show: function() {
        
        if (!this.visible) {
          this.visible = true;
          new Effect.BlindDown(this.sliderElement, {duration: this.delay, queue: {scope: this.defaults.qName, position: 'end'}});
        }
        
      },
      
      hide: function() {
        if (this.visible) {
          this.visible = false;
          new Effect.BlindUp(this.sliderElement, {duration: this.delay , queue: {scope: this.defaults.qName, position: 'end'}});
        }
      }
    });
    
    function initialize() {
      var sliders = $$('.slider');
      if (sliders) {
        sliders.each(function(element, i) {
          new Slider(element, Object.extend(sliderOptions, {qName: 'slider' + i}));
        });
      }
    }
    
    Event.observe(window, 'load', initialize);

