// -----------------------------------------------------------------------------------
// 
// 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/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption	
	new Array("38.jpg", "592", "327", "From the Living Room, the Dining Room and the Master Bedroom, you can open the doors up onto the front garden. From these rooms you see a natural tropical garden with mountains gently sloping down in front. In the background you will hear the rushing waters of the Ayung River."),
	new Array("39.jpg", "592", "327", "The view from the Living Room is the dragon's back, or Batu Karu mountain range."),
	new Array("16.jpg", "592", "327", "From the Master Bedroom Terrace you feel the spirt of Buahan - very quiet, very elegant."),
	new Array("03.jpg", "592", "327", "From the Dining Room you will see how the landscape creates a natural grace between the living areas and their lush tropical surroundings."),
	new Array("04.jpg", "592", "327", "Children’s Room has twin beds. Recently we installed Chinois doors and an antique panel in the window to give this room more privacy."),
	new Array("05.jpg", "592", "327", "The Third Bedroom opens onto the Living Room, and overlooks the garden and ponds next to the kitchen."),
	new Array("06.jpg", "592", "327", "The Living Room is the perfect place for entertaining or just reading a book.  The décor is simple and is reminiscent of the style favored by old plantation bungalows.  Notice the coffee table was made from one piece of wood and has Chinese carvings around it."),
	new Array("07.jpg", "592", "327", "The dining table is made from stone, wood and glass. It it seats 6-8 persons comfortably. You may notice that there is an antique Chinese Bed behind it for serving afternoon tea."),
	new Array("08.jpg", "592", "327", "The Third Bedroom is filled with Asian accents, including the special red lamp from De-Lighting in Bali."),
	new Array("09.jpg", "592", "327", "This is a place where you really love where you are.  There is a waterfall 300 meters below, which is the opening of the Ayung River."),
	new Array("10.jpg", "592", "327", "The Master Bedroom has front doors that open onto the terrace, and includes your own private dining table and furniture for relaxing on the cool terrace."),	
	new Array("01.jpg", "592", "327", "The Master Bedroom is 49 square meters with a fireplace and private Bathroom, including a massage table."),
	new Array("11.jpg", "592", "327", "The art sculpture and garden light was made by De Lighting for Puri Naga Toya."),
	new Array("13.jpg", "592", "327", "The greeness of Bali is gorgeous.  The air is very mild up in the mountains."),
	new Array("14.jpg", "592", "327", "The Bamboo House is surrounded by its own gardens, and is within earshot of the main building."),
	new Array("15.jpg", "592", "327", "There is a naturalness and ease of living here.  It is a beautiful place to be."),	
	new Array("17.jpg", "592", "327", "Carefully positioned in the back garden sits an Oriental Pavillion."),
	new Array("18.jpg", "592", "327", "Drinking Chinese tea is one of our hobbies."),
	new Array("19.jpg", "592", "327", "A natural stone swimming pool works together well with the contours of the landscape."),
	new Array("20.jpg", "592", "327", "The Master Bedroom has a private entrance to the pool."),
	new Array("21.jpg", "592", "327", "The entrance garden and swimming pool area contribute to the exotic feel of the 1st Pavillion, which is where you will find the kitchen."),
	new Array("22.jpg", "592", "327", "This photo is on the front cover of Asia Tropical Homes, December 2006."),
	new Array("23.jpg", "592", "327", "An original trompe l'oeil painting from Sentra, Portugal"),
	new Array("24.jpg", "592", "327", "A special light for Puri Naga Toya designed by De Lighting."),
	new Array("25.jpg", "592", "327", "This room has its own individual beauty, and appeals to people who care enormously about the little things."),
	new Array("26.jpg", "592", "327", "This lovely antique Chinese bed comes from Madura, in Java."),
	new Array("27.jpg", "592", "327", "These antique doors were purchased in Macau and shipped to Bali."),
	new Array("28.jpg", "592", "327", "The Living Room and Dining Room are intentionally inviting so that you can get know them a little better."),
	new Array("29.jpg", "592", "327", "My life in my study is far away from things, a very different world."),
	new Array("30.jpg", "592", "327", "Birds eye view from the upstairs bedroom looking down into the TV room."),
	new Array("31.jpg", "592", "327", "A room with a view: This bedroom is octagonal in shape and is the ultimate honeymoon hideaway. "),
	new Array("32.jpg", "592", "327", "The guest bathroom gleams with touches of luxury."),
	new Array("33.jpg", "592", "327", "Media Room and Library: In-room entertainment."),
	new Array("34.jpg", "592", "327", "To continue the plantation look, we used a lot of wood."),
	new Array("35.jpg", "592", "327", "The Library: We call it 'the jewel'."),
	new Array("36.jpg", "592", "327", "The goal was to make our family comfortable in a luxurious setting."),
	new Array("37.jpg", "592", "327", "Famous painting by a European artist."),	
	new Array("40.jpg", "592", "327", "Asian antiques add to the feeling of being in an exotic destination.")
	);

// 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();
}
