var pImgTypes = new Array('jpg', 'gif', 'png', 'bmp');
var pVars = new Object();

// defaults
pVars.maxHeight = 12000; // pixels, max height of fullsize pintbox, overridden by browser height
pVars.maxWidth = 12000; // pixels, max width of fullsize pintbox, overridden by browser width
pVars.autostart = false; // true, false, whether or not the slideshow starts automatically
pVars.timing = 7.0; // time in seconds for auto play slideshow
pVars.fadeTime = 1.0; // time in seconds for images to fade in and out
pVars.slider = true; // true, false
pVars.slideDir = 'horizontal'; // horizontal, vertical
pVars.loadingImg = '/images/pbox-loading.gif';

/*
Structure of HTML Output (Horizontal Slider)
<div id="pintbox">
	<div id="pImgHolder">
		<img src="/images/pbox-loading.gif" id="pLoading" />
		<img src="#" id="pImage" />
	</div>

	<div id="pSlideHolder">
		<a id="pSlideBack" href="#"></a>
			<ul id="pImages">
		<div id="pSlider">
				[...]
				<li class="pBoxCurrent"><a href="#"><img src="#" title="" alt=""></a></li>
				[...]
			</ul>
		</div>
		<a id="pSlideNext" href="#"></a>
	</div>

	<ul id="pControls">
		<li id="pbox-prev"><a href="#">prev</a></li>
		<li id="pbox-next"><a href="#">next</a></li>
		<li id="pbox-play"><a href="#">play</a></li>
		<li id="pbox-pause"><a href="#">pause</a></li>
		<li id="pbox-popout"><a href="#">popout</a></li>
	</ul>

	<div id="pInfo">
		<a href="#" id="pClose"></a>
		<p id="pCount">Image x of y</p>
		<h2 id="pTitle">Current Image Title</h2>
		<p id="pDesc">...</p>
	</div>

	<div id="pThumbPop">
		<img id="pThumbPopImg" />
	</div>
</div>
<div style="opacity: 0;" title="Click to Close" id="pOverlay"></div>
*/


/*
 *  ***************************************
 *  EDIT BEYOND THIS POINT AT YOUR OWN RISK
 *  ***************************************
 */

var play, thumbPause;

var pClient = new Object();
/* 
 *  pClient.allImgs()
 *    Find all links going to an image with an pImgTypes and return it as an array.
 */
pClient.allImgs = function() {
	var links = document.getElementsByTagName('a');
	var photos = new Array();
	for(i = 0; i < links.length; i++) {
		for(j = 0; j < pImgTypes.length; j++) {
			if(links[i].href.indexOf(pImgTypes[j]) != -1) {
				photos.push(links[i])
			}
		}
	}
	return photos;
}

/* 
 *  pClient.pageWidth() and pClient.pageHeight()
 *    Returns the width and height of the content in the document.
 */
pClient.pageWidth = function() {
	var xScroll;
	if(window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
	} else if(document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
		xScroll = document.body.scrollWidth;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
	}
	if(xScroll < $D.getViewportWidth()) {
		pageWidth = $D.getViewportWidth();
	} else {
		pageWidth = xScroll;
	}
	return pageWidth;
};
pClient.pageHeight = function() {
	var yScroll;
	if(window.innerHeight && window.scrollMaxY) {	
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if(document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		yScroll = document.body.offsetHeight;
	}
	if(yScroll <= $D.getViewportHeight()) {
		pageHeight = $D.getViewportHeight();
	} else { 
		pageHeight = yScroll;
	}
	return pageHeight;
};

/* 
 *  pClient.xScroll(), pClient.yScroll()
 *    Returns the position of the X and Y scrollbars.
 */
pClient.xScroll = function() {
	var xScroll = window.scrollX || document.documentElement.scrollLeft;
	return xScroll;
}	
pClient.yScroll = function() {
	var yScroll = window.scrollY || document.documentElement.scrollTop;
	return yScroll;
}


/* 
 *  array.inArray(value)
 *    Returns the key of the array that value is assigned to if true, null if false.
 */
Array.prototype.inArray = function(value) {
	for (i=0; i < this.length; i++) { if(this[i] == value) { return i; } }
	return null;
}

/*
 *  Helper Variables
 */
var $D = YAHOO.util.Dom;
var $E = YAHOO.util.Event;
var $A = YAHOO.util.Anim;
var $M = YAHOO.util.Motion;
var $S = YAHOO.util.Scroll;
var $Ease = YAHOO.util.Easing;
var $ = $D.get;

/*
 *  AnimMgr
 *    Sets the default frames per second higher so Safari will display animations
 *    at the correct speed. Degrades for slower browsers.
 */
YAHOO.util.AnimMgr.fps = 500;

YAHOO.widget.pEffect = function(el) { this.oEl = YAHOO.util.Dom.get(el); };

YAHOO.widget.pEffect.prototype.scrollHoriz = function(amount) {
	if(!amount) {
		var amount = $D.getStyle('pSlider', 'width').split('px')[0];
		if(this.oEl.id == 'pSlideBack') { amount = -amount; }
	}
	var slide = new $S('pSlider', {scroll: {by: [amount, 0]}}, 0.4, $Ease.easeBothStrong);
	slide.animate();
};

YAHOO.widget.pEffect.prototype.scrollVert = function(amount) {
	if(!amount) {
		var amount = $D.getStyle('pSlider', 'height').split('px')[0];
		if(this.oEl.id == 'pSlideBack') { amount = -amount; }
	}
	var slide = new $S('pSlider', {scroll: {by: [0, amount]}}, 0.4, $Ease.easeBothStrong);
	slide.animate();
};

YAHOO.widget.pEffect.prototype.fadeOutImg = function() {
	var fadeOut = new $A('pImage', {opacity: {to: 0}}, pVars.fadeTime);
	fadeOut.onStart.subscribe(function() {
		var loader = new YAHOO.widget.pEffect();
		loader.showHide('pLoading', '1');
	});
	fadeOut.animate();
};

YAHOO.widget.pEffect.prototype.fadeInImg = function(imgSrc) {
	var transition = new YAHOO.widget.pEffect();
	transition.midHide();
	var fadeIn = new $A('pImage', {opacity: {to: 1}}, pVars.fadeTime);
	fadeIn.onStart.subscribe(function() {
		var loader = new YAHOO.widget.pEffect();
		loader.showHide('pLoading', '0');
		$('pImage').src = imgSrc;
	});
	fadeIn.animate();
};

YAHOO.widget.pEffect.prototype.fadeOutInfo = function() {
	var fadeOut = new $A('pInfo', {opacity: {to: 0}}, 0.3);
	fadeOut.animate();
};

YAHOO.widget.pEffect.prototype.fadeInInfo = function(o) {
	var img = o.getElementsByTagName('img')[0]
	var title = img.getAttribute('title');
	var desc = img.getAttribute('alt');
	
	var photoSet = pClient.allImgs();
	var key = photoSet.inArray(o);
	
	var transition = new YAHOO.widget.pEffect();
	transition.midHide();
	var fadeIn = new $A('pInfo', {opacity: {to: 1}}, 0.3);
	fadeIn.onStart.subscribe(function() {
		$('pTitle').innerHTML = title;
		$('pDesc').innerHTML = desc;
		$('pCount').innerHTML = 'Image '+parseInt(key+1)+' of '+photoSet.length;
	});
	fadeIn.animate();
};


YAHOO.widget.pEffect.prototype.showHide = function(object, value) {
	var fade = new $A(object, {opacity: {to: value}}, 0.1);
	fade.animate();
};

YAHOO.widget.pEffect.prototype.midPop = function(popImg, thumb) {
	$D.setX('pThumbPop', 
		$D.getX(thumb)
		-((popImg.width - thumb.width)/2)
		-($D.getStyle('pThumbPopImg', 'padding-left').split('px')[0]*2)
	);
	$D.setY('pThumbPop', 
		$D.getY(thumb)
		-popImg.height
		-$D.getStyle('pThumbPopImg', 'padding-top').split('px')[0]
		-$D.getStyle('pThumbPop', 'padding-bottom').split('px')[0]
	);
	if(pVars.slideDir == 'vertical') {
		$D.setX('pThumbPop', 
			$D.getX(thumb)
			-popImg.width
			-($D.getStyle('pThumbPopImg', 'padding-left').split('px')[0]*2)
			-$D.getStyle('pThumbPop', 'padding-right').split('px')[0]
		);
		$D.setY('pThumbPop', 
			$D.getY(thumb)
			-((popImg.height - thumb.height)/2)
			-($D.getStyle('pThumbPopImg', 'padding-top').split('px')[0]*2)
		);
	}
	$('pThumbPopImg').setAttribute('src', popImg.src);
	var fadeIn = new $A('pThumbPop', {opacity: {to: 1}}, 0.2);
	fadeIn.animate();
};

YAHOO.widget.pEffect.prototype.midHide = function() {
	var fadeOut = new $A('pThumbPop', {opacity: {to: 0}}, 0.2);
	fadeOut.onComplete.subscribe(function() { $D.setXY('pThumbPop', [-999, -999]);});
	fadeOut.animate();
};

YAHOO.widget.pEffect.prototype.pShowOverlay = function() {
	$D.setStyle('pClose', 'display', 'block');
	var scaling = YAHOO.pintbox.scaleBox();
	window.clearTimeout(play);
	var pintbox = $('pintbox').parentNode.removeChild($('pintbox'));
	YAHOO.util.Dom.setStyle('pintbox_sub','display','');
	document.getElementsByTagName('body')[0].appendChild(pintbox);
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		$D.setStyle(selects[i], 'visibility', 'hidden');
	}
	var showHide = new YAHOO.widget.pEffect();
	showHide.showHide('pbox-play', '1');
	showHide.showHide('pbox-pause', '0.5');
	
	var newWidth = pVars.maxWidth;
	var newHeight = pVars.maxHeight;
	if(scaling[2]) {
		newWidth = scaling[0];
		newHeight = scaling[1];
	}

	var fadeOverlay = new $A('pOverlay', {opacity: {to: 0.8}}, 0.3);
	fadeOverlay.onStart.subscribe(function() {
		$D.setStyle('pOverlay', 'display', 'block');
		$D.setStyle('pOverlay', 'height', pClient.pageHeight()+'px');
	});

	var popout = new $M('pintbox', {
		points: {
			to: [
				($D.getViewportWidth()/2)-(newWidth/2)+pClient.xScroll(),
				($D.getViewportHeight()/2)-(newHeight/2)+pClient.yScroll()
			]
		},
		height: {to: newHeight},
		width: {to: newWidth}
	}, 0.2);
	popout.onTween.subscribe(function() {
		YAHOO.pintbox.setSliderSize();
		//YAHOO.pintbox.setImgArea();
		var temp = new Image();
		temp.src = $('pImage').src;
		if (!YAHOO.env.ua.ie) {
			temp.width = $('pImage').naturalWidth;
			temp.height = $('pImage').naturalHeight;
		}
		//temp.width = $D.getStyle('pImage', 'width').split('px')[0]; 
		//temp.height = $D.getStyle('pImage', 'height').split('px')[0]; 
		var newHW = YAHOO.pintbox.scaleImage(temp);
		var growImage = new $A('pImage', {width: {to: newHW[0]}, height: {to: newHW[1]}}, 0.2);
		$('pImgHolder').style.height = ($D.getStyle('pintbox', 'height').split('px')[0] - 240) + 'px';
		/*if ($D.getStyle('pintbox', 'height').split('px')[0] > 600) {
			if (YAHOO.env.ua.ie) growImage = new $A('pImage', {width: {to: temp.width}, height: {to: temp.height}}, 0.2);
			else growImage = new $A('pImage', {width: {to: $('pImage').naturalWidth}, height: {to: $('pImage').naturalHeight}}, 0.2);
		}*/
		growImage.animate();
	});
	popout.onStart.subscribe(function() {
		if(pVars.slider) {
			if(pVars.slideDir == 'horizontal') {
				var growSlider = new $A('pSlider', {
					width: {
						to: 
						newWidth-($D.getStyle('pintbox', 'padding-left').split('px')[0]*2)-($D.getStyle('pSlideNext', 'width').split('px')[0])
						}
				}, 0.2);
			} else {
				var growSlider = new $A('pSlider', {
					height: {
						to: 
						newHeight-($D.getStyle('pintbox', 'padding-top').split('px')[0]*2)-($D.getStyle('pSlideNext', 'height').split('px')[0]*2)-$('pInfo').offsetHeight
						}
				}, 0.2);
				var growSlideHolder = new $A('pSlideHolder', {
					height: {
						to: 
						newHeight-($D.getStyle('pintbox', 'padding-top').split('px')[0]*2)-$('pInfo').offsetHeight
					}
				}, 0.2);
				growSlideHolder.animate();
			}
			growSlider.animate();
		}
		
		$D.setStyle('pintbox', 'z-index', '600');
		fadeOverlay.animate();
	});
	popout.animate();
};

YAHOO.widget.pEffect.prototype.pHideOverlay = function() {
	$D.setStyle('pClose', 'display', 'none');
	var resizeBox = new $M('pintbox', {
		height: {to: $('pintbox').oHeight}, 
		width: {to: $('pintbox').oWidth},
		points: {to: $('pintbox').oPos}
	}, 0.3);

	var resizeSlider = new $A('pSlider', {height: {to: $('pSlider').oHeight}, width: {to: $('pSlider').oWidth}}, 0.3);
	
	var resizeImgHolder = new $A('pImgHolder', {height: {to: $('pImgHolder').oHeight}, width: {to: $('pImgHolder').oWidth}}, 0.3);

	var fadeOverlay = new $A('pOverlay', {opacity: {from: 1, to: 0}}, 0.3);
	fadeOverlay.onComplete.subscribe(function() {
		$D.setStyle('pOverlay', 'display', 'none');
		$D.setStyle('pOverlay', 'height', '0px');
	});

	resizeBox.onTween.subscribe(function() {
		YAHOO.pintbox.setSliderSize();
		//YAHOO.pintbox.setImgArea();
		var temp = new Image();
		temp.src = $('pImage').src; 
		temp.width = $('pImage').width; 
		temp.height = $('pImage').height; 
		var newHW = YAHOO.pintbox.scaleImage(temp);
		//dylan go here
		$D.setStyle('pImage', 'height', newHW[1]+'px');
		$D.setStyle('pImage', 'width', newHW[0]+'px');
		//$D.setStyle('pImgHolder', 'height', '400px');
		//$D.setStyle('pImage', 'height', '388px');
		//$D.setStyle('pImage', 'width', '518px');
	});
	resizeBox.onComplete.subscribe(function() {
		$D.setStyle('pintbox', 'height', 'auto');
	});
	

	resizeSlider.animate();
	//resizeImgHolder.animate();
	resizeBox.animate();
	fadeOverlay.animate();
};

YAHOO.pintbox = function() {
	return {
		init : function() {	
			if(pVars.slider) {
				if(pVars.slideDir == 'vertical') { $D.addClass('pintbox', 'vertical'); }
			}
			
			var pOverlay = document.createElement('div');
			pOverlay.id = 'pOverlay';
			pOverlay.setAttribute('title', 'Click to Close');
			document.getElementsByTagName('body')[0].appendChild(pOverlay);
			$D.setStyle('pOverlay', 'opacity', '0');	

			var pImgHolder = document.createElement('div');
			pImgHolder.id = 'pImgHolder';
			$('pintbox').insertBefore(pImgHolder, $('pImages'));

			var loadImg = new Image();
			loadImg.src = pVars.loadingImg;
			var pLoading = document.createElement('img');
			pLoading.id = 'pLoading';
			pLoading.src = loadImg.src;
			$('pImgHolder').appendChild(pLoading);
			
			$D.setXY('pLoading', [
				($('pImgHolder').offsetWidth/2)-12+$D.getX('pImgHolder'),
				($('pImgHolder').offsetHeight/2)-12+$D.getY('pImgHolder')
			]);
			$('pLoading').style.left = '50%';
			var pImage = document.createElement('img');
			pImage.src = 'images/blank.gif';
			pImage.id = 'pImage';
			$('pImgHolder').appendChild(pImage);
			
			var pControls = document.createElement('ul');
			pControls.id = 'pControls';

			var pInfo = document.createElement('div');
			pInfo.id = 'pInfo';
			
			var pClose = document.createElement('a');
			pClose.id = 'pClose';
			pClose.href = '#';
			
			var pTitle = document.createElement('h2');
			pTitle.id = 'pTitle';
			
			var pCount = document.createElement('p');
			pCount.id = 'pCount';
			
			var pDesc = document.createElement('p');
			pDesc.id = 'pDesc';
			
			if(pVars.slider) {
				if(pVars.slideDir == 'horizontal') {
					$('pintbox').appendChild(pInfo);
					$('pInfo').appendChild(pControls);
					$('pControls').innerHTML = '<li id="pbox-prev"><a href="#">prev</a></li><li id="pbox-next"><a href="#">next</a></li><li id="pbox-play"><a href="#">play</a></li><li id="pbox-pause"><a href="#">pause</a></li>';
					if ((typeof innerHeight !='undefined' && innerHeight>550) || YAHOO.env.ua.ie) $('pControls').innerHTML += '<li id="pbox-popout"><a href="#">popout</a></li>';
					$('pInfo').appendChild(pClose);
					$('pInfo').appendChild(pCount);
					$('pInfo').appendChild(pTitle);
					$('pInfo').appendChild(pDesc);
				}

				var pSlideHolder = document.createElement('div');
				pSlideHolder.id = 'pSlideHolder';
				$('pintbox').appendChild(pSlideHolder);

				var pSlideBack = document.createElement('a');
				pSlideBack.href = '#'
				pSlideBack.id = 'pSlideBack';
				$('pSlideHolder').appendChild(pSlideBack);

				var pImages = $('pImages');
				$('pintbox').removeChild(pImages);
				var pSlider = document.createElement('div');
				pSlider.id = 'pSlider';
				$('pSlideHolder').appendChild(pSlider);
				$('pSlider').appendChild(pImages);

				var pSlideNext = document.createElement('a');
				pSlideNext.href = '#'
				pSlideNext.id = 'pSlideNext';
				$('pSlideHolder').appendChild(pSlideNext);
				
				if(pVars.slideDir == 'horizontal') {
					$('pSlider').oWidth = $('pintbox').offsetWidth-($D.getStyle('pSlideNext', 'width').split('px')[0]*2)-22;
					$('pSlider').oHeight = $D.getStyle('pSlider', 'height').split('px')[0]; 

					$D.setStyle('pSlider', 'width', $('pSlider').oWidth+'px');
				} else if(pVars.slideDir == 'vertical') {
					$D.setStyle('pSlideHolder', 'height', $D.getStyle('pImgHolder', 'height'));
			
					$('pSlideHolder').oHeight = $D.getStyle('pImgHolder', 'height').split('px')[0];
					$('pSlider').oHeight = $D.getStyle('pSlider', 'height').split('px')[0]; 
					$('pSlider').oWidth = $D.getStyle('pSlider', 'width').split('px')[0];
					
					$('pintbox').appendChild(pInfo);
					$('pInfo').appendChild(pControls);
					$('pControls').innerHTML = '<li id="pbox-prev"><a href="#">prev</a></li><li id="pbox-next"><a href="#">next</a></li><li id="pbox-play"><a href="#">play</a></li><li id="pbox-pause"><a href="#">pause</a></li>';
					if (document.innerHeight>500) $('pControls').innerHTML += '<li id="pbox-popout"><a href="#">popout</a></li>';
					$('pInfo').appendChild(pClose);
					$('pInfo').appendChild(pCount);
					$('pInfo').appendChild(pTitle);
					$('pInfo').appendChild(pDesc);
				}
				$('pImgHolder').oWidth = $D.getStyle('pImgHolder', 'width').split('px')[0];
				$('pImgHolder').oHeight = $D.getStyle('pImgHolder', 'height').split('px')[0];
				YAHOO.pintbox.setSliderSize();
			} else {
				$('pintbox').insertBefore(pControls, $('pImages'));
				$('pControls').innerHTML = '<li id="pbox-prev"><a href="#">prev</a></li><li id="pbox-next"><a href="#">next</a></li><li id="pbox-play"><a href="#">play</a></li><li id="pbox-pause"><a href="#">pause</a></li>';
				if (document.innerHeight>500) $('pControls').innerHTML += '<li id="pbox-popout"><a href="#">popout</a></li>';
				$('pintbox').insertBefore(pInfo, $('pImages'));
				$('pInfo').appendChild(pTitle);
				$('pInfo').appendChild(pCount);			
				$('pInfo').appendChild(pDesc);
			}
			$('pintbox').oWidth = $('pintbox').offsetWidth-$D.getStyle('pintbox', 'padding-left').split('px')[0]*2-$D.getStyle('pintbox', 'border-left-width').split('px')[0]*2;
			$('pintbox').oHeight = $('pintbox').offsetHeight-$D.getStyle('pintbox', 'padding-top').split('px')[0]*2-$D.getStyle('pintbox', 'border-top-width').split('px')[0]*2;
			$('pintbox').oPos = $D.getXY('pintbox');
			
			$('pImgHolder').oHeight = $('pImgHolder').offsetHeight;
			$('pImgHolder').oWidth = $('pImgHolder').offsetWidth
			
			
			/*
			 *  Hash Check
			 *    Checks the URL on page load for #filename and attempts to load it
			 */
			var goAhead = true;
			if(window.location.href.indexOf('#') != -1) {
				pVars.autostart = false;
				goAhead = false;

				var imgArray = pClient.allImgs();
				var loadImg = window.location.href.split('#')[1];
				for(var i = 0; i < imgArray.length; i++) {
					var imgUrl = imgArray[i].getAttribute('href').split('/');
					if(imgUrl[imgUrl.length-1].split('.')[0] == loadImg) {
						YAHOO.pintbox.load('', imgArray[i]);
					} else {
						goAhead = true;
					}
				}
			} 
			if(goAhead) {
				//pVars.autostart = true;
				YAHOO.pintbox.load('', pClient.allImgs()[0]);
			}

			$E.on(pClient.allImgs(), 'click', function() {
				window.clearTimeout(play);
				pVars.autostart = false;
			});
			$E.on(pClient.allImgs(), 'click', this.load);
			
			$E.on('pSlideNext', 'click', this.scrollSlider);
			$E.on('pSlideBack', 'click', this.scrollSlider);
			$E.on('pbox-popout', 'click', this.popOut);		
			$E.on('pOverlay', 'click', this.close);		
			$E.on('pClose', 'click', this.close);		
		},
		
		/*
		 *  load()
		 *    Gets information for new image and invokes appropriate actions.
		 */
		load : function(e, newImg) {
			$E.stopEvent(e);
			$E.removeListener(document, 'keypress');
			
			var that;
			if(newImg) { that = newImg; } else { that = this; }

			var photoSet = pClient.allImgs();
			var key = photoSet.inArray(that);
			//if(typeof(key) == Object) 
			if(key==null) return;

			var showHide = new YAHOO.widget.pEffect();

			if(pVars.autostart) { 
				showHide.showHide('pbox-pause', '1');
				showHide.showHide('pbox-play', '0.5');
			} else { 
				window.clearTimeout(play);
				showHide.showHide('pbox-play', '1');
				showHide.showHide('pbox-pause', '0.5');
			}
			
			if($D.hasClass(that.parentNode, 'pBoxCurrent')) { 
				return; 
			}
			
			var transition = new YAHOO.widget.pEffect(that);
			transition.fadeOutImg();
			transition.fadeOutInfo();
			window.clearTimeout(thumbPause);
			transition.midHide();
			
			$E.removeListener('pbox-next', 'click');
			$E.removeListener('pbox-prev', 'click');

			var removeClasses = function(object) {
				$D.removeClass(object, 'pBoxCurrent');
			};
			$D.batch($('pImages').getElementsByTagName('li'), removeClasses);
			$D.addClass(that.parentNode, 'pBoxCurrent');
			
			if(pVars.slider) {
				if(
					pVars.slideDir == 'horizontal' &&
					$D.getX('pSlider') > $D.getX(that) || 
					$D.getX('pSlider')+parseInt($D.getStyle('pSlider', 'width').split('px')[0]) <= $D.getX(that)+that.offsetWidth
				) {
					transition.scrollHoriz($D.getX(that)-$D.getX('pSlider'));
				}
				if(
					pVars.slideDir == 'vertical' &&
					$D.getY('pSlider') > $D.getY(that) || 
					$D.getY('pSlider')+parseInt($D.getStyle('pSlider', 'height').split('px')[0]) <= $D.getY(that)+that.offsetHeight
				) {
					transition.scrollVert($D.getY(that)-$D.getY('pSlider'));
				}
			}
			
			var pPreload = new Image();
			pPreload.onload = function() {
				var waitFadeout = setTimeout(function() {
					var imgScale = YAHOO.pintbox.scaleImage(pPreload);
					$D.setStyle('pImage', 'width', imgScale[0]+'px');
					$D.setStyle('pImage', 'height', imgScale[1]+'px');
					
					transition.fadeInImg(pPreload.src);
					transition.fadeInInfo(that);

					var urlSplit = that.getAttribute('href').split('/');
					var filename = urlSplit[urlSplit.length-1].split('.')[0];
					if(window.location.href.indexOf('#') != -1) {
						var url = window.location.href.split('#')[0];
					} else {
						var url = window.location.href;
					}
					window.location = url+'#'+filename;

					YAHOO.pintbox.loadNeighbors(that);

					$E.addListener(document, 'keypress', function(e) {
						switch($E.getCharCode(e)) {
							case (120) : 
							$E.stopEvent(e);
							YAHOO.pintbox.close();
							break;
						}
					});
				}, pVars.fadeTime*1000);
			};
			pPreload.src = that.getAttribute('href');
		},
		
		/*
		 *  loadNeighbors()
		 *    Invoked via load(), finds and preloads next and previous image.
		 */
		loadNeighbors : function(that) {
			var photoSet = pClient.allImgs();
			var key = photoSet.inArray(that);
			
			var showHide = new YAHOO.widget.pEffect();
			if(key != photoSet.length-1) {
				var next = new Image();
				next.src = photoSet[key+1].getAttribute('href');
			} else {
				showHide.showHide('pbox-next', '0.5');
				showHide.showHide('pSlideNext', '0.5');
				showHide.showHide('pbox-prev', '1');
				showHide.showHide('pSlidePrev', '1');
				$E.removeListener('pbox-next', 'click');
			}
			if(key != 0) {
				var prev = new Image();
				prev.src = photoSet[key-1].getAttribute('href');
			} else {
				showHide.showHide('pbox-next', '1');
				showHide.showHide('pSlideNext', '1');
				showHide.showHide('pbox-prev', '0.5');
				showHide.showHide('pSlidePrev', '0.5');
				$E.removeListener('pbox-prev', 'click');
			}
			if(key != 0 && key != photoSet.length -1) {
				showHide.showHide('pbox-next', '1');
				showHide.showHide('pSlideNext', '1');
				showHide.showHide('pbox-prev', '1');
				showHide.showHide('pSlidePrev', '1');
			}

			if(pVars.autostart == true && key != photoSet.length-1) {
				window.clearTimeout(play);
				play = setTimeout(function() {
					YAHOO.pintbox.load('', photoSet[key+1]);
				}, pVars.timing*1000);
			}
			
			$E.on('pbox-next', 'click', this.load, photoSet[key+1], true);
			$E.on('pbox-prev', 'click', this.load, photoSet[key-1], true);
			$E.on('pbox-play', 'click', function(e) {
				$E.stopEvent(e)
				if(key != photoSet.length-1) { 
					pVars.autostart = true; 
					YAHOO.pintbox.load('', photoSet[key+1]);
				} else {
					pVars.autostart = true;
					YAHOO.pintbox.load('', photoSet[0]);
				}
			});
			$E.on('pbox-pause', 'click', function(e) {
				$E.stopEvent(e)
				$D.setStyle('pbox-pause', 'opacity', '0.5'); 
				$D.setStyle('pbox-play', 'opacity', '1'); 
				pVars.autostart = false; 
				window.clearTimeout(play);
			});
			
			$E.addListener(document, 'keypress', function(e) {
				switch($E.getCharCode(e)) {
					// 110, 63235, 39 = next; 32 = next/slideshow; 112, 63234, 37 = previous
					case 32 :
						$E.stopEvent(e);
						if(pVars.autostart) { 
							pVars.autostart = false; 
							window.clearTimeout(play);
						} else if(key != photoSet.length -1) { 
							pVars.autostart = true; 
							YAHOO.pintbox.load('', photoSet[key+1]);
						} else {
							pVars.autostart = true;
							YAHOO.pintbox.load('', photoSet[key-1]);
						}
					break;
					case 110 :
						$E.stopEvent(e);
						if(key != photoSet.length-1) { 
							pVars.autostart = false; YAHOO.pintbox.load('', photoSet[key+1]); 
						}
					break;
					case 63235 :
						$E.stopEvent(e);
						if(key != photoSet.length-1) { 
							pVars.autostart = false; YAHOO.pintbox.load('', photoSet[key+1]); 
						}
					break;
					case 39 :
						$E.stopEvent(e);
						if(key != photoSet.length-1) { 
							pVars.autostart = false; YAHOO.pintbox.load('', photoSet[key+1]); 
						}
					break;
					case 112 :
						$E.stopEvent(e);
						if(key != 0) { 
							pVars.autostart = false; YAHOO.pintbox.load('', photoSet[key-1]); 
						}
					break;
					case 63234 :
						$E.stopEvent(e);
						if(key != 0) { 
							pVars.autostart = false; YAHOO.pintbox.load('', photoSet[key-1]); 
						}
					break;
					case 37 :
						$E.stopEvent(e);
						if(key != 0) { 
							pVars.autostart = false; YAHOO.pintbox.load('', photoSet[key-1]); 
						}
					break;
				}
			});

		},
		
		scrollSlider : function(e) {
			$E.stopEvent(e);
			$E.preventDefault(e);
			var slide = new YAHOO.widget.pEffect(this);
			if(pVars.slideDir == 'horizontal') {
				slide.scrollHoriz();
			} else {
				slide.scrollVert();
			}
		},
		
		popOut : function(e) {
			$E.stopEvent(e);
			
			var show = new YAHOO.widget.pEffect();
			show.pShowOverlay();
			if(window.location.href.indexOf('#') != -1) {
				var url = window.location.href.split('#')[0];
			} else {
				var url = window.location.href;
			}
			window.location = url+'#popup';
			$E.removeListener('pbox-popout', 'click');
			$E.addListener('pbox-popout', 'click', YAHOO.pintbox.close);
		},
		
		close : function(e) {
			var transition = new YAHOO.widget.pEffect();
			transition.pHideOverlay();
			$E.removeListener('pbox-popout', 'click');
			$E.addListener('pbox-popout', 'click', YAHOO.pintbox.popOut);
		},
		
		/*
		 *  scaleImage()
		 * Returns proportional values for height and width of image, scaled if necessary.
		 */
		scaleImage : function(currImage) {
			var sHeight = currImage.height;
			var sWidth = currImage.width;
			if(currImage.width > $('pImgHolder').offsetWidth) {
				sWidth = $('pImgHolder').offsetWidth;
				sHeight = currImage.height * (sWidth/currImage.width);
				if(sHeight > $('pImgHolder').offsetHeight) {
					sHeight = $('pImgHolder').offsetHeight;
					sWidth = currImage.width * (sHeight / currImage.height);
				}
			} else if(currImage.height > $('pImgHolder').offsetHeight) {
				sWidth = currImage.width * ($('pImgHolder').offsetHeight / currImage.height);
				sHeight = $('pImgHolder').offsetHeight;
				if(sWidth > $('pImgHolder').offsetWidth) {
					sWidth = currImage.width * (sHeight / currImage.height);
					sHeight = currImage.height * (sWidth / currImage.width);
				}
			}
			var scaleAtts = new Array(Math.floor(sWidth), Math.floor(sHeight));
			return scaleAtts;
		},
		
		scaleBox : function() {
			var sHeight, sWidth;

			var scaled = false;
			if(pVars.maxWidth > $D.getViewportWidth()) {
				sWidth = $D.getViewportWidth();
				sHeight = pVars.maxHeight * (sWidth / pVars.maxWidth);
				if(sHeight > ($D.getViewportHeight())) {
					sHeight = $D.getViewportHeight();
					sWidth = pVars.maxWidth * (sHeight / pVars.maxHeight);
				}
				scaled = true;
			} else if(pVars.maxHeight > $D.getViewportHeight()) {
				sWidth = pVars.maxWidth * (($D.getViewportHeight()) / pVars.maxHeight);
				sHeight = $D.getViewportHeight();
				if(sWidth > ($D.getViewportWidth())) {
					sWidth = pVars.maxWidth * (sHeight / pVars.maxHeight);
					sHeight = pVars.maxHeight * (sWidth / pVars.maxWidth);
				}
				scaled = true
			}
			var scaleAtts = new Array(Math.floor(sWidth), Math.floor(sHeight), scaled);
			return scaleAtts;
		},
		
		setSliderSize : function() {
			var pItems = $('pImages').getElementsByTagName('li');
			var slideSize = 0;
			var margin = 0;
			var size = 0;
			for(var i = 0; i < pItems.length; i++) {
				if(pVars.slideDir == 'horizontal') {
					size = pItems[i].getElementsByTagName('img')[0].width;
					margin = $D.getStyle(pItems[i], 'margin-right').split('px')[0];
				} else if(pVars.slideDir == 'vertical') {
					size = pItems[i].getElementsByTagName('img')[0].height;
					margin = $D.getStyle(pItems[i], 'margin-bottom').split('px')[0];
				}
				slideSize = slideSize+parseInt(size)+parseInt(margin);
			}
			if(pVars.slideDir == 'horizontal') {
				$D.setStyle('pImages', 'width', (slideSize+5)+'px');
			} else if(pVars.slideDir == 'vertical') {
				$D.setStyle('pImages', 'height', slideSize+'px');
				$D.setStyle('pSlider', 'height', $D.getStyle('pImgHolder', 'height').split('px')[0]-$D.getStyle('pSlideBack', 'height').split('px')[0]*2+'px');
				$D.setStyle('pSlideHolder', 'height', $D.getStyle('pImgHolder', 'height'));
			}
		},
		
		setImgArea : function() {
			if(pVars.slideDir == 'horizontal' && pVars.slider) {
				var imgHeight = $('pintbox').offsetHeight - $D.getStyle('pintbox', 'padding-top').split('px')[0] - ($('pSlideHolder').offsetHeight + $('pInfo').offsetHeight);
				var imgWidth = $('pintbox').offsetWidth - $D.getStyle('pintbox', 'padding-left').split('px')[0];
				$D.setStyle('pImgHolder', 'height', imgHeight+'px');
				$D.setStyle('pImgHolder', 'width', imgWidth+'px');
			} else if(pVars.slideDir == 'vertical' && pVars.slider) {
				var imgHeight = $('pintbox').offsetHeight - $D.getStyle('pintbox', 'padding-top').split('px')[0]*4 - $('pInfo').offsetHeight;
				var imgWidth = $('pintbox').offsetWidth - $D.getStyle('pintbox', 'padding-left').split('px')[0]*4 - $('pSlideHolder').offsetWidth;
				$D.setStyle('pImgHolder', 'height', imgHeight+'px');
				$D.setStyle('pImgHolder', 'width', imgWidth+'px');
			}
		}
	}
}();

/*
 *  Start up the processes on window load.
 */
$E.on(window, 'load', YAHOO.pintbox.init, YAHOO.pintbox, true);
