// -----------------------------------------------------------------------------------
// 
// 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 = "gallery/photos/hce/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
	new Array("house1.jpg", "500", "347", "Exterior view of the mansion at Hidden Creek Estate"),
	new Array("house2.jpg", "500", "375", ""),
	new Array("777290.jpg", "350", "500", "Emily Breitenberg Watson, married 7/7/07 at 7PM"),
	new Array("777291.jpg", "367", "500", ""),
	new Array("777292.jpg", "500", "400", ""),
	new Array("777293.jpg", "419", "500", ""),
	new Array("well.jpg", "500", "435", "Wishing Well"),
	/*new Array("fountain.jpg", "500", "375", "Art deco, three-swan fountain"),*/
	new Array("777295.jpg", "500", "368", "Art deco, three-swan fountain"),
	/*new Array("bridge.jpg", "500", "375", "The bridge is one of many photogenic backdrops at Hidden Creek Estate"),*/
	/*new Array("pond1.jpg", "500", "375", "The pond is surrounded by a stone wall"),*/
	new Array("pond2.jpg", "500", "667", "The pond is one of many photogenic backdrops at Hidden Creek Estate"),
	new Array("steps.jpg", "500", "367", "The garden ampitheater is perfect for smaller ceremonies"),
	new Array("garden1.jpg", "500", "375", "The large gardens provide numerous photographic opportunities"),
	new Array("garden2.jpg", "500", "667", "Gardens at Hidden Creek Estate"),
	new Array("777275.jpg", "500", "386", "A coach is available for weddings"),
	new Array("777308.jpg", "500", "312", "Your hosts Frank and Melissa Keathley"),
	new Array("777307.jpg", "500", "333", ""),
	new Array("777260.jpg", "500", "274", "Showtime!"),
	new Array("777298.jpg", "500", "314", "Beautiful lawns at Hidden Creek Estate"),
	new Array("777299.jpg", "500", "375", "Gardens at Hidden Creek Estate"),
	new Array("777300.jpg", "500", "384", ""),
	new Array("777301.jpg", "500", "375", ""),
	new Array("777309.jpg", "416", "500", "A bridal lounge is available for use as a dressing room"),
	new Array("777312.jpg", "500", "280", "There is plenty of space for gatherings large and small"),
	new Array("777313.jpg", "500", "355", ""),
	new Array("777315.jpg", "468", "500", "A beautiful setting for a wedding"),
	new Array("777316.jpg", "368", "500", ""),
	/*new Array("garden3.jpg", "500", "375", "Gardens at Hidden Creek Estate"),
	new Array("garden4.jpg", "500", "370", "Gardens at Hidden Creek Estate"),
	new Array("garden5.jpg", "500", "351", "Gardens at Hidden Creek Estate"),
	new Array("garden6.jpg", "500", "345", "Gardens at Hidden Creek Estate"),*/
	/*new Array("garden7.jpg", "500", "369", "Gardens at Hidden Creek Estate"),*/
	/*new Array("changingHouse.jpg", "500", "357", "A bridal lounge is available for use as a dressing room"),*/
	new Array("barnExterior.jpg", "500", "259", "A large barn with a concrete floor provides an excellent venue for parties, receptions and other functions"),
	new Array("barnInterior.jpg", "500", "375", ""),
	new Array("777318.jpg", "500", "278", "Outdoor receptions are also possible"),
	new Array("777319.jpg", "500", "331", ""),
	new Array("777625.jpg", "500", "280", ""),
	new Array("777310.jpg", "500", "410", "Ride away in style"),
	new Array("777314.jpg", "500", "428", ""),
	new Array("777262.jpg", "469", "500", "Book Hidden Creek Estate for your wedding today"),
	new Array("081116a.jpg", "500", "305", ""),
	new Array("081116b.jpg", "500", "485", ""),
	new Array("081116c.jpg", "500", "386", ""),
	new Array("081116d.jpg", "500", "377", ""),
	new Array("081116e.jpg", "351", "500", ""),
	new Array("081116f.jpg", "500", "327", ""),
	new Array("081116g.jpg", "500", "340", ""),
	new Array("081116h.jpg", "500", "358", ""),
	new Array("081116i.jpg", "500", "344", ""),
	new Array("081116j.jpg", "500", "386", ""),
	new Array("081116k.jpg", "500", "397", ""),
	new Array("081116l.jpg", "500", "386", ""),
	new Array("081116m.jpg", "500", "381", ""),
	new Array("081116n.jpg", "500", "443", ""),
	new Array("081116o.jpg", "500", "549", "")
	);

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