Zoom.prototype = new Object();

function Zoom()
{
  this.zoomRunning = false;
  this.maxZIndex = 1;
}

Zoom.LEFT = 1;
Zoom.CENTER = 2;
Zoom.RIGHT = 4;
Zoom.UP = 8;
Zoom.MIDDLE = 16;
Zoom.DOWN = 32;

Zoom.prototype.zoomInit = function()
{
  for (var iCount=0; iCount<document.images.length; iCount++)
  {
    var oImage = document.images[iCount];

    if (oImage.className != null && oImage.className.indexOf("zoom_") == 0)
    {
      var iZoomMode = 0;

      var oDiv = document.createElement("div");
      oDiv.style.height = oImage.height + "px";
      oDiv.style.width = oImage.width + "px";
      oImage.parentNode.appendChild(oDiv);

      if (oImage.className.indexOf("left") != -1) iZoomMode |= Zoom.LEFT;
      if (oImage.className.indexOf("center") != -1) iZoomMode |= Zoom.CENTER;
      if (oImage.className.indexOf("right") != -1) iZoomMode |= Zoom.RIGHT;

      if (oImage.className.indexOf("up") != -1) iZoomMode |= Zoom.UP;
      if (oImage.className.indexOf("middle") != -1) iZoomMode |= Zoom.MIDDLE;
      if (oImage.className.indexOf("down") != -1) iZoomMode |= Zoom.DOWN;

      var iZoomStep = oImage.width/5;
      var iZoomMax = oImage.width*((1/oImage.src.substr(oImage.src.indexOf("ratio=")+6,4))-1);

      oImage.style.position = "absolute";
      oImage.state = "OFF";
      oImage.index = 0;
      oImage.originalWidth =  oImage.width;
      oImage.originalHeight = oImage.height;
      oImage.originalLeft =  parseInt(oImage.offsetLeft);
      oImage.originalTop = parseInt(oImage.offsetTop);
      oImage.zoomMode = iZoomMode;
      oImage.zoomStep = iZoomStep;
      oImage.zoomMax  = iZoomMax;
      oImage.maxImage = new Image();
      oImage.maxImage.src = "images/" + oImage.src.substr(oImage.src.indexOf("filename=")+9);
      oImage.minImage = new Image();
      oImage.minImage.src = oImage.src;
      oImage.width = oImage.originalWidth;
      oImage.height = oImage.originalHeight;

      if (window.addEventListener)
      {
        oImage.addEventListener("mouseover", this.zoomIn, false);
        oImage.addEventListener("mouseout", this.zoomOut, false);
      }
      else
      {
        oImage.attachEvent("onmouseover", this.zoomIn);
        oImage.attachEvent("onmouseout", this.zoomOut);
      }
    }
  }
}

Zoom.prototype.zoomIn = function(oEvent)
{
  var oImage = (oEvent.target ? oEvent.target : oEvent.srcElement);
  oImage.state = "ZOOM_IN";
  oImage.src = oImage.maxImage.src;
  oImage.style.zIndex = ZoomManager.maxZIndex++;
  if (!ZoomManager.zoomRunning) ZoomManager.animZoom();
}

Zoom.prototype.zoomOut = function(oEvent)
{
  var oImage = (oEvent.target ? oEvent.target : oEvent.srcElement);
  oImage.state = "ZOOM_OUT";
  if (!ZoomManager.zoomRunning) ZoomManager.animZoom();
}

Zoom.prototype.setZoom = function(oImage)
{
  oImage.width = oImage.originalWidth + oImage.index;
  oImage.height = oImage.originalHeight  + (oImage.index * (oImage.originalHeight/oImage.originalWidth));

  if (oImage.zoomMode & Zoom.LEFT)
  {
    oImage.style.left  = oImage.originalLeft-oImage.index + "px";
  }
  else if (oImage.zoomMode & Zoom.CENTER)
  {
    oImage.style.left  = oImage.originalLeft-oImage.index/2 + "px";
  }
  else if (oImage.zoomMode & Zoom.RIGHT)
  {
  }

  if (oImage.zoomMode & Zoom.UP)
  {
    oImage.style.top  = oImage.originalTop-(oImage.index * (oImage.originalHeight/oImage.originalWidth)) + "px";
  }
  else if (oImage.zoomMode & Zoom.MIDDLE)
  {
    oImage.style.top  = oImage.originalTop-(oImage.index/2 * (oImage.originalHeight/oImage.originalWidth)) + "px";
  }
  else if (oImage.zoomMode & Zoom.DOWN)
  {
  }
}

Zoom.prototype.animZoom = function()
{
  ZoomManager.zoomRunning = false;

  for (var iCount=0; iCount<document.images.length; iCount++)
  {
    var oImage = document.images[iCount];

    if (oImage.state)
    {
      if (oImage.state == "ZOOM_IN")
      {
        oImage.index += oImage.zoomStep;

        if(oImage.index >= oImage.zoomMax)
        {
          oImage.index = oImage.zoomMax;
          oImage.state = "ON";
        }
        else
        {
          ZoomManager.zoomRunning = true;
        }

        ZoomManager.setZoom(oImage);
      }
      else if (oImage.state == "ZOOM_OUT")
      {
        oImage.index -= oImage.zoomStep;

        if (oImage.index <= 0)
        {
          oImage.index = 0;
          oImage.state = "OFF";
          oImage.src = oImage.minImage.src;
        }
        else
        {
          ZoomManager.zoomRunning = true;
        }

        ZoomManager.setZoom(oImage);
      }
    }
  }

  if (this.zoomRunning)
  {
    setTimeout("ZoomManager.animZoom()", 10);
  }
}

if (!window.ZoomManager)
{
  ZoomManager = new Zoom();
}