// -----------------------------------------------------------------------------------// // 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/02/";// Define each photo's name, height, width, and caption var photoArray = new Array(	// Source, Width, Height, Caption	new Array("planting1.jpg", "450", "458", "Planting nuclear mini-tubers in the spring"),	new Array("littlepotatoes.jpg", "500", "375", "Yellow flesh potatoes"),	new Array("field1.jpg", "490", "361", "Field of Gem Stars in bloom"),	new Array("irrigation.jpg", "500", "245", "All True North fields are pivot irrigated"),	new Array("flamer.jpg", "500", "430", "Desiccating using a propane flamer"),	new Array("yard1.jpg", "500", "353", "The yard in Outlook during harvest"),	new Array("harvest2.jpg", "500", "211", "Harvest in full swing"),	new Array("harvest1.jpg", "500", "305", "The harvester fills a truck in just a few minutes"),	new Array("field3.jpg", "350", "534", "Filling the bins"),	new Array("yard3.jpg", "500", "333", "A constant flury of activity"),	new Array("brodrick1.jpg", "500", "333", "The huge, new storage facility at Broderick"),	new Array("yard2.jpg", "500", "190", "The yard at sunset"));// 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();}