// -----------------------------------------------------------------------------------
// 
// 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("photo1.jpg", "600", "437", "In 1997 we decided to try to take care of folks who needed a little help."),
	new Array("photo2.jpg", "600", "431", "We opened Country Care Manor on Route 140. It was quite a task and risk."),
	new Array("photo3.jpg", "600", "421", "Ready to go in 1998."),
	new Array("photo4.jpg", "600", "384", "2000 &#8212; Why don't we buy that decrepit old house and build a new place?"),
	new Array("photo5.jpg", "600", "408", "This old 1800s building will make a great new home with a little TLC."),
	new Array("photo6.jpg", "600", "402", "Looking better!"),
	new Array("photo7.jpg", "600", "407", "Lets put 16 private rooms with full baths on."),
	new Array("photo8.jpg", "600", "412", "Might as well."),
	new Array("photo9.jpg", "600", "418", "Could not finish before winter. Oh well."),
	new Array("photo10.jpg", "600", "450", "And the huge busy park is just across the street."),
	new Array("photo11.jpg", "600", "450", "Enjoy the park all year long."),
	new Array("photo12.jpg", "650", "348", "We are getting a library next door."),
	new Array("photo13.jpg", "600", "399", "Looks great now. Stop by anytime."),
	new Array("photo14.jpg", "600", "394", "Private rooms that will accommodate a queen-size bed."),
	new Array("photo15.jpg", "600", "384", "Comfortable."),
	new Array("photo16.jpg", "600", "391", "Cozy dining."),
	new Array("photo17.jpg", "600", "439", "Full baths."),
	new Array("photo18.jpg", "600", "396", "Transportation available anytime."),
	new Array("photo19.jpg", "600", "404", "The greatest employees. Get Ready for new friends."),
	new Array("photo20.jpg", "600", "404", "We've learned how to keep everyone happy most of the time."),
	new Array("photo21.jpg", "600", "479", ""),
	new Array("photo22.jpg", "600", "446", "Always staying busy."),
	new Array("photo23.jpg", "600", "456", ""),
	new Array("photo24.jpg", "600", "446", ""),
	new Array("photo25.jpg", "600", "427", "Summer Picnics."),
	new Array("photo26.jpg", "600", "420", ""),
	new Array("photo27.jpg", "600", "422", ""),
	new Array("photo28.jpg", "600", "416", "Sandymount Elementary School Memorial Day ceremony each year."),
	new Array("photo29.jpg", "600", "399", "Holiday Fun."),
	new Array("photo30.jpg", "600", "388", ""),
	new Array("photo31.jpg", "600", "399", ""),
	new Array("photo32.jpg", "600", "395", ""),
	new Array("photo34.jpg", "600", "398", "We purchased a 7 acre farm and decided to build an Assisted Living home and farm goats."),
	new Array("photo35.jpg", "600", "416", "The process has been tenuous."),
	new Array("photo36.jpg", "600", "401", "The work has been tough."),
	new Array("photo37.jpg", "600", "399", "But the progress is so satisfying."),
	new Array("photo38.jpg", "600", "405", "Three years ago, we decided to try it one more time."),
	new Array("photo39.jpg", "600", "419", ""),
	new Array("photo40.jpg", "600", "416", "Comfortable living at Country Care Farm."),
	new Array("photo41.jpg", "600", "453", ""),
	new Array("photo42.jpg", "600", "448", ""),
	new Array("photo43.jpg", "600", "482", ""),
	new Array("photo44.jpg", "457", "600", ""),
	new Array("photo45.jpg", "441", "600", ""),
	new Array("photo46.jpg", "461", "600", "Three years ago, we decided to try it one more time."),
	new Array("photo48.jpg", "600", "393", ""),
	new Array("photo49.jpg", "600", "400", "Stop by any time. You never know who will be on the porch."),
	new Array("photo50.jpg", "600", "388", "Or coming out of the barn.")
	);

// 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();
}
