/********************************************************************************************************************* PopBox.js, v1.1 released June 8, 2007. Copyright (c) 2007, C6 Software, Inc. (http://www.c6software.com/)* PopBox is released under the Creative Commons Attribution 3.0 license (http://creativecommons.org/licenses/by/3.0/)* and is free to use in both commercial and non-commercial work, provided this header remains at the top.* The latest version and documentation can be found at http://www.c6software.com/products/popbox/default.aspx.* Questions and suggestions can be sent to john.reid@c6software.com. Please put "PopBox" in the* email subject so I can easily filter. Send me your URL and I may post it!* PopBox relies on many methods from Danny Goodman's (www.dannyg.com) javascript library DHTMLAPI.js* and his books, without which scores of web developers would be totally lost. Thanks Danny.********************************************************************************************************************/// Seek nested NN4 layer from string name
function SeekLayer(doc, name) {
    var theObj;
    for (var i = 0; i < doc.layers.length; i++) {
        if (doc.layers[i].name == name) {
            theObj = doc.layers[i];
            break;
        }
        // dive into nested layers if necessary
        if (doc.layers[i].document.layers.length > 0) {
            theObj = SeekLayer(document.layers[i].document, name);
        }
    }
    return theObj;
}

// Convert object name string or object reference into a valid element object reference
function GetRawObject(obj) {
    var theObj;
    if (typeof obj == "string") {
		var isCSS = (document.body && document.body.style) ? true : false;
        if (isCSS && document.getElementById) {
            theObj = document.getElementById(obj);
        } else if (isCSS && document.all) {
            theObj = document.all(obj);
        } else if (document.layers) {
            theObj = SeekLayer(document, obj);
        }
    } else {
        // pass through object reference
        theObj = obj;
    }
    return theObj;
}
// Convert object name string or object reference into a valid style (or NN4 layer) reference
function GetObject(obj) {
    var theObj = GetRawObject(obj);
    if (theObj && document.body && document.body.style) {
        theObj = theObj.style;
    }
    return theObj;
}

// Return the available content width and height space in browser window
function GetInsideWindowSize() {
    if (window.innerWidth) {
        return {x:window.innerWidth, y:window.innerHeight};
    } else if (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) {
        return {x:document.body.parentElement.clientWidth, y:document.body.parentElement.clientHeight};
    } else if (document.body && document.body.clientWidth) {
        return {x:document.body.clientWidth, y:document.body.clientHeight};
    }
    return 0;
}

// Retrieve the x coordinate of a positionable object
function GetObjectLeft(obj)  {
    var elem = GetRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("left");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.left;
    } else if (elem.style) {
        result = elem.style.left;
    } else if (document.layers) {
        result = elem.left;
    }
    return parseInt(result);
}

// Retrieve the y coordinate of a positionable object
function GetObjectTop(obj)  {
    var elem = GetRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("top");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.top;
    } else if (elem.style) {
        result = elem.style.top;
    } else if (document.layers) {
        result = elem.top;
    }
    return parseInt(result);
}

// Retrieve the padding around an object
function GetObjectPadding(obj) {
	var elem = GetRawObject(obj);

	var l = 0;
	var r = 0;
	var t = 0;
	var b = 0;
	if (elem.currentStyle)
	{
		if (elem.currentStyle.paddingLeft)
			l = parseInt(elem.currentStyle.paddingLeft, 10);
		if (elem.currentStyle.paddingRight)
			r = parseInt(elem.currentStyle.paddingRight, 10);
		if (elem.currentStyle.paddingTop)
			t = parseInt(elem.currentStyle.paddingTop, 10);
		if (elem.currentStyle.paddingBottom)
			b = parseInt(elem.currentStyle.paddingBottom, 10);
	}
	else if (window.getComputedStyle)
	{
		l = parseInt(window.getComputedStyle(elem,null).paddingLeft, 10);
		r = parseInt(window.getComputedStyle(elem,null).paddingRight, 10);
		t = parseInt(window.getComputedStyle(elem,null).paddingTop, 10);
		b = parseInt(window.getComputedStyle(elem,null).paddingBottom, 10);
	}
	if (isNaN(l) == true) l = 0;
	if (isNaN(r) == true) r = 0;
	if (isNaN(t) == true) t = 0;
	if (isNaN(b) == true) b = 0;

	return {l:(l),r:(r),t:(t),b:(b)};
}

// Retrieve the rendered size of an element
function GetObjectSize(obj)  {
    var elem = GetRawObject(obj);
    var w = 0;
    var h = 0;
    if (elem.offsetWidth) {
			w = elem.offsetWidth; h = elem.offsetHeight;
    } else if (elem.clip && elem.clip.width) {
			w = elem.clip.width; h = elem.clip.height;
    } else if (elem.style && elem.style.pixelWidth) {
			w = elem.style.pixelWidth; h = elem.style.pixelHeight;
    }
    
    w = parseInt(w, 10);
    h = parseInt(h, 10);
    
   // remove any original element padding
   var padding = GetObjectPadding(elem);
   w -= (padding.l + padding.r);
   h -= (padding.t + padding.b);

   return {w:(w), h:(h)};
}

// Return the element position in the page, not it's parent container
function GetElementPosition(obj)
{
	var elem = GetRawObject(obj);
	var left = 0;
	var top = 0;

	// add any original element padding
	var elemPadding = GetObjectPadding(elem);
	left = elemPadding.l;
	top = elemPadding.t;

	if (elem.offsetParent)
	{
		left += elem.offsetLeft;
		top += elem.offsetTop;
		var parent = elem.offsetParent;
		while (parent)
		{
			left += parent.offsetLeft;
			top += parent.offsetTop;
			var parentTagName = parent.tagName.toLowerCase();
			if (parentTagName != "table" &&
				parentTagName != "body" && 
				parentTagName != "html" && 
				parentTagName != "div" && 
				parent.clientTop && 
				parent.clientLeft)
			{
				left += parent.clientLeft;
				top += parent.clientTop;
			}

			parent = parent.offsetParent;
		}
	}
	else if (elem.left && elem.top)
	{
		left = elem.left;
		top = elem.top;
	}
	else
	{
		if (elem.x)
			left = elem.x;
		if (elem.y)
			top = elem.y;
	}
	return {x:left, y:top};
}

// return the number of pixels the scrollbar has moved the visible window
function GetScrollOffset()
{
    if (window.pageYOffset) {
        return {x:window.pageXOffset, y:window.pageYOffset};
    } else if (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) {
        return {x:document.documentElement.scrollLeft, y:document.documentElement.scrollTop};
    } else if (document.body && document.body.clientWidth) {
        return {x:document.body.scrollLeft, y:document.body.scrollTop};
    }
    return {x:0, y:0};
}

// Retrieve the element position if the object were centered in the browser window at the given width and height
function GetCenteredWindowPoint(w, h)
{
	var size = GetInsideWindowSize();
	var scroll = GetScrollOffset();

	// get half the window size for center, then add the scroll values and then subtract half of the element size to get the top left pixel
	var newLeft = ((size.x / 2) + scroll.x) - (w / 2);
	var newTop = ((size.y / 2) + scroll.y) - (h / 2);
	
	return {x:newLeft, y:newTop};
}
// holds numerous properties related to position, size and motionvar popBox = new Array();// holds positioning value for the z axisvar popBoxZ = 100;// initialize default popbox objectfunction InitPopBox(obj){	obj = GetRawObject(obj);	if (typeof popBox[obj.id] != "undefined" && popBox[obj.id] != null)		return obj;			var elem = obj;	var startPos = GetElementPosition(elem);
	var initSize = GetObjectSize(elem);
	if (elem.style.position == "absolute" || elem.style.position == "relative")
	{
		startPos.x = parseInt(elem.style.left, 10);
		startPos.y = parseInt(elem.style.top, 10);
	}
	else
	{
		var img = document.createElement("img");
		// copy image properties
		img.border = elem.border;
		img.className = elem.className;
		img.height = elem.height;
		img.id = "popcopy" + elem.id;
		img.src = elem.src;
		img.title = elem.title;
		img.width = elem.width;
		img.onclick = elem.onclick;
		img.ondblclick = elem.ondblclick;
		img.onmouseout = elem.onmouseout;

		// remove event so the object doesn't jump
		elem.onmouseout = null;

		img.style.width = initSize.w;
		img.style.height = initSize.h;
		img.style.position = "absolute";
		img.style.left = startPos.x + "px";
		img.style.top = startPos.y + "px";
		
		document.body.appendChild(img);
		elem.style.visibility = "hidden";
		elem = img;
	}
	
	popBox[elem.id] = {	elemId:elem.id,							xCurr:0.0,							yCurr:0.0,							xTarg:0.0,							yTarg:0.0,							wCurr:0.0,							hCurr:0.0,							wTarg:0.0,							hTarg:0.0,							xStep:0.0,							yStep:0.0,							wStep:0.0,							hStep:0.0,							xDelta:0.0,							yDelta:0.0,							wDelta:0.0,							hDelta:0.0,							xTravel:0.0,							yTravel:0.0,							wTravel:0.0,							hTravel:0.0,							velM:1.0,							velS:1.0,							interval:null,							isAnimating:false,							xOriginal:0.0,							yOriginal:0.0,							wOriginal:0.0,							hOriginal:0.0,							isPopped:false,							fnClick:null,							fnDone:null,							fnPre:null,							originalId:null							};								popBox[elem.id].xOriginal = startPos.x;
	popBox[elem.id].yOriginal = startPos.y;
	popBox[elem.id].wOriginal = parseFloat(initSize.w);
	popBox[elem.id].hOriginal = parseFloat(initSize.h);
	
	if (typeof elem.onclick == "function")
		popBox[elem.id].fnClick = elem.onclick;

	if (obj.id != elem.id)
		popBox[elem.id].originalId = obj.id;
		
	return elem;
}// calculate next steps and assign to style propertiesfunction DoPopBox(elem){	if (typeof elem == "string") elem = GetRawObject(elem);	try	{		var bMDone = false;		var bSDone = false;		if ((popBox[elem.id].xTravel + Math.abs(popBox[elem.id].xStep)) < popBox[elem.id].xDelta)		{			var x = popBox[elem.id].xCurr + popBox[elem.id].xStep;			elem.style.left = parseInt(x, 10) + "px";			popBox[elem.id].xTravel += Math.abs(popBox[elem.id].xStep);			popBox[elem.id].xCurr = x;		} else {			popBox[elem.id].xTravel += Math.abs(popBox[elem.id].xStep);			elem.style.left = parseInt(popBox[elem.id].xTarg, 10) + "px";			bMDone = true;		}		if ((popBox[elem.id].yTravel + Math.abs(popBox[elem.id].yStep)) < popBox[elem.id].yDelta)		{			var y = popBox[elem.id].yCurr + popBox[elem.id].yStep;			elem.style.top = parseInt(y, 10) + "px";			popBox[elem.id].yTravel += Math.abs(popBox[elem.id].yStep);			popBox[elem.id].yCurr = y;			bMDone = false;		} else {			popBox[elem.id].yTravel += Math.abs(popBox[elem.id].yStep);			elem.style.top = parseInt(popBox[elem.id].yTarg, 10) + "px";		}		if ((popBox[elem.id].wTravel + Math.abs(popBox[elem.id].wStep)) < popBox[elem.id].wDelta)		{			var w = popBox[elem.id].wCurr + popBox[elem.id].wStep;			elem.style.width = parseInt(w, 10) + "px";			popBox[elem.id].wTravel += Math.abs(popBox[elem.id].wStep);			popBox[elem.id].wCurr = w;		} else {			popBox[elem.id].wTravel += Math.abs(popBox[elem.id].wStep);			elem.style.width = parseInt(popBox[elem.id].wTarg, 10) + "px";			bSDone = true;		}		if ((popBox[elem.id].hTravel + Math.abs(popBox[elem.id].hStep)) < popBox[elem.id].hDelta)		{			var h = popBox[elem.id].hCurr + popBox[elem.id].hStep;			elem.style.height = parseInt(h, 10) + "px";			popBox[elem.id].hTravel += Math.abs(popBox[elem.id].hStep);			popBox[elem.id].hCurr = h;			bSDone = false;		} else {			popBox[elem.id].hTravel += Math.abs(popBox[elem.id].hStep);			elem.style.height = parseInt(popBox[elem.id].hTarg, 10) + "px";		}		var obj = null;				if (bMDone == true && bSDone == true)		{			clearInterval(popBox[elem.id].interval);			popBox[elem.id].isAnimating = false;			var func = null;			if (popBox[elem.id].fnDone != null && typeof popBox[elem.id].fnDone == "function")				func = popBox[elem.id].fnDone;						if (popBox[elem.id].isPopped == true)			{				elem.style.zIndex = null;					if (popBox[elem.id].originalId != null)				{					obj = GetRawObject(popBox[elem.id].originalId);					obj.onmouseout = elem.onmouseout; // copy method back to original
					obj.style.visibility = "visible";										// remove the copied object from the body and the array					document.body.removeChild(elem);				}				else
				{
					elem.style.width = parseInt(popBox[elem.id].wOriginal, 10) + "px";					elem.style.height = parseInt(popBox[elem.id].hOriginal, 10) + "px";				
					if (typeof popBox[elem.id].fnClick == "function")
						elem.onclick = popBox[elem.id].fnClick;
				}				delete popBox[elem.id];				popBox[elem.id] = null;			}			else			{				popBox[elem.id].isPopped = true;				CreateRevertBar(elem);				obj = elem;			}							if (func != null && typeof func == "function")				func(obj);		}	}	catch(ex){}}function CreateRevertBar(obj){	if (typeof obj == "string") obj = GetRawObject(obj);
	var elem = obj;
	if (popBox[elem.id].originalId != null) elem = GetRawObject(popBox[elem.id].originalId);
	var pbShowRevertBar = elem.getAttribute('pbShowRevertBar');	var pbShowRevertText = elem.getAttribute('pbShowRevertText');	var pbShowRevertImage = elem.getAttribute('pbShowRevertImage');	var pbRevertText = elem.getAttribute('pbRevertText');	var pbRevertImage = elem.getAttribute('pbRevertImage');	pbShowRevertBar = (pbShowRevertBar != null) ? (pbShowRevertBar == "true" || pbShowRevertBar == true) : popBoxShowRevertBar;	pbShowRevertText = (pbShowRevertText != null) ? (pbShowRevertText == "true" || pbShowRevertText == true) : popBoxShowRevertText;	pbShowRevertImage = (pbShowRevertImage != null) ? (pbShowRevertImage == "true" || pbShowRevertImage == true) : popBoxShowRevertImage;	if (pbRevertText == null) pbRevertText = popBoxRevertText;	if (pbRevertImage == null) pbRevertImage = popBoxRevertImage;
	var left = parseInt(obj.style.left, 10);
	var top = parseInt(obj.style.top, 10);
	var padding = GetObjectPadding(obj);
	left += padding.l;
	top += padding.t;	
	var width = parseInt(obj.style.width, 10);
	var height = parseInt(obj.style.height, 10);
	var size = GetObjectSize(obj);
	if (size.w > width) left += ((size.w - width) / 2);
	if (size.h > height) top += ((size.h - height) / 2);
	var z = obj.style.zIndex + 1;

	var fnClick = function(){if (typeof obj.onclick == 'function') obj.onclick();};
	var fnMouseOut = function(){if (typeof obj.onmouseout == 'function') obj.onmouseout();};
	var fnRemove = new Array();
	
	var parentNode = obj.parentNode;

	if (pbShowRevertBar == true)
	{
		var divTrans = document.createElement("div");
		divTrans.id = "popBoxDivTrans" + z;
		divTrans.style.width = obj.style.width;
		divTrans.style.height = "20px";
		divTrans.style.borderStyle = "none";
		divTrans.style.padding = "0px";
		divTrans.style.margin = "0px";
		divTrans.style.position = "absolute";
		divTrans.style.left = left + "px";
		divTrans.style.top = top + "px";
		divTrans.style.backgroundColor = "#000000";
		divTrans.style.cursor = obj.style.cursor;
		divTrans.style.zIndex = z;
		if (typeof divTrans.style.filter != 'undefined')
			divTrans.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=20)";
		if (typeof divTrans.style.opacity != 'undefined')
			divTrans.style.opacity = "0.2";
		divTrans.onclick = fnClick;
		divTrans.onmouseout = fnMouseOut;
		parentNode.appendChild(divTrans);
		
		fnRemove.push(function(){parentNode.removeChild(divTrans);});
	}

	if (pbShowRevertText == true)	{
		var divText = document.createElement("div");
		divText.id = "popBoxDivText" + z;
		divText.style.width = obj.style.width;
		divText.style.height = "20px";
		divText.style.borderStyle = "none";
		divText.style.padding = "0px";
		divText.style.margin = "0px";
		divText.style.position = "absolute";
		divText.style.left = left + "px";
		divText.style.top = top + "px";
		divText.style.cursor = obj.style.cursor;
		divText.style.textAlign = "center";
		divText.style.fontFamily = "Arial, Verdana, Sans-Serif";
		divText.style.fontSize = "10pt";
		divText.style.backgroundColor = "Transparent";
		divText.style.color = "#ffffff";
		divText.style.zIndex = z;
		divText.innerHTML = pbRevertText;
		divText.onclick = fnClick;
		divText.onmouseout = fnMouseOut;
		parentNode.appendChild(divText);

		fnRemove.push(function(){parentNode.removeChild(divText);});
	}
	
	if (pbShowRevertImage == true)	{		var imgPopped = document.createElement("img");
		imgPopped.id = "popBoxImgPopped" + z;
		imgPopped.src = pbRevertImage;
		imgPopped.style.width = "20px";
		imgPopped.style.height = "20px";
		imgPopped.style.borderStyle = "none";
		imgPopped.style.padding = "0px";
		imgPopped.style.margin = "0px";
		imgPopped.style.position = "absolute";
		imgPopped.style.left = (left + width - 20) + "px";
		imgPopped.style.top = top + "px";
		imgPopped.style.cursor = obj.style.cursor;
		imgPopped.style.zIndex = z;
		imgPopped.onclick = fnClick;
		imgPopped.onmouseout = fnMouseOut;
		parentNode.appendChild(imgPopped);

		fnRemove.push(function(){parentNode.removeChild(imgPopped);});
	}
	if (fnRemove.length != 0)	{		if(popBox[obj.id].fnPre != null && typeof(popBox[obj.id].fnPre) == 'function')
			fnRemove.push(popBox[obj.id].fnPre);
	
		popBox[obj.id].fnPre = function(){for(var x = 0; x < fnRemove.length; x++){fnRemove[x]();}};
	}
}/**************************************************************************************************** This is where the user-callable section starts.* Function signatures above this line are subject to change.***************************************************************************************************/// Globals you can assignvar popBoxShowRevertBar = true;var popBoxShowRevertText = true;var popBoxShowRevertImage = true;var popBoxRevertText = "Click the image to shrink it.";var popBoxRevertImage = "/images/magminus.gif";// these custom attributes on the <img> element will override the globals above// pbShowRevertBar, pbShowRevertText, pbShowRevertImage, pbRevertText, pbRevertImage// Advanced method to begin moves and resizes. (Use Pop/PopEx and Revert where possible instead.)// X and Y postfixes refer to the top left pixel. W and H postfixes refer to the width and height// speedM and speedS are the speeds of the move and size respectively// className denotes the CSS class to apply to the object that is being moved and/or sized// fnDone denotes the script method to run when the move/resize is complete. It must have a single// parameter that holds the object itself.function PopBox(elem, startX, startY, endX, endY, startW, startH, endW, endH, speedM, speedS, className, fnDone){	if (typeof elem == "string") elem = GetRawObject(elem);
	if (elem == null || typeof elem != "object" || isNaN(startX) || isNaN(startY) || isNaN(endX) || isNaN(endY) || isNaN(startW) || isNaN(startH) || isNaN(endW) || isNaN(endH) || isNaN(speedM) || isNaN(speedS))
		return;
	elem = InitPopBox(elem);	if (popBox[elem.id].isAnimating == true)	{		var str = "PopBox('" + elem.id + "'," + startX + "," + startY + "," + endX + "," + endY + "," + startW + "," + endW + "," + startH + "," + endH + "," + speedM + "," + speedS + ",'" + className + "');";		setTimeout(str, 10);	}	else	{		popBox[elem.id].isAnimating = true;		popBox[elem.id].xCurr = parseFloat(startX);		popBox[elem.id].yCurr = parseFloat(startY);		popBox[elem.id].wCurr = parseFloat(startW);		popBox[elem.id].hCurr = parseFloat(startH);		popBox[elem.id].xTarg = parseFloat(endX);		popBox[elem.id].yTarg = parseFloat(endY);		popBox[elem.id].wTarg = parseFloat(endW);		popBox[elem.id].hTarg = parseFloat(endH);		popBox[elem.id].xDelta = Math.abs(parseFloat(endX) - parseFloat(startX));		popBox[elem.id].yDelta = Math.abs(parseFloat(endY) - parseFloat(startY));		popBox[elem.id].wDelta = Math.abs(parseFloat(endW) - parseFloat(startW));		popBox[elem.id].hDelta = Math.abs(parseFloat(endH) - parseFloat(startH));		popBox[elem.id].velM = (speedM) ? Math.abs(parseFloat(speedM)) : 1.0;		popBox[elem.id].velS = (speedS) ? Math.abs(parseFloat(speedS)) : 1.0;		popBox[elem.id].xTravel = 0.0;		popBox[elem.id].yTravel = 0.0;		popBox[elem.id].wTravel = 0.0;		popBox[elem.id].hTravel = 0.0;		// set element's start position		elem.style.position = "absolute";		elem.style.left = startX + "px";		elem.style.top = startY + "px";		// set element's start size		elem.style.width = startW + "px";		elem.style.height = startH + "px";		elem.style.display = "inline";		// the length of the line between start and end points		var lenMove = Math.sqrt((Math.pow((startX - endX), 2)) + (Math.pow((startY - endY), 2)));		var lenSize = Math.sqrt((Math.pow((startW - endW), 2)) + (Math.pow((startH - endH), 2)));		// if the speeds are the same then they should be in sync		if (popBox[elem.id].velM == popBox[elem.id].velS)			lenMove = lenSize = Math.sqrt(Math.pow(lenMove, 2) + Math.pow(lenSize, 2));		// how big the pixel steps are along each axis		popBox[elem.id].xStep = ((popBox[elem.id].xTarg - popBox[elem.id].xCurr) / lenMove) * popBox[elem.id].velM;		popBox[elem.id].yStep = ((popBox[elem.id].yTarg - popBox[elem.id].yCurr) / lenMove) * popBox[elem.id].velM;		// how big the pixel steps are for each resize		popBox[elem.id].wStep = ((popBox[elem.id].wTarg - popBox[elem.id].wCurr) / lenSize) * popBox[elem.id].velS;		popBox[elem.id].hStep = ((popBox[elem.id].hTarg - popBox[elem.id].hCurr) / lenSize) * popBox[elem.id].velS;				popBox[elem.id].fnDone = fnDone;		if (className != null)			elem.className = className;		if (popBox[elem.id].isPopped == false)			elem.style.zIndex = ++popBoxZ;					if (popBox[elem.id].fnPre != null && typeof popBox[elem.id].fnPre == 'function')			popBox[elem.id].fnPre();		// start the repeated invocation of the animation		popBox[elem.id].interval = setInterval("DoPopBox('" + elem.id + "')", 10);	}}/**************************************************************************************************** Helper functions. Use these! They are much easier. Call Pop/PopEx and then Revert.***************************************************************************************************/
// this basic method centers the image in the browser and displays it at its full resolution
function Pop(obj, speed, className)
{
	PopEx(obj, null, null, 0, 0, speed, className);
}

// If either newLeft or newTop are null then the image is centered in the browser.
// End newLeft and/or newTop with "A" for an absolute position, otherwise it is treated as a relative position.
// Ex: a newLeft of 20 would move right 20 pixels, "20A" would position 20 pixels from the left of it's containing element.
// If either newWidth or newHeight is 0 then the full image size is used
function PopEx(obj, newLeft, newTop, newWidth, newHeight, speed, className)
{
	if (typeof obj == "string") obj = GetRawObject(obj);
	var elem = InitPopBox(obj);
	if (popBox[elem.id].isPopped == true) return;	
	if (typeof elem.ondblclick == "function")
		elem.onclick = elem.ondblclick;

	var startX = parseInt(elem.style.left);
	var startY = parseInt(elem.style.top);

	if (newWidth == 0 || newHeight == 0)
	{
		// get size from original object
		if (obj.naturalWidth && obj.naturalHeight)
		{
			newWidth = obj.naturalWidth;
			newHeight = obj.naturalHeight;
		}
		else
		{
			var img = new Image();
			img.src = elem.src;
			newWidth = img.width;
			newHeight = img.height;
			delete img;
		}
		
		// some browsers have a race condition where it still doesn't get set so just fill the window
		if (newWidth == 0 || newHeight == 0)
		{
			var windowSize = GetInsideWindowSize();			var scale = Math.min(parseFloat(windowSize.x) / parseFloat(elem.width), parseFloat(windowSize.y) / parseFloat(elem.height));
			newWidth = parseInt(elem.width * scale);
			newHeight = parseInt(elem.height * scale);
		}
	}
	
	if (newLeft == null || newTop == null) // center it
	{
		// if image is bigger than the window scale it down (does not take into account any border)		var windowSize = GetInsideWindowSize();		if (windowSize.x < newWidth || windowSize.y < newHeight)		{			var scale = Math.min(parseFloat(windowSize.x) / parseFloat(newWidth), parseFloat(windowSize.y) / parseFloat(newHeight));
			newWidth = parseInt(newWidth * scale);
			newHeight = parseInt(newHeight * scale);
		}

		var endPos = GetCenteredWindowPoint(newWidth, newHeight);
		newLeft = endPos.x;
		newTop = endPos.y;
	}
	else // check for absolute vs. relative positioning
	{
		if (typeof newLeft == "string" && newLeft.indexOf("A") == (newLeft.length - 1))
			newLeft = parseInt(newLeft, 10);
		else
			newLeft = popBox[elem.id].xOriginal + parseInt(newLeft, 10);

		if (typeof newTop == "string" && newTop.indexOf("A") == (newTop.length - 1))
			newTop = parseInt(newTop, 10);
		else
			newTop = popBox[elem.id].yOriginal + parseInt(newTop, 10);
	}

	var func = null;
	if (typeof PostPopProcessing == "function")
		func = PostPopProcessing;

	PopBox(elem, startX, startY, newLeft, newTop, popBox[elem.id].wOriginal, popBox[elem.id].hOriginal, newWidth, newHeight, speed, speed, className, func);
}

// Helper function for PopBox to move/resize the image back to its original position/size. Use this! It's much easier.function Revert(obj, speed, className)
{
	if (typeof obj == "string") obj = GetRawObject(obj); 
	if (typeof popBox[obj.id] == "undefined" || popBox[obj.id] == null) return;
	var iCurrentLeft = GetObjectLeft(obj);
	var iCurrentTop = GetObjectTop(obj);
	var iCurrentWidth = parseInt(obj.style.width, 10);
	var iCurrentHeight = parseInt(obj.style.height, 10);
	
	var func = null;
	if (typeof PostRevertProcessing == "function")
		func = PostRevertProcessing;

	PopBox(obj, iCurrentLeft, iCurrentTop, popBox[obj.id].xOriginal, popBox[obj.id].yOriginal, iCurrentWidth, iCurrentHeight, popBox[obj.id].wOriginal, popBox[obj.id].hOriginal, speed, speed, className, func);
}


/**************************************************************************************************** These methods are the post processing events for Pop/PopEx and Revert.* Feel free to copy them to your own page script and add your own code to the method bodies.***************************************************************************************************/
// Function that Pop calls after the move/resize is complete. The one parameter is the object.
//function PostPopProcessing(obj)//{	// if (typeof obj == "string") obj = GetRawObject(obj);
//}// Function that Revert calls after the move/resize is complete. The one parameter is the object.
//function PostRevertProcessing(obj)//{	// if (typeof obj == "string") obj = GetRawObject(obj);
//}