function MagentaRotate(containerDiv) {
  // Privileged methods
  this.moveLeft = function (e) {
    switchLeft();
  };

  this.moveRight = function (e) {
    switchRight();
  };
  // Private
  var containerId = document.getElementById(containerDiv);
  var currentImage = 1;
  var isScrolling = false;
  var minImageIndex = 1;
  var maxImageIndex = 1;
  if (containerId != null) {
    var images = containerId.getElementsByTagName("img");
    if (images != null) {
      maxImageIndex = images.length;
    }
  }
  // Private methods
  function scrollFinished() {
    isScrolling = false;
  }
  function switchLeft() {
    switchContent(-1);
  }
  
  function switchRight() {
    switchContent(1);
  }
  function switchContent(switchValue) {
    if (!isScrolling) {
      currentImage = currentImage + switchValue;
      if (currentImage < minImageIndex) {
        currentImage = minImageIndex;
      }
      else if (currentImage > maxImageIndex) {
        currentImage = maxImageIndex;
      }
      else {
        isScrolling = true;
        new Effect.Move('rotatorInside', {x:(-960 * switchValue), y:0, transition:Effect.Transitions.sinoidal, afterFinish:scrollFinished});
      }
    }
  };
}

function MagentaFade(containerDiv) {
  // Privileged Methods
  this.fadeLeft = function (e) {
    fadeContent(-1);
  };
  
  this.fadeRight = function (e) {
    fadeContent(1);
  };
  // Private
  var containerId = document.getElementById(containerDiv);
  var currentListItem = 1;
  var minListIndex = 1;
  var maxListIndex = 1;
  if (containerId != null) {
    var listItems = containerId.getElementsByTagName("li");
    if (listItems != null) {
      maxListIndex = listItems.length;
    }
    for (var i = 1; i < maxListIndex; i++) {
      new Effect.Fade(listItems[i].id, {duration: 0.0});
    }
  }
  // Private methods
  function fadeContent(switchValue) {
    var previousListItem = currentListItem;
    currentListItem = currentListItem + switchValue;
    if (currentListItem < minListIndex) {
      currentListItem = maxListIndex;
    }
    else if (currentListItem > maxListIndex) {
      currentListItem = minListIndex;
    }
    new Effect.Fade(listItems[previousListItem-1].id);
    new Effect.Appear(listItems[currentListItem-1].id, {delay: 0.6});
  }
}
