// JavaScript Document
var imageId = 'mainImage';
var arrowImageHeight = 35;
var slideSpeed = 5;
var previewImagePane = false;
var previewImageParent = false;
var slideEndMarker = false;
var galleryContainer = false;
var xmlDoc;

function showPreview(newSrc, imgName, imgWidth, imgHeight) {
	var theOne = document.getElementById(imageId);
	var imgDim = setWidthHeight(imgWidth, imgHeight);
	document.getElementById('waitMessage').style.display = 'inline';
	theOne.style.visibility = 'hidden';
	theOne.onload = function () { loadIt(); };
	theOne.width = imgDim[0];
	theOne.height = imgDim[1];
	theOne.src = newSrc;
	theOne.name = imgName;
	theOne.alt = getDescription(imgName);
}

function setWidthHeight(imgWidth, imgHeight){
	var maxWidth = 640;
	var maxHeight = 480;
	var dimensions = Array(imgWidth, imgHeight);
	var ratio = imgWidth / imgHeight;
	if (imgWidth < maxWidth || imgHeight < maxHeight) {
		dimensions[0] = maxWidth;
		dimensions[1] = dimensions[0] / ratio;
	
		if (dimensions[1] > maxHeight) {
			dimensions[1] = maxHeight;
			dimensions[0] = dimensions[1] * ratio;
		}
	}
	return dimensions;
}

function initImage() {
  image = document.getElementById(imageId);
  setOpacity(image, 0);
  image.style.visibility = 'visible';
  fadeIn(imageId,0);
}

function loadIt() {
	document.getElementById('waitMessage').style.display = 'none';
	document.getElementById(imageId).style.visibility = 'visible';
	fadeIn(imageId, 0);
}

function setOpacity(obj, opacity) {
  /*opacity = (opacity == 100)?99.999:opacity;*/
  obj.style.opacity = opacity/100;// Safari 1.2, newer Firefox and Mozilla, CSS3
  obj.style.filter = "alpha(opacity:"+opacity+")";// IE/Win
  obj.style.KHTMLOpacity = opacity/100;// Safari<1.2, Konqueror
  obj.style.MozOpacity = opacity/100;// Older Mozilla and Firefox
}

function fadeIn(objId,opacity) {
  if (document.getElementById) {
    obj = document.getElementById(objId);
    if (opacity <= 100) {
      setOpacity(obj, opacity);
      opacity += 10;
      window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 25);
    }
  }
}

function getTopPos(inputObj) {		
  var returnValue = inputObj.offsetTop;
  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetTop;
  return returnValue;
}

function getLeftPos(inputObj) {

  var returnValue = inputObj.offsetLeft;
  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
  return returnValue;
}

function initSlide(e) {
	if(document.all)var e = window.event;
	if (!e) var e = window.event;
	
	if(this.src.indexOf('over')<0)this.src = this.src.replace('.gif','-over.gif');
	
	slideSpeed = e.clientY + Math.max(document.body.scrollTop,document.documentElement.scrollTop) - getTopPos(this);
	if(this.src.indexOf('down')>=0){
		slideSpeed = (slideSpeed)*-1;	
	}else{
		slideSpeed = arrowImageHeight - slideSpeed;
	}
	slideSpeed = Math.round(slideSpeed * 10 / arrowImageHeight);
}

function stopSlide() {
	slideSpeed = 0;
	this.src = this.src.replace('-over','');
}

function slidePreviewPane() {
	if(slideSpeed!=0){
		var topPos = previewImagePane.style.top.replace(/[^\-0-9]/g,'')/1;	
		if(slideSpeed<0 && slideEndMarker.offsetTop<(previewImageParent.offsetHeight - topPos)){
			slideSpeed=0;
		}
		topPos = topPos + slideSpeed;
		if(topPos>0)topPos=0;
		previewImagePane.style.top = topPos + 'px';
	}
	setTimeout('slidePreviewPane()',30);		
}

function revealThumbnail() {
	this.style.filter = 'alpha(opacity=100)';
	this.style.opacity = 1;
}

function hideThumbnail() {
	this.style.filter = 'alpha(opacity=50)';
	this.style.opacity = 0.5;
}

function initGalleryScript() {
	previewImageParent = document.getElementById('theImages');
	previewImagePane = document.getElementById('pane');
	/*previewImagePane = document.getElementById('theImages').getElementsByTagName('DIV')[0];*/
	galleryContainer  = document.getElementById('galleryContainer');
	previewImagePane.style.top = '0px';
	var images = previewImagePane.getElementsByTagName('IMG');
	for(var no=0;no<images.length;no++){
		images[no].onmouseover = revealThumbnail;
		images[no].onmouseout = hideThumbnail;
	}	
	slideEndMarker = document.getElementById('slideEnd');
	
	document.getElementById('arrow_up_image').onmousemove = initSlide;
	document.getElementById('arrow_up_image').onmouseout = stopSlide;
	document.getElementById('arrow_down_image').onmousemove = initSlide;
	document.getElementById('arrow_down_image').onmouseout = stopSlide;
	slidePreviewPane();
	initImage();
}

function loadXML(xmlFileName) {
	try {
		if (window.ActiveXObject){// code for IE
			var errorHere = "Check browser and security settings.";
			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async=false;
			xmlDoc.load(xmlFileName);
		} else if (window.XMLHttpRequest) {//Safari
			var errorHere = "Error handling XMLHttpRequest request.";
			var d = new XMLHttpRequest();
			d.open("GET", xmlFileName, false);
			d.send(null);
			xmlDoc = d.responseXML;
		} else {// Mozilla, Firefox, Opera, etc.
			var errorHere = "Error.";
			xmlDoc=document.implementation.createDocument("","",null);
			xmlDoc.async = false;
			xmlDoc.load(xmlFileName);
		}
	}
	catch(e) {
		alert(errorHere)
	}
}

function getDescription(fileId) {
	var x=xmlDoc.getElementsByTagName('description');
	var desc;
	for (var i=0; i<x.length;i++) {
		if (x[i].parentNode.getAttribute("id") == fileId) {
			desc = x[i].childNodes[0].nodeValue;
			break;
		}
	}
	if (desc) {return desc;} else {return 'Description coming soon.';}
}
		
window.onload = initGalleryScript;