/*******************************************************************************
Copyright (c) 2005 - Alf Magne Kalleland post@dhtmlgoodies.com

UPDATE LOG:
	March, 10th, 2006 : Added support for a message while large image is loading

Get this and other scripts at www.dhtmlgoodies.com
You can use this script freely as long as this copyright message is kept intact.
*********************************************************************************/

/* Update by Pedrini Eros (@2007)
 * - integration with lightbox (v1)
 * - added support for extra (vertical) slidable view for gallery selection
 */

var displayWaitMessage  = true;

var activeImage         = false;

// gallery
var galleriesObj        = false;
var imageGalleryLeftPos = false;
var imageGalleryWidth   = false;
var maxGalleryYPos      = false;
var minGalleryYPos      = false;
var galleriesSpeed      = 0

// images
var imageGalleryLeftPos = false;
var imageGalleryWidth = false;
var imageGalleryObj = false;
var maxGalleryXPos = false;
var minGalleryXPos = false;
var slideSpeed = 0;

var imageGalleryCaptions = new Array();

function showImage() {
    if(activeImage) {
        activeImage.style.filter = 'alpha(opacity=50)'; // IE
        activeImage.style.opacity = 0.5;                // Firefox
    }

    this.style.filter = 'alpha(opacity=100)';           // IE
    this.style.opacity = 1;                             // Firefox
    activeImage = this;
}

function startSlide(e) {
    if (document.all) e = event;

    var id = this.id;

    this.getElementsByTagName('IMG')[0].src = 'images/' + this.id + '_over.gif';

    if ( this.id=='arrow_right' ) {
        slideSpeedMultiply = Math.floor((e.clientX - this.offsetLeft) / 5);
        slideSpeed = -1*slideSpeedMultiply;
        slideSpeed = Math.max(-10, slideSpeed);
    } else if ( this.id=='arrow_left' ) {
			slideSpeedMultiply = 10 - Math.floor((e.clientX - this.offsetLeft) / 5);
			slideSpeed = 1*slideSpeedMultiply;
			slideSpeed = Math.min(10, slideSpeed);
			if (slideSpeed<0) slideSpeed=10;
    } else if ( this.id=='arrow_down' ) {
        slideSpeedMultiply = Math.floor((e.clientY - this.offsetTop) / 5);
        galleriesSpeed = -1*slideSpeedMultiply;
        galleriesSpeed = Math.min(-10, galleriesSpeed);
    } else if ( this.id=='arrow_up' ) {
        slideSpeedMultiply = 10 - Math.floor((e.clientY - this.offsetTop) / 5);
		galleriesSpeed = 1*slideSpeedMultiply;
		galleriesSpeed = Math.min(10, galleriesSpeed);
		if (galleriesSpeed<0) galleriesSpeed=10;
    }
}

function releaseSlide() {
    var id = this.id;
	this.getElementsByTagName('IMG')[0].src = 'images/' + this.id + '.gif';

	galleriesSpeed = 0;
	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';
	}
	
    if( galleriesSpeed != 0 ){
        var topPos = galleriesObj.offsetTop;
        topPos = topPos/1 + galleriesSpeed;

        if(topPos > maxGalleryYPos) {
            topPos = maxGalleryYPos;
            galleriesSpeed = 0;
        }

        if(topPos < minGalleryYPos) {
            topPos = minGalleryYPos;
            galleriesSpeed = 0;
        }

        galleriesObj.style.top = topPos + 'px';
    }

    setTimeout('gallerySlide()',20);
}

function initSlideShow() {
    // gallery selection handler
    galleriesObj        = document.getElementById('galleryImages');
    
    gelleriesTopPos     = galleriesObj.offsetTop;
	galleriesHeight     = document.getElementById('gallerySelector').offsetHeight;
	maxGalleryYPos      = galleriesObj.offsetTop;
	minGalleryYPos      = galleriesHeight - document.getElementById('galleriesEnd').offsetTop;
    
    var galleryImages = galleriesObj.getElementsByTagName('IMG');
	for(var no = 0; no < galleryImages.length; no++) {
		galleryImages[no].onmouseover = showImage;
	}
	
	if (4 < galleryImages.length) {
        document.getElementById('arrow_up').onmousemove = startSlide;
        document.getElementById('arrow_up').onmouseout = releaseSlide;
    	document.getElementById('arrow_down').onmousemove = startSlide;
        document.getElementById('arrow_down').onmouseout = releaseSlide;
    }
    
    // correction for gallery view
    galleriesObj.style.height = (81*galleryImages.length) + 'px';
    
    // image preview slide handler
	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;
	}
	
	if (4 < slideshowImages.length) {
        document.getElementById('arrow_left').onmousemove = startSlide;
        document.getElementById('arrow_left').onmouseout = releaseSlide;
        document.getElementById('arrow_right').onmousemove = startSlide;
        document.getElementById('arrow_right').onmouseout = releaseSlide;
    }
   	gallerySlide();
}

function showPreview(imagePath, imagePathBig, 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;

	// support for lightbox
	var subAnchor     = document.getElementById('lightBoxPane');
	subAnchor.href    = imagePathBig;
	subAnchor.title   = imageGalleryCaptions[imageIndex-1];
}

function hideWaitMessageAndShowCaption(imageIndex) {
	document.getElementById('waitMessage').style.display='none';
	document.getElementById('largeImageCaption').innerHTML = imageGalleryCaptions[imageIndex];
	document.getElementById('largeImageCaption').style.display='block';
}

// startup
window.onload = initSlideShow;


