// -----------------------------------------------------------------------------------
// 
// 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 = 0;

// 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("ssecounselling.jpg", "490", "470", "<h2>ecounselling.co.nz</h2> One of Ecounselling's most striking features are the stunning nature images which change on every page. An easy to navigate website with a secure contact form to maintain user privacy."),	
	new Array("ssfaxit.jpg", "490", "462", "<h2>fax-it.co.nz</h2><br>Fax-it owner Lisa Barker wanted a straightforward, clean website which had all the information a customer might need to know about fax marketing with Fax-it. She prepared a design mock and we built the site with a content management system, so she can keep the site up to date herself at any time."),
	new Array("sstommy.jpg", "490", "466", "<h2>tommyandthefallenhorses.com</h2>Popular indie artist Tommy wanted a comprehensive site for his new band, The Fallen Horses. He wanted the website to convey an atmosphere of yearning, anticipation, excitement and redemption, with lots of textures and depth. The result is an attractive website with a gig guide, music player, blog, podcasts, members-only area, newsletter subscription, lyrics, video's, gallery and a shopping cart where visitors can download songs or purchase albums. The website uses a content management system so Tommy and the band can maintain and update it all.<p> &nbsp; <p> "),
	new Array("ssabsolutecare.jpg", "490", "471", "<h2>absolutecare.co.nz</h2> Absolute Care is a straightforward brochure website, with attractive graphics following a marine theme. The website communicates the essential business information, and is optimised for search engine rankings."),	
	new Array("sspauanui.jpg", "490", "462", "<h2>pauanuicountryestate.co.nz</h2> Pauanui Country Estate is a wedding venue located in Pauanui. The owners wanted the website to reflect the rustic, unpretentious charm of the venue, with a strong element of nature's green, as it is located near a beach, amongst the beautiful bush in the Coromandel. They wanted to show a lot of photos, so a simple, quick loading gallery was utilised for maximum efficiency."),
	new Array("sscheapcontacts.jpg", "490", "470", "<h2>cheapcontacts.co.nz</h2> Cheap Contacts is a fully functional e-commerce shopping cart website selling contact lenses and accessories."),	
	new Array("ssmoneysmart.jpg", "490", "470", "<h2>moneysmart.co.nz</h2> With the mission to provide a shop window for client contact and information access to Money Smart products, people  and services, the Money Smart website is simple, professional and easy to use. The website uses a content management system so it is able to be maintained by the client so they are easily able to update new information."),
	new Array("sswincorp.jpg", "490", "464", "<h2>wincorpadventures.co.nz</h2> The owners of Pauanui Country Estate were so happy with their website (previous) that they commissioned us to build another one, this time for their challenge course / tour guiding. They wanted a vibrant website, and again, a strong element of nature. We used a mixture of beautiful photos, smooth talking javascript and a funky design to communicate the spirit of their outdoor adventures."),
	new Array("sswlm.jpg", "490", "468", "<h2>wellingtonlivemusic.com</h2> Wellington Live Music is a comprehensive online music magazine. Features include a mailing list, gallery, contact forms, fully advertising capable, comments, featured posts and much more."),
	new Array("ssnzert.jpg", "490", "458", "<h2>nzeducationrelieftrust.org.nz</h2> NZ Education Relief Trust is a new charity formed to send relief and educational aids to Fiji and other countries. For their launch they wanted a website with information about the trust, and we are working on a full website with donations and news capabilities."),
	new Array("sscharlettehannah.jpg", "490", "460", "<h2>charlettehannah.com</h2> This is Charlette's personal website; mostly for her music. It is strongly graphics focused with a bold difference - the first page you come to has no text. More is revealed as you click on the navigation to the left.")
	
);

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