/* ############################################# */
/* #  Castiglion del Bosco                     # */
/* #  MEDIA GALLERY                            # */
/* #  IconNicholson / P.Gold - 06/07           # */
/* ############################################# */


var collections;
var thumbSets;
var thumbs;
var photos;
var curCollectionPosition;
var curCollectionTotal;


function init(e) {
	collections = getChildrenByTagName("galleryCollectionList", "LI");
	thumbSets 	= getChildrenByTagName("moduleGalleryThumbs", 	"DL");
	thumbs 		= getChildrenByTagName("moduleGalleryThumbs", 	"DD");
	photos 		= getChildrenByTagName("moduleGalleryViewer", 	"DL");
	curCollectionPosition = 1;
	var curCollectionIdx = getCurrentCollectionIdx();
	var thumbItems = thumbSets[curCollectionIdx].getElementsByTagName("DD");
	curCollectionTotal = thumbItems.length

	installListeners();
	loadGallery();
	startSlideShow();
}
addEvent(window, 'load', init, false);


function loadGallery() {
	loadCollection();
}

function loadCollection(collectionIdx) {
	if (!collectionIdx) { collectionIdx = 0; }
	soloSibling(thumbSets,collectionIdx);
	setCurrentThumb(0);
	collectionIdx = convertIdxToStr(collectionIdx, 2);
	loadPhoto(collectionIdx+"_01");
//	userCalledPause = false;
}

function loadPhoto(photoId, collectionIdx) {
	if (!photoId) {
		if (!collectionIdx) { collectionIdx = '01'; }
		collectionIdx = convertIdxToStr(collectionIdx, 2);
		photoId = "01_"+collectionIdx;
	}
	photoId = "p"+photoId;
	soloSiblingById(photos,photoId);
}


function installListeners() {
	if (!collections)
		return;
		
	for (var i=0; i<collections.length; i++) {
		var thumb = getDecendentByClass(collections[i],'collectionThumb');
		var thumbAnchor = thumb.childNodes[0];
		addEvent(thumbAnchor, 'click', listenerCollectionClick, false);
		thumbAnchor.onclick = cancelClickSafari;
		
		// interrupt slideshow
		addEvent(thumbAnchor, 'mouseover', listenerThumbOver, false);
		addEvent(thumbAnchor, 'mouseout', listenerThumbOut, false);

		var actionBtn = getDecendentByClass(collections[i],'actionBtn');
		var bodyAnchor = actionBtn.childNodes[0];
		addEvent(bodyAnchor, 'click', listenerCollectionClick, false);
		bodyAnchor.onclick = cancelClickSafari;
	}

	for (var i=0; i<thumbs.length; i++) {
		var thumbAnchor = thumbs[i].childNodes[0];
		addEvent(thumbAnchor, 'click', listenerThumbClick, false);
		thumbAnchor.onclick = cancelClickSafari;
		
		// interrupt slideshow
		addEvent(thumbAnchor, 'mouseover', listenerThumbOver, false);
		addEvent(thumbAnchor, 'mouseout', listenerThumbOut, false);
	}
	
	var nextBtn = document.getElementById('nextPhoto');
	addEvent(nextBtn, 'click', listenerPhotoNext, false);
	nextBtn.onclick = cancelClickSafari;

	// interrupt slideshow
	addEvent(nextBtn, 'mouseover', listenerThumbOver, false);
	addEvent(nextBtn, 'mouseout', listenerThumbOut, false);

	
	var prevBtn = document.getElementById('prevPhoto');
	addEvent(prevBtn, 'click', listenerPhotoPrev, false);
	prevBtn.onclick = cancelClickSafari;

	// interrupt slideshow
	addEvent(prevBtn, 'mouseover', listenerThumbOver, false);
	addEvent(prevBtn, 'mouseout', listenerThumbOut, false);
	

	var pauseBtn = document.getElementById('pausePhoto');
	addEvent(pauseBtn, 'click', listenerPhotoPause, false);
	pauseBtn.onclick = cancelClickSafari;
	
	var playBtn = document.getElementById('playPhoto');
	addEvent(playBtn, 'click', listenerPhotoPlay, false);
	playBtn.onclick = cancelClickSafari;
}



/* ********************************** */
/* *        EVENT LISTENERS         * */
/* ********************************** */

function listenerCollectionClick(e) {
	if (window.event) {
		e = window.event;
	}
	var idx = setCurrentCollection(e);
	loadCollection(idx);
	
	cancelLink(e);
}


function listenerThumbOver(e) {
	clearTimeout(TIMEOUT_ID);
}

function listenerThumbOut(e) {
	if (!userCalledPause) {
		startSlideShow();
	}
}



function listenerThumbClick(e) {
	if (window.event) {
		e = window.event;
	}
	setCurrentThumb(e);
	var eventTarget = getEventTarget(e);
	while (!(eventTarget.tagName == 'A') && eventTarget != document) {
		eventTarget = eventTarget.parentNode;
	}
	loadPhoto(getTargetPhotoId(eventTarget));
	
	cancelLink(e);
}

function listenerPhotoNext(e) {
	if (curCollectionPosition == curCollectionTotal) {
		curCollectionPosition = 0;
	}
	loadPhoto(convertIdxToStr(getCurrentCollectionIdx(),2)+"_"+convertIdxToStr(curCollectionPosition,2));
	setCurrentThumb(curCollectionPosition);
//	userCalledPause = false;

	cancelLink(e);
}

var userCalledPause = false;
function listenerPhotoPause(e) {
	clearTimeout(TIMEOUT_ID);
	userCalledPause = true;
	cancelLink(e);
	if (document.getElementById('playPhoto')) {
		displayElement(document.getElementById('playPhoto'), 'inline');
	}
	if (document.getElementById('pausePhoto')) {
		hideElement(document.getElementById('pausePhoto'));
	}
}

function listenerPhotoPlay(e) {
	if (document.getElementById('playPhoto')) {
		hideElement(document.getElementById('playPhoto'));
	}
	if (document.getElementById('pausePhoto')) {
		displayElement(document.getElementById('pausePhoto'), 'inline');
	}
	startSlideShow();
	userCalledPause = false;
	cancelLink(e);
}

function listenerPhotoPrev(e) {
	if (curCollectionPosition == 1) {
		curCollectionPosition = curCollectionTotal+1;
	}
	curCollectionPosition = curCollectionPosition - 2;
	loadPhoto(convertIdxToStr(getCurrentCollectionIdx(),2)+"_"+convertIdxToStr(curCollectionPosition,2));
	setCurrentThumb(curCollectionPosition);
//	userCalledPause = false;

	cancelLink(e);
}



/* ********************************** */
/* *     UTILITY FUNCTIONS          * */
/* ********************************** */

// cross-browser event handling for IE5+, NS6+ and Mozzila/Gecko
// By Scott Andrew
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}	
}



function getChildrenByTagName(oElementId, tagName) {
	var oElem;
	if (document.getElementById(oElementId) && document.getElementById(oElementId).childNodes) {
		oElem = document.getElementById(oElementId);
		if ( oElem.getElementsByTagName(tagName) ) {
			return (document.getElementById(oElementId)).getElementsByTagName(tagName);
		}
	}
	return -1;
}


function getTargetPhotoId(anchor) {
	var mark = "#";
	var str = anchor.href;
	return str.substring(str.indexOf(mark) + 1, str.length);
}


function getEventType(e) {
	if (window.event) {
		return window.event.type;
	}
	return e.type;
}

function getEventTarget(e) {
	if (window.event) {
		return window.event.srcElement;
	}
	return e.target;
}

function setImageCounts(idx, total) {
	if (document.getElementById("galleryIdx") && document.getElementById("galleryTotal")) {
		document.getElementById("galleryIdx").childNodes[0].nodeValue = idx;
		document.getElementById("galleryTotal").childNodes[0].nodeValue = total;
	}
	curCollectionPosition = idx;
	curCollectionTotal = total;
}


function setCurrentCollection(identifier) {
	var idx = identifier;
	if (identifier.type == 'click') {
		for (var i=0; i<collections.length; i++) {
			collections[i].className = "";
			var eventTarget = getEventTarget(identifier);
			if (isAncestor(collections[i], eventTarget)) {
				idx = i;
			}
		}
	}

	collections[idx].className = "current";
	return idx;
}

function getCurrentCollectionIdx() {
	for (var i=0; i<collections.length; i++) {
		if (collections[i].className == "current") {
			return i;
		}
	}
	return null;
}


function setCurrentThumb(identifier) {
	var idx = identifier;
	var curCollectionIdx = getCurrentCollectionIdx();
	var thumbItems = thumbSets[curCollectionIdx].getElementsByTagName("DD");

	var eventType = getEventType(identifier);
	if (eventType == 'click') {
		var eventTarget = getEventTarget(identifier);
		if (isAncestor(thumbSets[curCollectionIdx], eventTarget)) {
			for (var i=0; i<thumbItems.length; i++) {
				if (isAncestor(thumbItems[i], eventTarget)) {
					idx = i;
				}
			}
		}
	}
	for (var i=0; i<thumbItems.length; i++) {
		if (thumbItems[i].className == "current") {
			thumbItems[i].childNodes[0].className = "visited";		
		}
		thumbItems[i].className = "";
	}

	thumbItems[idx].className = "current";
	setImageCounts(idx+1, thumbItems.length);
}

function getCurrentThumbIdx() {
	var curCollectionIdx = getCurrentCollectionIdx();
	var thumbItems = thumbSets[curCollectionIdx].getElementsByTagName("DD");
	for (var i=0; i<thumbItems.length; i++) {
		if (thumbItems[i].className == "current") {
			return i;
		}
	}
	return null;
}



function soloSibling(oSet, idx) {
	for (var i=0; i<thumbSets.length; i++) {
		hideElement(oSet[i]);
		displayElement(oSet[idx]);
	}
}


function soloSiblingById(oSet, elemId) {
	for (var i=0; i<photos.length; i++) {
		hideElement(oSet[i]);
	}
	displayElementById(elemId);
}


function convertIdxToStr(idx, digits) {
	idx++; /* our IDs start at 01 */
	idx = idx+''; /* convert to str */
	for (var i=0; i<(digits-idx.length); i++) {
		idx = '0'+idx;
	}
	return idx;
}


function cancelLink(e) {
	if (window.event) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			window.event.srcElement.blur();
	}
	if (e && e.stopPropagation && e. preventDefault) {
		e.stopPropagation();
		e.preventDefault();
		e.target.blur();
	}
}

function cancelClickSafari() {
	return false;
}


// ADD Array.indexOf method for IE!
if(!Array.indexOf){
	Array.prototype.indexOf = function(obj){
		for(var i=0; i<this.length; i++){
			if(this[i]==obj){
				return i;
			}
		}
		return -1;
	}
}



var TIMEOUT_ID;
function startSlideShow() {
	slideShowNext();
}


function slideShowNext() {
//	TIMEOUT_ID = window.setTimeout('listenerPhotoNext();slideShowNext();', 8000);
}


