// These functions provide the ability to zoom the journal images between three different views.
// Except for the functions with acknowledgements, this script file is 
// copyright 2008 Mick Ashby - all rights reserved.

window.onresize = resize;

function resize()
{
var view = new getObj("view").obj;
var r = document.getElementById('image').ratio;
if (view.value=='2') { var w = document.body.clientWidth-10;}
else if (view.value=='1') { var w = (document.body.clientWidth-16)*2;}
else if  (view.value=='x') { var w = 1900;}
else {alert('Please notify Mick that you saw the "Bad view value" alert.')}
document.getElementById("image").width=w;
document.getElementById("turnleft").width=w*.1;
document.getElementById("top").width=w*.8;
document.getElementById("turnright").width=w*.1;
document.getElementById("turnleft").height=w*r;
document.getElementById("turnright").height=w*r;
positionFloater('floater','image');
}

// This function was gratefully copied/adapted from www.quirksmode.org/js/dhtmloptions.html
function getO(name)
{
  if (document.getElementById) // Mozilla
  {
  	this.value = document.getElementById(name);
  }
  else if (document.all)  // IE
  {
	this.value = document.all[name];
  }
  else if (document.layers)
  {
	this.value = getObjNN4(document,name).obj;
  }

}

// This function was gratefully copied from www.quirksmode.org/js/dhtmloptions.html
function getObj(name)
{
  if (document.getElementById)
  {
  	this.obj = document.getElementById(name);
	this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	this.style = document.all[name].style;
  }
  else if (document.layers)
  {
	this.obj = getObjNN4(document,name);
	this.style = this.obj;
  }
}

// This function was gratefully copied from www.quirksmode.org/js/dhtmloptions.html
function getObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}

// This function gratefully copied from www.quirksmode.org/js/findpos.html
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function positionFloater(moveobject, id)
{
  var targetObject = new getObj(id).obj;
  var targetLeftTop = new findPos(targetObject);
  var div = new getObj(moveobject).style;
  div.left=targetLeftTop[0];
  div.top =targetLeftTop[1];
}

function fade(id,f)
{
  var obj = new getObj(id).obj;
  obj.style.opacity=f;
  obj.style.MozOpacity=f;
 if (document.all) { obj.filters.alpha.opacity=f*100; }
}

function setView(v)
{
var view = new getObj("view").obj; // .value == '1' | '2'| 'x'
var gif = new getObj("top").obj;
var zoom2 = new getO("2");
var zoom1 = new getO("1");
var zoomx = new getO("x");
if (v=='1')
  {
    gif.src='../../images/zoom1.gif'
    zoom1.selected=true;
    zoom2.selected=false;
    zoomx.selected=false;
    view.value='1';
    resize();
  }
else if (v=='x')
  {
    gif.src='../../images/zoom0.gif'
    zoom1.selected=false;
    zoom2.selected=false;
    zoomx.selected=true;
    view.value='x';
    resize();
  }
else if (v=='2')
  {
    gif.src='../../images/zoom2.gif'
    zoom1.selected=false;
    zoom2.selected=true;
    zoomx.selected=false;
    view.value='2';
    resize();
  }
}

function toggleView()
{
var view = new getObj("view").obj; // .value == '1' | '2'| 'x'
if (view.value=='2')
  {
    setView('x');
  }
else if (view.value=='1')
  {
    setView('2');
  }
else if (view.value=='x')
  {
    setView('1');
  }
}

function formatXXXX(N) // turns an integer into a 4 character string with leading zeros
{
    lengthOfN = String(N).length;
    withLeadingZeros = '000'+String(N);
    right4characters=withLeadingZeros.substr(lengthOfN-1,4);
    return right4characters;
}


function preloadImages(images)
{
    currentPageSrc=document.getElementById('image').src;
    numberPosition=parseInt(currentPageSrc.indexOf('wrac'));
    numberPosition+=4;
    if (numberPosition>10 && images>0) // not a volume cover and preloading not turned off
       { scanNumber=parseInt(currentPageSrc.substr(numberPosition,4),10);
document.getElementById('image2').src='../images/wrac'+formatXXXX(scanNumber+1)+'.jpg'; 
         if (images>1)
            { document.getElementById('image1').src='../images/wrac'+formatXXXX(scanNumber-1)+'.jpg'; 

              if (images>2)
                 {
document.getElementById('image3').src='../images/wrac'+formatXXXX(scanNumber+2)+'.jpg'; 
                  if (images>3)
                  {
document.getElementById('image4').src='../images/wrac'+formatXXXX(scanNumber+3)+'.jpg'; 
                   if (images>4)
                   {
document.getElementById('image0').src='../images/wrac'+formatXXXX(scanNumber-2)+'.jpg'; 
                 }}}
            }
        } 
}


function initializePage()
{ 
  if (location.search=='?debugPreload') { document.getElementById('preload').style.visibility='visible'; };
  document.getElementById('image').ratio=document.getElementById('image').height/document.getElementById('image').width;
  document.getElementById('view').value='2';
  document.getElementById('2').selected='true';
  document.getElementById('1').selected='false';
  document.getElementById('x').selected='false';
  document.getElementById('floater').style.visibility='visible';
  document.getElementById('loading').style.visibility='hidden';
  setView('2');
  preloadImages(5);

}
