/***************************************************************************
 * portfolio.js
 *     : Extends class ModuleGallery, which is provided by gallery.js.
 ***************************************************************************/

//***************************************************************************
// class ModuleGallery
//***************************************************************************

// Static members:
ModuleGallery.prototype.curSel      = null;
ModuleGallery.prototype.scrollNode  = null;
ModuleGallery.prototype.scrollTimer = null;

//***************************************************************************
// ModuleGallery::ScrollSmooth
//***************************************************************************
ModuleGallery.prototype.ScrollSmooth =
function(domNode,offset)
{
// Destroy an existing timer.
	if (ModuleGallery.prototype.scrollTimer)
	{	window.clearInterval(ModuleGallery.prototype.scrollTimer);	}

// Setup a scrolling interval.
	domNode.scrollUntil = offset;
	ModuleGallery.prototype.scrollNode  = domNode;
	ModuleGallery.prototype.scrollTimer =
		window.setInterval(ModuleGallery.prototype.ScrollSmoothWorker,1);
}
ModuleGallery.prototype.ScrollSmoothWorker =
function()
{
// Gather information.
	var domNode    = ModuleGallery.prototype.scrollNode;
	var offsetMin  = domNode.scrollLeft;
	var offsetMax  = domNode.scrollUntil;
	var offsetStep = ((offsetMax - offsetMin) / 10) + 1;
	if (offsetMin > offsetMax)
	{
		var tmp   = offsetMin;
		offsetMin = offsetMax;
		offsetMax = tmp;
	}

// Scroll the gallery.
	var positionBefore  = domNode.scrollLeft;
	domNode.scrollLeft += offsetStep;
	if (domNode.scrollLeft == positionBefore)
	{
	// The viewport cannot scroll anymore, so destroy the timer.
		window.clearInterval(ModuleGallery.prototype.scrollTimer);
		ModuleGallery.prototype.scrollTimer = null;
	}
}

//***************************************************************************
// ModuleGallery::OnClick
//***************************************************************************
ModuleGallery.prototype.OnClick =
function(eventObj,currentTarget,photoData)
{
// Center the DOM node into the viewport.
	var galleryStripNode = document.getElementById('gallery_strip');
	ModuleGallery.prototype.ScrollSmooth(
		galleryStripNode,(currentTarget.offsetLeft) -
		                 (galleryStripNode.clientWidth / 2.75));
// Cell highlighting.
	if (currentTarget == ModuleGallery.prototype.curSel)
	{	return;	}
	currentTarget.className = 'selected';
	if (ModuleGallery.prototype.curSel)
	{	ModuleGallery.prototype.curSel.className = '';	}
	ModuleGallery.prototype.curSel = currentTarget;

// Change the URL.
	var domNode = null;
	if (domNode = document.getElementById('portfolio_photo_link'))
	{	domNode.href = photoData['photo']['url'];	}

// Change the photo description.
	if (domNode = document.getElementById('portfolio_photo_description'))
	{	domNode.innerHTML = photoData['description'];	}

// Change the photo.
	if (domNode = document.getElementById('portfolio_preview'))
	{
	// Create a new node to avoid awkward scaling while the old
	// URL is still displayed.
		var newNode = domNode.cloneNode(false);
		    newNode.src    = photoData['portfolio_preview']['url'   ];
		    newNode.width  = photoData['portfolio_preview']['width' ];
		    newNode.height = photoData['portfolio_preview']['height'];
		domNode.parentNode.replaceChild(newNode,domNode);
	}
}
