function initalizeGallery()
{
	setNextsetPrev();
	takeOverControls();
	takeOverThumbnailLinks();
	preloadImages();
}

function setNextsetPrev()
{	
	if( currentPhoto == numberPhotos )
	{
		nextID = 0;
		prevID = parseInt(currentPhoto) - 1;
	}
	else if( currentPhoto == 0 )
	{
		nextID = parseInt(currentPhoto) + 1;
		prevID = parseInt(numberPhotos);
	}
	else
	{
		nextID = parseInt(currentPhoto) + 1;
		prevID = parseInt(currentPhoto) - 1;
	}
}

function takeOverControls()
{
	var controls 	= $( 'photo_controls' ).descendants();
	var prevButton	= controls[0];
	var nextButton	= controls[1];
	
	prevButton.writeAttribute( 'href', "javascript: showPhoto('"+prevID+"');" );
	nextButton.writeAttribute( 'href', "javascript: showPhoto('"+nextID+"');" );
}


function updateControls()
{
	var controls 		= $( 'photo_controls' );
	var prev			= new Element( 'a' ).update( "&lt; Previous" );
	var next			= new Element( 'a' ).update( "Next &gt;" );
	
	if( !controls )
	{
		var controls	= new Element( 'div', {'id':'photo_controls'} );
		imageDiv.insert( {bottom: controls} );
	}
	else
	{
		controls.update( "" );	
	}
	
	prev.writeAttribute( 'href', "javascript: showPhoto('"+prevID+"');" );
	next.writeAttribute( 'href', "javascript: showPhoto('"+nextID+"');" );
			
	controls.insert( {bottom: prev} );
	controls.insert( {bottom: next} );
}

function updateDescription()
{
	var imageDiv 	= $( 'large_image' );
	var desc		= imageDiv.select( 'p.description' )[0];
	var text		= (parseInt(currentPhoto) + 1).toString() + " of " + (numberPhotos + 1).toString();
	desc.update( galleryTitle + ": " + text );
}

function showPhoto( photoID )
{
	if( photoID != currentPhoto ) // only do the following if the photo to show isn't currently showing
	{
		var imageDiv = $( 'large_image' );
		var oldImage = imageDiv.firstDescendant();
		
		imageDiv.insert( {top: largeImages[photoID]} );
		oldImage.remove();
		selectThumbnail( currentPhoto, photoID );
		
		currentPhoto = photoID;
		setNextsetPrev();
		
		updateControls();
		
		updateDescription();
	}
}

function preloadImages()
{
	json.photo.each( function(_photo, index)
	{
		largeImages[index] = new Element( 'img', {'src': _photo.large, 'alt': _photo.caption} );
	});
}

function selectThumbnail( current, photoID )
{
	if( $('thumbnails_row_1') )
	{
		var currentThumbnail 	= $( 'thumbnail_link_' + current.toString() );
		var nextThumbnail		= $( 'thumbnail_link_' + photoID.toString() );
		
		currentThumbnail.removeClassName( 'selected' );
		nextThumbnail.addClassName( 'selected' );
	}
}

function takeOverThumbnailLinks()
{
	var row1 = $( 'thumbnails_row_1' );
	var row2 = $( 'thumbnails_row_2' );
	
	if( row1 )
	{
		row1.childElements().each( function(thumb)
		{
			var thumbID 	= thumb.readAttribute( 'id' ).split( "_" );
			thumbID			= thumbID[ thumbID.length-1 ];
			
			thumb.writeAttribute( 'href', "javascript: showPhoto('"+thumbID+"');" );
		});
	}
	
	if( row2 )
	{
		row2.childElements().each( function(thumb)
		{
			var thumbID 	= thumb.readAttribute( 'id' ).split( "_" );
			thumbID			= thumbID[ thumbID.length-1 ];
			
			thumb.writeAttribute( 'href', "javascript: showPhoto('"+thumbID+"');" );
		});
	}
}