var picArray = new Array();
var picW = new Array();
var picH = new Array();
var scrollToY=0;
function ajaxManager()
    {
    var args = ajaxManager.arguments;
    switch (args[0])
        {
        case "hide_access":
            document.getElementById('zmPic').style.visibility = "hidden";
            break;
        case "load_pic":
            var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
            ajaxManager('hide_access');
            zp = document.getElementById("zmPic");

            if (x) {
                x.onreadystatechange = function() 
                  {
                    if (x.readyState < 4){
                       zp.innerHtml ="Loading Image...";
                    }
                    if (x.readyState == 4 && x.status == 200) 
                    {
                        zp.innerHTML = x.responseText;
                    }
                }
                  x.open("GET", picArray[args[1]], true);
                  x.send(null);
                  var f=args[2];  // 'this'
                  var fImg=f.getElementsByTagName("img")[0]; // target image
                  var fH=fImg.height;
                  var oY=findposY(fImg);// vertical offset of image in page
                  var vH=viewHeight(); // viewport (vp)height
                  var vT=scrollToY; // vp scroll top edge - dist from top of page
                  var vB=vT+vH; // vp bottom edge
                  var zH=picH[args[1]]; //zoom pic height
                  var zOvl=(zH-fH)/2; // zoom over/under hang from target img
                  //alert("oY "+oY+" vt "+vT+" vH "+vH+" vB "+vB+" fH "+fH+" zH "+zH+" zOvl "+zOvl);
                  var topSp=oY-vT-zOvl; // space above target
                  var botSp=vB-(oY+fH); // space below target
                  //alert("topSp " + topSp + " botSp "+botSp);
                  var vMt=20; // min offset from vp top
                  var vMb=40; // min offset from vp bottom bigger to allow for caption
                  
                  //place enlarged image within vp
                  //if room in vp, then centre the enlarged image against the target
                  // otherwise offset from top or bottom edge depending on target position
                  if (zH >= vH || topSp < vMt) { // image bigger than vp or too close/off top of vp
                  	 var midT = (oY-vT)/2;
                  	 zTop=vT+(midT>vMt ? midT : vMt);
//                  	 alert("set from top "+zTop);
                  } else if (botSp < zOvl+vMb) { //too close to/off vp bottom
                     var midB = (vB-oY-fH)/2;
                     zTop= vB-zH-(midB > vMb ? midB : vMb);
//                  	 alert("set from bottom "+zTop);                     
                  } else {
                    zTop=oY-zOvl;
//                  	 alert("set from image "+zTop);                    
                  }
//                  alert("obj pos"+oY+" scroll Offset Y "+sY+" view height "+vH+"image height " +fImg.height);
                  zp.style.left='220px';
                  zp.style.top=zTop+'px';
                  zp.style.width=picW[args[1]]+'px';
                  zp.style.visibility = "visible";
            }
            break;
        case "load_js":
            var y = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
            if (y)
                {
                y.onreadystatechange = function()
                    {
                    if (y.readyState == 4 && y.status == 200)
                        {
                        var getheadTag = document.getElementsByTagName('head')[0];
                        setjs = document.createElement('script');
                        setjs.setAttribute('type', 'text/javascript');
                        getheadTag.appendChild(setjs);
                        setjs.text = y.responseText;
                        }
                    }
                y.open("GET", args[1], true);
                y.send(null);
                }
            break;

        case "start_up":
            ajaxManager('hide_access');
            ajaxManager('load_js','scripts/'+args[1]);
            break;
        case "ignore":
            break;
        }
    }
    

function findposY (obj) {
   var curtop = 0;
   if (obj.offsetParent) {
      while (obj.offsetParent) {
      //alert('obj id ' + obj.id + ' offsetTop ' + obj.offsetTop);
         curtop += obj.offsetTop;
         obj = obj.offsetParent;
      }
   }
   return curtop;
}

function viewHeight() {
   var y=0;
   if (self.innerHeight) { // excpet IE
      y = self.innerHeight;
   }
   else if (document.documentElement && document.documentElement.clientHeight) {
       // IE 6 strict
      y = document.documentElement.clientHeight;
   }
   else if (document.body) { // other IE
      y = document.body.clientHeight;
   }
   return y;
}

function scrollOffsetY() {
   var y=0;
   if (self.pageYOffset) { // all except IE
      y = self.pageYOffset;
   }
   else if (document.documentElement && document.documentElement.scrollTop) {
      // IE 6 strict
      y = document.documentElement.scrollTop;
   }
   else if (document.body) { // other IE 
      y = document.body.scrollTop;
   }
   scrollToY=y;
}   

