/**
 * Generic slider
 * @author Ed Cradock
*/

function slider(options)
{
   var sliderInstance = {};

   sliderInstance.options = {
      activeSlideClass:'active',
      activeSlidenumClass:'active',
      slideClass:'slide',
      slidenumClass:'slidenum',
      delay:5
   };

   if(typeof(options) == 'object')
   {
      var def;
      var use;

      for(use in options)
      {
         for(def in sliderInstance.options)
         {
            if(use == def)
               sliderInstance.options[def] = options[use];
         }
      }      
   }

   sliderInstance.interval = 0;

   sliderInstance.show = function(nodeId)
   {
      var aSlideClass = this.options.activeSlideClass;
      var aSlidenumClass = this.options.activeSlidenumClass;
      var slideClass = this.options.slideClass;
      var slidenumClass = this.options.slidenumClass;

      $('ul li.' + aSlideClass).filter('.' + slideClass).fadeOut().removeClass(aSlideClass);
      $('ul li.' + aSlidenumClass).filter('.' + slidenumClass).removeClass(aSlidenumClass);

      if(nodeId == -1)
      {
         $('ul li.' + slideClass + ':first').fadeIn().addClass(aSlideClass);
         $('ul li.' + slidenumClass + ':first').addClass(aSlidenumClass);
      }
      else
      {
         $('ul li.' + slideClass).eq(nodeId).fadeIn().addClass(aSlideClass);
         $('ul li.' + slidenumClass).eq(nodeId).addClass(aSlidenumClass);
      }
   }

   sliderInstance.start = function()
   {
     this.interval = window.setInterval(function(){
       sliderInstance.next();
     }, this.options.delay * 1000);
   }

   sliderInstance.stop = function()
   {
      sliderInstance.interval = window.clearInterval(this.interval);
   }

   sliderInstance.next = function()
   {
       this.show($('ul li.active').filter('.slide').next().addClass('active').index());
   }

   sliderInstance.toggle = function(stopCallback, startCallback)
   {
      if(this.isRunning())
      {
         if(typeof(stopCallback) == 'function')
            stopCallback.call(this);

         this.stop();
      }
      else
      {
         if(typeof(startCallback) == 'function')
            startCallback.call(this);

         this.start();
         this.next();
      }
   }

   sliderInstance.isRunning = function()
   {
      return (this.interval);
   }

   $('ul li.' + sliderInstance.options.slidenumClass + ' a').click(function()
   {
      sliderInstance.stop();
      sliderInstance.show($(this).parent().index() - 1);
      sliderInstance.start();
   });

   $('ul li.' + sliderInstance.options.slideClass + ':gt(0)').hide();

   return sliderInstance;
}
