window.onload = loadInit;
window.onunload = windowUnload;

var IE = null;
if (navigator.appName == 'Microsoft Internet Explorer')
	IE = parseFloat(RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent)[1]);

var smallScreen = screen.width < 600 || screen.height < 600;

var loadURL = parseURL();
var URL = new Object();
for (property in loadURL)
	URL[property] = loadURL[property];
URL.ignorChange = false;



var galleryStyle;
if (smallScreen)
	galleryStyle = "thumbnail";
else
{
	if (loadURL && loadURL.galleryStyle)
		galleryStyle = loadURL.galleryStyle;
	else
		galleryStyle = readCookie("photoViewerGalleryStyle");

	if (!galleryStyle)
		galleryStyle = "browser";
}

if (loadURL && loadURL.photoID)
	selectedPhotoID = loadURL.photoID;

if (!siteURL)
	var siteURL = "";
if (!photoList)
	var photoList = new Array();
var currentPhoto = null;

var baseTitle;

var superbody;
var clipbox;
var modeButton = new Object();
var hashHack = null;

var sortPhotoButtons = new Object();
var sortCatButtons = new Object();

// Browser Gallery globals
var browserGallery = new Object();
browserGallery.panImage = new Object();
browserGallery.panImage.galleryBox = null;
browserGallery.panFrame = new Object();
browserGallery.zoomLinks = new Object();
browserGallery.zoomLinks.fadeInterval = null;
browserGallery.zoomLinks.fadeTimeout = null;
browserGallery.zoomLinks.fadeIgnore = false;
browserGallery.zoomSteps = 0;
browserGallery.zoomStep = 0;
browserGallery.navArrows = new Object();
browserGallery.dividerHandle = new Object();
browserGallery.dividerHandle.resizing = false;
browserGallery.galleryBox = new Object();
browserGallery.galleryBox.thumbBoxes = new Array();
browserGallery.galleryScrollTop = null;
browserGallery.galleryScrollBottom = null;
browserGallery.scrollGalleryUpTimer = null;
browserGallery.scrollGalleryDownTimer = null;
browserGallery.gallerySmoothScrollTimers = null;
browserGallery.galleryScrollBar = new Object();
browserGallery.currentGalleryOverlay = null;
browserGallery.galleryOverlayDelay = true;
browserGallery.galleryOverlayDelayTimer = null;


// Thumb Gallery globals
var thumbGallery = new Object();
thumbGallery.galleryBox = new Object();
thumbGallery.galleryBox.thumbBoxes = new Array();
thumbGallery.currentOverlay = null;
thumbGallery.scrollPosition = 0;


// Fullscreen Overlay globals
var fullscreenOverlay = new Object();
fullscreenOverlay.previews = new Array();
fullscreenOverlay.doubleClickStart = 0;
fullscreenOverlay.clickCount = 0;

// Category Box
var catBox = new Object();

// Create Browser Gallery Zoom Bar DOM objects
browserGallery.zoomLinks.barSegments = 0;

browserGallery.zoomLinks.zoomIn = document.createElement('IMG');
browserGallery.zoomLinks.zoomIn.id = "zoomInImage";
browserGallery.zoomLinks.zoomIn.src = siteURL + "ZoomIn.png";
browserGallery.zoomLinks.zoomIn.alt = "Zoom In";
browserGallery.zoomLinks.zoomIn.title = "Zoom In";
browserGallery.zoomLinks.zoomIn.onclick = zoomIn;
browserGallery.zoomLinks.zoomIn.onmousedown = eventDisable;

browserGallery.zoomLinks.zoomOut = document.createElement('IMG');
browserGallery.zoomLinks.zoomOut.id = "zoomOutImage";
browserGallery.zoomLinks.zoomOut.src = siteURL + "ZoomOut.png";
browserGallery.zoomLinks.zoomOut.alt = "Zoom Out";
browserGallery.zoomLinks.zoomOut.title = "Zoom Out";
browserGallery.zoomLinks.zoomOut.onclick = zoomOut;
browserGallery.zoomLinks.zoomOut.onmousedown = eventDisable;

browserGallery.zoomLinks.zoomSlider = document.createElement('IMG');
browserGallery.zoomLinks.zoomSlider.id = "zoomSliderImage";
browserGallery.zoomLinks.zoomSlider.src = siteURL + "ZoomSlider.png";
browserGallery.zoomLinks.zoomSlider.onmousedown = zoomSliderDragStart;

browserGallery.zoomLinks.zoomBar = new Array();
for (var i=0 ; i < 15 ; i++)
{
	browserGallery.zoomLinks.zoomBar[i] = document.createElement('IMG');
	browserGallery.zoomLinks.zoomBar[i].className = "zoomBarImage";
	browserGallery.zoomLinks.zoomBar[i].src = siteURL + "ZoomBar.png";
	browserGallery.zoomLinks.zoomBar[i].zoomStep = i;
	browserGallery.zoomLinks.zoomBar[i].onclick = zoomToBar;
	browserGallery.zoomLinks.zoomBar[i].onmousedown = eventDisable;
}


function windowUnload()
{
	// This doesn't do anything, but it's mere presence makes Safari keep the URLInterval running.
}

function loadInit(event)
{
	baseTitle = document.title;

	if (smallScreen)
		document.body.className = "smallScreen";
	else
		document.body.className = "largeScreen";

	superbody = document.getElementById("superbody");
	clipbox = document.getElementById("clipbox");
	browserGallery.container = document.getElementById("browserGallery");
	thumbGallery.container = document.getElementById("thumbGallery");
	fullscreenOverlay.container = document.getElementById("fullscreenImageOverlay");
	modeButton.box = document.getElementById("modeButtonBox");
	modeButton.box.originalOffset = rootOffset(modeButton.box)[1];
	modeButton.box.originalTop = modeButton.box.offsetTop;
	modeButton.button = document.getElementById("modeButton");
	modeButton.button.onclick = galleryModeClick;
	sortPhotoButtons.byNameUp = document.getElementById("sortPhotoNameUpButton");
	sortPhotoButtons.byNameUp.onclick = sortPhotoNameUp;
	sortPhotoButtons.byNameDown = document.getElementById("sortPhotoNameDownButton");
	sortPhotoButtons.byNameDown.onclick = sortPhotoNameDown;
	sortPhotoButtons.byTimeUp = document.getElementById("sortPhotoTimeUpButton");
	sortPhotoButtons.byTimeUp.onclick = sortPhotoTimeUp;
	sortPhotoButtons.byTimeDown = document.getElementById("sortPhotoTimeDownButton");
	sortPhotoButtons.byTimeDown.onclick = sortPhotoTimeDown;

	document.getElementById("preload").style.display = "none";
	clipbox.style.visibility = "visible";


	//
	// Build Browser Style Gallery
	//

	browserGallery.panImage.ID = document.getElementById("largeImg");
	browserGallery.panImage.spinner = document.getElementById("spinner");
	browserGallery.panImage.caption = document.getElementById("imageCaption");
	browserGallery.panImage.photographer = document.getElementById("imagePhotographer");

	browserGallery.panFrame.ID = document.getElementById("frame");
	if (browserGallery.panFrame.ID.addEventListener)
		browserGallery.panFrame.ID.addEventListener('DOMMouseScroll', zoomWheel, false);
	browserGallery.panFrame.ID.onmousewheel = zoomWheel;
	browserGallery.panFrame.ID.ondblclick = fullscreenOverlayOpen;

	browserGallery.panFrame.overBorder = document.getElementById("frameOverBorder");
	if (browserGallery.panFrame.overBorder.addEventListener)
		browserGallery.panFrame.overBorder.addEventListener('DOMMouseScroll', zoomWheel, false);
	browserGallery.panFrame.overBorder.onmousewheel = zoomWheel;
	browserGallery.panFrame.overBorder.ondblclick = fullscreenOverlayOpen;

	browserGallery.fullscreen = document.getElementById("zoomFullscreen");
	browserGallery.fullscreen.onclick = fullscreenOverlayOpen;
	browserGallery.fullscreen.onmousedown = eventDisable;


	browserGallery.zoomLinks.zoomBox = document.getElementById("zoomControls");
	browserGallery.zoomLinks.zoomBox.onmousedown = eventDisable; // disable selection inside zoom control box
	browserGallery.zoomLinks.zoomBox.onmouseover = zoomControlsHover;
	browserGallery.zoomLinks.zoomBox.onmouseout = zoomControlsLeave;

 	browserGallery.zoomLinks.zoomBox.appendChild(browserGallery.zoomLinks.zoomIn);
	browserGallery.zoomLinks.zoomBox.appendChild(browserGallery.zoomLinks.zoomOut);
	browserGallery.zoomLinks.zoomBox.appendChild(browserGallery.zoomLinks.zoomSlider);
	for (var i=0 ; i < 15 ; i++)
	{
		var lastSegment = i ? browserGallery.zoomLinks.zoomBar[i - 1] : browserGallery.zoomLinks.zoomOut;
		browserGallery.zoomLinks.zoomBox.insertBefore(browserGallery.zoomLinks.zoomBar[i], lastSegment);
	}
	browserGallery.zoomLinks.barSegments = 15;

	if (browserGallery.zoomLinks.zoomBox.addEventListener)
		browserGallery.zoomLinks.zoomBox.addEventListener('DOMMouseScroll', zoomWheel, false);
	browserGallery.zoomLinks.zoomBox.onmousewheel = zoomWheel;

	browserGallery.navArrows.prev = document.getElementById("prevArrow");
	browserGallery.navArrows.prev.onclick = selectPreviousImage;
	browserGallery.navArrows.next = document.getElementById("nextArrow");
	browserGallery.navArrows.next.onclick = selectNextImage;

	browserGallery.galleryBox.scrollFrame = document.getElementById("galleryScrollFrame");
	browserGallery.galleryBox.scrollFrame.onmouseout = scrollFrameMouseOut;
	browserGallery.galleryBox.superFrame = document.getElementById("gallerySuperFrame");
	browserGallery.galleryBox.frame = document.getElementById("galleryFrame");

	browserGallery.galleryScrollTop = document.getElementById("galleryScrollTop");
	browserGallery.galleryScrollTop.onmouseover = scrollGalleryUpStart;
	browserGallery.galleryScrollTop.onclick = scrollGalleryUpClick;
	browserGallery.galleryScrollArrowUp = document.getElementById("scrollArrowUp");

	browserGallery.galleryScrollBottom = document.getElementById("galleryScrollBottom");
	browserGallery.galleryScrollBottom.onmouseover = scrollGalleryDownStart;
	browserGallery.galleryScrollBottom.onclick = scrollGalleryDownClick;
	browserGallery.galleryScrollArrowDown = document.getElementById("scrollArrowDown");

	if (browserGallery.galleryBox.superFrame.addEventListener)
        browserGallery.galleryBox.superFrame.addEventListener('DOMMouseScroll', galleryScrollWheel, false);
	browserGallery.galleryBox.superFrame.onmousewheel = galleryScrollWheel;

	browserGallery.galleryScrollBar.bar = document.getElementById("galleryScrollBar");
	browserGallery.galleryScrollBar.bar.onclick = galleryScrollBarOnClick;
	browserGallery.galleryScrollBar.thumb = document.getElementById("galleryScrollBarThumb");
	browserGallery.galleryScrollBar.bar.onmousedown = galleryScrollBarDragStart;
	browserGallery.galleryScrollBar.box = document.getElementById("galleryScrollBarBox");
	if (browserGallery.galleryScrollBar.box.addEventListener)
        browserGallery.galleryScrollBar.box.addEventListener('DOMMouseScroll', galleryScrollWheel, false);
	browserGallery.galleryScrollBar.box.onmousewheel = galleryScrollWheel;

	browserGallery.dividerHandle.ID = document.getElementById("handle");
	browserGallery.dividerHandle.shadow = document.getElementById("handleShadow");
	browserGallery.dividerHandle.ID.onmousedown = galleryResizeStart;
	browserGallery.dividerHandle.shadow.onmousedown = galleryResizeStart;

	browserGallery.dividerHandle.gallery = document.getElementById("galleryBox");
	browserGallery.dividerHandle.viewer = document.getElementById("viewBox");


	browserGallery.panFrame.width = browserGallery.panFrame.ID.offsetWidth;
	browserGallery.panFrame.height = browserGallery.panFrame.ID.offsetHeight;


	browserGallery.panImage.loaded = false;
	browserGallery.panImage.loadedWidth = 0;
	browserGallery.panImage.loadedHeight = 0;

	window.onresize = resizeWindow;

	document.onkeydown = parseKeyDown;



	//
	// Build Thumb Style Gallery
	//
	thumbGallery.galleryBox.box = document.getElementById("thumbGalleryBox");
	thumbGallery.galleryBox.frame = document.getElementById("thumbGalleryFrame");


	//
	//	Build Full Window Overlay
	//
	fullscreenOverlay.container.className = "fitAll";
	fullscreenOverlay.margin = document.getElementById("fullscreenMarginBox");
	fullscreenOverlay.frame = document.getElementById("fullscreenImageFrame");
	fullscreenOverlay.spinner = document.getElementById("fullscreenSpinner");
	fullscreenOverlay.image = document.getElementById("fullscreenImage");
	fullscreenOverlay.image.onclick = fullscreenOverlayClick;
	fullscreenOverlay.image.ondblclick = fullscreenOverlayDblClick;
	fullscreenOverlay.image.onmousedown = eventDisable;
	fullscreenOverlay.caption = document.getElementById("fullscreenCaption");
	fullscreenOverlay.photographer = document.getElementById("fullscreenPhotographer");
	fullscreenOverlay.close = document.getElementById("fullscreenClose");
	fullscreenOverlay.close.onclick = fullscreenOverlayClose;
	fullscreenOverlay.fitWidth = document.getElementById("fullscreenFitWidth");
	fullscreenOverlay.fitWidth.onclick = fullscreenOverlayFit;
	fullscreenOverlay.fitAll = document.getElementById("fullscreenFitAll");
	fullscreenOverlay.fitAll.onclick = fullscreenOverlayFit;
	fullscreenOverlay.prev = document.getElementById("fullscreenPrevBox");
	fullscreenOverlay.prev.onclick = fullscreenOverlayPrev;
	fullscreenOverlay.prev.expanded = document.getElementById("fullscreenPrevExpanded");
	fullscreenOverlay.prev.collapsed = document.getElementById("fullscreenPrevCollapsed");
	fullscreenOverlay.next = document.getElementById("fullscreenNextBox");
	fullscreenOverlay.next.onclick = fullscreenOverlayNext;
	fullscreenOverlay.next.expanded = document.getElementById("fullscreenNextExpanded");
	fullscreenOverlay.next.collapsed = document.getElementById("fullscreenNextCollapsed");
	if (!smallScreen)
	{
		fullscreenOverlay.prev.onmouseover = fullscreenOverlayPrevShow;
		fullscreenOverlay.prev.onmouseout = fullscreenOverlayPrevHide;
		fullscreenOverlay.next.onmouseover = fullscreenOverlayNextShow;
		fullscreenOverlay.next.onmouseout = fullscreenOverlayNextHide;
	}

	if (smallScreen)
	{
		fullscreenOverlay.container.className = "fitWidth";
	}
	else
	{
		var overlayFit = readCookie("photoViewerOverlayFit")
		if (overlayFit && overlayFit == "fitWidth")
			fullscreenOverlayFit();
	}


	//
	//  Configure Category Box
	//

	catBox.box = document.getElementById("subCategoriesBox");
	if (catBox.box)
	{
		document.body.appendChild(catBox.box);
		catBox.box.style.zIndex = "100";
		catBox.box.style.display = "none";
		catBox.content = document.getElementById("subCategoriesBoxContent");
		catBox.frames = new Array();
		for (i=0 ; i < catBox.content.childNodes.length ; i++)
			if (catBox.content.childNodes[i].nodeType == 1 && catBox.content.childNodes[i].className == "catBoxFrame")
				catBox.frames.push(catBox.content.childNodes[i]);
		catBox.button = document.getElementById("subCategoriesButton");
		catBox.button.onclick = subCategoryClick;
		catBox.backer = document.createElement('DIV');
		catBox.backer.style.position = "absolute";
		catBox.backer.style.top = "0px";
		catBox.backer.style.left = "0px";
		catBox.backer.style.width = "100%";
		catBox.backer.style.height = "100%";
		catBox.backer.style.zIndex = "99";
		catBox.backer.style.display = "none";
		catBox.backer.onclick = subCategoryClick;
		document.body.appendChild(catBox.backer);

		sortCatButtons.byNameUp = document.getElementById("sortCatNameUpButton");
		sortCatButtons.byNameUp.onclick = sortCatNameUp;
		sortCatButtons.byNameDown = document.getElementById("sortCatNameDownButton");
		sortCatButtons.byNameDown.onclick = sortCatNameDown;
		sortCatButtons.byTimeUp = document.getElementById("sortCatTimeUpButton");
		sortCatButtons.byTimeUp.onclick = sortCatTimeUp;
		sortCatButtons.byTimeDown = document.getElementById("sortCatTimeDownButton");
		sortCatButtons.byTimeDown.onclick = sortCatTimeDown;

		setCatSortButtons();
	}

	if (IE && IE >= 5.5 && IE <= 7.0)
	{
		hashHack = document.createElement('IFRAME');
		hashHack.style.visibility = "hidden";
		hashHack.style.position = "absolute";
		hashHack.style.top = "0";
		hashHack.style.left = "0";
		hashHack.style.width = "0";
		hashHack.style.height = "0";
		hashHack.style.border = "0";
		document.body.appendChild(hashHack);
	}

	var URLListenerInterval = setInterval("URLListener()", 1000);


	//
	// Populate Gallery
	//

	if (loadURL && loadURL.sortPhotoMode && loadURL.sortPhotoDir &&
		(loadURL.sortPhotoMode != sortPhotoMode || loadURL.sortPhotoDir != sortPhotoDir))
		sortPhotos(loadURL.sortPhotoMode, loadURL.sortPhotoDir);
	else
		populateGallery();

	var photoNumber = (loadURL && loadURL.photoID) ? photoIndexFromID(loadURL.photoID) : null;
	if (photoNumber == null)
		switchImage(0);
	else
		switchImage(photoNumber);

	if (!smallScreen)
	{
		var dividerPos = readCookie("photoViewerGalleryWidth");
		if (dividerPos)
			setGalleryWidth(dividerPos);
		else
			setGalleryWidth(document.body.clientWidth * 0.6);
	}

	IE_Size_Hacks();
	IE_PNG_Hack();
	document.getElementById("footer").style.bottom = "0"; // needed to make IE refresh and redraw the screen right

	fullscreenOverlay.container.style.display = "none";
	toggleGalleryMode(galleryStyle);

	setPhotoSortButtons();


	if (loadURL && loadURL.fullscreen)
		fullscreenOverlayOpen();

	document.body.style.overflow = "auto";

	return true;
}

function populateGallery()
{
	for (var i = 0 ; i < photoList.length ; i++)
	{
		// Thumb Gallery Thumbs
		thumbGallery.galleryBox.thumbBoxes[i] = document.createElement('DIV');
		thumbGallery.galleryBox.thumbBoxes[i].className = "galleryThumbBox pre";
		thumbGallery.galleryBox.thumbBoxes[i].number = i;
		thumbGallery.galleryBox.thumbBoxes[i].onclick = thumbGalleryThumbClick;
		if (!smallScreen)
			thumbGallery.galleryBox.thumbBoxes[i].onmouseover = thumbGalleryThumbHover;

		thumbGallery.galleryBox.thumbBoxes[i].border = document.createElement('DIV');
		thumbGallery.galleryBox.thumbBoxes[i].border.className = "galleryThumbBorder";
		thumbGallery.galleryBox.thumbBoxes[i].appendChild(thumbGallery.galleryBox.thumbBoxes[i].border);

		thumbGallery.galleryBox.thumbBoxes[i].frame = document.createElement('DIV');
		thumbGallery.galleryBox.thumbBoxes[i].frame.className = "galleryThumbFrame";
		thumbGallery.galleryBox.thumbBoxes[i].border.appendChild(thumbGallery.galleryBox.thumbBoxes[i].frame);

 		thumbGallery.galleryBox.thumbBoxes[i].thumbSize = (smallScreen ? 94 : 200);
 		thumbGallery.galleryBox.thumbBoxes[i].thumbOffset = (smallScreen ? 2 : 4)

		thumbGallery.galleryBox.thumbBoxes[i].caption = document.createElement('DIV');
		thumbGallery.galleryBox.thumbBoxes[i].caption.className = "galleryThumbCaption";
		thumbGallery.galleryBox.thumbBoxes[i].caption.appendChild(document.createTextNode(photoList[i].title));
		thumbGallery.galleryBox.thumbBoxes[i].appendChild(thumbGallery.galleryBox.thumbBoxes[i].caption);

		thumbGallery.galleryBox.frame.appendChild(thumbGallery.galleryBox.thumbBoxes[i]);

		if (thumbGallery.galleryBox.thumbBoxes[i].caption.offsetWidth > (thumbGallery.galleryBox.thumbBoxes[i].thumbSize + 2 + thumbGallery.galleryBox.thumbBoxes[i].thumbOffset))
		{
			thumbGallery.galleryBox.thumbBoxes[i].caption.className = "galleryThumbCaption fade";

			thumbGallery.galleryBox.thumbBoxes[i].captionFade = document.createElement('IMG');
			thumbGallery.galleryBox.thumbBoxes[i].captionFade.src = siteURL + "CaptionFade.png";
			thumbGallery.galleryBox.thumbBoxes[i].captionFade.className = "galleryThumbCaptionFade";
			thumbGallery.galleryBox.thumbBoxes[i].caption.appendChild(thumbGallery.galleryBox.thumbBoxes[i].captionFade);
		}
		thumbGallery.galleryBox.thumbBoxes[i].className = "galleryThumbBox";



		if (!smallScreen)
		{
			// Browser Gallery Thumbs
			browserGallery.galleryBox.thumbBoxes[i] = document.createElement('DIV');
			browserGallery.galleryBox.thumbBoxes[i].className = "galleryThumbBox";
			browserGallery.galleryBox.thumbBoxes[i].number = i;
			browserGallery.galleryBox.thumbBoxes[i].onclick = galleryThumbClick;
			browserGallery.galleryBox.thumbBoxes[i].ondblclick = galleryThumbDblClick;
			browserGallery.galleryBox.thumbBoxes[i].onmouseover = galleryThumbHover;
			browserGallery.galleryBox.thumbBoxes[i].onmouseout = galleryThumbLeave;

			browserGallery.galleryBox.thumbBoxes[i].frame = document.createElement('DIV');
			browserGallery.galleryBox.thumbBoxes[i].frame.className = "galleryThumbFrame";
			browserGallery.galleryBox.thumbBoxes[i].appendChild(browserGallery.galleryBox.thumbBoxes[i].frame);

			browserGallery.galleryBox.thumbBoxes[i].caption = document.createElement('DIV');
			browserGallery.galleryBox.thumbBoxes[i].caption.style.display = "inline";
			browserGallery.galleryBox.thumbBoxes[i].caption.style.whiteSpace = "nowrap";
			browserGallery.galleryBox.thumbBoxes[i].caption.appendChild(document.createTextNode(photoList[i].title));
			browserGallery.galleryBox.thumbBoxes[i].appendChild(browserGallery.galleryBox.thumbBoxes[i].caption);

			browserGallery.galleryBox.frame.appendChild(browserGallery.galleryBox.thumbBoxes[i]);

			if (browserGallery.galleryBox.thumbBoxes[i].caption.offsetWidth > 120)
			{
				browserGallery.galleryBox.thumbBoxes[i].caption.className = "galleryThumbCaption fade";
				browserGallery.galleryBox.thumbBoxes[i].caption.style.display = "block";

				browserGallery.galleryBox.thumbBoxes[i].captionFade = document.createElement('IMG');
				browserGallery.galleryBox.thumbBoxes[i].captionFade.src = siteURL + "CaptionFade.png";
				browserGallery.galleryBox.thumbBoxes[i].captionFade.className = "galleryThumbCaptionFade";
				browserGallery.galleryBox.thumbBoxes[i].caption.appendChild(browserGallery.galleryBox.thumbBoxes[i].captionFade);
			}
			else
			{
				browserGallery.galleryBox.thumbBoxes[i].caption.className = "galleryThumbCaption";
				browserGallery.galleryBox.thumbBoxes[i].caption.style.display = "block";
			}


			fullscreenOverlay.previews[i] = document.createElement('DIV');
			fullscreenOverlay.previews[i].className = "fullscreenPreview";
			fullscreenOverlay.previews[i].onmouseout = fullscreenPreviewLeave;

			fullscreenOverlay.previews[i].background = document.createElement('IMG');
			fullscreenOverlay.previews[i].background.src = siteURL + "GreenGlass.png";
			fullscreenOverlay.previews[i].background.className = "fullscreenPreviewBackground";
			fullscreenOverlay.previews[i].appendChild(fullscreenOverlay.previews[i].background);

			fullscreenOverlay.previews[i].border = document.createElement('DIV');
			fullscreenOverlay.previews[i].border.className = "fullscreenPreviewBorder";
			fullscreenOverlay.previews[i].appendChild(fullscreenOverlay.previews[i].border);

			fullscreenOverlay.previews[i].frame = document.createElement('DIV');
			fullscreenOverlay.previews[i].frame.className = "fullscreenPreviewFrame";
			fullscreenOverlay.previews[i].appendChild(fullscreenOverlay.previews[i].frame);

			fullscreenOverlay.previews[i].caption = document.createElement('DIV');
			fullscreenOverlay.previews[i].caption.className = "fullscreenPreviewCaption";
			fullscreenOverlay.previews[i].caption.appendChild(document.createTextNode(photoList[i].title));
			fullscreenOverlay.previews[i].appendChild(fullscreenOverlay.previews[i].caption);

			fullscreenOverlay.container.appendChild(fullscreenOverlay.previews[i]);

		}
	}

	if (galleryStyle == "browser")
	{
		if (browserGallery.galleryBox.superFrame.offsetHeight > browserGallery.galleryBox.scrollFrame.offsetHeight)
		{
			browserGallery.galleryBox.scrollFrame.className = "scrollable";
			galleryScrollBarSetThumb();
			browserGallery.galleryScrollBar.box.style.visibility = "inherit";
		}
		else
		{
			browserGallery.galleryBox.scrollFrame.className = "nonScrollable";
			browserGallery.galleryScrollBar.box.style.visibility = "hidden";
			browserGallery.galleryBox.superFrame.style.top = "0px";
		}
	}
}

function emptyGallery()
{
	for (var i = 0 ; i < photoList.length ; i++)
	{
		if (thumbGallery.galleryBox.thumbBoxes[i])
			thumbGallery.galleryBox.frame.removeChild(thumbGallery.galleryBox.thumbBoxes[i]);
		if (browserGallery.galleryBox.thumbBoxes[i])
			browserGallery.galleryBox.frame.removeChild(browserGallery.galleryBox.thumbBoxes[i]);
		if (fullscreenOverlay.previews[i])
			fullscreenOverlay.container.removeChild(fullscreenOverlay.previews[i]);
	}

	browserGallery.galleryBox.scrollFrame.className = "nonScrollable";
	browserGallery.galleryScrollBar.box.style.visibility = "hidden";
	browserGallery.galleryBox.superFrame.style.top = "0px";
}

function loadThumbs(centerPhoto, number)
{
	if (!number) number = 1;
	var startPhoto = ((centerPhoto - number) > 0) ? centerPhoto - number : 0;
	var endPhoto = ((centerPhoto + number) < photoList.length - 1) ? centerPhoto + number : photoList.length - 1;

	for (var i = startPhoto ; i <= endPhoto ; i++)
	{
		if (galleryStyle == "thumbnail" && !thumbGallery.galleryBox.thumbBoxes[i].img)
		{
			thumbGallery.galleryBox.thumbBoxes[i].img = document.createElement('IMG');
			thumbGallery.galleryBox.thumbBoxes[i].img.src = siteURL + "photo.php?photo=" + photoList[i].filename + "&size=thumb&ratio=" + photoList[i].ratio +"&offset=" + photoList[i].offset;
			thumbGallery.galleryBox.thumbBoxes[i].img.className = "galleryThumbImg";
			thumbGallery.galleryBox.thumbBoxes[i].img.ratio = photoList[i].width > photoList[i].height ?
															photoList[i].width / thumbGallery.galleryBox.thumbBoxes[i].thumbSize : photoList[i].height / thumbGallery.galleryBox.thumbBoxes[i].thumbSize;
			thumbGallery.galleryBox.thumbBoxes[i].img.width = Math.round(photoList[i].width / thumbGallery.galleryBox.thumbBoxes[i].img.ratio);
			thumbGallery.galleryBox.thumbBoxes[i].img.height = Math.round(photoList[i].height / thumbGallery.galleryBox.thumbBoxes[i].img.ratio);
			thumbGallery.galleryBox.thumbBoxes[i].img.style.top = ((thumbGallery.galleryBox.thumbBoxes[i].thumbSize + thumbGallery.galleryBox.thumbBoxes[i].thumbOffset) - thumbGallery.galleryBox.thumbBoxes[i].img.height) / 2 + "px";
			thumbGallery.galleryBox.thumbBoxes[i].img.style.left = ((thumbGallery.galleryBox.thumbBoxes[i].thumbSize + thumbGallery.galleryBox.thumbBoxes[i].thumbOffset) - thumbGallery.galleryBox.thumbBoxes[i].img.width) / 2 + "px";
			thumbGallery.galleryBox.thumbBoxes[i].frame.appendChild(thumbGallery.galleryBox.thumbBoxes[i].img);
		}

		// Thumb Gallery Large Overlay Thumbs
		if (galleryStyle == "thumbnail" && !smallScreen && !thumbGallery.galleryBox.thumbBoxes[i].overlay)
		{
			thumbGallery.galleryBox.thumbBoxes[i].overlay = document.createElement('DIV');
			thumbGallery.galleryBox.thumbBoxes[i].overlay.className = "thumbnailThumbOverlay";
			thumbGallery.galleryBox.thumbBoxes[i].overlay.thumbBox = thumbGallery.galleryBox.thumbBoxes[i];
			thumbGallery.galleryBox.thumbBoxes[i].overlay.onclick = thumbGalleryThumbClick;
			thumbGallery.galleryBox.thumbBoxes[i].overlay.onmouseout = galleryOverlayLeave;

			thumbGallery.galleryBox.thumbBoxes[i].overlay.frame = document.createElement('DIV');
			thumbGallery.galleryBox.thumbBoxes[i].overlay.frame.className = "thumbnailThumbOverlayFrame";
			thumbGallery.galleryBox.thumbBoxes[i].overlay.appendChild(thumbGallery.galleryBox.thumbBoxes[i].overlay.frame);

			thumbGallery.galleryBox.thumbBoxes[i].overlay.caption = document.createElement('DIV');
			thumbGallery.galleryBox.thumbBoxes[i].overlay.caption.className = "thumbnailThumbOverlayCaption";
			thumbGallery.galleryBox.thumbBoxes[i].overlay.caption.appendChild(document.createTextNode(photoList[i].title));
			thumbGallery.galleryBox.thumbBoxes[i].overlay.appendChild(thumbGallery.galleryBox.thumbBoxes[i].overlay.caption);

			thumbGallery.galleryBox.thumbBoxes[i].overlay.img = document.createElement('IMG');
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.onmousedown = eventDisable;
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.src = siteURL + "photo.php?photo=" + photoList[i].filename + "&size=small&ratio=" + photoList[i].ratio +"&offset=" + photoList[i].offset;
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.className = "thumbnailThumbOverlayImg";
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.ratio = photoList[i].width > photoList[i].height ?
															photoList[i].width / 300 : photoList[i].height / 300;
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.width = Math.round(photoList[i].width / thumbGallery.galleryBox.thumbBoxes[i].overlay.img.ratio);
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.height = Math.round(photoList[i].height / thumbGallery.galleryBox.thumbBoxes[i].overlay.img.ratio);
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.style.top = (300 - thumbGallery.galleryBox.thumbBoxes[i].overlay.img.height) / 2 + "px";
			thumbGallery.galleryBox.thumbBoxes[i].overlay.img.style.left = (300 - thumbGallery.galleryBox.thumbBoxes[i].overlay.img.width) / 2 + "px";
			thumbGallery.galleryBox.thumbBoxes[i].overlay.frame.appendChild(thumbGallery.galleryBox.thumbBoxes[i].overlay.img);

			superbody.appendChild(thumbGallery.galleryBox.thumbBoxes[i].overlay);
		}


		if (galleryStyle == "browser" && !smallScreen && !browserGallery.galleryBox.thumbBoxes[i].img)
		{
			browserGallery.galleryBox.thumbBoxes[i].img = document.createElement('IMG');
			browserGallery.galleryBox.thumbBoxes[i].img.onmousedown = eventDisable;
			browserGallery.galleryBox.thumbBoxes[i].img.src = siteURL + "photo.php?photo=" + photoList[i].filename + "&size=thumb&ratio=" + photoList[i].ratio +"&offset=" + photoList[i].offset;
			browserGallery.galleryBox.thumbBoxes[i].img.className = "galleryThumbImg";
			browserGallery.galleryBox.thumbBoxes[i].img.ratio = photoList[i].width > photoList[i].height ?
															photoList[i].width / 116 : photoList[i].height / 116;
			browserGallery.galleryBox.thumbBoxes[i].img.width = Math.round(photoList[i].width / browserGallery.galleryBox.thumbBoxes[i].img.ratio);
			browserGallery.galleryBox.thumbBoxes[i].img.height = Math.round(photoList[i].height / browserGallery.galleryBox.thumbBoxes[i].img.ratio);
			browserGallery.galleryBox.thumbBoxes[i].img.style.top = (118 - browserGallery.galleryBox.thumbBoxes[i].img.height) / 2 + "px";
			browserGallery.galleryBox.thumbBoxes[i].img.style.left = (118 - browserGallery.galleryBox.thumbBoxes[i].img.width) / 2 + "px";
			browserGallery.galleryBox.thumbBoxes[i].frame.appendChild(browserGallery.galleryBox.thumbBoxes[i].img);
		}

		if (galleryStyle == "browser" && !smallScreen && !browserGallery.galleryBox.thumbBoxes[i].overlay)
		{
			// Browser Gallery Large Overlay Thumbs
			browserGallery.galleryBox.thumbBoxes[i].overlay = document.createElement('DIV');
			browserGallery.galleryBox.thumbBoxes[i].overlay.className = "browserThumbOverlay";
			browserGallery.galleryBox.thumbBoxes[i].overlay.thumbBox = browserGallery.galleryBox.thumbBoxes[i];
			browserGallery.galleryBox.thumbBoxes[i].overlay.onclick = galleryOverlayClick;
			browserGallery.galleryBox.thumbBoxes[i].overlay.ondblclick = galleryThumbDblClick;
			if (browserGallery.galleryBox.thumbBoxes[i].overlay.addEventListener)
				browserGallery.galleryBox.thumbBoxes[i].overlay.addEventListener('DOMMouseScroll', galleryOverlayWheel, false);
			browserGallery.galleryBox.thumbBoxes[i].overlay.onmousewheel = galleryOverlayWheel;
			browserGallery.galleryBox.thumbBoxes[i].overlay.onmouseout = galleryOverlayLeave;

			browserGallery.galleryBox.thumbBoxes[i].overlay.frame = document.createElement('DIV');
			browserGallery.galleryBox.thumbBoxes[i].overlay.frame.className = "browserThumbOverlayFrame";
			browserGallery.galleryBox.thumbBoxes[i].overlay.appendChild(browserGallery.galleryBox.thumbBoxes[i].overlay.frame);

			browserGallery.galleryBox.thumbBoxes[i].overlay.caption = document.createElement('DIV');
			browserGallery.galleryBox.thumbBoxes[i].overlay.caption.className = "browserThumbOverlayCaption";
			browserGallery.galleryBox.thumbBoxes[i].overlay.caption.appendChild(document.createTextNode(photoList[i].title));
			browserGallery.galleryBox.thumbBoxes[i].overlay.appendChild(browserGallery.galleryBox.thumbBoxes[i].overlay.caption);

			browserGallery.galleryBox.thumbBoxes[i].overlay.img = document.createElement('IMG');
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.onmousedown = eventDisable;
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.src = siteURL + "photo.php?photo=" + photoList[i].filename + "&size=thumb&ratio=" + photoList[i].ratio +"&offset=" + photoList[i].offset;
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.className = "browserThumbOverlayImg";
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.ratio = photoList[i].width > photoList[i].height ?
															photoList[i].width / 180 : photoList[i].height / 180;
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.width = Math.round(photoList[i].width / browserGallery.galleryBox.thumbBoxes[i].overlay.img.ratio);
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.height = Math.round(photoList[i].height / browserGallery.galleryBox.thumbBoxes[i].overlay.img.ratio);
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.style.top = (180 - browserGallery.galleryBox.thumbBoxes[i].overlay.img.height) / 2 + "px";
			browserGallery.galleryBox.thumbBoxes[i].overlay.img.style.left = (180 - browserGallery.galleryBox.thumbBoxes[i].overlay.img.width) / 2 + "px";
			browserGallery.galleryBox.thumbBoxes[i].overlay.frame.appendChild(browserGallery.galleryBox.thumbBoxes[i].overlay.img);

			superbody.appendChild(browserGallery.galleryBox.thumbBoxes[i].overlay);
		}


		// Fullscreen Overlay Preview Thumbs
		if (!smallScreen && !fullscreenOverlay.previews[i].img)
		{
			fullscreenOverlay.previews[i].img = document.createElement('IMG');
			fullscreenOverlay.previews[i].img.onmousedown = eventDisable;
			fullscreenOverlay.previews[i].img.src = siteURL + "photo.php?photo=" + photoList[i].filename + "&size=thumb&ratio=" + photoList[i].ratio +"&offset=" + photoList[i].offset;
			fullscreenOverlay.previews[i].img.className = "fullscreenPreviewImage";
			fullscreenOverlay.previews[i].img.ratio = photoList[i].width > photoList[i].height ?
															photoList[i].width / 200 : photoList[i].height / 200;
			fullscreenOverlay.previews[i].img.width = Math.round(photoList[i].width / fullscreenOverlay.previews[i].img.ratio);
			fullscreenOverlay.previews[i].img.height = Math.round(photoList[i].height / fullscreenOverlay.previews[i].img.ratio);
			fullscreenOverlay.previews[i].img.style.top = (200 - fullscreenOverlay.previews[i].img.height) / 2 + "px";
			fullscreenOverlay.previews[i].img.style.left = (200 - fullscreenOverlay.previews[i].img.width) / 2 + "px";
			fullscreenOverlay.previews[i].frame.appendChild(fullscreenOverlay.previews[i].img);


			IE_OverlayBGSize_Hack(fullscreenOverlay.previews[i].background);
		}
	}
}

function loadBrowserThumbs()
{
	var thumbBoxHeight = browserGallery.galleryBox.thumbBoxes[0].offsetHeight;
	var scrollFrameHeight = browserGallery.galleryBox.scrollFrame.offsetHeight;
	var columns = getNumberOfThumbColumns();
	var rows = Math.ceil(scrollFrameHeight / thumbBoxHeight);
	var visible = columns * rows;
	var centerPhoto = (Math.floor(-browserGallery.galleryBox.superFrame.offsetTop / thumbBoxHeight) * columns) + Math.round(visible / 2);

	loadThumbs(centerPhoto, visible);

	// yet another hack to make IE re-render the box to make it size the scrollframe element correctly.
	browserGallery.dividerHandle.shadow.style.display = "none";
	browserGallery.dividerHandle.shadow.style.display = "block";
}

function loadThumbThumbs()
{
	var thumbBoxHeight = thumbGallery.galleryBox.thumbBoxes[0].offsetHeight + 6;
	var columns = Math.floor((thumbGallery.galleryBox.box.offsetWidth)/ thumbGallery.galleryBox.thumbBoxes[0].offsetWidth + 6);
	var rows = Math.floor(document.body.clientHeight / thumbBoxHeight);
	var visible = columns * rows;

	var centerPhoto = thumbGalleryCenterPhoto();

	loadThumbs(centerPhoto, visible);
}

function sortPhotoNameUp()
{
	sortPhotos("name", "ASC");
	setPhotoSortButtons();
}

function sortPhotoNameDown()
{
	sortPhotos("name", "DSC");
	setPhotoSortButtons();
}

function sortPhotoTimeUp()
{
	sortPhotos("time", "ASC");
	setPhotoSortButtons();
}

function sortPhotoTimeDown()
{
	sortPhotos("time", "DSC");
	setPhotoSortButtons();
}

function setPhotoSortButtons()
{
	if (photoList.length > 1)
	{
		sortPhotoButtons.byNameUp.style.visibility = "inherit";
		sortPhotoButtons.byNameDown.style.visibility = "inherit";
		sortPhotoButtons.byTimeUp.style.visibility = "inherit";
		sortPhotoButtons.byTimeDown.style.visibility = "inherit";

		if (sortPhotoMode == 'name' && sortPhotoDir == 'ASC')
		{
			sortPhotoButtons.byNameUp.style.clip = "rect(0px, 54px, 13px, 27px)";
			sortPhotoButtons.byNameUp.style.marginLeft ="-27px";
		}
		else
		{
			sortPhotoButtons.byNameUp.style.clip = "rect(0px, 27px, 13px, 0px)";
			sortPhotoButtons.byNameUp.style.marginLeft ="0px";
		}

		if (sortPhotoMode == 'name' && sortPhotoDir == 'DSC')
		{
			sortPhotoButtons.byNameDown.style.clip = "rect(13px, 54px, 27px, 27px)";
			sortPhotoButtons.byNameDown.style.marginLeft ="-27px";
		}
		else
		{
			sortPhotoButtons.byNameDown.style.clip = "rect(13px, 27px, 27px, 0px)";
			sortPhotoButtons.byNameDown.style.marginLeft ="0px";
		}

		if (sortPhotoMode == 'time' && sortPhotoDir == 'ASC')
		{
			sortPhotoButtons.byTimeUp.style.clip = "rect(0px, 54px, 13px, 27px)";
			sortPhotoButtons.byTimeUp.style.marginLeft ="-27px";
		}
		else
		{
			sortPhotoButtons.byTimeUp.style.clip = "rect(0px, 27px, 13px, 0px)";
			sortPhotoButtons.byTimeUp.style.marginLeft ="0px";
		}

		if (sortPhotoMode == 'time' && sortPhotoDir == 'DSC')
		{
			sortPhotoButtons.byTimeDown.style.clip = "rect(13px, 54px, 27px, 27px)";
			sortPhotoButtons.byTimeDown.style.marginLeft ="-27px";
		}
		else
		{
			sortPhotoButtons.byTimeDown.style.clip = "rect(13px, 27px, 27px, 0px)";
			sortPhotoButtons.byTimeDown.style.marginLeft ="0px";
		}
	}
	else
	{
		sortPhotoButtons.byNameUp.style.visibility = "hidden";
		sortPhotoButtons.byNameDown.style.visibility = "hidden";
		sortPhotoButtons.byTimeUp.style.visibility = "hidden";
		sortPhotoButtons.byTimeDown.style.visibility = "hidden";
	}
}

function sortPhotos(mode, dir)
{
	if (mode == undefined || dir == undefined || (mode == sortPhotoMode && dir == sortPhotoDir))
		return;
	sortPhotoMode = mode;
	sortPhotoDir = dir;
	createCookie("photoViewerPhotoSort", sortPhotoMode, 90);
	createCookie("photoViewerPhotoSortDir", sortPhotoDir, 90);
	if (currentPhoto != null)
	{
		if (galleryStyle == "browser")
			var oldPhotoID = photoList[currentPhoto].filename;
		else
		{
			var oldHeight = document.body.style.height;
			document.body.style.height = clipbox.offsetHeight + "px";
			var scrollPosition = (window.pageYOffset != undefined) ? window.pageYOffset : document.body.scrollTop + document.documentElement.scrollTop;
		}
		emptyGallery();
		sortPhotoList();
		populateGallery();
		oldPhoto = photoIndexFromID(oldPhotoID);
		if (galleryStyle == "browser")
		{
			oldPhoto = photoIndexFromID(oldPhotoID);
			currentPhoto = null;
			switchImage(oldPhoto);
			loadBrowserThumbs();
		}
		else
		{
			window.scrollTo(0, scrollPosition);
			document.body.style.height = oldHeight;
			loadThumbThumbs();
		}

		updateURL(true);
	}
	else
	{
		emptyGallery();
		sortPhotoList();
		populateGallery();
	}
}

// function sortPhotoRequestPhotoList(sortMode, sortDir)
// {
// 	sortPhotoRequest = GetXmlHttpObject();
// 	if (sortPhotoRequest == null)
// 		return;
//
// 	sortPhotoRequest.photoID = photoList[currentPhoto].filename;
// 	sortPhotoRequest.onreadystatechange = sortPhotoRequestOnChange;
// 	sortPhotoRequest.open("GET", siteURL + "getphotolist.php?path=" + pathURI + "/&sort=" + sortMode + "&dir=" + sortDir, true);
// 	sortPhotoRequest.send(null);
//
// 	emptyGallery();
// }
//
// function sortPhotoRequestOnChange()
// {
// 	if (sortPhotoRequest.readyState==4)
// 	{
// 		eval(sortPhotoRequest.responseText);
// 		populateGallery();
// 		currentPhoto = null;
// 		oldPhoto = photoIndexFromID(sortPhotoRequest.photoID);
// 		switchImage(oldPhoto);
// 		if (galleryStyle == "browser")
// 			loadBrowserThumbs();
// 		else
// 			loadThumbThumbs();
// 	}
// }

function sortPhotoList()
{
	var p;
	if (sortPhotoMode == 'name')
		p = 'title';
	else if (sortPhotoMode == 'time')
		p = 'timestamp';
	else
		return false;

	if (sortPhotoDir == 'ASC')
		photoList.sort(function(a,b) {if (a[p]==b[p]) return 0; return (a[p]<b[p]) ? -1 : 1;});
	else if (sortPhotoDir = 'DSC')
		photoList.sort(function(b,a) {if (a[p]==b[p]) return 0; return (a[p]<b[p]) ? -1 : 1;});
	else
		return false;

	return true;
}




function sortCatNameUp()
{
	sortCats("name", "ASC");
	setCatSortButtons();
}

function sortCatNameDown()
{
	sortCats("name", "DSC");
	setCatSortButtons();
}

function sortCatTimeUp()
{
	sortCats("time", "ASC");
	setCatSortButtons();
}

function sortCatTimeDown()
{
	sortCats("time", "DSC");
	setCatSortButtons();
}

function setCatSortButtons()
{
	if (catList.length > 1)
	{
		sortCatButtons.byNameUp.style.visibility = "inherit";
		sortCatButtons.byNameDown.style.visibility = "inherit";
		sortCatButtons.byTimeUp.style.visibility = "inherit";
		sortCatButtons.byTimeDown.style.visibility = "inherit";
		catBox.box.style.paddingTop = "20px";

		if (sortCatMode == 'name' && sortCatDir == 'ASC')
		{
			sortCatButtons.byNameUp.style.clip = "rect(15px, 25px, 30px, 0px)";
			sortCatButtons.byNameUp.style.marginTop ="-15px";
		}
		else
		{
			sortCatButtons.byNameUp.style.clip = "rect(0px, 25px, 15px, 0px)";
			sortCatButtons.byNameUp.style.marginTop ="0px";
		}

		if (sortCatMode == 'name' && sortCatDir == 'DSC')
		{
			sortCatButtons.byNameDown.style.clip = "rect(15px, 51px, 30px, 25px)";
			sortCatButtons.byNameDown.style.marginTop ="-15px";
		}
		else
		{
			sortCatButtons.byNameDown.style.clip = "rect(0px, 51px, 15px, 25px)";
			sortCatButtons.byNameDown.style.marginTop ="0px";
		}

		if (sortCatMode == 'time' && sortCatDir == 'ASC')
		{
			sortCatButtons.byTimeUp.style.clip = "rect(15px, 25px, 30px, 0px)";
			sortCatButtons.byTimeUp.style.marginTop ="-15px";
		}
		else
		{
			sortCatButtons.byTimeUp.style.clip = "rect(0px, 25px, 15px, 0px)";
			sortCatButtons.byTimeUp.style.marginTop ="0px";
		}

		if (sortCatMode == 'time' && sortCatDir == 'DSC')
		{
			sortCatButtons.byTimeDown.style.clip = "rect(15px, 51px, 30px, 25px)";
			sortCatButtons.byTimeDown.style.marginTop ="-15px";
		}
		else
		{
			sortCatButtons.byTimeDown.style.clip = "rect(0px, 51px, 15px, 25px)";
			sortCatButtons.byTimeDown.style.marginTop ="0px";
		}
	}
	else
	{
		sortCatButtons.byNameUp.style.visibility = "hidden";
		sortCatButtons.byNameDown.style.visibility = "hidden";
		sortCatButtons.byTimeUp.style.visibility = "hidden";
		sortCatButtons.byTimeDown.style.visibility = "hidden";
		catBox.box.style.paddingTop = "10px";
	}
}

function sortCats(mode, dir)
{
	if (mode == undefined || dir == undefined || (mode == sortCatMode && dir == sortCatDir))
		return;
	sortCatMode = mode;
	sortCatDir = dir;
	createCookie("photoViewerCatSort", sortCatMode, 90);
	createCookie("photoViewerCatSortDir", sortCatDir, 90);
	sortCatList();
	rebuildCatBox();
}

function sortCatList()
{
	var p;
	if (sortCatMode == 'name')
		p = 'title';
	else if (sortCatMode == 'time')
		p = 'time';
	else
		return false;

	if (sortCatDir == 'ASC')
		catList.sort(function(a,b) {if (a[p]==b[p]) return 0; return (a[p]<b[p]) ? -1 : 1;});
	else if (sortCatDir = 'DSC')
		catList.sort(function(b,a) {if (a[p]==b[p]) return 0; return (a[p]<b[p]) ? -1 : 1;});
	else
		return false;

	return true;
}

function rebuildCatBox()
{
	for (var i = 0 ; i < catList.length ; i++)
	{
		for (var j = 0 ; j < catBox.frames[i].childNodes.length ; j++)
		{
			if (catBox.frames[i].childNodes[j].nodeType == 1 && catBox.frames[i].childNodes[j].className == "catBox")
			{
				for (var k = 0 ; k < catBox.frames[i].childNodes[j].childNodes.length ; k++)
				{
					if (catBox.frames[i].childNodes[j].childNodes[k].className == "catBoxLink")
					{
						catBox.frames[i].childNodes[j].childNodes[k].href = siteURL + pathURI + catList[i].path;

						for (var l = 0 ; l < catBox.frames[i].childNodes[j].childNodes[k].childNodes.length ; l++)
						{
							if (catBox.frames[i].childNodes[j].childNodes[k].childNodes[l].className == "catBoxImg")
							{
								catBox.frames[i].childNodes[j].childNodes[k].childNodes[l].src = siteURL + "blank.gif";
								catBox.frames[i].childNodes[j].childNodes[k].childNodes[l].src = siteURL + "catphoto.php?type=jpeg&size=200&path=" + pathURI + catList[i].path;
							}
							if (catBox.frames[i].childNodes[j].childNodes[k].childNodes[l].className == "catBoxTitle")
								catBox.frames[i].childNodes[j].childNodes[k].childNodes[l].innerHTML = catList[i].title;
						}
					}
					if (catBox.frames[i].childNodes[j].childNodes[k].className == "catBoxCount")
						catBox.frames[i].childNodes[j].childNodes[k].innerHTML = "(" + catList[i].count + " photos)";
				}
			}
		}
	}
}





function galleryModeClick(event)
{
	toggleGalleryMode();
}

function toggleGalleryMode(newMode)
{
	if (!newMode)
		newMode = (galleryStyle == "thumbnail" ? "browser" : "thumbnail");

	var oldMode = galleryStyle;

	if (newMode == "thumbnail")
	{
		thumbGallery.container.style.display = "block";
		thumbGallery.container.style.visibility = "inherit";
		browserGallery.container.style.visibility = "hidden";
		browserGallery.container.style.display = "none";
		if (browserGallery.galleryBox && browserGallery.galleryBox.thumbBoxes[currentPhoto])
			browserGallery.galleryBox.thumbBoxes[currentPhoto].className = "galleryThumbBox";
		clipbox.style.position = "relative";
		superbody.style.height = "auto";
		clipbox.style.height = "auto";
		superbody.style.width = "100%";
		clipbox.style.width = "100%";
		modeButton.button.style.clip = "rect(0px, 27px, 27px, 0px)";
		modeButton.button.style.marginLeft = "0px";
		modeButton.button.title = 'Switch to Browser View';
		modeButton.button.alt = 'Browser View';
		galleryStyle = "thumbnail";
		createCookie("photoViewerGalleryStyle", galleryStyle, 90);
		window.onscroll = thumbGalleryScroll;
		document.onkeydown = null;
	}
	else // assume (newMode == "browser")
	{
		modeButton.box.className = null;
		modeButton.box.style.top = modeButton.box.originalTop + "px";
		window.onscroll = null;
		window.scrollTo(0, 0);
		browserGallery.container.style.display = "block";
		browserGallery.container.style.visibility = "inherit";
		thumbGallery.container.style.visibility = "hidden";
		thumbGallery.container.style.display = "none";
		clipbox.style.position = "fixed";
		superbody.style.height = "100%";
		clipbox.style.height = "100%";
		superbody.style.width = "100%";
		clipbox.style.width = "100%";
		modeButton.button.style.clip = "rect(0px, 54px, 27px, 27px)";
		modeButton.button.style.marginLeft = "-27px";
		modeButton.button.title = 'Switch to Thumbnail View';
		modeButton.button.alt = 'Thumbnail View';
		if (thumbGallery.currentOverlay != null)
		{
			thumbGallery.galleryBox.thumbBoxes[thumbGallery.currentOverlay].overlay.style.visibility = "hidden";
			thumbGallery.currentOverlay = null;
		}
		galleryStyle = "browser";
		var oldPhoto = currentPhoto;
		currentPhoto = null;
		switchImage(oldPhoto);
		createCookie("photoViewerGalleryStyle", galleryStyle, 90);
		document.onkeydown = parseKeyDown;
	}

	if (smallScreen)
		modeButton.button.style.visibility = "hidden";

	resizeWindow();
	if (newMode != oldMode)
		updateURL(true);
	else
		updateURL(false);
}

function subCategoryClick(event)
{
	if (!event) var event = window.event;

	if (catBox.box.style.display == "none")
		subCategoryShow();
	else
		subCategoryHide();

}

function subCategoryShow()
{
	catBox.box.style.display = "block";
	catBox.button.className = "subCategoriesButtonActive";
	catBox.backer.style.display = "block";
	subCategoryResize();
}

function subCategoryHide()
{
	catBox.box.style.display = "none"
	catBox.button.className = "";
	catBox.backer.style.display = "none";
}

function subCategoryResize()
{
	if (catBox.box && catBox.box.style.display != "none")
	{
		var catBoxPadding = catBox.box.offsetWidth - catBox.content.offsetWidth;
		var columns = Math.floor((document.body.offsetWidth - (catBoxPadding + 20)) / catBox.frames[0].offsetWidth)
		if (columns > 2 && catBox.frames.length == 2)
			columns = 2;
		else if (columns > catBox.frames.length / 2)
			columns = Math.ceil(catBox.frames.length / 2);

		var contentWidth = columns * catBox.frames[0].offsetWidth;
		if (contentWidth < catBox.button.offsetWidth)
			contentWidth = catBox.button.offsetWidth;
		catBox.content.style.width = contentWidth + "px";

		var minPos = (document.body.offsetWidth - 10) - catBox.box.offsetWidth;
		var buttonPos = rootOffset(catBox.button);
		var prefPos = (buttonPos[0] - (catBoxPadding / 2)) >= 10 ? (buttonPos[0] - (catBoxPadding / 2)) : 10;
		var pos = prefPos < minPos ? prefPos : minPos;

		catBox.box.style.left = pos + "px";
		catBox.box.style.top = buttonPos[1] + catBox.button.offsetHeight + "px";

		var backerHeight = catBox.box.offsetTop + catBox.box.offsetHeight + 10;
		if (backerHeight < clipbox.offsetHeight)
			backerHeight = clipbox.offsetHeight;
		catBox.backer.style.height = backerHeight + "px"
	}
}

function photoIndexFromID(photoID)
{
	var index = null;
	if (typeof(photoID) != 'undefined')
	{
		for (var i=0 ; i < photoList.length ; i++)
		{
			if (photoList[i].filename == photoID)
			{
				index = i;;
				break;
			}
		}
	}

	return index;
}

function displayImage(image)
{
	if (!image || !image.width || !image.height)
		return;

	if (galleryStyle == "browser")
	{
//		browserGallery.panImage.spinner.src = siteURL + "blank.gif";

		if (!browserGallery.panImage.displayed ||
			image.width > browserGallery.panImage.loadedWidth ||
			image.height > browserGallery.panImage.loadedHeight)
		{
			browserGallery.panImage.loadedWidth = image.width;
			browserGallery.panImage.loadedHeight = image.height;

			browserGallery.panImage.ID.src = image.src;
			browserGallery.panImage.ID.style.visibility = "inherit";

			if (!browserGallery.panImage.displayed)
				fitImage();

			setZoomLinks();
			browserUpdateSpinner();
		}

		browserGallery.panImage.displayed = true;
	}


	// Fullscreen Overlay
	if (!fullscreenOverlay.image.displayed ||
		image.width > fullscreenOverlay.image.loadedWidth ||
		image.height > fullscreenOverlay.image.loadedHeight)
	{
		fullscreenOverlay.image.loadedWidth = image.width;
		fullscreenOverlay.image.loadedHeight = image.height;

		fullscreenOverlay.image.src = image.src;

		if (!smallScreen &&
 			(image.width != photoList[currentPhoto].width || image.height != photoList[currentPhoto].height))
		{ // not fullsize image (i.e. a preload image)
			var widthRatio = photoList[currentPhoto].width / fullscreenOverlay.frame.offsetWidth;
			var heightRatio = photoList[currentPhoto].height / fullscreenOverlay.frame.offsetHeight;

			var resizeRatio = widthRatio > heightRatio ? widthRatio : heightRatio;

 			fullscreenOverlay.image.width = photoList[currentPhoto].width / resizeRatio;
 			fullscreenOverlay.image.height = photoList[currentPhoto].height / resizeRatio;
		}
		else
		{ // Full size image (or only image on mobile device)
			fullscreenOverlay.image.removeAttribute("width");
			fullscreenOverlay.image.removeAttribute("height");
//			fullscreenOverlay.spinner.style.visibility = "hidden";
		}

		fullscreenOverlay.image.displayed = true;
		fullscreenOverlay.image.style.visibility = "inherit";

		fullscreenUpdateSpinner();

		// hack to get IE to show the image at the right size
		setTimeout("fullscreenOverlay.image.style.visibility = 'hidden'; fullscreenOverlay.image.style.visibility = 'inherit';", 500);
	}
}

function finishLoadImage(event)
{
	if (!event) var event = window.event;

	if (this.photoNumber == currentPhoto)
		displayImage(this);
}

function switchImage(photoNumber)
{
	cancelGalleryOverlayDelayTimer(true);
	hideGalleryOverlay();

	if (photoNumber != currentPhoto)
	{
		var oldPhoto = currentPhoto;
		currentPhoto = photoNumber;

		loadThumbs(photoNumber, 5);

		if (galleryStyle == "browser")
		{
			if (browserGallery.galleryBox.thumbBoxes[photoNumber])
				browserGallery.galleryBox.thumbBoxes[photoNumber].className = "galleryThumbBox selected";

			if (oldPhoto != null)
				browserGallery.galleryBox.thumbBoxes[oldPhoto].className = "galleryThumbBox";

			browserGallery.panImage.displayed = false;
			browserGallery.panImage.loadedWidth = -1;
			browserGallery.panImage.loadedHeight = -1;
			browserGallery.panImage.ID.style.visibility = "hidden";
			browserGallery.panImage.ID.style.width = "0";
			browserGallery.panImage.ID.style.height = "0";
			browserGallery.panImage.ID.style.top = "50%";
			browserGallery.panImage.ID.style.left = "50%";
			browserGallery.panImage.ID.src = siteURL + "blank.gif";
			browserUpdateSpinner();
			browserGallery.panImage.caption.innerHTML = photoList[photoNumber].title;
			browserGallery.panImage.photographer.innerHTML = "By " + photoList[photoNumber].photographer;
			browserGallery.zoomStep = 0;
			setZoomSteps();
			galleryCenterSelected(!!oldPhoto);
		}

		fullscreenOverlay.image.style.visibility = "hidden";
		fullscreenUpdateSpinner();
		fullscreenOverlay.image.displayed = false;
		fullscreenOverlay.caption.innerHTML = photoList[photoNumber].title;
		fullscreenOverlay.photographer.innerHTML = "By " + photoList[photoNumber].photographer;


		if (photoNumber > 0)
			showPrevButtons(true);
		else
			showPrevButtons(false);

		if (photoNumber < photoList.length - 1)
			showNextButtons(true);
		else
			showNextButtons(false);


		if (smallScreen)
		{
			if (photoList[photoNumber].smlImg && photoList[photoNumber].smlImg.width > 0)
				displayImage(photoList[photoNumber].smlImg);
			else
			{
				if (!photoList[photoNumber].smlImg)
					photoList[photoNumber].smlImg = new Image();
				photoList[photoNumber].smlImg.photoNumber = photoNumber;
				photoList[photoNumber].smlImg.onload = finishLoadImage;
				photoList[photoNumber].smlImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber].filename + "&size=small&ratio=" + photoList[photoNumber].ratio +"&offset=" + photoList[photoNumber].offset;
			}

			if (photoNumber <  photoList.length - 1 && (!photoList[photoNumber+1].smlImg || photoList[photoNumber+1].smlImg.width == 0))
			{
				photoList[photoNumber+1].smlImg = new Image();
				photoList[photoNumber+1].smlImg.photoNumber = photoNumber+1;
				photoList[photoNumber+1].smlImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber+1].filename + "&size=small&ratio=" + photoList[photoNumber+1].ratio +"&offset=" + photoList[photoNumber+1].offset;
			}

			if (photoNumber > 0 && (!photoList[photoNumber-1].smlImg || photoList[photoNumber-1].smlImg.width == 0))
			{
				photoList[photoNumber-1].smlImg = new Image();
				photoList[photoNumber-1].smlImg.photoNumber = photoNumber-1;
				photoList[photoNumber-1].smlImg.onload = finishLoadImage;
				photoList[photoNumber-1].smlImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber-1].filename + "&size=small&ratio=" + photoList[photoNumber-1].ratio +"&offset=" + photoList[photoNumber-1].offset;
			}
		}
		else
		{
			if (photoList[photoNumber].lrgImg && photoList[photoNumber].lrgImg.width > 0)
				displayImage(photoList[photoNumber].lrgImg);
			else
			{
				if (!photoList[photoNumber].lrgImg)
					photoList[photoNumber].lrgImg = new Image();
				photoList[photoNumber].lrgImg.photoNumber = photoNumber;
				photoList[photoNumber].lrgImg.onload = finishLoadImage;
				photoList[photoNumber].lrgImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber].filename + "&size=large&ratio=" + photoList[photoNumber].ratio +"&offset=" + photoList[photoNumber].offset;

				if (photoList[photoNumber].medImg && photoList[photoNumber].medImg.width > 0)
					displayImage(photoList[photoNumber].medImg);
				else
				{
					if (!photoList[photoNumber].medImg)
						photoList[photoNumber].medImg = new Image();
					photoList[photoNumber].medImg.photoNumber = photoNumber;
					photoList[photoNumber].medImg.onload = finishLoadImage;
					photoList[photoNumber].medImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber].filename + "&size=medium&ratio=" + photoList[photoNumber].ratio +"&offset=" + photoList[photoNumber].offset;

					if (photoList[photoNumber].smlImg && photoList[photoNumber].smlImg.width > 0)
						displayImage(photoList[photoNumber].smlImg);
					else
					{
						if (!photoList[photoNumber].smlImg)
							photoList[photoNumber].smlImg = new Image();
						photoList[photoNumber].smlImg.photoNumber = photoNumber;
						photoList[photoNumber].smlImg.onload = finishLoadImage;
						photoList[photoNumber].smlImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber].filename + "&size=small&ratio=" + photoList[photoNumber].ratio +"&offset=" + photoList[photoNumber].offset;
					}
				}
			}

			if (photoNumber <  photoList.length - 1 && (!photoList[photoNumber+1].smlImg || photoList[photoNumber+1].smlImg.width == 0))
			{
				photoList[photoNumber+1].smlImg = new Image();
				photoList[photoNumber+1].smlImg.photoNumber = photoNumber+1;
				photoList[photoNumber+1].smlImg.onload = finishLoadImage;
				photoList[photoNumber+1].smlImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber+1].filename + "&size=small&ratio=" + photoList[photoNumber+1].ratio +"&offset=" + photoList[photoNumber+1].offset;
			}

			if (photoNumber <  photoList.length - 1 && (!photoList[photoNumber+1].medImg || photoList[photoNumber+1].medImg.width == 0))
			{
				photoList[photoNumber+1].medImg = new Image();
				photoList[photoNumber+1].medImg.photoNumber = photoNumber+1;
				photoList[photoNumber+1].medImg.onload = finishLoadImage;
				photoList[photoNumber+1].medImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber+1].filename + "&size=medium&ratio=" + photoList[photoNumber+1].ratio +"&offset=" + photoList[photoNumber+1].offset;
			}

			if (photoNumber > 0 && (!photoList[photoNumber-1].smlImg || photoList[photoNumber-1].smlImg.width == 0))
			{
				photoList[photoNumber-1].smlImg = new Image();
				photoList[photoNumber-1].smlImg.photoNumber = photoNumber-1;
				photoList[photoNumber-1].smlImg.onload = finishLoadImage;
				photoList[photoNumber-1].smlImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber-1].filename + "&size=small&ratio=" + photoList[photoNumber-1].ratio +"&offset=" + photoList[photoNumber-1].offset;
			}

			if (photoNumber > 0 && (!photoList[photoNumber-1].medImg || photoList[photoNumber-1].medImg.width == 0))
			{
				photoList[photoNumber-1].medImg = new Image();
				photoList[photoNumber-1].medImg.photoNumber = photoNumber-1;
				photoList[photoNumber-1].medImg.onload = finishLoadImage;
				photoList[photoNumber-1].medImg.src = siteURL + "photo.php?photo=" + photoList[photoNumber-1].filename + "&size=medium&ratio=" + photoList[photoNumber-1].ratio +"&offset=" + photoList[photoNumber-1].offset;
			}
		}
	}
}

function scrollFrameMouseOut(event)
{
	if (!event) var event = window.event;

	var location = rootOffset(browserGallery.galleryBox.scrollFrame);

	if (event.clientX < location[0] ||
		event.clientX >= (location[0] + browserGallery.galleryBox.scrollFrame.offsetWidth) ||
		event.clientY < location[1] ||
		event.clientY >= (location[1] + browserGallery.galleryBox.scrollFrame.offsetHeight))
	{
		browserGallery.galleryOverlayDelay = true;
	}
}

function galleryThumbClick(event)
{
	if (!event) var event = window.event;

	switchImage(this.number);
	updateURL(true);
}

function galleryThumbDblClick(event)
{
	if (!event) var event = window.event;

	switchImage(this.number);
	fullscreenOverlayOpen();
}

function galleryThumbHover()
{
	// Do not display overlay if dragging resize handle
	if (browserGallery.dividerHandle.resizing)
		return;

	var thumb;
	if (this.className && this.className.search("galleryThumbBox") != -1 && this.overlay)
		thumb = this;
	else if (browserGallery.currentGalleryOverlay)
		thumb = browserGallery.currentGalleryOverlay.thumbBox;
	else
		return;

	var overlay = thumb.overlay;


	// Do not display overlay if thumb is scrolled above the top or bellow the bottom of the scroll frame
	if (browserGallery.galleryBox.superFrame.offsetTop + thumb.offsetTop < 0 ||
		browserGallery.galleryBox.superFrame.offsetTop + thumb.offsetTop + thumb.offsetHeight > browserGallery.galleryBox.scrollFrame.offsetHeight - 0)
	{
		return;
	}

	cancelGalleryOverlayDelayTimer();

	if (browserGallery.galleryOverlayDelay)
	{
		browserGallery.currentGalleryOverlay = overlay;
		browserGallery.galleryOverlayDelayTimer = setTimeout("browserGallery.galleryOverlayDelay = false ; galleryThumbHover()", 1000);
		return false;
	}

	hideGalleryOverlay();

	var thumbPos = rootOffset(overlay.thumbBox);

	overlay.style.top = (thumbPos[1] + (thumb.offsetHeight / 2)) - (overlay.offsetHeight / 2) + "px";
	overlay.style.left = (thumbPos[0] + (thumb.offsetWidth / 2)) - (overlay.offsetWidth / 2) + "px";
	overlay.style.visibility = "inherit";
	browserGallery.currentGalleryOverlay = overlay;

	return false;
}

function galleryThumbLeave(event)
{
	if (!event) var event = window.event;

	var location = rootOffset(this);

	if (event.clientX < location[0] ||
		event.clientX >= (location[0] + this.offsetWidth) ||
		event.clientY < location[1] ||
		event.clientY >= (location[1] + this.offsetHeight))
	{
		cancelGalleryOverlayDelayTimer();
	}
}

function cancelGalleryOverlayDelayTimer(newDelay)
{
	if (browserGallery.galleryOverlayDelayTimer)
	{
		clearTimeout(browserGallery.galleryOverlayDelayTimer);
		browserGallery.galleryOverlayDelayTimer = null;
	}

	if (newDelay != undefined)
		browserGallery.galleryOverlayDelay = newDelay;
}

function galleryOverlayClick(event)
{
	if (!event) var event = window.event;

	if (this.thumbBox)
	{
		switchImage(this.thumbBox.number)
		updateURL(true);
	}
}

function galleryOverlayWheel(event)
{
	if (!event) var event = window.event;

	hideGalleryOverlay(this);

	return galleryScrollWheel(event);
}

function galleryOverlayLeave(event)
{
	if (!event) var event = window.event;

	var location = rootOffset(this);

	if (event.clientX < location[0] ||
		event.clientX >= (location[0] + this.offsetWidth) ||
		event.clientY < location[1] ||
		event.clientY >= (location[1] + this.offsetHeight))
	{
		hideGalleryOverlay(this);
	}

	scrollFrameMouseOut(event);
}

function hideGalleryOverlay(overlay)
{
	if (!overlay) var overlay = browserGallery.currentGalleryOverlay;

	if (overlay)
		overlay.style.visibility = "hidden";

	browserGallery.currentGalleryOverlay = null;
}

function eventDisable(event)
{
	return false;
}

function eventEnable(event)
{
	return true;
}

function dragImageStart(event)
{
	if (!event) var event = window.event;

	if (event.button != 2) // not right mouse button
	{
		if (!(IE && IE <= 5.5))
		{
			browserGallery.panFrame.ID.style.cursor = cursorStyle.grabbing;
			browserGallery.panFrame.overBorder.style.cursor = cursorStyle.grabbing;
			document.body.style.cursor = cursorStyle.grabbing;
		}

		browserGallery.panImage.moveX = browserGallery.panImage.posX;
		browserGallery.panImage.moveY = browserGallery.panImage.posY;
		browserGallery.panImage.mouseX = event.clientX;
		browserGallery.panImage.mouseY = event.clientY;

		document.onmouseup = dragImageEnd;
		document.onmousemove = dragImageMove;

		return false;
	}

	return false;
}

function dragImageMove(event)
{
	if (!event) var event = window.event;

	var xDif = event.clientX - browserGallery.panImage.mouseX;
	var yDif = event.clientY - browserGallery.panImage.mouseY;

	var xNew = browserGallery.panImage.moveX + xDif;
	if (browserGallery.panImage.width + 20 < browserGallery.panFrame.width)
		xNew = (browserGallery.panFrame.width / 2) - (browserGallery.panImage.width / 2);
	else if (xNew > 10)
		xNew = 10;
	else if (xNew < (browserGallery.panFrame.width - browserGallery.panImage.width) - 10)
		xNew = (browserGallery.panFrame.width - browserGallery.panImage.width) - 10;

	var yNew = browserGallery.panImage.moveY + yDif;
	if (browserGallery.panImage.height + 20 < browserGallery.panFrame.height)
		yNew = (browserGallery.panFrame.height / 2) - (browserGallery.panImage.height / 2);
	else if (yNew > 10)
		yNew = 10;
	else if (yNew < (browserGallery.panFrame.height - browserGallery.panImage.height) - 10)
		yNew = (browserGallery.panFrame.height - browserGallery.panImage.height) - 10;

	browserGallery.panImage.ID.style.left = xNew + "px";
	browserGallery.panImage.ID.style.top = yNew + "px";
	browserGallery.panImage.posX = xNew;
	browserGallery.panImage.posY = yNew;

	return false;
}

function dragImageEnd(event)
{
	if (!event) var event = window.event;

	if (!(IE && IE <= 5.5))
	{
		browserGallery.panFrame.ID.style.cursor = cursorStyle.grab;
		browserGallery.panFrame.overBorder.style.cursor = cursorStyle.grab;
		document.body.style.cursor = cursorStyle.normal;
	}

	document.onmousemove = null;
	document.onmouseup = null;

	return true;
}

function resizeWindow(event)
{
	if (galleryStyle == "browser")
	{
		if (browserGallery.dividerHandle.position > document.body.offsetWidth - 300)
		{
			var xNew = document.body.offsetWidth - 300;

			if (xNew < 191)
				xNew = 191;

			xNew = (Math.round((xNew - 48) / 132) * 132) + 48;

			browserGallery.dividerHandle.gallery.style.width = xNew + "px";
			browserGallery.dividerHandle.viewer.style.marginLeft = xNew + "px";
			browserGallery.dividerHandle.position = xNew;

			createCookie("photoViewerGalleryWidth", xNew, 90);
		}

		loadBrowserThumbs();
		resizeBrowserFrame(event);
	}
	else if (galleryStyle == "thumbnail")
	{
		if (smallScreen)
			thumbGallery.galleryBox.box.style.width = ((Math.floor(document.body.offsetWidth / 106) * 106) ) + "px";
		else
			thumbGallery.galleryBox.box.style.width = ((Math.floor((document.body.offsetWidth - 110) / 218) * 218) + 3)  + "px";

		loadThumbThumbs();
	}

	subCategoryResize()
	fullscreenUpdateSpinner();
}

function resizeBrowserFrame(event)
{
	if (!event) var event = window.event;

	browserGallery.panFrame.width = browserGallery.panFrame.ID.offsetWidth;
	browserGallery.panFrame.height = browserGallery.panFrame.ID.offsetHeight;

	if ((browserGallery.panImage.width <= (browserGallery.panFrame.width - 20) && browserGallery.panImage.height <= (browserGallery.panFrame.height - 20)) ||
			(browserGallery.zoomStep == 0))
		fitImage();
	else
	{
		var xDif = (browserGallery.panFrame.ID.offsetWidth - browserGallery.panFrame.width) / 2;
		var yDif = (browserGallery.panFrame.ID.offsetHeight - browserGallery.panFrame.height) / 2;

		var xNew = browserGallery.panImage.posX + xDif;
		if (browserGallery.panImage.width < browserGallery.panFrame.width)
			xNew = (browserGallery.panFrame.width / 2) - (browserGallery.panImage.width / 2);
		else if (xNew > 10)
			xNew = 10;
		else if (xNew < (browserGallery.panFrame.width - browserGallery.panImage.width) - 10)
			xNew = (browserGallery.panFrame.width - browserGallery.panImage.width) - 10;

		var yNew = browserGallery.panImage.posY + yDif;
		if (browserGallery.panImage.height < browserGallery.panFrame.height)
			yNew = (browserGallery.panFrame.height / 2) - (browserGallery.panImage.height / 2);
		else if (yNew > 10)
			yNew = 10;
		else if (yNew < (browserGallery.panFrame.height - browserGallery.panImage.height) - 10)
			yNew = (browserGallery.panFrame.height - browserGallery.panImage.height) - 10;

		browserGallery.panImage.ID.style.left = xNew + "px";
		browserGallery.panImage.ID.style.top = yNew + "px";
		browserGallery.panImage.posX = xNew;
		browserGallery.panImage.posY = yNew;
	}

	setZoomSteps();
	setZoomLinks();
	setZoomSlider(currentZoomStep());
	browserUpdateSpinner();

	if (browserGallery.galleryBox.superFrame.offsetHeight > browserGallery.galleryBox.scrollFrame.offsetHeight)
	{
		browserGallery.galleryBox.scrollFrame.className = "scrollable";
		galleryScrollBarSetThumb();
		browserGallery.galleryScrollBar.box.style.visibility = "inherit";
		loadBrowserThumbs();
		galleryCenterSelected(false);
	}
	else
	{
		browserGallery.galleryBox.scrollFrame.className = "nonScrollable";
		browserGallery.galleryScrollBar.box.style.visibility = "hidden";
		browserGallery.galleryBox.superFrame.style.top = "0px";
		loadBrowserThumbs();
	}

	cancelGalleryOverlayDelayTimer(true);

	return true;
}

function fitImage()
{
	var widthRatio = photoList[currentPhoto].width / (browserGallery.panFrame.width - 20);
	var heightRatio = photoList[currentPhoto].height / (browserGallery.panFrame.height - 20);

	var resizeRatio = widthRatio > heightRatio ? widthRatio : heightRatio;

	if (resizeRatio > 1)
	{
		browserGallery.panImage.width = photoList[currentPhoto].width / resizeRatio;
		browserGallery.panImage.height = photoList[currentPhoto].height / resizeRatio;
		browserGallery.panImage.ID.style.width = browserGallery.panImage.width + "px";
		browserGallery.panImage.ID.style.height = browserGallery.panImage.height + "px";
	}

	browserGallery.panImage.posX = ((browserGallery.panFrame.width / 2) - (browserGallery.panImage.width / 2)) - 1; // - 1 for border
	browserGallery.panImage.posY = ((browserGallery.panFrame.height / 2) - (browserGallery.panImage.height / 2)) - 1; // - 1 for border
	browserGallery.panImage.ID.style.left = browserGallery.panImage.posX + "px";
	browserGallery.panImage.ID.style.top = browserGallery.panImage.posY + "px";

	setZoomSlider(0);
}

function zoomControlsHover(event)
{
	if (!event) var event = window.event;

	browserGallery.zoomLinks.fadeIgnore = true;
	showZoomControls();
}

function zoomControlsLeave(event)
{
	if (!event) var event = window.event;

	browserGallery.zoomLinks.fadeIgnore = false;
	hideZoomControls();
}

function showZoomControls(fade)
{
	if (browserGallery.zoomLinks.fadeTimeout != null)
	{
		clearTimeout(browserGallery.zoomLinks.fadeTimeout);
		browserGallery.zoomLinks.fadeTimeout = null;
	}

	if (browserGallery.zoomLinks.fadeInterval != null)
	{
		clearInterval(browserGallery.zoomLinks.fadeInterval);
		browserGallery.zoomLinks.fadeInterval = null;
	}

	browserGallery.zoomLinks.zoomBox.style.opacity = "1";
	browserGallery.zoomLinks.zoomBox.style.filter = "alpha(opacity=100)";

	if (!browserGallery.zoomLinks.fadeIgnore)
		browserGallery.zoomLinks.fadeTimeout = setTimeout("hideZoomControls()", 750);
}


function hideZoomControls()
{
	if (browserGallery.zoomLinks.fadeTimeout != null)
	{
		clearTimeout(browserGallery.zoomLinks.fadeTimeout);
		browserGallery.zoomLinks.fadeTimeout = null;
	}

	if (browserGallery.zoomLinks.fadeInterval != null)
	{
		clearInterval(browserGallery.zoomLinks.fadeInterval);
		browserGallery.zoomLinks.fadeInterval = null;
	}

	if (!event) var event = window.event;
	browserGallery.zoomLinks.fadeInterval = setInterval("fadeZoomControls()", 20);
}

function fadeZoomControls()
{
	var opacity = parseFloat(browserGallery.zoomLinks.zoomBox.style.opacity);
	if (typeof(opacity) != "number")
		opacity = 1;

	opacity = opacity - 0.025;

	if (opacity < 0.3)
		opacity = 0.3;

	browserGallery.zoomLinks.zoomBox.style.opacity = opacity;
	browserGallery.zoomLinks.zoomBox.style.filter = "alpha(opacity=" + opacity * 100 + ")";

	if (opacity <= 0.3)
	{
		clearInterval(browserGallery.zoomLinks.fadeInterval);
		browserGallery.zoomLinks.fadeInterval = null;
	}
}

function zoomIn(event)
{
	if (!event) var event = window.event;

	showZoomControls();
	zoomToStep(currentZoomStep() + 1);

	return false;
}

function zoomOut(event)
{
	if (!event) var event = window.event;

	showZoomControls();
	zoomToStep(currentZoomStep() - 1);

	return false;
}

function zoomToStep(step, point)
{
	var currentRatio = photoList[currentPhoto].width / browserGallery.panImage.width;

	browserGallery.zoomStep = step;
	if (browserGallery.zoomStep < 0)
		browserGallery.zoomStep = 0;
	if (browserGallery.zoomStep > browserGallery.zoomSteps)
		browserGallery.zoomStep = browserGallery.zoomSteps;
	var newRatio = getZoomRatio(browserGallery.zoomStep);
	if (newRatio <= 1)
		newRatio = 1;

	var newWidth = photoList[currentPhoto].width / newRatio;
	var newHeight = photoList[currentPhoto].height / newRatio;


	if (newWidth < (browserGallery.panFrame.width - 20) && newHeight < (browserGallery.panFrame.height - 20))
	{
		fitImage();
		setZoomLinks();
		return;
	}


	browserGallery.panImage.width = newWidth;
	browserGallery.panImage.height = newHeight;
	browserGallery.panImage.ID.style.width = browserGallery.panImage.width + "px";
	browserGallery.panImage.ID.style.height = browserGallery.panImage.height + "px";

	var frameX;
	var frameY;
	var xNew;
	var yNew;

	if (point != null)
	{
		var offsets = rootOffset(browserGallery.panFrame.ID);

		var frameOffsetX = offsets[0];
		var frameOffsetY = offsets[1];

		var frameX = (point.x - frameOffsetX);
		var frameY = (point.y - frameOffsetY);
	}
	else
	{
		frameX = browserGallery.panFrame.width / 2;
		frameY = browserGallery.panFrame.height / 2;
	}

	xNew = frameX - (((frameX - browserGallery.panImage.posX) * currentRatio) / newRatio);
	yNew = frameY - (((frameY - browserGallery.panImage.posY) * currentRatio) / newRatio);

	if (browserGallery.panImage.width < browserGallery.panFrame.width)
		xNew = (browserGallery.panFrame.width / 2) - (browserGallery.panImage.width / 2) - 1; // - 1 for border
	else if (xNew > 10)
		xNew = 10;
	else if (xNew < (browserGallery.panFrame.width - browserGallery.panImage.width) - 10)
		xNew = (browserGallery.panFrame.width - browserGallery.panImage.width) - 10;

	if (browserGallery.panImage.height < browserGallery.panFrame.height)
		yNew = (browserGallery.panFrame.height / 2) - (browserGallery.panImage.height / 2) - 1; // - 1 for border
	else if (yNew > 10)
		yNew = 10;
	else if (yNew < (browserGallery.panFrame.height - browserGallery.panImage.height) - 10)
		yNew = (browserGallery.panFrame.height - browserGallery.panImage.height) - 10;

	browserGallery.panImage.ID.style.left = xNew + "px";
	browserGallery.panImage.ID.style.top = yNew + "px";
	browserGallery.panImage.posX = xNew;
	browserGallery.panImage.posY = yNew;

	setZoomSlider(browserGallery.zoomStep);
	setZoomLinks();
	browserUpdateSpinner();
}

function zoomToBar(event)
{
	zoomToStep(this.zoomStep);
}

function zoomSliderDragStart(event)
{
	if (!event) var event = window.event;

	if (event.button != 2) // not right mouse button
	{
		showZoomControls();

		browserGallery.zoomLinks.zoomSlider.mouseY = event.clientY;
		browserGallery.zoomLinks.zoomSlider.originalStep = currentZoomStep();

		document.onmouseup = zoomSliderDragEnd;
		document.onmousemove = zoomSliderDragMove;
	}

	return false;
}

function zoomSliderDragMove(event)
{
	if (!event) var event = window.event;

	showZoomControls();

	var yDif = browserGallery.zoomLinks.zoomSlider.mouseY - event.clientY;
	var stepDiff = Math.round(yDif / 9);
	var stepOriginal = browserGallery.zoomLinks.zoomSlider.originalStep;
	var stepNew = stepOriginal + stepDiff;

	if (stepNew != currentZoomStep())
		zoomToStep(stepNew);

	return false;
}

function zoomSliderDragEnd(event)
{
	if (!event) var event = window.event;

	showZoomControls();

	document.onmousemove = null;
	return true;
}

function createZoomLinks()
{
	for (var i=0 ; i < 15 ; i++)
	{
		if (i <= browserGallery.zoomSteps)
			browserGallery.zoomLinks.zoomBar[i].style.display = "block";
		else
			browserGallery.zoomLinks.zoomBar[i].style.display = "none";
	}

	browserGallery.zoomLinks.barSegments = browserGallery.zoomSteps + 1;
}

function setZoomLinks()
{
	var zoomIn = true;
	var zoomOut = true;
	if (browserGallery.panImage.width <= (browserGallery.panFrame.width - 19) && browserGallery.panImage.height <= (browserGallery.panFrame.height - 19))
	{
		zoomOut = false;
		disableZoomLink(browserGallery.zoomLinks.zoomOut);
		if (!(IE && IE <= 5.5))
		{
			browserGallery.panFrame.ID.style.cursor = cursorStyle.normal;
			browserGallery.panFrame.overBorder.style.cursor = cursorStyle.normal;
		}
		browserGallery.panFrame.ID.onmousedown = eventDisable;
		browserGallery.panFrame.overBorder.onmousedown = eventDisable;
	}
	else
	{
		enableZoomLink(browserGallery.zoomLinks.zoomOut);
		if (!(IE && IE <= 5.5))
		{
			browserGallery.panFrame.ID.style.cursor = cursorStyle.grab;
			browserGallery.panFrame.overBorder.style.cursor = cursorStyle.grab;
		}
		browserGallery.panFrame.ID.onmousedown = dragImageStart;
		browserGallery.panFrame.overBorder.onmousedown = dragImageStart;
	}

	if (browserGallery.panImage.width >= photoList[currentPhoto].width || browserGallery.panImage.height >= photoList[currentPhoto].height)
	{
		zoomIn = false;
		disableZoomLink(browserGallery.zoomLinks.zoomIn);
	}
	else
		enableZoomLink(browserGallery.zoomLinks.zoomIn);

	if (zoomIn || zoomOut)
		browserGallery.zoomLinks.zoomBox.style.visibility = "inherit";
	else
		browserGallery.zoomLinks.zoomBox.style.visibility = "hidden";

}

function enableZoomLink(link)
{
	if (link)
		link.style.color = "blue";
}

function disableZoomLink(link)
{
	if (link)
		link.style.color = "gray";
}

function setZoomSlider(step)
{
	browserGallery.zoomLinks.zoomSlider.style.bottom = 19 + (9 * step) + 1 + "px";
}

function getZoomRatio(step)
{
	if (step < 0)
		step = 0;
	if (step > browserGallery.zoomSteps)
		step = browserGallery.zoomSteps;

	var minWidth = browserGallery.panFrame.width - 20;
	var minHeight = browserGallery.panFrame.height - 20;

	var minSize;
	var maxSize;

	if (photoList[currentPhoto].width / minWidth > photoList[currentPhoto].height / minHeight )
	{
		minSize = minWidth;
		maxSize = photoList[currentPhoto].width;
	}
	else
	{
		minSize = minHeight;
		maxSize = photoList[currentPhoto].height;
	}

	if (step >= browserGallery.zoomSteps)
		return 1;
	else
		return maxSize / (minSize * Math.pow(1.4, step));
}

function currentZoomStep()
{
	var minWidth = browserGallery.panFrame.width - 20;
	var minHeight = browserGallery.panFrame.height - 20;

	var minSize;
	var currentSize;

	if (photoList[currentPhoto].width / minWidth > photoList[currentPhoto].height / minHeight)
	{
		minSize = minWidth;
		currentSize = browserGallery.panImage.width;
	}
	else
	{
		minSize = minHeight;
		currentSize = browserGallery.panImage.height;
	}

	return Math.round(Math.log(currentSize/minSize) / Math.log(1.4));
}

function setZoomSteps()
{
	var minWidth = browserGallery.panFrame.width - 20;
	var minHeight = browserGallery.panFrame.height - 20;

	var minSize;
	var maxSize;

	if (photoList[currentPhoto].width / minWidth > photoList[currentPhoto].height / minHeight )
	{
		minSize = minWidth;
		maxSize = photoList[currentPhoto].width;
	}
	else
	{
		minSize = minHeight;
		maxSize = photoList[currentPhoto].height;
	}

	var oldSteps = browserGallery.zoomSteps;
	browserGallery.zoomSteps = Math.round(Math.log(maxSize/minSize) / Math.log(1.4));

	if (browserGallery.zoomSteps != oldSteps)
		createZoomLinks();
}

function zoomWheel(event)
{
	if (!event) var event = window.event;

	var delta = 0;
	if (event.wheelDelta)
	{
		delta = event.wheelDelta;
		if (window.opera)
			delta = -delta;
	}
	else if (event.detail)
		delta = -event.detail;


	var point;
	if (this == browserGallery.panFrame.ID || this == browserGallery.panFrame.overBorder)
		var point = new Point(event.clientX, event.clientY);
	else
		point = null;

	var newStep;
	if (delta < 0) // down
		newStep = currentZoomStep() - 1;
	else if (delta > 0) // up
		newStep = currentZoomStep() + 1;
	else
		return;

	if (newStep >= 0 && newStep <= browserGallery.zoomSteps)
		showZoomControls();

	zoomToStep(newStep, point);

	return false;
}

function browserUpdateSpinner()
{

	if (browserGallery.zoomStep > 0)
	{
		browserGallery.panImage.spinner.style.top = "1px";
		browserGallery.panImage.spinner.style.left = "25px";
	}
	else
	{
		var top = browserGallery.panImage.ID.offsetTop - 9;
		var left = browserGallery.panImage.ID.offsetLeft - 9;

		if (left < browserGallery.zoomLinks.zoomBox.offsetLeft + browserGallery.zoomLinks.zoomBox.offsetWidth + 2 &&
			top < browserGallery.zoomLinks.zoomBox.offsetTop + browserGallery.zoomLinks.zoomBox.offsetHeight)
		{
			left = 25;
		}

		browserGallery.panImage.spinner.style.top = top + "px";
		browserGallery.panImage.spinner.style.left = left + "px";
	}

	browserGallery.panImage.spinner.thingy = "browser";

	if (fullscreenOverlay.container.style.display == "none" &&
		browserGallery.panImage.loadedHeight < browserGallery.panImage.ID.height)
		showSpinner(browserGallery.panImage.spinner.id);
	else
		hideSpinner(browserGallery.panImage.spinner.id);
}

function fullscreenUpdateSpinner()
{
	var location = rootOffset(fullscreenOverlay.image);

	fullscreenOverlay.spinner.style.top = location[1] - 11 + "px";
	fullscreenOverlay.spinner.style.left = location[0] - 11 + "px";

	fullscreenOverlay.spinner.thingy = "overlay";

	if (fullscreenOverlay.container.style.display != "none" &&
		(fullscreenOverlay.image.height == 0 || fullscreenOverlay.image.loadedHeight < fullscreenOverlay.image.height))
		showSpinner(fullscreenOverlay.spinner.id);
	else
		hideSpinner(fullscreenOverlay.spinner.id);
}

function showSpinner(spinnerID)
{
	spinner = document.getElementById(spinnerID);
	spinner.style.visibility = "inherit";
	spinner.style.display = "block";

	if (spinner.interval)
	{
		if (spinner.step == undefined)
			spinner.step = 0;
		else
		{
			spinner.step++;
			if (spinner.step > 11)
				spinner.step = 0
		}

		spinner.style.clip = "rect(" + (spinner.step * 24) + "px, 24px, " + ((spinner.step * 24) + 24) + "px, 0px)";
		spinner.style.marginTop = "-" + (spinner.step * 24) + "px";
	}
	else
		spinner.interval = setInterval("showSpinner('" + spinnerID + "', true)", 150);
}

function hideSpinner(spinnerID)
{
	spinner = document.getElementById(spinnerID);
	if (spinner.interval)
	{
		clearInterval(spinner.interval);
		spinner.interval = null;
	}
	spinner.style.visibility = "hidden";
	spinner.style.display = "none";
}


function rootOffset(obj)
{
	var left = 0;
	var top = 0;

	if (obj.offsetParent)
	{
		do
		{
			left += obj.offsetLeft;
			top += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}

	return [left, top];
}

function galleryResizeStart(event)
{
	if (!event) var event = window.event;

	if (event.button != 2) // not right mouse button
	{
		browserGallery.dividerHandle.resizing = true;

		browserGallery.dividerHandle.startPosition = browserGallery.dividerHandle.gallery.offsetWidth;
		browserGallery.dividerHandle.mouseX = event.clientX;

		browserGallery.dividerHandle.shadow.style.right = "4px";
		browserGallery.dividerHandle.shadow.style.visibility = "inherit";

		if (!(IE && IE <= 5.5))
			document.body.style.cursor = "col-resize";

		document.onmouseup = galleryResizeEnd;
		document.onmousemove = galleryResizeMove;
		return false;
	}

	return true;
}

function galleryResizeMove(event)
{
	if (!event) var event = window.event;

	var xDif = event.clientX - browserGallery.dividerHandle.mouseX;

	setGalleryWidth(browserGallery.dividerHandle.startPosition + xDif);

	browserGallery.dividerHandle.shadow.style.right = (4 + (browserGallery.dividerHandle.position - browserGallery.dividerHandle.startPosition)) - xDif + "px";

	return false;
}

function galleryResizeEnd(event)
{
	if (!event) var event = window.event;

	browserGallery.dividerHandle.resizing = false;

	if (!(IE && IE <= 5.5))
		document.body.style.cursor = cursorStyle.normal;
	browserGallery.dividerHandle.shadow.style.visibility = "hidden";

	document.onmousemove = null;
	return true;
}

function setGalleryWidth(newWidth)
{
	if (newWidth > document.body.offsetWidth - 250)
		newWidth = document.body.offsetWidth - 250;

	if (newWidth < 180)
		newWidth = 180;

	if (newWidth < browserGallery.dividerHandle.position)
		newWidth = (Math.ceil((newWidth - 48) / 132) * 132) + 48;
	else
		newWidth = (Math.floor((newWidth - 48) / 132) * 132) + 48;


	if (newWidth != browserGallery.dividerHandle.position)
	{
		browserGallery.dividerHandle.gallery.style.width = newWidth + "px";
		browserGallery.dividerHandle.viewer.style.marginLeft = newWidth + "px";
		browserGallery.dividerHandle.position = newWidth;

		createCookie("photoViewerGalleryWidth", newWidth, 90);

		resizeBrowserFrame();
	}

}

function scrollGalleryUp(distance)
{
	if (!parseInt(distance))
		distance = 10;

	scrollGalleryToLocation((browserGallery.galleryBox.superFrame.offsetTop - 20) + distance);
}

function scrollGalleryDown(distance)
{
	if (!parseInt(distance))
		distance = 10;

	scrollGalleryToLocation((browserGallery.galleryBox.superFrame.offsetTop - 20) - distance);
}

function scrollGalleryPageUp()
{
	scrollGalleryUp(browserGallery.galleryBox.scrollFrame.offsetHeight - 40);
}

function scrollGalleryPageDown()
{
	scrollGalleryDown(browserGallery.galleryBox.scrollFrame.offsetHeight - 40);
}

function scrollGalleryToLocation(newLocation)
{
	if (browserGallery.galleryBox.scrollFrame.className == "scrollable")
	{
		var maxGalleryTop = (browserGallery.galleryBox.scrollFrame.offsetHeight - 40) - browserGallery.galleryBox.superFrame.offsetHeight;

		if (newLocation < maxGalleryTop)
		{
			browserGallery.galleryScrollArrowDown.style.visibility = "hidden";
			newLocation = maxGalleryTop;
		}
		else
		{
			browserGallery.galleryScrollArrowDown.style.visibility = "inherit";
		}

		if (newLocation >= 0)
		{
			browserGallery.galleryScrollArrowUp.style.visibility = "hidden";
			newLocation = 0;
		}
		else
		{
			browserGallery.galleryScrollArrowUp.style.visibility = "inherit";
		}

		if (newLocation != (browserGallery.galleryBox.superFrame.offsetTop - 20))
		{
			browserGallery.galleryBox.superFrame.style.top = newLocation + "px";
			galleryScrollBarSetThumb();
		}

		cancelGalleryOverlayDelayTimer(true);
		loadBrowserThumbs();
	}
}

function scrollGalleryUpStart(event)
{
	if (!event) var event = window.event;

	scrollGalleryUp();
	browserGallery.scrollGalleryUpTimer = setInterval("scrollGalleryUp(15)", 100);

	this.onmouseout = scrollGalleryUpEnd;

	return false;
}

function scrollGalleryUpEnd(event)
{
	if (!event) var event = window.event;

	clearInterval(browserGallery.scrollGalleryUpTimer);

	this.onmouseout = null;

	return false;
}

function scrollGalleryUpClick(event)
{
	if (!event) var event = window.event;

	scrollGalleryUp(50);
	scrollGalleryUpEnd();
	return false;
}

function scrollGalleryDownStart(event)
{
	if (!event) var event = window.event;

	scrollGalleryDown();
	browserGallery.scrollGalleryDownTimer = setInterval("scrollGalleryDown(15)", 100);

	this.onmouseout = scrollGalleryDownEnd;

	return false;
}

function scrollGalleryDownEnd(event)
{
	if (!event) var event = window.event;

	clearInterval(browserGallery.scrollGalleryDownTimer);

	this.onmouseout = null;

	return false;
}

function scrollGalleryDownClick(event)
{
	if (!event) var event = window.event;

	scrollGalleryDown(50);
	scrollGalleryDownEnd();
	return false;
}

function galleryScrollWheel(event)
{
	if (!event) var event = window.event;

	var delta = 0;
	if (event.wheelDelta)
	{
		delta = event.wheelDelta / 120;
		if (window.opera)
			delta = -delta;
	}
	else if (event.detail)
		delta = -event.detail/3;

	if (delta > 0)
		scrollGalleryUp(25 * delta);
	else
		scrollGalleryDown(25 * -delta);

	return false;
}

function galleryCenterSelected(smooth)
{
	if (browserGallery.galleryBox.superFrame.offsetHeight > browserGallery.galleryBox.scrollFrame.offsetHeight)
	{
		var scrollCenter = (browserGallery.galleryBox.scrollFrame.offsetHeight - 40) / 2;
		var thumbCenter = browserGallery.galleryBox.thumbBoxes[currentPhoto].offsetHeight / 2 + browserGallery.galleryBox.thumbBoxes[currentPhoto].offsetTop;

		var newGalleryTop =  Math.round(scrollCenter - thumbCenter);

		if (newGalleryTop != (browserGallery.galleryBox.superFrame.offsetTop - 20))
		{
			if (smooth)
				gallerySmoothScroll(newGalleryTop);
			else
				scrollGalleryToLocation(newGalleryTop);
		}
	}
}

function gallerySmoothScroll(location)
{
	function timerObj (location)
	{
		this.location = location;

		var timeout;

		this.beginTimeout = function(interval)
		{
			timeout = setTimeout(timoutFunc, interval);
		}

		this.cancelTimeout = function()
		{
			clearTimeout(timeout);
		}

		function timoutFunc()
		{
			scrollGalleryToLocation(location);
		}
	}

	if (browserGallery.gallerySmoothScrollTimers != null && browserGallery.gallerySmoothScrollTimers.length)
	{
		for (var i = 0 ; i < browserGallery.gallerySmoothScrollTimers.length; i++)
			browserGallery.gallerySmoothScrollTimers[i].cancelTimeout;
		browserGallery.gallerySmoothScrollTimers = null;
	}

	var oldLocation;
	if (browserGallery.galleryBox.superFrame.style.top)
		oldLocation = parseInt(browserGallery.galleryBox.superFrame.style.top);
	else
		oldLocation = 0;

	var delta = location - oldLocation;
	var step = delta / 5;

	browserGallery.gallerySmoothScrollTimers = new Array();
	var i;
	for (i=0 ; i < 5 ; i++)
	{
		browserGallery.gallerySmoothScrollTimers[i] = new timerObj(oldLocation + (step * (i + 1)));
		browserGallery.gallerySmoothScrollTimers[i].beginTimeout(100 * i);
	}
	browserGallery.gallerySmoothScrollTimers[i] = setTimeout("browserGallery.gallerySmoothScrollTimers = null", 100 * (i - 1))
}

function galleryScrollBarSetThumb()
{
	var thumbHeight = ((browserGallery.galleryBox.scrollFrame.offsetHeight - 40)/ browserGallery.galleryBox.superFrame.offsetHeight) * (browserGallery.galleryScrollBar.bar.offsetHeight - 4);
	if (thumbHeight > browserGallery.galleryScrollBar.bar.offsetHeight)
		thumbHeight = browserGallery.galleryScrollBar.bar.offsetHeight;

	var thumbTop = ((browserGallery.galleryBox.superFrame.offsetTop - 20) / browserGallery.galleryBox.superFrame.offsetHeight) * (browserGallery.galleryScrollBar.bar.offsetHeight - 4);


	browserGallery.galleryScrollBar.thumb.style.height = thumbHeight + "px";
	browserGallery.galleryScrollBar.thumb.style.top = -thumbTop + "px";
}

function galleryScrollBarOnClick(event)
{
	if (!event) var event = window.event;

	var barLocation = rootOffset(browserGallery.galleryScrollBar.bar);

	var troughLeft = barLocation[0] + 2;
	var troughRight = barLocation[0] + browserGallery.galleryScrollBar.bar.offsetWidth - 2;

	var upperTroughTop = barLocation[1] + 2;
	var upperTroughBottom = barLocation[1] + browserGallery.galleryScrollBar.thumb.offsetTop + 2;

	var lowerTroughTop = barLocation[1] + browserGallery.galleryScrollBar.thumb.offsetTop + browserGallery.galleryScrollBar.thumb.offsetHeight + 2;
	var lowerTroughBottom = barLocation[1] + browserGallery.galleryScrollBar.bar.offsetHeight - 2;

	if (event.clientX >= troughLeft && event.clientX <= troughRight)
	{
		if (event.clientY >= upperTroughTop && event.clientY <= upperTroughBottom)
			scrollGalleryPageUp();
		else if (event.clientY >= lowerTroughTop && event.clientY <= lowerTroughBottom)
			scrollGalleryPageDown();
	}
	return false;
}

function galleryScrollBarDragStart(event)
{
	if (!event) var event = window.event;

		browserGallery.galleryScrollBar.thumb.oldGalleryTop = (browserGallery.galleryBox.superFrame.offsetTop - 20);
		browserGallery.galleryScrollBar.thumb.mouseY = event.clientY;

		document.onmouseup = galleryScrollBarDragEnd;
		document.onmousemove = galleryScrollBarDragMove;

		return false;
}

function galleryScrollBarDragMove(event)
{
	if (!event) var event = window.event;

	var diff = ((event.clientY - browserGallery.galleryScrollBar.thumb.mouseY) / (browserGallery.galleryScrollBar.bar.offsetHeight - 4)) * browserGallery.galleryBox.superFrame.offsetHeight;

	scrollGalleryToLocation(browserGallery.galleryScrollBar.thumb.oldGalleryTop - diff);
}

function galleryScrollBarDragEnd(event)
{
	if (!event) var event = window.event;

	document.onmousemove = null;

	return true;
}


function getNumberOfThumbColumns()
{
	return Math.floor(browserGallery.galleryBox.superFrame.offsetWidth / (browserGallery.galleryBox.thumbBoxes[browserGallery.galleryBox.thumbBoxes.length - 1].offsetWidth + 2)); // 2 for margins
}

function showPrevButtons(show)
{
	var visibility = "inherit";
	var display = "block";
	var opacity = 1;
	if (!show) // if show is false or not set
	{
		visibility = "hidden";
		display = "none";
		opacity = 0.2;
	}

	browserGallery.navArrows.prev.style.visibility = visibility;
	fullscreenOverlay.prev.style.visibility = visibility;
}

function showNextButtons(show)
{
	var visibility = "inherit";
	var display = "block";
	var opacity = 1;
	if (!show) // if show is false or not set
	{
		visibility = "hidden";
		display = "none";
		opacity = 0.2;
	}

	browserGallery.navArrows.next.style.visibility = visibility;
	fullscreenOverlay.next.style.visibility = visibility;
}

function selectPreviousImage()
{
	if (currentPhoto != undefined && currentPhoto > 0)
	{
		switchImage(currentPhoto - 1);
		updateURL(true);
	}
}

function selectNextImage()
{
	if (currentPhoto != undefined && currentPhoto < photoList.length - 1)
	{
		switchImage(currentPhoto + 1);
		updateURL(true);
	}
}

function selectUpImage()
{
	var newImage = currentPhoto - getNumberOfThumbColumns();
	if (currentPhoto != undefined && newImage >= 0)
	{
		switchImage(newImage);
		updateURL(true);
	}
}

function selectDownImage()
{
	var newImage = currentPhoto + getNumberOfThumbColumns();
	if (currentPhoto != undefined && newImage < photoList.length)
	{
		switchImage(newImage);
		updateURL(true);
	}
}


function thumbGalleryThumbClick()
{
	if (thumbGallery.currentOverlay != null)
		thumbGallery.galleryBox.thumbBoxes[thumbGallery.currentOverlay].overlay.style.visibility = "hidden";

	var number;
	if (this.thumbBox)
		number = this.thumbBox.number;
	else
		number = this.number;
	switchImage(number);
	fullscreenOverlayOpen();
	return false;
}

function thumbGalleryThumbHover()
{
	if (thumbGallery.currentOverlay != null)
		thumbGallery.galleryBox.thumbBoxes[thumbGallery.currentOverlay].overlay.style.visibility = "hidden";

	var photoNumber = this.number;
	var thumbPos = rootOffset(thumbGallery.galleryBox.thumbBoxes[this.number]);
	var newTop = thumbPos[1] - ((thumbGallery.galleryBox.thumbBoxes[this.number].overlay.offsetHeight - thumbGallery.galleryBox.thumbBoxes[this.number].offsetHeight) / 2)
	var newLeft = thumbPos[0] - ((thumbGallery.galleryBox.thumbBoxes[this.number].overlay.offsetWidth - thumbGallery.galleryBox.thumbBoxes[this.number].offsetWidth) / 2)

	var scrollTop = document.body.scrollTop + document.documentElement.scrollTop;
	if ((thumbPos[1] > scrollTop - (thumbGallery.galleryBox.thumbBoxes[this.number].offsetHeight * 0.33)) &&
		(thumbPos[1] < (scrollTop + document.body.clientHeight) - (thumbGallery.galleryBox.thumbBoxes[this.number].offsetHeight * 0.66)))
	{
		if (newTop < scrollTop)
			newTop = scrollTop;

		if (newTop > scrollTop + document.body.clientHeight - this.overlay.offsetHeight)
			newTop = scrollTop + document.body.clientHeight - this.overlay.offsetHeight;

		this.overlay.style.top = newTop + "px";
		this.overlay.style.left = newLeft + "px";

		this.overlay.style.visibility = "inherit";
		thumbGallery.currentOverlay = this.number
	}
}

function thumbGalleryThumbLeave()
{
	if (!event) var event = window.event;

	var mouseX = 0;
	var mouseY = 0;

	if (event.pageX || event.pageY)
	{
		mouseX = event.pageX;
		mouseY = event.pageY;
	}
	else if (event.clientX || event.clientY)
	{
		mouseX = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		mouseY = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	var location = rootOffset(this);

	if (event.mouseX < location[0] ||
		event.mouseX >= (location[0] + this.offsetWidth) ||
		event.mouseY < location[1] ||
		event.mouseY >= (location[1] + this.offsetHeight))
	{
		this.style.visibility = "hidden";
		thumbGallery.currentOverlay = null;
	}
}

function thumbGalleryScroll(event)
{
	if (!event) var event = window.event;

	var scrollPosition = (window.pageYOffset != undefined) ? window.pageYOffset : document.body.scrollTop + document.documentElement.scrollTop;

	if (!smallScreen && (IE == null || IE >=7) &&
		scrollPosition >= modeButton.box.originalOffset + 4)
	{
		modeButton.box.className = "fixed";
		var top = document.getElementById("header").offsetHeight - scrollPosition;
		if (top < 0)
			top = 0;
		modeButton.box.style.top = top + "px";
	}
	else
	{
		modeButton.box.className = null;
		modeButton.box.style.top = modeButton.box.originalTop + "px";
	}

	currentPhoto = thumbGalleryCenterPhoto();
	loadThumbThumbs();
}

function thumbGalleryScrollToPhoto(index, center)
{
	var location = rootOffset(thumbGallery.galleryBox.thumbBoxes[index]);
	var position = center ? (document.body.clientHeight - thumbGallery.galleryBox.thumbBoxes[index].offsetHeight) / 2 : document.getElementById("header").offsetHeight + 10;
	window.scrollTo(0, location[1] - position);
	thumbGalleryScroll();
}

function thumbGalleryCenterPhoto()
{
	var columns = Math.floor(thumbGallery.galleryBox.box.offsetWidth / (thumbGallery.galleryBox.thumbBoxes[0].offsetWidth));
	var rows = Math.floor(document.body.clientHeight / (thumbGallery.galleryBox.thumbBoxes[0].offsetHeight));
	var visible = columns * rows;
	var scrollPosition;
	if (window.pageYOffset != undefined)
		scrollPosition = window.pageYOffset;
	else
		scrollPosition = document.body.scrollTop + document.documentElement.scrollTop;

	var centerPhoto = Math.round((((scrollPosition - document.getElementById("header").offsetHeight) / thumbGallery.galleryBox.thumbBoxes[0].offsetHeight) * columns) + (visible / 2));
	if (centerPhoto < 0)
		centerPhoto = 0;
	if (centerPhoto >= photoList.length)
		centerPhoto = photoList.length - 1;

	return centerPhoto;
}

function thumbGalleryTopPhoto()
{
	var columns = Math.floor(thumbGallery.galleryBox.box.offsetWidth / (thumbGallery.galleryBox.thumbBoxes[0].offsetWidth));
	var scrollPosition = (window.pageYOffset != undefined) ? window.pageYOffset : document.body.scrollTop + document.documentElement.scrollTop;
	var row = Math.ceil((scrollPosition - document.getElementById("header").offsetHeight) / (thumbGallery.galleryBox.thumbBoxes[0].offsetHeight + 6));
	if (row < 0)
		row = 0;

	return result = row * columns;
}

function parseURL()
{
	var tempURL = new Object();
	if (window.location.hash)
	{
		var decodedHash = decodeURI(window.location.hash);

		if (decodedHash.search('^#B[^_]*') == 0)
			tempURL.galleryStyle = "browser";
		else if (decodedHash.search('^#G[^_]*') == 0)
			tempURL.galleryStyle = "thumbnail";

		if (decodedHash.search('^#[BG]?[^_]*F[^_]*') == 0)
			tempURL.fullscreen = true;

		if (decodedHash.search('^#[BG]?[^_]*N[^_]*') == 0)
		{
			tempURL.sortPhotoMode = "name";
			tempURL.sortPhotoDir = 'ASC';
		}
		else if (decodedHash.search('^#[BG]?[^_]*n[^_]*') == 0)
		{
			tempURL.sortPhotoMode = "name";
			tempURL.sortPhotoDir = 'DSC';
		}
		else if (decodedHash.search('^#[BG]?[^_]*T[^_]*') == 0)
		{
			tempURL.sortPhotoMode = "time";
			tempURL.sortPhotoDir = 'ASC';
		}
		else if (decodedHash.search('^#[BG]?[^_]*t[^_]*') == 0)
		{
			tempURL.sortPhotoMode = "time";
			tempURL.sortPhotoDir = 'DSC';
		}

		if (decodedHash.indexOf('_') != -1)
			tempURL.photoID = decodedHash.substring(decodedHash.indexOf("_") + 1, decodedHash.length);

		tempURL.hash = decodedHash;

		return tempURL;
	}
	else
		return null;
}

function updateURL(history)
{
	var photoNumber = null;
	var hashRef = "";
	if (galleryStyle == "browser")
	{
		hashRef = "B";
		URL.galleryStyle = "browser";
		URL.fullscreen = false;
		photoNumber = currentPhoto;
	}
	else if (galleryStyle == "thumbnail")
	{
		hashRef = "G";
		URL.galleryStyle = "thumbnail";
		URL.fullscreen = false;
//		photoNumber = thumbGalleryTopPhoto();
//		photoNumber = currentPhoto;
	}

	if (sortPhotoMode == "name")
	{
		if (sortPhotoDir == "ASC")
			hashRef += "N";
		else if (sortPhotoDir == "DSC")
			hashRef += "n";
	}
	else if (sortPhotoMode == "time")
	{
		if (sortPhotoDir == "ASC")
			hashRef += "T";
		else if (sortPhotoDir == "DSC")
			hashRef += "t";
	}
	URL.sortPhotoMode = sortPhotoMode;
	URL.sortPhotoDir = sortPhotoDir;

	if (sortCatMode == "name")
	{
		if (sortCatDir == "ASC")
			hashRef += "C";
		else if (sortCatDir == "DSC")
			hashRef += "c";
	}
	else if (sortCatMode == "time")
	{
		if (sortCatDir == "ASC")
			hashRef += "D";
		else if (sortCatDir == "DSC")
			hashRef += "d";
	}
	URL.sortCatMode = sortCatMode;
	URL.sortCatDir = sortCatDir;

	if (fullscreenOverlay.container.style.display == "block")
	{
		hashRef += "F";
		URL.fullscreen = true;
		photoNumber = currentPhoto;
	}


	if (photoNumber != null)
		hashRef += "_" + photoList[photoNumber].filename;
	var newURL = document.location.protocol + "//" + document.location.host + document.location.pathname + document.location.search + "#" + hashRef;

	URL.ignoreChange = true;
	URL.hash = "#" + hashRef;

	if (history == true)
	{
		if (IE && IE >= 5.5 && IE <= 7.0)
		{
			hashHack.src = siteURL + "naviframe.php?" + hashRef;
			window.location.assign(newURL);
			setTimeout("URL.ignoreChange = false", 500);
		}
		else
		{
			window.location.assign(newURL);
			URL.ignoreChange = false;
		}
	}
	else
	{
 		if (IE && IE >= 5.5 && IE <= 7.0 && hashHack.src == "")
 			hashHack.src = siteURL + "naviframe.php?" + hashRef;;
		window.location.replace(newURL);
		URL.ignoreChange = false;
	}
}

function URLListener()
{
	var newHash = null;
	if (IE && IE >= 5.5 && IE <= 7.0)
	{
		newHash = hashHack.contentWindow.document.body.innerHTML.replace(/^\s+|[\s\n]+$/g,"");
		newHash = newHash ? "#" + newHash : null;
	}
	else
		newHash = window.location.hash;

	if (!URL.ignoreChange && newHash && newHash != URL.hash)
	{
		var decodedHash = decodeURI(newHash);
		var newStyle = null;
		var newFullscreen = null;
		var newPhotoID = null;

		if (decodedHash.search('^#B.?_') == 0)
			newStyle = "browser";
		else if (decodedHash.search('^#T.?_') == 0)
			newStyle = "thumbnail";

		if (decodedHash.search('^#.F_') == 0)
			newFullscreen = true;

		newPhotoID = decodedHash.substring(decodedHash.indexOf("_") + 1, decodedHash.length);

		if (newStyle == "browser")
		{
			if (galleryStyle != "browser")
				toggleGalleryMode("browser");
		}
		else if (newStyle == "thumbnail")
		{
			if (galleryStyle != "thumbnail")
				toggleGalleryMode("thumbnail");

			if (newPhotoID)
				thumbGalleryScrollToPhoto(photoIndexFromID(newPhotoID));
		}

		if (newPhotoID && newPhotoID != URL.PhotoID)
			switchImage(photoIndexFromID(newPhotoID));

		if (newFullscreen && fullscreenOverlay.container.style.display == "none")
			fullscreenOverlayOpen();
		else if (!newFullscreen && fullscreenOverlay.container.style.display != "none")
			fullscreenOverlayClose();

		if (IE && IE >= 5.5 && IE <= 7.0)
			updateURL(false);
	}
}

function fullscreenOverlayOpen()
{
	if (galleryStyle == "thumbnail")
	{
		if (window.pageYOffset != undefined)
			thumbGallery.scrollPosition = window.pageYOffset;
		else
			thumbGallery.scrollPosition = document.body.scrollTop + document.documentElement.scrollTop;

		if (!smallScreen)
		{
			superbody.style.top = -thumbGallery.scrollPosition + "px";
			clipbox.style.height = document.body.clientHeight + "px";
			clipbox.style.position = "fixed";
		}
	}

	document.title = photoList[currentPhoto].title + " - " + baseTitle;

	fullscreenOverlay.container.style.display = "block";
	fullscreenOverlay.container.style.visibility = "inherit";
	fullscreenUpdateSpinner();

	window.scrollTo(0, 0);
	updateURL(true);

	document.onkeydown = fullscreenOverlayParseKeyDown;

	return false;
}


function fullscreenOverlayClose()
{
	if (galleryStyle == "thumbnail")
	{
		if(!smallScreen)
		{
			superbody.style.top = "0";
			clipbox.style.height = "auto";
			clipbox.style.position = "relative";
		}
		window.scrollTo(0, thumbGallery.scrollPosition);
	}

	document.title = baseTitle;

	fullscreenOverlay.container.style.display = "none";
	updateURL(true);

	if (galleryStyle == "thumbnail")
	{
		thumbGalleryScrollToPhoto(currentPhoto, true);
		document.onkeydown = null;
	}
	else
		document.onkeydown = parseKeyDown;

	return false;
}

function fullscreenOverlayClick(event)
{ // catch if the double click originated outside the target element
	if (!event) var event = window.event;

	var oldClickTime = fullscreenOverlay.doubleClickStart;
	fullscreenOverlay.doubleClickStart = new Date().getTime();

	if ((fullscreenOverlay.doubleClickStart - oldClickTime) < 2000)
		fullscreenOverlay.clickCount++;
	else
		fullscreenOverlay.clickCount = 0;
}

function fullscreenOverlayDblClick(event)
{
	if (!event) var event = window.event;
	var currentTime = new Date().getTime();

	// mozilla and web kit fire a second click just before the dblclick event, so time diff will be 0 or 1ms, clickCount should be 1
	// if the first click originated in the target element.
	if ((currentTime - fullscreenOverlay.doubleClickStart > 2 && currentTime - fullscreenOverlay.doubleClickStart < 2000) ||
		fullscreenOverlay.clickCount > 0)
	{
		fullscreenOverlayClose();
		fullscreenOverlay.doubleClickStart = 0;
		fullscreenOverlay.clickCount = 0;
	}
}

function fullscreenOverlayFit()
{
	if (fullscreenOverlay.container.className == "fitAll")  // Toggle to fitWidth
	{
		fullscreenOverlay.container.className = "fitWidth";
		fullscreenOverlay.fitWidth.style.visibility = "hidden";
		fullscreenOverlay.fitAll.style.visibility = "inherit";
	}
	else
	{
		fullscreenOverlay.container.className = "fitAll";
		fullscreenOverlay.fitWidth.style.visibility = "inherit";
		fullscreenOverlay.fitAll.style.visibility = "hidden";
	}

	fullscreenUpdateSpinner();

	createCookie("photoViewerOverlayFit", fullscreenOverlay.container.className, 90);
}

function fullscreenOverlayPrev()
{
	if (typeof(fullscreenOverlay.previews[currentPhoto - 1]) != 'undefined')
		fullscreenOverlay.previews[currentPhoto - 1].style.visibility = "hidden";

	var prevPhoto = currentPhoto - 2;
	if (typeof(fullscreenOverlay.previews[prevPhoto]) != 'undefined')
	{
		fullscreenOverlay.previews[prevPhoto].className = "fullscreenPreviewPrev";
		fullscreenOverlay.previews[prevPhoto].style.visibility = fullscreenOverlay.prev.expanded.style.visibility;
	}

	if (typeof(fullscreenOverlay.previews[currentPhoto + 1]) != 'undefined')
		fullscreenOverlay.previews[currentPhoto + 1].style.visibility = "hidden";

	if (typeof(fullscreenOverlay.previews[currentPhoto]) != 'undefined')
	{
		fullscreenOverlay.previews[currentPhoto].className = "fullscreenPreviewNext";
		fullscreenOverlay.previews[currentPhoto].style.visibility = fullscreenOverlay.next.expanded.style.visibility;
	}


	selectPreviousImage();
	document.title = photoList[currentPhoto].title + " - " + baseTitle;
}

function fullscreenOverlayPrevShow()
{
	fullscreenOverlay.prev.expanded.style.visibility = "inherit";
	fullscreenOverlay.prev.collapsed.style.visibility = "hidden";

	var prevPhoto = currentPhoto - 1;
	if (fullscreenOverlay.previews[prevPhoto])
	{
		fullscreenOverlay.previews[prevPhoto].className = "fullscreenPreviewPrev";
		fullscreenOverlay.previews[prevPhoto].style.visibility = "inherit";
	}
}

function fullscreenOverlayPrevHide()
{
	fullscreenOverlay.prev.expanded.style.visibility = "hidden";
	fullscreenOverlay.prev.collapsed.style.visibility = "inherit";

	if (typeof(fullscreenOverlay.previews[currentPhoto - 1]) != 'undefined')
		fullscreenOverlay.previews[currentPhoto - 1].style.visibility = "hidden";
}

function fullscreenOverlayNext()
{
	if (typeof(fullscreenOverlay.previews[currentPhoto + 1]) != 'undefined')
		fullscreenOverlay.previews[currentPhoto + 1].style.visibility = "hidden";

	var nextPhoto = currentPhoto + 2;
	if (typeof(fullscreenOverlay.previews[nextPhoto]) != 'undefined')
	{
		fullscreenOverlay.previews[nextPhoto].className = "fullscreenPreviewNext";
		fullscreenOverlay.previews[nextPhoto].style.visibility = fullscreenOverlay.next.expanded.style.visibility;
	}

	if (typeof(fullscreenOverlay.previews[currentPhoto - 1]) != 'undefined')
		fullscreenOverlay.previews[currentPhoto - 1].style.visibility = "hidden";

	if (typeof(fullscreenOverlay.previews[currentPhoto]) != 'undefined')
	{
		fullscreenOverlay.previews[currentPhoto].className = "fullscreenPreviewPrev";
		fullscreenOverlay.previews[currentPhoto].style.visibility = fullscreenOverlay.prev.expanded.style.visibility;
	}


	selectNextImage();
	document.title = photoList[currentPhoto].title + " - " + baseTitle;
}

function fullscreenOverlayNextShow()
{
	fullscreenOverlay.next.expanded.style.visibility = "inherit";
	fullscreenOverlay.next.collapsed.style.visibility = "hidden";

	var nextPhoto = currentPhoto + 1;
	if (fullscreenOverlay.previews[nextPhoto])
	{
		fullscreenOverlay.previews[nextPhoto].className = "fullscreenPreviewNext";
		fullscreenOverlay.previews[nextPhoto].style.visibility = "inherit";
	}
}

function fullscreenOverlayNextHide()
{
	fullscreenOverlay.next.expanded.style.visibility = "hidden";
	fullscreenOverlay.next.collapsed.style.visibility = "inherit";

	if (typeof(fullscreenOverlay.previews[currentPhoto + 1]) != 'undefined')
		fullscreenOverlay.previews[currentPhoto + 1].style.visibility = "hidden";
}

function fullscreenOverlayParseKeyDown(event)
{
	if (!event) var event = window.event;

	switch (event.keyCode)
	{
		case 37: // Left Arrow
			fullscreenOverlayPrev();
			return false;
			break;

		case 39: // Right Arrow
			fullscreenOverlayNext();
			return false;
			break;

		case 32: // Space
		case 88: // X key
		case 27: // Esc key
			fullscreenOverlayClose();
			return false;
			break;
	}

	return true;
}

function fullscreenPreviewLeave(event)
{
	if (!event) var event = window.event;

}


function parseKeyDown(event)
{
	if (!event) var event = window.event;

	switch (event.keyCode)
	{
		case 32: // Space
			fullscreenOverlayOpen();
			return false;
			break;

		case 37: // Left Arrow
			selectPreviousImage();
			return false;
			break;

		case 38: // Up Arrow
			selectUpImage();
			return false;
			break;

		case 39: // Right Arrow
			selectNextImage();
			return false;
			break;

		case 40: // Down Arrow
			selectDownImage();
			return false;
			break;
	}

	return true;
}

// cookie functions courtesy of http://www.quirksmode.org/js/cookies.html
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


function IE_Size_Hacks()
{
	if (navigator.appName == 'Microsoft Internet Explorer')
	{
		var version  = parseFloat(RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent)[1]);
		if (version >= 5.5 && version <= 7.0)
		{
			fullscreenOverlay.container.style.width = "100%";
			fullscreenOverlay.close.style.setExpression("top", "IE_PositionFixedTop_Hack(0)");
			fullscreenOverlay.close.style.setExpression("right", "IE_PositionFixedRight_Hack(45)");
			fullscreenOverlay.fitWidth.style.setExpression("top", "IE_PositionFixedTop_Hack(0)");
			fullscreenOverlay.fitWidth.style.setExpression("right", "IE_PositionFixedRight_Hack(5)");
			fullscreenOverlay.fitAll.style.setExpression("top", "IE_PositionFixedTop_Hack(0)");
			fullscreenOverlay.fitAll.style.setExpression("right", "IE_PositionFixedRight_Hack(5)");
			fullscreenOverlay.prev.style.setExpression("top", "IE_PositionFixedTop_Hack(150)");
			fullscreenOverlay.prev.style.setExpression("left", "IE_PositionFixedLeft_Hack(0)");
			fullscreenOverlay.next.style.setExpression("top", "IE_PositionFixedTop_Hack(150)");
			fullscreenOverlay.next.style.setExpression("right", "IE_PositionFixedRight_Hack(0)");
			fullscreenOverlay.image.style.setExpression("width", "IE_OLImageMaxWidth_Hack(fullscreenOverlay.image, 99)");
			fullscreenOverlay.image.style.setExpression("height", "IE_OLImageMaxHeight_Hack(fullscreenOverlay.image, 99)");
			fullscreenOverlay.container.style.setExpression("height", "IE_OLMinHeight_Hack()");
			document.getElementById("fullscreenBackground").style.setExpression("height", "IE_OLBGHeight_Hack()");
			document.getElementById("fullscreenBackground").style.setExpression("width", "IE_OLBGWidth_Hack()");
			for (var i=0 ; i < fullscreenOverlay.previews.length ; i++)
				fullscreenOverlay.previews[i].style.setExpression("top", "IE_PositionFixedTop_Hack(220)");

			browserGallery.container.style.setExpression("height", "IE_Height100Client_Hack(browserGallery.container)");
			thumbGallery.container.style.setExpression("height", "IE_MinHeight100_Hack(thumbGallery.container)");
			superbody.style.setExpression("height", "IE_MinHeight100_Hack(superbody)");
			clipbox.style.setExpression("height", "IE_MinHeight100_Hack(clipbox)");
		}
	}

}

function GetXmlHttpObject()
{
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject)
	{
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

function IE_PNG_Hack()
{
	if (navigator.appName == 'Microsoft Internet Explorer')
	{
		var version  = parseFloat(RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent)[1]);
		if (version >= 5.5 && version <= 6.0)
		{
			var oldBrowserGalleryDisplay = browserGallery.container.style.display;
			browserGallery.container.style.display = "block";
			var oldThumbGalleryDisplay = thumbGallery.container.style.display;
			thumbGallery.container.style.display = "block";
			var oldFullscreenOverlayDisplay = fullscreenOverlay.container.style.display;
			fullscreenOverlay.container.style.display = "block";

			for (var i=0 ; i < document.images.length ; i++)
			{
				if (document.images[i].src.search(/\.png$/i) != -1)
				{
					if (!document.images[i].style.width)
						document.images[i].style.width = document.images[i].width + "px";
					if (!document.images[i].style.height)
						document.images[i].style.height = document.images[i].height + "px";
					document.images[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + document.images[i].src + "', sizingMethod='scale')";
					document.images[i].src = siteURL + "blank.gif";
				}
			}

			browserGallery.container.style.display = oldBrowserGalleryDisplay;
			thumbGallery.container.style.display = oldThumbGalleryDisplay;
			fullscreenOverlay.container.style.display = oldFullscreenOverlayDisplay;

			// makes the picture frame border render properly in IE 6.  Not sure why.
			browserGallery.zoomLinks.zoomBox.style.filter = "alpha(opacity=100)";
			browserGallery.zoomLinks.zoomBox.style.filter = "alpha(opacity=30)";
		}
	}
}

function IE_OverlayBGSize_Hack(element)
{
	if (navigator.appName == 'Microsoft Internet Explorer')
	{
		var version  = parseFloat(RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent)[1]);
		if (version >= 5.5 && version <= 7.0)
		{
			var oldFullscreenOverlayDisplay = fullscreenOverlay.container.style.display;
			fullscreenOverlay.container.style.display = "block";
			element.style.width = (element.offsetParent.offsetWidth - 10) + "px";
			element.style.height = (element.offsetParent.offsetHeight - 10) + "px";
			fullscreenOverlay.container.style.display = oldFullscreenOverlayDisplay;
		}
	}
}

function IE_PositionFixedTop_Hack(offset)
{
	return document.body.scrollTop + offset + "px";
}

function IE_PositionFixedBottom_Hack(offset)
{
	return document.body.scrollHeight - document.body.clientHeight - document.body.scrollTop + offset + "px";
}

function IE_PositionFixedLeft_Hack(offset)
{
	return document.body.scrollLeft + offset + "px";
}

function IE_PositionFixedRight_Hack(offset)
{
	return document.body.scrollWidth - document.body.clientWidth - document.body.scrollLeft + offset + "px";
}

function IE_OLImageMaxWidth_Hack(element, percent)
{
	if ((element.loadedWidth / element.loadedHeight > element.offsetParent.offsetWidth / element.offsetParent.offsetHeight) ||
		fullscreenOverlay.container.className == "fitWidth")
		return element.offsetParent.offsetWidth * percent / 100 - 4 + "px";
	else
 		return "auto";
}

function IE_OLImageMaxHeight_Hack(element, percent)
{
	if ((element.loadedWidth / element.loadedHeight <= element.offsetParent.offsetWidth / element.offsetParent.offsetHeight) &&
		fullscreenOverlay.container.className != "fitWidth")
		return element.offsetParent.offsetHeight * percent / 100  - 4 + "px";
	else
 		return "auto";
}

function IE_OLMinHeight_Hack()
{
	if (fullscreenOverlay.container.className == "fitWidth" && fullscreenOverlay.margin.offsetHeight > document.body.clientHeight + 2)
		return "auto";
	else
		return "100%";

}

function IE_MinHeight100_Hack(element)
{
	if (element.scrollHeight > document.body.clientHeight + 2)
		return "auto";
	else
		return "100%";
}

function IE_Height100Client_Hack(element)
{
	return document.body.clientHeight + "px";
}

function IE_OLBGHeight_Hack()
{
	if (document.body.scrollHeight > document.body.clientHeight)
		return document.body.scrollHeight;
	else
		return document.body.clientHeight;
}

function IE_OLBGWidth_Hack()
{
	return document.body.clientWidth;
}
