	function galleryItem (id, url, thumb_url) {
		this.id = id;
		this.url = url;
		this.thumb_url = thumb_url;
	}
	
	function popup(url, name, w, h) {
		newwindow = window.open(url, name,'height='+h+',width='+w+',scrollbars=yes');
		if (window.focus)
			newwindow.focus();
		return false;
	}
	
	var galleryList = new Array();
	var galleryIndex = 0;
	var galleryPage = 0;
	var galleryId = 0;
	var photoBlock = $('photo_container');
	var bufferImg;
	var fadeTimeoutId;
	var autoAdvanceId=-1;
	var autoAdvanceStart=0;
	var autoAdvanceSpeed=4000;
	var galleryVisible = true;
	var pageVisible = false;
	var date;
	var galleryLoading = false;
	var loadingPageContent = false;
	var menuOut = true;
	var featuredOut = false;
	var photoLoading = true;
	
	function toggleMenu () {
		var menuExpand = new Fx.Morph('menu_strip', {duration: 500, transition: Fx.Transitions.Sine.easeOut});
		var featureMorph = new Fx.Morph('menu_featured_strip', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		
		if (menuOut) {
			// close the featured gallery popup
			if (featuredOut) {
				featuredOut = false;
				featureMorph.start('.menu_featured_hidden');
			}			
			menuOut = false;
			menuExpand.start('.menu_strip_minimized');
			$('toggleMenuButton').set('text', '>');
		}
		else {
			menuOut = true;
			menuExpand.start('.menu_strip_maximized');
			$('toggleMenuButton').set('text', '<');
		}
	}

	
	function photoFadeIn () {
		$('photo_loading_img').setStyle('visibility', 'hidden');
		if (pageVisible==false) {
			$('photo_container').set('tween', {duration: 1000, link: 'cancel'});
			$('photo_container').tween('opacity', [1]);
			photoLoading = false;
		}
	}
	
	function photoFadeOut() {
		//$('photo_container').set('tween', {duration: 1000, link: 'cancel'});
		$('photo_container').tween('opacity', [0]);
	}
	
	// what to do when clicking on a thumbnail
	function clickThumb(index) {
		$('thumb'+galleryIndex).morph('.gallery_thumb');
		galleryIndex = index;
		$('thumb'+index).morph('.gallery_thumb_highlight');
		displayGalleryItem(index);
	}
	
	// transition and display a photo
	function displayGalleryItem(index) {
		date = new Date();
		//autoAdvanceStart = date.getTime();
		photoLoading = true;
		//$('debug').set('text', galleryList[index].url);
		
		//galleryIndex = index;
		$('photo_container').set('tween',{onComplete: 
			function(fxObj) {
				
				$('photo_loading_img').setStyle('visibility', 'visible');
				
				new Asset.image(galleryList[index].url, {id: 'current_photo', onload:
					new function(imgObj) {
							setTimeout(photoFadeIn, 1000);
					}
				}).replaces('current_photo');
			}
		});
		
		photoFadeOut();
	}
	
	function autoAdvance () {
		date = new Date();
		//$('debug').set('text', "galleryIndex: "+galleryIndex+" galleryPage: "+galleryPage);
		$('debug').set('text', date.getTime() - autoAdvanceStart+', '+autoAdvanceSpeed);
		
		if (photoLoading)
			autoAdvanceStart = date.getTime();
		
		if (date.getTime() - autoAdvanceStart > autoAdvanceSpeed) {		
			
			$('debug').set('text', 'change images');
			
			if ($('thumb'+galleryIndex))
				$('thumb'+galleryIndex).morph('.gallery_thumb');
				
			galleryIndex++;
			
			if (galleryIndex >= numGalleryImages) {
				galleryIndex = 0;
				galleryPage = 0;
				displayThumbs(galleryPage);
			}
			
			if (galleryIndex >= (galleryPage*10)+10) {
				galleryPage += 1;
				displayThumbs(galleryPage);
			}

			if ($('thumb'+galleryIndex))
				$('thumb'+galleryIndex).morph('.gallery_thumb_highlight');
				
			displayGalleryItem(galleryIndex);
		}
	}

	// start off the chain of events to the site intro
	function siteIntro() {
		var introChain = new Chain();

		var menuExpand = new Fx.Morph('menu_strip', {duration: 500, transition: Fx.Transitions.Sine.easeOut});
		var menuColumn1Appear = new Fx.Morph('menu_column1', {duration: 500, transition: Fx.Transitions.Sine.easeOut});
		var menuColumn2Appear = new Fx.Morph('menu_column2', {duration: 500, transition: Fx.Transitions.Sine.easeOut});
		var menuColumn3Appear = new Fx.Morph('menu_column3', {duration: 500, transition: Fx.Transitions.Sine.easeOut});
		//var menuColumnsAppear = new Fx.Morph('menu_column1', {duration: 500, transition: Fx.Transitions.Sine.easeOut});	
	
		introChain.chain(function() {loadSplashImages()});
		introChain.chain(function() {menuExpand.start('.menu_strip_maximized')});
		introChain.chain(function() {menuColumn1Appear.start('.white')});
		introChain.chain(function() {menuColumn2Appear.start('.white')});	
		introChain.chain(function() {menuColumn3Appear.start('.white')});
		
		
		var d = 650;
		introChain.callChain.delay(0, introChain);
		introChain.callChain.delay(1000, introChain);
		introChain.callChain.delay(d*2, introChain);
		introChain.callChain.delay(d*3, introChain);
		introChain.callChain.delay(d*4, introChain);

		
		// display the first photo
		//displayGalleryItem(galleryIndex);
		
		date = new Date();
		autoAdvanceStart = date.getTime();
		autoAdvanceId = autoAdvance.periodical(1000.0/30.0);
		
	}


	window.addEvent('domready', function() {
		siteIntro();
	});
	
	function toggleFeatured () {
		var featureMorph = new Fx.Morph('menu_featured_strip', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		
		if (featuredOut) {
			featuredOut = false;
			featureMorph.start('.menu_featured_hidden');
		}
		else {
			featureMorph.start('.menu_featured_visible');
			featuredOut = true;
		}

	}
	
	function loadGalleryLink (argGallery, argPage) {
		//$clear(autoAdvanceId);
		galleryPage = argPage;
		galleryId = argGallery;
		galleryIndex = argPage*10;
		introGallery();
	}
	
	function prevPage () {
		galleryPage -= 1;
		galleryIndex = galleryPage*10;
		displayThumbs(galleryPage);
		displayGalleryItem(galleryIndex);		
	}
	
	function nextPage () {
		galleryPage += 1;
		galleryIndex = galleryPage*10;
		displayThumbs(galleryPage);
		displayGalleryItem(galleryIndex);		
	}
		
	function loadSplashImages() {
		
		var req = new Request.HTML({url:'ajax_requests.php', 
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				$('gallery_vars').set('html', responseHTML);
				displayGalleryItem(0);
			},
	
			onFailure: function() {
				//$('result').set('text', 'The request failed.');
			}
		});
		
		req.send('cmd=getsplashimages');		
	}	
	
	function displayThumbs(argPage) {
		var output="", thumb_output="", nav_output="", js, back_js="", forward_js="";
		var start = argPage*10;
		var limit = start+10;

		if (limit >= numGalleryImages)
			limit = numGalleryImages;
		
		for(i=start; i < limit; i++) {
			js = "onclick=\"clickThumb("+i+");\"";
			thumb_output += "<img id=\"thumb"+i+"\" "+js+" class=\"gallery_thumb link\" src=\""+galleryList[i].thumb_url+"\">\n";
		}
		
		if (argPage>0)
			back_js = "onclick=\"prevPage();\"";
		if (argPage+1 < numGalleryPages)
			forward_js = "onclick=\"nextPage();\"";		
			
		nav_output +=  "<div id=\"gallery_nav\">";
		
		if (argPage > 0)
			nav_output += "<img "+back_js+" class=\"float_left link\" src=\"images/back_button.gif\">";
		else
			nav_output += "<img class=\"float_left\" src=\"images/back_button_faded.gif\">";
			
		if (argPage+1 < numGalleryPages)
			nav_output += "<img "+forward_js+" class=\"float_right link\" src=\"images/forward_button.gif\">";
		else
			nav_output += "<img class=\"float_right\" src=\"images/forward_button_faded.gif\">";

		nav_output += "</div>";
		
		
		$('thumb_container').set('html', thumb_output+nav_output);
	}
	
	function loadThumbs(argGalleryId) {
		
		var req = new Request.HTML({url:'ajax_requests.php', 
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				$('gallery_vars').set('html', responseHTML);
				//$('debug').set('text', responseJavaScript);
				galleryLoading = false;
				displayThumbs(galleryPage);
				$('thumb'+galleryIndex).morph('.gallery_thumb_highlight');
				displayGalleryItem(galleryIndex);
			},
	
			onFailure: function() {
				//$('result').set('text', 'The request failed.');
			}
		});
		
		galleryLoading = true;
		$('thumb_container').set('html', '<img id="thumb_loading_img" src="images/photo_loading.gif"/>');
		req.send('cmd=getgallerythumbs&gallery_id='+argGalleryId);
		galleryId = argGalleryId;
	}	
	
	function introGallery() {
		var galleryIntroChain = new Chain();		
		var pageFadeOut = new Fx.Morph('page_layout', {duration: 500, transition: Fx.Transitions.Sine.easeOut});
		var menuHide = new Fx.Morph('menu_strip', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		var thumbsOpen = new Fx.Morph('thumb_container', {duration: 500, transition: Fx.Transitions.Sine.easeIn});

		if (autoAdvanceId == -1) {
			date = new Date();
			autoAdvanceStart = date.getTime();
			autoAdvanceId = autoAdvance.periodical(1000.0/30.0);
		}

		if (pageVisible)
			galleryIntroChain.chain(function() { $('page_layout').tween('opacity', [0]) });

		//galleryIntroChain.chain(function() { toggleFeatured(); toggleMenu() });
		galleryIntroChain.chain(function() { thumbsOpen.start('.thumb_container_visible') });
		galleryIntroChain.chain(function() { loadThumbs(galleryId) });
		
		var d = 500;
		if (pageVisible)
			galleryIntroChain.callChain.delay(0, galleryIntroChain);
			
		//galleryIntroChain.callChain.delay(0, galleryIntroChain);
		galleryIntroChain.callChain.delay(d, galleryIntroChain);
		galleryIntroChain.callChain.delay(d*2, galleryIntroChain);

		pageVisible = false;
		galleryVisible = true;
	}
	
	function loadPageContent (page) {
		stopAutoAdvance = true;
		loadingPageContent = true;
		$clear(autoAdvanceId);
		autoAdvanceId = -1;
		
		var c=0;
		var thumbsHide = new Fx.Morph('thumb_container', {duration: 500, transition: Fx.Transitions.Sine.easeOut});		
		var newHTML;
		var startFx;

		var pageFadeIn = new Fx.Tween('page_layout', {duration: 500});
	
		var galleryFadeOut = new Fx.Tween('photo_container', {duration: 500, onComplete:
			function(fxObj) {
				$('page_layout').set('html', newHTML);
				pageFadeIn.start('opacity', [0,1]);				
			}					  
		});
		
		var pageFadeOut = new Fx.Tween('page_layout', {duration: 500, onComplete:
			function(fxObj) {
				$('page_layout').set('html', newHTML);
				pageFadeIn.start('opacity', [0,1]);
			}					  
		});
	
		if (featuredOut)
			toggleFeatured();
	
		if (galleryVisible) {
			startFx = galleryFadeOut;
			thumbsHide.start('.thumb_container_hidden');
		}
		if (pageVisible)
			startFx = pageFadeOut;
			
		pageVisible = true;
		galleryVisible = false;			

		var myRequest = new Request({method: 'get', url: page, onSuccess: function(responseText, responseXML) {
			newHTML = responseText;
			startFx.start('opacity', [0]);
		}});
		
		myRequest.send();
		
	}	
