var rotateElements =
function _obj(container, delay, element, autoplay, fadespeed) {

  if (!delay) delay = 5000;
  if (!element) element = 'ul li';
  if (!fadespeed) fadespeed = 'fast';
  if (autoplay) autoplay = true;
  intCurrent = 0;
  intTotal = 0;
  strClass = container.substring(1,container.length);
  rotator = '';

  this.init = function() {

    $(container+' '+element).hide();
    $(container+' '+element).each(
      function (intIndex) {
        $(this).addClass('ElEm'+intIndex);
        if ($(this).hasClass('on')) {
          intCurrent = intIndex;
        }
        $(this).hover(
          function () {
            if (rotator) {
              pause();
            } else {
              rotator = 'paused';
            }
          },
          function () {
            if (rotator) {
              pause();
            } else {
              play();
            }
          });
        intTotal = intIndex;
      });
    caption();
    $(container+' '+element+'.ElEm'+intCurrent).fadeIn(fadespeed);
    intCurrent = (intCurrent+1);
    if (autoplay)
          play();
  }
  
  this.caption = function () {
    $('a.caption').each(
    function (intIndex) {
      if ($(this).hasClass(strClass) ||
      $(this).parent().parent().hasClass(strClass)) {
        $(this).addClass('CaP'+intIndex);
        if (intCurrent == intIndex)
          $(this).parent().addClass('on');
        $(this).hover(function () {
          if (rotator) {
            pause();
          } else {
            rotator = 'paused';
          }
          intCurrent = intIndex;
          $(container+' '+element).hide();
          $(container+' '+element+'.ElEm'+intCurrent).fadeIn('fast');
          $('a.caption').parent().removeClass('on');
          $(this).parent().addClass('on');
          },
          function () {
          intCurrent = (intCurrent+1);
          if (rotator) {
            pause();
          } else {
            play();
          }
        });
      }
    });
  }

  this.rotate = function() {
    if (!$(container+' '+element+'.ElEm'+intCurrent).attr('class'))
      intCurrent = 0;
    $('a.caption').parent().removeClass('on');
    $(container+' '+element).hide();
    $('a.CaP'+intCurrent).parent().addClass('on');
    $(container+' '+element+'.ElEm'+intCurrent).fadeIn(fadespeed);
    intCurrent = (intCurrent+1);
  }

  this.previous = function() {
    intCurrent = (intCurrent-2);
    if (intCurrent == -1)
      intCurrent = intTotal;
    $('a.caption').parent().removeClass('on');
    $('a.CaP'+intCurrent).parent().addClass('on');
    $(container+' '+element).hide();
    $(container+' '+element+'.ElEm'+intCurrent).fadeIn(fadespeed);
    intCurrent = (intCurrent+1);
  }

  this.pause = function() {
    clearInterval(rotator);
    $('a.play').parent().removeClass('on');
    $('a.pause').parent().addClass('on');
    $('a.toggle').parent().removeClass('on');
    rotator = null;
  }

  this.play = function() {
    rotator = setInterval('this.rotate()', delay);
    $('a.play').parent().addClass('on');
    $('a.pause').parent().removeClass('on');
    $('a.toggle').parent().addClass('on');
    return false;
  }

  $('a.pause').click(function(){
    if ($(this).hasClass(strClass) ||
      $(this).parent().parent().hasClass(strClass)) {
      if (rotator)
        pause();
      return false;
    }
  });

  $('a.play').click(function(){
    if ($(this).hasClass(strClass) ||
      $(this).parent().parent().hasClass(strClass)) {
      if (!rotator)
        play();
      return false;
    }
  });

  $('a.toggle').click(function(){
    if ($(this).hasClass(strClass) ||
      $(this).parent().parent().hasClass(strClass)) {
      if (!rotator) {
        play();
        $(this).parent().addClass('on');
      } else {
        pause();
        $(this).parent().removeClass('on');
      }
      return false;
    }
  });

  $('a.next').click(function(){
    if ($(this).hasClass(strClass) ||
      $(this).parent().parent().hasClass(strClass)) {
      if (rotator) {
        pause();
      } else {
        rotator = 'paused';
      }
      rotate();
      if (rotator) {
        pause();
      } else {
        play();
      }
      return false;
    }
  });

  $('a.previous').click(function(){
    if ($(this).hasClass(strClass) ||
      $(this).parent().parent().hasClass(strClass)) {
      if (rotator) {
        pause();
      } else {
        rotator = 'paused';
      }
      previous();
      if (rotator) {
        pause();
      } else {
        play();
      }
      return false;
    }
  });

  this.init();

}
