var photo = 
{
	expand: function(a,image,itype,thumb_x,thumb_y,thumb_source_size)
	{
		var aimgs = a.getElementsByTagName('img');
		var aimg = aimgs[0];
		if (aimg.pimg)
		{
			photo.shutdown(aimg.pimg)
			return false;
		}
		photo.inProgress = true;
		
		var pimg = photo.getHolder();
				
		var prevnext = photo.prevnext(aimg);
		
		if (prevnext.prev)
			pimg.photoInfo.leftLink.style.display = '';
		else
			pimg.photoInfo.leftLink.style.display = 'none';
			
		if (prevnext.next)
			pimg.photoInfo.rightLink.style.display = '';
		else
			pimg.photoInfo.rightLink.style.display = 'none';
		
		pimg.photoInfo.holder.style.top = '0';
		pimg.photoInfo.holder.style.left = '0';
			
		document.body.appendChild(pimg.photoInfo.holder);
		
		var caption = a.lastChild;
		if (caption && caption.tagName == 'SPAN')
		{
			pimg.photoInfo.captionHolder.innerHTML = caption.innerHTML;
		}
		else
			pimg.photoInfo.captionHolder.innerHTML = '';
		
		pimg.photoInfo.zindex = photo.zindex;
		pimg.photoInfo.resizing = true;
		pimg.photoInfo.thumb = aimg;
		pimg.photoInfo.thumb_x = thumb_x;
		pimg.photoInfo.thumb_y = thumb_y;
		pimg.photoInfo.thumb_size = thumb_source_size;
		pimg.photoInfo.thumb_height = thumb_source_size;
		
		var pos = util.epos(pimg.photoInfo.thumb);
		pimg.photoInfo.startLeft = pos.x;
		pimg.photoInfo.startTop = pos.y;
		
		
		pimg.photoInfo.startSizeX = aimg.width;
		pimg.photoInfo.startSizeY = aimg.height;
		
		if (aimg.height > aimg.width)
			pos.y += (aimg.height - aimg.width) / 2;
		
		if (aimg.height < aimg.width)
		{
			pos.x += (aimg.width - aimg.height) / 2;
		}
		
		pimg.photoInfo.cX = pos.x + pimg.photoInfo.thumb.width / 2;			
		pimg.photoInfo.cY = pos.y + pimg.photoInfo.thumb.height / 2;		
		
		if (photo.wait)
		{
			photo.wait.style.left = (pimg.photoInfo.cX - 12) + 'px';
			photo.wait.style.top = (pimg.photoInfo.cY - 12) + 'px';
			photo.wait.style.visibility = 'visible';
		}
		
		pimg.photoInfo.zimg.style.display = 'none';

		pimg.photoInfo.pimgLoaded = false;
		pimg.photoInfo.zimgLoaded = false;
		
				
		pimg.onload = photo.onploaded;
		pimg.photoInfo.zimg.onload = photo.onzloaded;

		pimg.src="pictures/p" + image + '.' + itype;
		pimg.photoInfo.zimg.src="pictures/s" + image + '.jpeg';

		return false;
	},
	
	onploaded: function(e)
	{
		var pimg = this;
		pimg.photoInfo.pimgLoaded = true;
		if (pimg.photoInfo.zimgLoaded)
			photo.onloaded(pimg);
	},
		
	onzloaded: function(e)
	{
		var pimg = this.pimg;
		pimg.photoInfo.zimgLoaded = true;
		if (pimg.photoInfo.pimgLoaded)
			photo.onloaded(pimg);
	},
		
	onloaded: function(pimg)
	{
		var yTop = util.yTop()
		var yLeft = util.yLeft();
		var wW = document.documentElement.clientWidth || document.body.clientWidth;
		var wH = document.documentElement.clientHeight || document.body.clientHeight;

		if (photo.wait)
			photo.wait.style.visibility = 'hidden';
		
		pimg.photoInfo.dragged = false;

		var imgH = pimg.height;
		var imgW = pimg.width;

		if (typeof(pimg.photoInfo.thumb_size) != 'number')
		{
			pimg.photoInfo.thumb_x = 0;
			pimg.photoInfo.thumb_y = 0;
			pimg.photoInfo.thumb_size = imgW;
			pimg.photoInfo.thumb_height = imgW;
		}

		var rescale = 1;
		if (wW <= 1024)
			rescale = 6/8;
		
		imgH *= rescale;
		imgW *= rescale;
		
		pimg.photoInfo.thumb_x *= rescale;
		pimg.photoInfo.thumb_y *= rescale;
		pimg.photoInfo.thumb_size *= rescale;
		pimg.photoInfo.thumb_height *= rescale;
		
		pimg.style.width = imgW + 'px';;
		
		var holderW = pimg.photoInfo.holder.offsetWidth;
		pimg.photoInfo.holderW = holderW;
		pimg.photoInfo.holder.style.width = holderW + 'px';
		pimg.photoInfo.caption.style.display = '';
		var holderFullH = pimg.photoInfo.holder.offsetHeight;
		pimg.photoInfo.caption.style.display = 'none';
		var holderH = pimg.photoInfo.holder.offsetHeight;
		pimg.photoInfo.holder.style.width = '';

		var pad = holderW - imgW;
		if (pad < 0)
			pad = 0;
		
		pimg.photoInfo.pad = pad;			
			
		pimg.photoInfo.startLeft -= pad / 2;
		pimg.photoInfo.startTop -= pad / 2;
		
		
		pimg.photoInfo.endWidth = imgW;
		pimg.photoInfo.endHeight = imgH;
		pimg.photoInfo.endFullHeight = holderFullH;
		
		var startScaleX = pimg.photoInfo.thumb.width / pimg.photoInfo.thumb_size;
		var startScaleY = pimg.photoInfo.thumb.height / pimg.photoInfo.thumb_height;
		pimg.photoInfo.imgStartLeft = -pimg.photoInfo.thumb_x * startScaleX - 1;
		pimg.photoInfo.imgStartTop = -pimg.photoInfo.thumb_y * startScaleY - 1;
		pimg.photoInfo.imgStartSize = imgW * startScaleX;
		pimg.photoInfo.imgEndLeft = 0;
		pimg.photoInfo.imgEndTop = 0;
		pimg.photoInfo.imgEndSize = imgW;

		pimg.photoInfo.endTop = pimg.photoInfo.cY - holderFullH / 2;
		var botLim = yTop + wH - 20;
		if (pimg.photoInfo.endTop + holderFullH > botLim)
			pimg.photoInfo.endTop = botLim - holderFullH;
		if (pimg.photoInfo.endTop < yTop + 10)
			pimg.photoInfo.endTop = yTop + 10;
			
		pimg.photoInfo.endLeft = pimg.photoInfo.cX - holderW / 2;
		var rightLim = yLeft + wW - 20;
		if (pimg.photoInfo.endLeft + holderW > rightLim)
			pimg.photoInfo.endLeft = rightLim - holderW;
		if (pimg.photoInfo.endLeft < yLeft + 10)
			pimg.photoInfo.endLeft = yLeft + 10;
		
		pimg.photoInfo.incrW = (pimg.photoInfo.endWidth - pimg.photoInfo.startSizeX) / photo.iters;
		pimg.photoInfo.incrH = (pimg.photoInfo.endHeight - pimg.photoInfo.startSizeY) / photo.iters;
		pimg.photoInfo.incrTop = (pimg.photoInfo.startTop - pimg.photoInfo.endTop) / photo.iters;
		pimg.photoInfo.incrLeft = (pimg.photoInfo.startLeft - pimg.photoInfo.endLeft) / photo.iters;
		
		pimg.photoInfo.imgIncrTop = (pimg.photoInfo.imgStartTop - pimg.photoInfo.imgEndTop) / photo.iters;
		pimg.photoInfo.imgIncrLeft = (pimg.photoInfo.imgStartLeft - pimg.photoInfo.imgEndLeft) / photo.iters;
		pimg.photoInfo.imgIncrSize = (pimg.photoInfo.imgStartSize - pimg.photoInfo.imgEndSize) / photo.iters;

		pimg.photoInfo.iter = 0;
		
		pimg.photoInfo.holder.style.left = (pimg.photoInfo.startLeft - pimg.photoInfo.incrLeft * pimg.photoInfo.iter) + 'px';
		pimg.photoInfo.holder.style.top = (pimg.photoInfo.startTop - pimg.photoInfo.incrTop * pimg.photoInfo.iter) + 'px';
		pimg.photoInfo.sizer.style.width = (pimg.photoInfo.startSizeX + pimg.photoInfo.incrW * pimg.photoInfo.iter) + 'px';
		pimg.photoInfo.sizer.style.height = (pimg.photoInfo.startSizeY + pimg.photoInfo.incrH * pimg.photoInfo.iter) + 'px';
		
		pimg.photoInfo.zimg.style.top = (pimg.photoInfo.imgStartTop) + 'px';
		pimg.photoInfo.zimg.style.left = (pimg.photoInfo.imgStartLeft - pimg.photoInfo.imgIncrLeft * pimg.photoInfo.iter) + 'px';

		pimg.photoInfo.iter = 0;
					
		pimg.style.display = 'none';
		pimg.photoInfo.zimg.style.display  = '';
		
		setTimeout(function(){photo.expanding(pimg);},photo.itertime);
	},
	
	expanding: function(pimg)
	{
		
		if (++pimg.photoInfo.iter > photo.iters)
		{
			
			pimg.photoInfo.caption.style.display = '';
				
			pimg.photoInfo.zimg.style.display = 'none';
			pimg.style.display  = '';
			
			pimg.photoInfo.zimg.style.width = pimg.photoInfo.imgEndSize + 'px';
			pimg.photoInfo.zimg.style.top = '';
			pimg.photoInfo.zimg.style.left = '';
						
			pimg.photoInfo.sizer.style.height = ''; //pimg.photoInfo.endFullHeight + 'px';
			pimg.photoInfo.sizer.style.width = pimg.photoInfo.imgEndSize + 'px';
			pimg.photoInfo.sizer.style.position = 'relative';
			pimg.photoInfo.holder.style.left = pimg.photoInfo.endLeft + 'px';
			pimg.photoInfo.holder.style.top = pimg.photoInfo.endTop + 'px';
			pimg.photoInfo.holder.style.width = pimg.photoInfo.holderW + 'px';
			pimg.photoInfo.resizing = false;
			photo.insertImage(pimg);
			photo.checkHidden();
			
			pimg.photoInfo.thumb.style['filter'] = 'alpha(opacity=30)';
			pimg.photoInfo.thumb.style['-moz-opacity'] = '.30';
			pimg.photoInfo.thumb.style['opacity'] = '.30';
			pimg.photoInfo.thumb.className = 'unexpand';
			
			pimg.photoInfo.thumb.pimg = pimg;
			
			pimg.photoInfo.bevel.style.visibility = 'visible';
			pimg.photoInfo.bevel.style.width = (pimg.photoInfo.endWidth - 8) + 'px';
			pimg.photoInfo.bevel.style.height = (pimg.photoInfo.endHeight - 8) + 'px';
			
			photo.topmost = pimg;
			
			pimg.photoInfo.bevel.onmousedown = photo.mousedown;
			pimg.photoInfo.bevel.onmouseup = photo.mouseup;
			pimg.photoInfo.bevel.ommousemove = null;
			pimg.onmousedown = photo.mousedown;
			pimg.onmouseup = photo.mouseup;
			pimg.ommousemove = null;
			
			photo.inProgress = false;
		}
					
		else
		{
			var mag = photo.iters - Math.pow(photo.iters - pimg.photoInfo.iter,3) / photo.iters / photo.iters;
			pimg.photoInfo.holder.style.left = Math.round(pimg.photoInfo.startLeft - pimg.photoInfo.incrLeft * mag) + 'px';
			pimg.photoInfo.holder.style.top = Math.round(pimg.photoInfo.startTop - pimg.photoInfo.incrTop * mag) + 'px';
			pimg.photoInfo.sizer.style.width = Math.round(pimg.photoInfo.startSizeX + pimg.photoInfo.incrW * mag) + 'px';
			pimg.photoInfo.sizer.style.height = Math.round(pimg.photoInfo.startSizeY + pimg.photoInfo.incrH * mag) + 'px';

			pimg.photoInfo.zimg.style.top = Math.round(pimg.photoInfo.imgStartTop - pimg.photoInfo.imgIncrTop * mag) + 'px';
			pimg.photoInfo.zimg.style.left = Math.round(pimg.photoInfo.imgStartLeft - pimg.photoInfo.imgIncrLeft * mag) + 'px';
			pimg.photoInfo.zimg.style.width = Math.round(pimg.photoInfo.imgStartSize - pimg.photoInfo.imgIncrSize * mag) + 'px';
			
			var opac = pimg.photoInfo.iter / photo.iters;
			opac = 1;
			
			pimg.photoInfo.zimg.style['filter'] = 'alpha(opacity=' + opac * 100 + ')';
			pimg.photoInfo.zimg.style['-moz-opacity'] = opac;
			pimg.photoInfo.zimg.style['opacity'] = opac;
			
			
//			pimg.photoInfo.zimg.style.opacity = pimg.photoInfo.iter / photo.iters;
			
			pimg.photoInfo.holder.style['visibility'] = 'visible';
			setTimeout(function(){photo.expanding(pimg);},photo.itertime);
		}
	},
	
	shutdown: function(pimg)
	{

		photo.removeImage(pimg);
		pimg.photoInfo.thumb.style['filter'] = '';
		pimg.photoInfo.thumb.style['-moz-opacity'] = '';
		pimg.photoInfo.thumb.style['opacity'] = '';
		pimg.photoInfo.thumb.className = 'expand';
		
		pimg.photoInfo.resizing = true;
		pimg.photoInfo.caption.style.display = 'none';
		
		pimg.photoInfo.incrW = (pimg.photoInfo.endWidth - pimg.photoInfo.startSizeX) / photo.awayIters;
		pimg.photoInfo.incrH = (pimg.photoInfo.endHeight - pimg.photoInfo.startSizeY) / photo.awayIters;
		pimg.photoInfo.incrTop = (pimg.photoInfo.endTop - pimg.photoInfo.startTop) / photo.awayIters;
		pimg.photoInfo.incrLeft = (pimg.photoInfo.endLeft - pimg.photoInfo.startLeft) / photo.awayIters;

		pimg.photoInfo.holder.style.width = pimg.photoInfo.endWidth + 'px';
		pimg.photoInfo.holder.style.height = pimg.photoInfo.endHeight + 'px';
		pimg.photoInfo.holder.style.left = pimg.photoInfo.endLeft + 'px';
		pimg.photoInfo.holder.style.top = pimg.photoInfo.endTop + 'px';
		pimg.photoInfo.holder.style.backgroundColor = '';
		
	
		pimg.photoInfo.imgIncrTop = (pimg.photoInfo.imgStartTop - pimg.photoInfo.imgEndTop) / photo.awayIters;
		pimg.photoInfo.imgIncrLeft = (pimg.photoInfo.imgStartLeft - pimg.photoInfo.imgEndLeft) / photo.awayIters;
		pimg.photoInfo.imgIncrSize = (pimg.photoInfo.imgStartSize - pimg.photoInfo.imgEndSize) / photo.awayIters;

		pimg.photoInfo.sizer.style.overflow = 'hidden';
		pimg.photoInfo.sizer.style.position = 'relative';
				
		pimg.style.display = 'none';
		pimg.photoInfo.zimg.style.display = '';

		pimg.photoInfo.iter = 0;
		setTimeout(function(){photo.contracting(pimg);},photo.itertime);
	},
	
	contracting: function(pimg)
	{
		if (++pimg.photoInfo.iter >= photo.awayIters)
		{
			pimg.photoInfo.holder.style.left = pimg.photoInfo.startLeft;
			pimg.photoInfo.holder.style.top = pimg.photoInfo.startTop;
			photo.remove(pimg);
		}
		else
		{
			pimg.photoInfo.sizer.style.width = Math.round(pimg.photoInfo.endWidth - pimg.photoInfo.incrW * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.sizer.style.height = Math.round(pimg.photoInfo.endHeight - pimg.photoInfo.incrH * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.holder.style.left = Math.round(pimg.photoInfo.endLeft - pimg.photoInfo.incrLeft * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.holder.style.top = Math.round(pimg.photoInfo.endTop - pimg.photoInfo.incrTop * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.holder.style.width = '1px';
			pimg.photoInfo.holder.style.height = '1px';
			
			pimg.photoInfo.zimg.style.top = Math.round(pimg.photoInfo.imgEndTop + pimg.photoInfo.imgIncrTop * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.zimg.style.left = Math.round(pimg.photoInfo.imgEndTop + pimg.photoInfo.imgIncrLeft * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.zimg.style.width = Math.round(pimg.photoInfo.imgEndSize + pimg.photoInfo.imgIncrSize * pimg.photoInfo.iter) + 'px';
			pimg.photoInfo.zimg.style.opacity = 1 - pimg.photoInfo.iter / photo.awayIters;
			
			setTimeout(function(){photo.contracting(pimg);},photo.itertime);
		}
	},
	
	remove: function(pimg)
	{
		pimg.onmousedown = null;
		pimg.onmouseup = null;
		pimg.onmousemove = null;
		pimg.onmouseout = null;
		
		pimg.photoInfo.thumb.pimg = null;
		
		document.body.removeChild(pimg.photoInfo.holder);
		photo.pimgStack.push(pimg);
		photo.checkHidden();
		
		for (var i = 0;i < photo.images.length;i++)
		{
			if (photo.images[i].pimg)
			{
				if (!photo.images[i].pimg.photoInfo.hidden)
				{
					photo.topmost = photo.images[i].pimg;
				}
			}
		}
	},
	
	covers: function(left1,right1,top1,bot1,left2,right2,top2,bot2)
	{
		if (right1 < left2)
			return false;
		if (left1 > right2)
			return false;
		if (bot1 < top2)
			return false;
		if (top1 > bot2)
			return false;
		return true;
	},
	
	checkHidden: function()
	{
		for (var i = 0;i < photo.images.length;i++)
		{
			// determine if covered;
			var covered = false;
			var pi1 = null;
			if (photo.images[i].pimg)
				var pi1 = photo.images[i].pimg.photoInfo;
			if (!pi1)
				continue;
			for (var j = 0;j < photo.images.length;j++)
			{
				if (i == j)
					continue;
				var pi2 = null;
				if (photo.images[j].pimg)
					pi2 = photo.images[j].pimg.photoInfo;
				if (!pi2)
					continue;
				if (pi1.zindex > pi2.zindex)
					continue;

					
				if (photo.covers
					(
						pi2.left, pi2.left + pi2.holder.offsetWidth, pi2.top, pi2.top + pi2.holder.offsetHeight,
						pi1.left, pi1.left + pi1.holder.offsetWidth, pi1.top, pi1.top + pi1.holder.offsetHeight
					))						
				{
					covered = true;
					break;
				}					
			}

			if (!covered)
			{
				pi1.holder.style.backgroundColor = "#ffffff";
				pi1.bevel.className = 'imagebevel unexpand';
				pi1.hidden = false;
			}
			else
			{
				pi1.holder.style.backgroundColor = "#dddddd";
				pi1.bevel.className = 'imagebevel select';
				pi1.hidden = true;
			}
		}
	},
	
	mousedown: function(e)
	{
		e = e || window.event; 
		var pimg = e.target || e.srcElement;
		
		
		if (pimg.pimg) pimg = pimg.pimg;
		
		if (pimg.photoInfo.resizing)
			return false;
		
		if (pimg.photoInfo.hidden)
		{
			photo.zindex++;
			pimg.photoInfo.holder.style['zIndex'] = photo.zindex;
			pimg.photoInfo.zindex = photo.zindex;
			pimg.photoInfo.zindexed = true;
			photo.checkHidden();
			photo.topmost = pimg;
		}
		
		pimg.photoInfo.dragStartX = e.clientX;
		pimg.photoInfo.dragStartY = e.clientY;
		pimg.photoInfo.newX = pimg.photoInfo.endLeft;
		pimg.photoInfo.newY = pimg.photoInfo.endTop;
		
		pimg.photoInfo.bevel.onmousemove = photo.mousemove;
		pimg.photoInfo.bevel.onmouseout = photo.mouseout;
		pimg.onmousemove = photo.mousemove;
		pimg.onmouseout = photo.mouseout;
		
		return false;
	},
	
	mouseout: function(e)
	{
		e = e || window.event; 
		var pimg = e.target || e.srcElement;
		
		if (pimg.pimg) pimg = pimg.pimg;
		
		pimg.photoInfo.bevel.onmousemove = null;
		pimg.photoInfo.bevel.onmouseout = null;
		pimg.onmousemove = null;
		pimg.bevel.onmouseout = null;
		
		pimg.photoInfo.endLeft = pimg.photoInfo.newX;
		pimg.photoInfo.endTop = pimg.photoInfo.newY;
	},
	
	mousemove: function(e)
	{
		e = e || window.event; 
		var pimg = e.target || e.srcElement;
		
		if (pimg.pimg) pimg = pimg.pimg;
		
		if (pimg.photoInfo.resizing)
			return false;

		var newX = e.clientX - pimg.photoInfo.dragStartX + pimg.photoInfo.endLeft;
		var newY = e.clientY - pimg.photoInfo.dragStartY + pimg.photoInfo.endTop;

		var dx = Math.abs(newX - pimg.photoInfo.newX);
		var dy = Math.abs(newY - pimg.photoInfo.newY);
		var d = (dx > dy) ? dx : dy;
		
		if (pimg.photoInfo.dragged || d > 5)
		{
			pimg.photoInfo.dragged = true;
	
			pimg.photoInfo.holder.style['left'] = newX + "px";
			pimg.photoInfo.holder.style['top'] = newY + "px";
	
			pimg.photoInfo.newX = newX; // was newX
			pimg.photoInfo.newY = newY
		}
				
		return false;
	},
	
	mouseup: function(e)
	{
		e = e || window.event; 
		var pimg = e.target || e.srcElement;
		
		if (pimg.pimg) pimg = pimg.pimg;
		
		if (pimg.photoInfo.resizing)
			return false;
	
		pimg.photoInfo.bevel.onmousemove = null;
		pimg.photoInfo.bevel.onmouseout = null;
		pimg.onmousemove = null;
		pimg.onmouseout = null;
				
		if (!pimg.photoInfo.dragged && !pimg.photoInfo.zindexed && !pimg.photoInfo.hidden)
		{
			photo.shutdown(pimg);
		}
		else
		{
			pimg.photoInfo.endLeft = pimg.photoInfo.newX;
			pimg.photoInfo.endTop = pimg.photoInfo.newY;
			photo.checkHidden();
		}
		
		pimg.photoInfo.dragged = false;
		pimg.photoInfo.zindexed = false;
				
		return false;
	},

	getHolder: function()
	{
		photo.zindex++;
		var pimg;
		if (photo.pimgStack.length)
			pimg = photo.pimgStack.pop();
		else
			pimg = photo.createHolder();
			
		pimg.photoInfo.holder.style.zIndex = photo.zindex;
		pimg.photoInfo.zimg.style.top = '';
		pimg.photoInfo.zimg.style.left = '';
		pimg.photoInfo.zimg.style.width = '';
		pimg.photoInfo.zimg.style.height = '';
		pimg.photoInfo.holder.style.visibility = 'hidden';
		pimg.photoInfo.holder.style.width = '';
		pimg.photoInfo.holder.style.height = '';
		pimg.photoInfo.sizer.style.width = '';
		pimg.photoInfo.sizer.style.height = '';
		pimg.photoInfo.sizer.style.overflow = 'hidden';
		pimg.photoInfo.sizer.style.position = 'relative';
		pimg.photoInfo.bevel.style.visibility = 'hidden';

		pimg.style.display = '';
		pimg.photoInfo.zimg.style.display = 'none';
		pimg.photoInfo.zimg.style.position = 'relative';

		pimg.style.width = '';
		
		return pimg;
	},
	
	createHolder: function()
	{
		var pimg;
		var ptable = document.createElement('table');
		ptable.className = 'photoholder';
		ptable.style.position = 'absolute';
		ptable.style.visibility = 'hidden';
		
		var ptbody = document.createElement('tbody');
		ptable.appendChild(ptbody);
		
		var ptr = document.createElement('tr');
		ptbody.appendChild(ptr);
		
		var ptd = document.createElement('td');
		ptd.colSpan = '3';
		ptr.appendChild(ptd);
		
		var pdiv = document.createElement('div');
		pdiv.style.position = 'absolute';
		ptd.appendChild(pdiv);
		
		var pimg = document.createElement('img');
		pimg.style.cursor = 'pointer';
		pdiv.appendChild(pimg);
		pimg.photoInfo = {};
		pimg.photoInfo.sizer = pdiv;
		
		pimg.photoInfo.zimg = document.createElement('img');
		pimg.photoInfo.zimg.style.position = 'relative';
		pdiv.appendChild(pimg.photoInfo.zimg);
		pimg.photoInfo.zimg.pimg = pimg;
		
		pimg.photoInfo.bevel = document.createElement('div');
		pimg.photoInfo.bevel.className = 'imagebevel unexpand';
		pimg.photoInfo.bevel.title = 'Click to un-zoom. Click and drag to move.';
		pimg.photoInfo.bevel.pimg = pimg;
		pdiv.appendChild(pimg.photoInfo.bevel);
		
		ptr = document.createElement('tr');
		ptr.style.display = 'none';
		ptbody.appendChild(ptr);
		
		ptd = document.createElement('td');
		ptd.style.textAlign = 'left';
		ptd.style.borderLeft = 'solid 1px black';
		ptd.style.borderBottom = 'solid 1px black';
		ptr.appendChild(ptd);
		
		var pleft = document.createElement('img');
		pleft.src="/cms/images/pleft.gif";
		pleft.onclick = function(){photo.prevPhoto(pimg);};
		pleft.title = '[left arrow] Previous photo';
		pleft.style.cursor = 'pointer';
		ptd.appendChild(pleft);
		
		ptd = document.createElement('td');
		ptd.style.textAlign = 'center';
		ptd.style.borderBottom = 'solid 1px black';
		ptr.appendChild(ptd);

		var pspan = document.createElement('span');		
		pspan.style.margin = '2px';
		ptd.appendChild(pspan);
		pimg.photoInfo.captionHolder = pspan;
		
		ptd = document.createElement('td');
		ptd.style.textAlign = 'right';
		ptd.style.borderRight = 'solid 1px black';
		ptd.style.borderBottom = 'solid 1px black';
		ptr.appendChild(ptd);
		
		var pright = document.createElement('img');
		pright.src="/cms/images/pright.gif";
		pright.onclick = function(){photo.nextPhoto(pimg);};
		pright.title = '[right arrow] Next photo';
		pright.style.cursor = 'pointer';
		ptd.appendChild(pright);
		
		pimg.photoInfo.caption = ptr;
		
		pimg.name = 'cmsexpandedphoto';
		pimg.title = 'Close/Drag';
		pimg.className = 'unexpand';
		
		pimg.photoInfo.holder = ptable;
		pimg.photoInfo.leftLink = pleft;
		pimg.photoInfo.rightLink = pright;
		
		return pimg;
	},
	

	
	preload: function()
	{
		photo.wait = document.createElement('img');
		photo.wait.src='/cms/images/wait.gif';
		photo.wait.style.position= 'absolute';
		photo.wait.style.zIndex = 999;
		photo.wait.style.visibility = 'hidden';
		document.body.appendChild(photo.wait);
		
		util.addEventListener(document,'keydown',photo.key);
		
		var imgs = document.getElementsByTagName('IMG');
		
		var rePhoto = /photo.expand/;
		var reSection = /photo_section/;
		
		for (var i = 0;i < imgs.length;i++)
		{
			var e = imgs[i];
			var ar = {};
			ar.sectionNode = null;
			ar.activator = null;
			ar.image = e;
			ar.pimg = null;
			while(e)
			{
				if (e.onclick && rePhoto.test(e.onclick))
					ar.activator = e;
				if (ar.activator)
				{
					if (reSection.test(e.className))
					{
						ar.sectionNode = e;
						break;
					}
				}
				e = e.parentNode;
			}
			if (ar.activator)
			{
				photo.images.push(ar);
			}
		}
	},
	
	prevPhoto: function(pimg)
	{
		if (photo.inProgress)
			return;
		var limg = pimg || photo.topmost;
		if (limg)
		{
			for (var i = 0;i < photo.images.length;i++)
			{
				if (limg == photo.images[i].pimg)
				{
					if (i)
					{
						if (photo.images[i-1].sectionNode == photo.images[i].sectionNode)
						{
							if (photo.images[i-1].pimg)
							{
								photo.zindex++;
								photo.images[i-1].pimg.photoInfo.holder.style.zIndex = photo.zindex;
								photo.images[i-1].pimg.photoInfo.zindex = photo.zindex;
								photo.checkHidden();
							}
							else
							{
								photo.images[i-1].activator.onclick();
							}
							photo.shutdown(photo.images[i].pimg);
						}
					}
					break;
				}
			}
		}
	},
	
	nextPhoto: function(pimg)
	{
		if (photo.inProgress)
			return;
		var limg = pimg || photo.topmost;
		if (limg)
		{
			for (var i = 0;i < photo.images.length;i++)
			{
				if (limg == photo.images[i].pimg)
				{
					if (i < photo.images.length - 1)
					{
						if (photo.images[i+1].sectionNode == photo.images[i].sectionNode)
						{
							if (photo.images[i+1].pimg)
							{
								photo.zindex++;
								photo.images[i+1].pimg.photoInfo.holder.style.zIndex = photo.zindex;
								photo.images[i+1].pimg.photoInfo.zindex = photo.zindex;
								photo.checkHidden();
							}
							else
							{
								photo.images[i+1].activator.onclick();
							}
							photo.shutdown(photo.images[i].pimg);
						}
					}
					break;
				}
			}
		}
	},
	
	key: function(e)
	{
		e = e || window.event; 
		target = e.target || e.srcElement;
		if (target.form)
			return true;
		switch(e.keyCode)
		{
			case 37: // left
				photo.prevPhoto();
				break;
			case 39: // right
				photo.nextPhoto();
				break;
		}
//		e.returnValue = false;
//		if (e.preventDefault) e.preventDefault();
//		return false;
	},
		
	insertImage: function(image)
	{
		for (var i = 0;i < photo.images.length;i++)
		{
			if (photo.images[i].image == image.photoInfo.thumb)
			{
				photo.images[i].pimg = image;
				break;
			}
		}
	},
	
	removeImage: function(image)
	{
		for (var i = 0;i < photo.images.length;i++)
		{
			if (photo.images[i].image == image.photoInfo.thumb)
			{
				photo.images[i].pimg = null;
				break;
			}
		}
	},
	
	prevnext: function(aimg)
	{
		var prev = null;
		var next = null;
		for (var i = 0;i < photo.images.length;i++)
		{
			if (photo.images[i].image == aimg)
			{
				var j;
				for (j = i - 1;j >= 0;j--)
				{
					if (photo.images[i].sectionNode == photo.images[j].sectionNode)
					{
						prev = true;
						break;
					}
				}
				for (j = i + 1;j < photo.images.length;j++)
				{
					if (photo.images[i].sectionNode == photo.images[j].sectionNode)
					{
						next = true;
						break;
					}
				}
				break;
			}
		}
		return {prev: prev, next: next};
	},
	
	inProgress: false,
	images: [],
	pimgStack: [],
	topmost: null,
	zindex: 1000,
	itertime: 20,
	iters: 10,
	awayIters: 6

};

util.addEventListener(window,'load',photo.preload);
