onLoad = function() {initSlideshow();}

initSlideshow = function() {

	if (
		document.getElementById
		&& document.getElementById('ImageControls')
		&& document.getElementById('ImagePreviews')
		&& document.getElementById('ImageCounter')
                && document.getElementById('prevControl')
		&& document.getElementById('nextControl')
	) {
		jDisplay = {
			'buttons' : {
				'nextControl' : {
					'nContainer' : document.getElementById('nextControl')
				},
				'prevControl' : {
					'nContainer' : document.getElementById('prevControl')
				}
			},
                        'nPreviews'     : document.getElementById('ImagePreviews'),
			'nControls'     : document.getElementById('ImageControls'),
			'nCurrentImage' : document.getElementById('ImageDisplay').firstChild,
			'nCounter'      : document.getElementById('ImageCounter'),
                        'sTitle'        : document.getElementById('ImageTitle'),
			'aImages'       : Array(),
			'iCurrentImage' : 0
		}

		prepareSlideshowButton('nextControl');
		prepareSlideshowButton('prevControl');

		var aPreviews = jDisplay.nPreviews.getElementsByTagName('a');
		for(var i=0; i < aPreviews.length; i++) {
			jDisplay.aImages.push(
				{
                                'sTitle'      : aPreviews[i].title,
				'sSrc'        : aPreviews[i].href
				}
			);
                        doPreload(aPreviews[i].href);
			doPreload(aPreviews[i].sPreviewSrc);
		}

                doPreload(jDisplay.sPreviewSrc);
		setHidden(jDisplay.nPreviews);
		setVisible(jDisplay.nControls);
	}
}

prepareSlideshowButton = function(sButton) {
	nButton = jDisplay.buttons[sButton].nContainer;
	jDisplay.buttons[sButton]['nImage'] = nButton.firstChild;
      	jDisplay.buttons[sButton]['sTitle'] = nButton.firstChild.title;
	jDisplay.buttons[sButton]['sSrc']   = nButton.firstChild.src;
	doPreload(jDisplay.buttons[sButton].sSrc);

	var aAreas = nButton.getElementsByTagName('map');
	if (aAreas) {
	       for(var i=0; i < aAreas.length; i++) {
		aAreas[i].onclick = function () {return switchSlide(this)};
	            }
	 }
}

switchSlide = function(nThis) {
	sButtonId = getButtonId(nThis);
	var iKey = (sButtonId == 'nextControl' ? jDisplay.iCurrentImage + 1 : jDisplay.aImages.length + jDisplay.iCurrentImage - 1) % jDisplay.aImages.length;
	jDisplay.nCurrentImage.src = jDisplay.aImages[iKey].sSrc;
	jDisplay.iCurrentImage = iKey;
	jDisplay.nCounter.innerHTML = iKey + 1;
        jDisplay.sTitle.innerHTML = jDisplay.aImages[iKey].sTitle;
	return false;
}

getButtonId = function(nThis) {
	return nThis.parentNode.id;
}

setVisible = function(nNode) {
	removeClass(nNode, 'hidden');
	addClass(nNode, 'visible');
}

setHidden = function(nNode) {
	removeClass(nNode, 'visible');
	addClass(nNode, 'hidden');
}

function doPreload(sImg) {
	var oPreload = new Image();
	oPreload.src = sImg;
}

addClass = function(nNode, sClassName) {
	if (nNode.className) {
		var aClass = nNode.className.split(' ');
		for (var i in aClass) {
			if (sClassName == aClass[i]) {
				sClassName = '';
			}
		}
		if (sClassName) {
			aClass.push(sClassName);
		}
		nNode.className = aClass.join(' ');
	}
	else {
		nNode.className = sClassName;
	}
}

removeClass = function(nNode, sClassName) {
	if (nNode.className) {
		var aClass = nNode.className.split(' ');
		for (var i in aClass) {
			if (sClassName == aClass[i]) {
				aClass.splice(i,1);
				break;
			}
		}
		nNode.className = aClass.join(' ');
	}
}

window.onload = onLoad;
