//====== Image Rollovers ======//

/*
 * Image paths for rollovers.
 */
var arthurImg = 'img/benjamin-n.gif';
var r_arthurImg = 'img/benjamin-r.gif';
var joanImg = 'img/hutchinson-n.gif';
var r_joanImg = 'img/hutchinson-r.gif';
var peterImg = 'img/shor-n.gif';
var r_peterImg = 'img/shor-r.gif';

/*
 * Ordered list of image paths.
 * Must be in same order as the preload array below.
 */
var imageIndices = new Array(arthurImg, r_arthurImg, joanImg, r_joanImg, peterImg, r_peterImg);

/*
 * Ordered list of images, forcing preloading to avoid delay on rollover.
 */
var preloadedImages = new Array();
preloadedImages[0] = new Image(135, 28);
preloadedImages[0].src = arthurImg;
preloadedImages[1] = new Image(135, 28);
preloadedImages[1].src = r_arthurImg;
preloadedImages[2] = new Image(138, 28);
preloadedImages[2].src = joanImg;
preloadedImages[3] = new Image(138, 28);
preloadedImages[3].src = r_joanImg;
preloadedImages[4] = new Image(90, 28);
preloadedImages[4].src = peterImg;
preloadedImages[5] = new Image(90, 28);
preloadedImages[5].src = r_peterImg;

/*
 * Switches the given image elements 'src' attribute value
 * to the appropriate preloaded image.
 */
function swapImage(targetElem, imgPath) {
  if (targetElem) {
    for (var i=0; i<imageIndices.length; i=i+1) {
      if (imageIndices[i] == imgPath) {
        targetElem.src = preloadedImages[i].src;
        break;
      }
    }
  }
}

/* Onmouseover handler. */
function swapBenjaminIn() {
  swapImage(benImageTag, r_arthurImg);
}
/* Onmouseout handler. */
function swapBenjaminOut() {
  swapImage(benImageTag, arthurImg);
}
/* Onmouseover handler. */
function swapHutchinsonIn() {
  swapImage(hutchImageTag, r_joanImg);
}
/* Onmouseout handler. */
function swapHutchinsonOut() {
  swapImage(hutchImageTag, joanImg);
}
/* Onmouseover handler. */
function swapShorIn() {
  swapImage(shorImageTag, r_peterImg);
}
/* Onmouseout handler. */
function swapShorOut() {
  swapImage(shorImageTag, peterImg);
}


//====== Footer Positioning ======//

/*
 * Unfortunately, a pure CSS solution to positioning a footer element
 * below other positioned elements (columns), any one of which
 * could be the longest, and any vertical length.
 * And no, I didn't want to use tables.
 * Initially inspired by http://www.alistapart.com/articles/footers/
 * but I ended up using a different approach.
 */
function positionFooter() {
	var footerElement = document.getElementById('footer-wrapper');
	try {
	  //Make sure it is shown, as well.
	  //It MUST be made visible BEFORE having its margin increased
	  //to avoid being placed a little too high.
	  footerElement.style.display = 'inline';
    //Figure out which of the columns is the tallest.
    //Not checking 'header' div height.
    //This can probably be genericized further, to dynamically pick up extra columns...
    var centerHeight = document.getElementById('center').offsetHeight;
    var leftHeight = document.getElementById('left').offsetHeight;
    var rightHeight = document.getElementById('right').offsetHeight;
    var heights = new Array(centerHeight, leftHeight, rightHeight);
    function numericDescending(a, b) { return (b - a); }
    heights.sort(numericDescending);
	  //Shove the footer below everything else, not using positioning,
	  //but simply by increasing its top margin.
	  footerElement.style.marginTop = heights[0] + footerElement.offsetHeight + 'px';
	} catch(ex) {
	  //Reset visibility of footer if there is a problem.
	  footerElement.style.display = 'none';
	}
}

/*
 * Trigger footer positioning on-load.
 * Must use an adjusted technique if other onload event handlers are present.
 */
window.onload = function() {
  positionFooter();
}
//This is really only needed with relative positioning...
window.onresize = function() {
  positionFooter();
}

