// JScript source code

var displayWaitMessage=true;	// Display a please wait message while images are loading?
  	
var thumbnailWidth = 157;
var thumbDivID = 'thumbnails';
var thumbsObject;
var numOfThumbs;
var maxLeftPos;
var startAtThumbIndex = 0;
var fullsizeID = 'fullsizeimage'; // full size picture
var leftarrowID = 'leftarrow';
var rightarrowID = 'rightarrow';
var imagesDisplayedAtOnce = 3;

// thumbs movement
var bufferZone = 200; // in pixels, the distance from either end at which the thumbs should begin to slow down
var intervalID; // holds setInterval for thumbnail movement
var moveMillis = 32; // move every ? milliseconds (def 32)
var maxSpeed = 35; // max number of pixels to move in time period moveMillis - must be positive
var currVelocity = 0;
var velocity = 30; // used in old version
var initVelocity;
var targetVelocity;
var accel = 4.5; // pixels per moveMillis

function slideThumbsLeft()
{
    // set target v
    targetVelocity = maxSpeed * -1;
    // set initial v
    initVelocity = currVelocity;
    
    // needs to be negative for left travel
    accel = Math.abs(accel) * -1;
    
    clearInterval(intervalID);
    intervalID = setInterval("slideThumbs(true)", moveMillis);
    return false;
}

function slideThumbsRight()
{
    // set target v
    targetVelocity = maxSpeed;
    // set initial v
    initVelocity = currVelocity;
    
    // must be positive for right travel
    accel = Math.abs(accel);
    
    clearInterval(intervalID);
    intervalID = setInterval("slideThumbs(false)", moveMillis);
    return false;
}

function slideThumbs(slideLeft)
{
    // calculate stopping distance with current values (positive)
    // using s = v^2 - u^2 / 2a
    var stopDist = Math.abs((currVelocity * currVelocity) / (accel << 1));
    
    // calculate new velocity if still accelerating
    if (Math.abs(currVelocity) < Math.abs(targetVelocity))
    {
        currVelocity += accel;
    }
    else currVelocity = targetVelocity;
    
    // calculate new position
    var newPos = parseInt(thumbsObject.style.marginLeft) + currVelocity;
        
    // calculate bounds and don't go beyond them
        
    if (slideLeft)
    {
        if (newPos >= (maxLeftPos + stopDist)) thumbsObject.style.marginLeft = newPos + 'px';
        else stopSlidingLeft();
    }
    else
    {
        if (newPos <= (0 - stopDist)) thumbsObject.style.marginLeft = newPos + 'px';
        else stopSlidingRight();
    }    
    return false;     
}

function stopSlidingLeft()
{
    initVelocity = currVelocity;
    targetVelocity = 0;
    // positive accel needed to deccelerate
    accel = Math.abs(accel);
            
    clearInterval(intervalID);
    intervalID = setInterval("stopSlide(true)", moveMillis);
    return false;
}

function stopSlidingRight()
{
    initVelocity = currVelocity;
    targetVelocity = 0;
    // negative accel needed to deccelerate
    accel = Math.abs(accel) * -1;
            
    clearInterval(intervalID);
    intervalID = setInterval("stopSlide(false)", moveMillis);
    return false;
}

function stopSlide(slideLeft)
{
    // set new position
    var currPos = parseInt(thumbsObject.style.marginLeft);
    if (currPos < 0 && currPos > maxLeftPos)
    {
        thumbsObject.style.marginLeft = currPos + currVelocity + 'px';
    }
    
    if ((slideLeft && currVelocity < targetVelocity) || (!slideLeft && currVelocity > targetVelocity))
    {
        currVelocity += accel;
    }
    else
    {
        clearInterval(intervalID);
        currVelocity = 0;
        
    }
    return false;
}


// set onclick listeners for thumbnails and other setup
function setThumbnailLinks(thumbDivID)
{
    var thumbsDiv = getObject(thumbDivID);
	// get thumbsObject (first ul nested inside div)
	thumbsObject = thumbsDiv.getElementsByTagName('ul')[0];
	// get thumb links
	var links = thumbsDiv.getElementsByTagName('a');
	
	// total thumbnails
	numOfThumbs = links.length;
	// set width of thumbsObject
	thumbsObject.style.width = (numOfThumbs * thumbnailWidth) + 'px';
	// max left margin = - (total thumbs - images displayed at once) * thumb width
	maxLeftPos = -1 * (numOfThumbs - imagesDisplayedAtOnce) * thumbnailWidth;
	// set start position
	var start = 0;
	if (startAtThumbIndex < numOfThumbs)
	{
	    start = startAtThumbIndex * thumbnailWidth;
	}
	thumbsObject.style.marginLeft = start + 'px';
	
	for (var i = 0; i < links.length; i++)
	{
		// set onclick listener
		links[i].onclick = function () {
		                            displayImage(this);
		                            // stop pop up opening
		                            return false;
		                       }; 
	}
}

// set arrow functionality on mouse down
function setArrows(lID, rID)
{
    var larrow = getObject(lID);
    var rarrow = getObject(rID);
    
    larrow.onmousedown = slideThumbsRight;
    larrow.onclick = stopSlidingRight;
    rarrow.onmousedown = slideThumbsLeft;
    rarrow.onclick = stopSlidingLeft;
}

function displayImage(imageUrl)
{
    
    getObject(fullsizeID).src = imageUrl.toString().replace('_th.', '.');
}

// basic defensive function to get object
function getObject(id)
{
	if (document.getElementById)
	{
		if (document.getElementById(id))
		{	
			return document.getElementById(id);
		}
		else
		{
			trace('Element with id = ' + id + ' does not exist');
		}
	}
	else
	{
		trace('getElementbyId not supported');
	}
}

if (window.onload != null) 
{
        var currentLoadFunc = window.onload;
        window.onload = function()
                        {
                            currentLoadFunc();
                            
                            setThumbnailLinks(thumbDivID);
                            setArrows(leftarrowID, rightarrowID);
                        };        
}
//else
//{
//    window.onload = initSlideShow;
//}

/*   		
    var activeImage = false;
    var imageGalleryLeftPos = false;
    var imageGalleryWidth = false;
    var imageGalleryObj = false;
    var maxGalleryXPos = false;
    var slideSpeed = 0;
    var imageGalleryCaptions = new Array();
    
    function startSlide(e)
    {
        if (document.all) e = event;
        var id = this.id;
        
        //alert('images/thumbnails/' + this.id + '_over.gif');
        
        //this.getElementsByTagName('IMG')[0].src = 'images/thumbnails/' + this.id;	
        if (this.id == 'arrow_right') 
        {
            slideSpeedMultiply = Math.floor((e.clientX - this.offsetLeft) / 5);
            slideSpeed = -1 * slideSpeedMultiply;
            slideSpeed = Math.max(-10, slideSpeed);
        }
        else
        {			
            slideSpeedMultiply = 10 - Math.floor((e.clientX - this.offsetLeft) / 5);
            slideSpeed = 1 * slideSpeedMultiply;
            slideSpeed = Math.min(10, slideSpeed);
            if (slideSpeed < 0) slideSpeed = 10;
        }
    }
    
    function releaseSlide()
    {
        //var id = this.id;
        //this.getElementsByTagName('IMG')[0].src = 'images/' + this.id + '.gif';
        slideSpeed = 0;
    }
        
    function gallerySlide()
    {
        if (slideSpeed != 0)
        {
            var leftPos = imageGalleryObj.offsetLeft;
            leftPos = leftPos/1 + slideSpeed;
            if (leftPos>maxGalleryXPos)
            {
                leftPos = maxGalleryXPos;
                slideSpeed = 0;
                
            }
            if (leftPos<minGalleryXPos)
            {
                leftPos = minGalleryXPos;
                slideSpeed=0;
            }
            
            imageGalleryObj.style.left = leftPos + 'px';
        }
        setTimeout('gallerySlide()',20);
    }
    
    function showImage()
    {
        if(activeImage){
            activeImage.style.filter = 'alpha(opacity=50)';	
            activeImage.style.opacity = 0.5;
        }	
        this.style.filter = 'alpha(opacity=100)';
        this.style.opacity = 1;	
        activeImage = this;	
    }
    
    
    
    
    function initSlideShow()
    {
        document.getElementById('arrow_left').onmousedown = startSlide;
        document.getElementById('arrow_right').onmousedown = startSlide;
        window.onmouseup = releaseSlide;
        
        imageGalleryObj = document.getElementById('theImages');
        imageGalleryLeftPos = imageGalleryObj.offsetLeft;
        imageGalleryWidth = document.getElementById('galleryContainer').offsetWidth - 80;
        maxGalleryXPos = imageGalleryObj.offsetLeft; 
        minGalleryXPos = imageGalleryWidth - document.getElementById('slideEnd').offsetLeft;
        var slideshowImages = imageGalleryObj.getElementsByTagName('IMG');
        for(var no=0; no<slideshowImages.length; no++){
            slideshowImages[no].onmouseover = showImage;
        }
        
        var divs = imageGalleryObj.getElementsByTagName('DIV');
        for(var no=0; no<divs.length; no++){
            if(divs[no].className=='imageCaption')imageGalleryCaptions[imageGalleryCaptions.length] = divs[no].innerHTML;
        }
        gallerySlide();
    }
    
    function showPreview(imagePath, imageIndex)
    { 
        var subImages = document.getElementById('previewPane').getElementsByTagName('IMG');
    
        if (subImages.length==0)
        {
            var img = document.createElement('IMG');
            document.getElementById('previewPane').appendChild(img);
        }
        else img = subImages[0];
            
        if (displayWaitMessage)
        {
            document.getElementById('waitMessage').style.display='inline';
        }
        
        document.getElementById('largeImageCaption').style.display='none';
        img.onload = function() { hideWaitMessageAndShowCaption(imageIndex-1); };
        img.src = imagePath;
    }
    
    function hideWaitMessageAndShowCaption(imageIndex)
    {
        document.getElementById('waitMessage').style.display='none';	
        document.getElementById('largeImageCaption').innerHTML = imageGalleryCaptions[imageIndex];
        document.getElementById('largeImageCaption').style.display='block';
        
    }*/
    
    
