/* 
** Copyright (c) 2006, Dennis J. Wilkinson, II
*/

var image_thumbs = new Array;
var wrappers = new Array;
var scale_factor = 1.0;
var slider_control = 0;

function buildThumbArrays()
{
	if ( image_thumbs.length == 0 && document.getElementsByTagName )
	{
		var images = document.getElementsByTagName("img");
		var numImages = images.length;
		
		for ( var i = 0; i < numImages; ++i )
		{
			var thisImg = images[i];
			if ( thisImg.className == "imagethumbnail" )
			{
				var newElem = new Array;
				
				newElem[0] = thisImg;
				newElem[1] = thisImg.height;
				newElem[2] = thisImg.width;
				
				image_thumbs[ image_thumbs.length ] = newElem;
			}
		}
		
		var divs = document.getElementsByTagName("div");
		var numDivs = divs.length;
		
		for ( i = 0; i < numDivs; ++i )
		{
			var thisDiv = divs[i];
			if ( thisDiv.className == "imagethumbnail_wrapper" )
			{
				wrappers[ wrappers.length ] = thisDiv;
			}
		}
	}
}

function rezoomThumbnails()
{
	var numImages = image_thumbs.length;
	var max_thumb_height = 115;
	var max_thumb_width = 115;
	var view_width = parseInt( $('album_view').clientWidth );
		
	// resize all the thumbs
	for ( var i = 0; i < numImages; ++i )
	{
		var elem = image_thumbs[i];
		
		elem[0].height = scale_factor * elem[1];
		elem[0].width = scale_factor * elem[2];
		
		max_thumb_height = Math.max( elem[0].height, max_thumb_height );
		max_thumb_width = Math.max( elem[0].width, max_thumb_width );
	}
	
	// adjust the wrapper class to accomodate the larger/smaller thumbs
	var wrapper_width = max_thumb_width + 20;
	var wrapper_height = max_thumb_height + 60;
	
	// adjust the wrapper width up to fit a whole number of wrappers in
	// the view
	var line_width_in_wrappers = Math.floor( view_width / wrapper_width );
	if ( line_width_in_wrappers > numImages ) line_width_in_wrappers = numImages;
	
    var predicted_width = Math.floor( view_width / line_width_in_wrappers );
	wrapper_width = ( predicted_width > wrapper_width ) ? predicted_width : wrapper_width;
    
	var numWrappers = wrappers.length;
	for ( var j = 0; j < numWrappers; ++j )
	{
		wrappers[j].style['width'] = wrapper_width + 'px';
		wrappers[j].style['height'] = wrapper_height + 'px';
	}
}

function scaleThumbs( factor )
{
	buildThumbArrays();
	scale_factor = factor;
	rezoomThumbnails();
}

function setupThumbScaling()
{
	buildThumbArrays();

	slider_control = new Control.Slider(
						'scale_thumb','scale_track', 
						{ 	onSlide: function(v) { scaleThumbs(v); },
							onChange: function(v) { scaleThumbs(v); },
							range: $R(0.5,3.0), sliderValue:'1.0' 
						} ); 

	var thumbScale = readCookie('thumbscale');
	var sliderVal  = 1.0;
	if ( thumbScale )  
	{
        var val = parseFloat( thumbScale );
        if ( !isNaN( val ) ) 
        {
            sliderVal = val;
        }
	}
    
    slider_control.setValue( sliderVal );

    rezoomThumbnails();
}

function saveThumbScalingPreferences()
{
	createCookie("thumbscale", slider_control.value, 365);
}

function rescaleThumbsOnResize()
{
    if ( image_thumbs.length > 0 )
    {
        rezoomThumbnails();
    }
}

if ( window.addEventListener )
{
	// DOM
	window.addEventListener( 'load', setupThumbScaling, false );
	window.addEventListener( 'unload', saveThumbScalingPreferences, false );
	window.addEventListener( 'resize', rescaleThumbsOnResize, false );
}
else if ( window.attachEvent )
{
	// IE
	window.attachEvent( 'onload', setupThumbScaling );
	window.attachEvent( 'onunload', saveThumbScalingPreferences );
	window.attachEvent( 'onresize', rescaleThumbsOnResize );
}