//Minor changes to this gallery is easy!  to add a new image to the slideshow, copy this line "	new Array("imageName", "width", "height", "caption")," including the final comma and add it into all the other ones seen below (already filled out). The maximum height suggested is 425px, maximum width: 600px.  To remove an image from the slideshow, simply delete the line the image is located in, in full.  To change the caption on an image, simply edit the caption section on the images respective line.  To rearrange the order of the slideshow just change the order of the lines.  (The slideshow works top->bottom so if you want to move a low image to an earlier location, paste the images line up higher.  Hope this helps.  --Ben

// 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 = "/home/images/gallery/editorial/";

// Define each photo's name, width, height, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption

	new Array("HolidayGuyBig.jpg", "395", "425", "Holiday Preps, Hartford Courant"),
	new Array("BabyTeethCoverWashPost.jpg", "600", "400", "Baby Teeth Cover, Washington Post - Health"),
	new Array("AdviseConsentLine.jpg", "350", "383", "Advise & Consent: Where do we draw the line on faculty/student relationships?, Connecticut College Magazine"),
	new Array("HungryGullFoiled.jpg", "271", "425", "Hungry Seagull Foiled, Vineyard Magazine"),
	new Array("TriathletesInTrouble.jpg", "600", "323", "Triathletes in Trouble, Hartford Courant"),
	new Array("BigGigTufts.jpg", "420", "425", "The Big Gig, Tufts University"),
	new Array("CallOfWildNYT.jpg", "436", "425", "Call of the Wild, New York Times"),
	new Array("DebriefingPhilInq.jpg", "600", "372", "Debriefing: Boxer Rebellion Revisited, Philadelphia Inquirer"),
	new Array("ParisTourguide.jpg", "369", "425", "Guideto Tour Guides, Hartford Courant"),
	new Array("FlyGuyNMH.jpg", "521", "425", "Fly-Guy, Northfield Mount Hermon"),
	new Array("KitchenCalamity.jpg", "471","425", "Kitchen Calamity, Portland Oregonian"),
	new Array("WelcomeMat.jpg", "494", "425", "Welcome Mat, Not Martha&rsquo;s Vineyard Magazine"),
	new Array("WhatLearnedBluePillsNYT.jpg", "600", "360", "What We&rsquo;ve Learned From Those Little Blue Pills, New York Times"),
	new Array("CocktailsMvFinal.jpg", "510", "425", "Cocktail Phobic, Martha&rsquo;s Vineyard Magazine ")//This final row must not have a comma at the end, otherwise the slideshow will break
	);

// 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.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.prevPhoto();
		}
	},
	'#NextLink' : function(element){
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.nextPhoto();
		}
	},
	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();

}