// -----------------------------------------------------------------------------------
// 
// This page coded by Scott Upton
// http://www.uptonic.com | http://www.couloir.org
//
// This work is licensed under a Creative Commons License
// Attribution-ShareAlike 2.0
// http://creativecommons.org/licenses/by-sa/2.0/
//
// Associated APIs copyright their respective owners
//
// -----------------------------------------------------------------------------------
// --- version date: 11/28/05 --------------------------------------------------------


// get current photo id from URL
var thisURL = document.location.href;
var splitURL = thisURL.split("#");
var photoId = splitURL[1] - 1;

// if no photoId supplied then set default
var photoId = (!photoId)? 0 : photoId;

// CSS border size x 2
var borderSize = 10;

// Photo directory for this gallery
var photoDir = "photos/01/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("LaosSlideShow01.jpg", "600", "393", "Mekong River at Dusk, Luang Prabang"),
	new Array("LaosSlideShow02.jpg", "650", "305", "Downtown Luang Prabang from the air"),
	new Array("LaosSlideShow03.jpg", "600", "395", "Nam Khan River, Luang Prabang"),
	new Array("LaosSlideShow04.jpg", "600", "397", "Mekong River, Luang Prabang"),
	new Array("LaosSlideShow05.jpg", "600", "335", "Nam Khan River, Luang Prabang"),
	new Array("LaosSlideShow06.jpg", "600", "393", "Kuang Si Falls (lower falls), outside Luang Prabang"),
	new Array("LaosSlideShow07.jpg", "600", "397", "Kuang Si Falls (middle falls), outside Luang Prabang"),
	new Array("LaosSlideShow08.jpg", "600", "395", "Nam Song River, Vang Vieng"),
	new Array("LaosSlideShow09.jpg", "600", "397", "Banks of the Mekong River near Savanakhet"),
	new Array("LaosSlideShow10.jpg", "600", "397", "Banks of the Mekong River near Savanakhet"),
	new Array("LaosSlideShow11.jpg", "329", "500", "Wat Sisaket, Vientiane"),
	new Array("LaosSlideShow12.jpg", "600", "406", "Tat Luang, Vientiane"),
	new Array("LaosSlideShow13.jpg", "600", "396", "Tat Luang, Vientiane"),
	new Array("LaosSlideShow14.jpg", "600", "395", "Wat Xieng Tong, Luang Prabang"),
	new Array("LaosSlideShow15.jpg", "320", "500", "Wat Xieng Tong, Luang Prabang"),
	new Array("LaosSlideShow16.jpg", "600", "393", "Wat Siphoutthabath, Luang Prabang"),
	new Array("LaosSlideShow17.jpg", "600", "393", "Morning alms at Wat Siphoutthabath, Luang Prabang"),
	new Array("LaosSlideShow18.jpg", "600", "383", "Morning alms, Luang Prabang"),
	new Array("LaosSlideShow19.jpg", "570", "414", "Vientiane"),
	new Array("LaosSlideShow20.jpg", "328", "500", "Luang Prabang"),
	new Array("LaosSlideShow22.jpg", "331", "500", "Lao New Year, Luang Prabang"),
	new Array("LaosSlideShow21.jpg", "600", "397", "Lao New Year, Luang Prabang"),
	new Array("LaosSlideShow23.jpg", "600", "397", "School in Savanakhet"),
	new Array("LaosSlideShow24.jpg", "600", "396", "School in Savanakhet"),
	new Array("LaosSlideShow25.jpg", "600", "393", "Banks of the Mekong River, Vientiane"),
	new Array("LaosSlideShow26.jpg", "600", "394", "Mekong River, Luang Prabang"),
	new Array("LaosSlideShow27.jpg", "600", "391", "Luang Prabang"),
	new Array("LaosSlideShow28.jpg", "700", "331", "Temple on the grounds of the former royal palace (now National Museum), Luang Prabang"),
	new Array("LaosSlideShow29.jpg", "600", "394", "Detail temple door, Luang Prabang"),
	new Array("LaosSlideShow31.jpg", "600", "397", "Temple roof, Luang Prabang"),
	new Array("LaosSlideShow30.jpg", "750", "331", "Wat Mai, Luang Prabang"),
	new Array("LaosSlideShow32.jpg", "750", "312", "Wat Mai, Luang Prabang"),
	new Array("LaosSlideShow35.jpg", "600", "394", "Luang Prabang street"),
	new Array("LaosSlideShow36.jpg", "600", "394", "Market in Luang Prabang"),
	new Array("LaosSlideShow37.jpg", "625", "376", "Mekong River at Dusk, Luang Prabang"),
	new Array("LaosSlideShow38.jpg", "600", "394", "Mekong River at Dusk, Luang Prabang"),
	new Array("LaosSlideShow39.jpg", "515", "400", "Pak Ou River"),
	new Array("LaosSlideShow40.jpg", "600", "394", "Hmong girl, north of Luang Prabang"),
	new Array("LaosSlideShow41.jpg", "355", "500", "Hmong boy, north of Luang Prabang"),
	new Array("LaosSlideShow42.jpg", "330", "500", "Hmong girl, north of Luang Prabang"),
	new Array("LaosSlideShow43.jpg", "600", "395", "Hmong woman, north of Luang Prabang")
	);

// Number of photos in this gallery
var photoNum = photoArray.length;

/*--------------------------------------------------------------------------*/

// Additional methods for Element added by SU, Couloir
Object.extend(Element, {
	getWidth: function(element) {
   	element = $(element);
   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   	element = $(element);
    	element.style.height = h +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

/*--------------------------------------------------------------------------*/

var Slideshow = Class.create();

Slideshow.prototype = {
	initialize: function(photoId) {
		this.photoId = photoId;
		this.photo = 'Photo';
		this.photoBox = 'Container';
		this.prevLink = 'PrevLink';
		this.nextLink = 'NextLink';
		this.captionBox = 'CaptionContainer';
		this.caption = 'Caption';
		this.counter = 'Counter';
		this.loader = 'Loading';
	},
	getCurrentSize: function() {
		// Get current height and width, subtracting CSS border size
		this.wCur = Element.getWidth(this.photoBox) - borderSize;
		this.hCur = Element.getHeight(this.photoBox) - borderSize;
	},
	getNewSize: function() {
		// Get current height and width
		this.wNew = photoArray[photoId][1];
		this.hNew = photoArray[photoId][2];
	},
	getScaleFactor: function() {
		this.getCurrentSize();
		this.getNewSize();
		// Scalars based on change from old to new
		this.xScale = (this.wNew / this.wCur) * 100;
		this.yScale = (this.hNew / this.hCur) * 100;
	},
	setNewPhotoParams: function() {
		// Set source of new image
		Element.setSrc(this.photo,photoDir + photoArray[photoId][0]);
		// Set anchor for bookmarking
		Element.setHref(this.prevLink, "#" + (photoId+1));
		Element.setHref(this.nextLink, "#" + (photoId+1));
	},
	setPhotoCaption: function() {
		// Add caption from gallery array
		Element.setInnerHTML(this.caption,photoArray[photoId][3]);
		Element.setInnerHTML(this.counter,((photoId+1)+'/'+photoNum));
	},
	resizePhotoBox: function() {
		this.getScaleFactor();
		new Effect.Scale(this.photoBox, this.yScale, {scaleX: false, duration: 0.3, queue: 'front'});
		new Effect.Scale(this.photoBox, this.xScale, {scaleY: false, delay: 0.5, duration: 0.3});
		// Dynamically resize caption box as well
		Element.setWidth(this.captionBox,this.wNew-(-borderSize));
	},
	showPhoto: function(){
		new Effect.Fade(this.loader, {delay: 0.5, duration: 0.3});
		// Workaround for problems calling object method "afterFinish"
		new Effect.Appear(this.photo, {duration: 0.5, queue: 'end', afterFinish: function(){Element.show('CaptionContainer');Element.show('PrevLink');Element.show('NextLink');}});
	},
	nextPhoto: function(){
		// Figure out which photo is next
		(photoId == (photoArray.length - 1)) ? photoId = 0 : photoId++;
		this.initSwap();
	},
	prevPhoto: function(){
		// Figure out which photo is previous
		(photoId == 0) ? photoId = photoArray.length - 1 : photoId--;
		this.initSwap();
	},
	initSwap: function() {
		// Begin by hiding main elements
		Element.show(this.loader);
		Element.hide(this.photo);
		Element.hide(this.captionBox);
		Element.hide(this.prevLink);
		Element.hide(this.nextLink);
		// Set new dimensions and source, then resize
		this.setNewPhotoParams();
		this.resizePhotoBox();
		this.setPhotoCaption();
	}
}

/*--------------------------------------------------------------------------*/

// Establish CSS-driven events via Behaviour script
var myrules = {
	'#Photo' : function(element){
		element.onload = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.showPhoto();
		}
	},
	'#PrevLink' : function(element){
		element.onmouseover = function(){
//			soundManager.play('beep');
		}
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.prevPhoto();
//			soundManager.play('select');
		}
	},
	'#NextLink' : function(element){
		element.onmouseover = function(){
//			soundManager.play('beep');
		}
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.nextPhoto();
//			soundManager.play('select');
		}
	},
	a : function(element){
		element.onfocus = function(){
			this.blur();
		}
	}
};

// Add window.onload event to initialize
Behaviour.addLoadEvent(init);
Behaviour.apply();
function init() {
	var myPhoto = new Slideshow(photoId);
	myPhoto.initSwap();
//	soundManagerInit();
}