/**
 * tXFisheye
 * written by Frosti
 * 03/2008
 */

var tXFEDoc      = null;
var tXproximity  = 100;
var tXproximityO = 50;
var tXMinSize    = 110;
var tXMaxSize    = 220;
var tXMaxHeight  = 240;
var tXPos        = {left:0, top:0};
var tXMaxDiff    = (tXMinSize/2)+tXproximity-1;
var tXDiffSize   = (tXMaxSize - tXMinSize) / tXMaxDiff;

function tXinitFisheye()
{
  try
  {
    //----- append onmousemove function
    if (typeof document.onmousemove == 'function')
    {
      func = document.onmousemove;
      document.onmousemove = function(e) { tXFisheye(e); return func(e); }
    }
    else
    {
      document.onmousemove = tXFisheye;
    }

    //----- append onmousemove function
    if (typeof document.onload == 'function')
    {
      func = document.onload;
      document.onload = function(e) { tXgetMainPos(); return func(e); }
    }
    else
    {
      document.onload = tXgetMainPos;
    }

    tXgetMainPos();

    if(typeof window.onresize == 'function')
    {
      resi = window.onresize;
      window.onresize = function(e) { tXgetMainPos(); return resi(e); }
    } else {
      window.onresize = tXgetMainPos;
    }

    tXFEDoc   = document.documentElement != undefined && document.documentElement.clientHeight != 0 ? document.documentElement : document.body;

  } catch (e) {
    tXFEDebug(e);
  }
}

function tXFisheye(e)
{
  if ( e == undefined )
  {
    e = window.event;
  }

  var x = e.clientX;
  var y = e.clientY;
  var scrollx = window.pageXOffset == undefined ? tXFEDoc.scrollLeft : window.pageXOffset;
  var scrolly = window.pageYOffset == undefined ? tXFEDoc.scrollTop  : window.pageYOffset;

  var mx = x + scrollx;
  var my = y + scrolly;

  tXClosestItem(mx, my);
}

function tXClosestItem(mx,my)
{
  var dist = tXClosestArea(mx, my);

  var ELM = document.getElementsByName("tXFishPupil");
  var ELO = document.getElementsByName("tXFishOrbit");
  var LEN = ELM.length;

  if(dist[0] || dist[1]) {
    for(var i = 0; i < LEN; ++i) {
      ELM[i].style.zIndex = 1;
      ELO[i].style.zIndex = 1;
      ELM[i].style.left   = (tXMinSize * i) + 'px';
      ELM[i].style.width  = tXMinSize + 'px';
      ELM[i].width        = tXMinSize;
      ELM[i].style.top    = '60px';
    }
    return false;
  }

  for(var i = 0; i < LEN; ++i) {
    var ELMC = getPos(document.getElementsByName("tXFishPupil")[i]);
    var x0   = ELMC['left'] - tXproximity;
    var x1   = ELMC['left'] + document.getElementsByName("tXFishPupil")[i].offsetWidth  + tXproximity;

    if(mx < x1 && mx > x0) {
      tXResizeItem(i,mx,my);
    } else {
      ELM[i].style.zIndex = 1;
      ELO[i].style.zIndex = 1;
      ELM[i].style.left   = (tXMinSize * i) + 'px';
      ELM[i].style.width  = tXMinSize + 'px';
      ELM[i].width        = tXMinSize;
      ELM[i].style.top    = '60px';
    }
  }
}

function tXResizeItem(inr, mx, my)
{
  var ofw = document.getElementsByName("tXFishPupil")[inr].offsetWidth;
  var cx  = getPos(document.getElementsByName("tXFishPupil")[inr])['left'] + (ofw/2);
  var dcx = mx > cx ? mx - cx : cx - mx;
  var nw  = (tXMaxSize - (dcx*tXDiffSize));
  nw      = nw > tXMaxSize ? tXMaxSize : nw < tXMinSize ? tXMinSize : nw;
  var dw  = ( nw - tXMinSize) / 2;

  document.getElementsByName("tXFishPupil")[inr].style.width  = nw + 'px';
  document.getElementsByName("tXFishPupil")[inr].width        = nw;
  document.getElementsByName("tXFishPupil")[inr].style.left   = ((tXMinSize*inr) - dw) + 'px';
  document.getElementsByName("tXFishPupil")[inr].style.zIndex = Math.round(nw);
  document.getElementsByName("tXFishOrbit")[inr].style.zIndex = Math.round(nw);

  var nh  = document.getElementsByName("tXFishPupil")[inr].offsetHeight;
  var dh  = ( tXMaxHeight - nh) / 2;

  document.getElementsByName("tXFishPupil")[inr].style.top   = dh + 'px';
}

function tXClosestArea(mx, my)
{
  var GP = getPos(document.getElementById("tXFisheyeSocket"));
  var a  = GP['left'] - tXproximity;
  var b  = GP['top' ] - tXproximityO;
  var c  = GP['left'] + document.getElementById("tXFisheyeSocket").offsetWidth  + tXproximity;
  var d  = GP['top' ] + document.getElementById("tXFisheyeSocket").offsetHeight + tXproximityO;

  a= a < 0 ? 0 : a;
  b= b < 0 ? 0 : b;

  var dx = 0;
  var dy = 0;

  if(mx < a) {
    dx = a - mx;
  } else if (mx > c) {
    dx = mx - c;
  }

  if(my < b) {
    dy = b - my;
  } else if (my > d) {
    dy = my - d;
  }

  return { 0:dx, 1:dy };
}

function tXgetMainPos()
{
  tXPos = {left:0, top:0};

  var eo = document.getElementById("tXFisheye");
  do
  {
    if(navigator.appName.indexOf("Opera") != -1) {
      tXPos.left += eo.offsetLeft;
      tXPos.top  += eo.offsetTop;
    } else if(eo.currentStyle){
      if(eo.currentStyle.position!='relative' && eo.currentStyle.position!='absolute'){
        tXPos.left += eo.offsetLeft;
        tXPos.top  += eo.offsetTop;
      } else {
        tXPos.left += eo.currentStyle.left.replace(/px/,"") * 1;
        tXPos.top  += eo.currentStyle.top.replace(/px/ ,"") * 1;
      }
    } else {
      tXPos.left += eo.offsetLeft;
      tXPos.top  += eo.offsetTop;
    }
    eo = eo.offsetParent;
  } while(eo);
}

function getPos(el)
{
   var pos = {left:tXPos['left'], top:tXPos['top']};

  do
  {
    if(el.id == 'tXFisheye') break;

    if(el.currentStyle){
      if(el.currentStyle.position!='relative' && el.currentStyle.position!='absolute'){
        pos.left += el.offsetLeft;
        pos.top  += el.offsetTop;
      } else {
        pos.left += typeof el.currentStyle.left != 'undefined' && el.currentStyle.left != 'auto' && el.currentStyle.left != '' ? el.currentStyle.left.replace(/px/,"") * 1 : 0;
        pos.top  += el.currentStyle.top.replace(/px/ ,"") * 1;
      }
    } else {
      pos.left += el.offsetLeft;
      pos.top  += el.offsetTop;
    }
    el = el.offsetParent;
  } while(el);

   return pos;
}

function tXFEDebug(msg)
{
  try
  {
    document.getElementById('tXDebug').innerHTML = msg;
  } catch(e) {
    if(!document.all) {
      var DIV = document.createElement("div");
      DIV.id = "tXDebug";
    } else {
      var DIV = document.createElement("<div id=tXDebug>");
    }
    DIV.style.position = "fixed";
    DIV.style.top      = "150px";
    DIV.style.left     = "15px";
    DIV.style.backgroundColor = "#EEEEEE";
    DIV.innerHTML             = msg;
    document.getElementsByTagName("body")[0].appendChild(DIV);
  }
}