/********************************************************************************************************************* PopBox.js, v2.7a Copyright (c) 2009, C6 Software, Inc. (http://www.c6software.com/)* PopBox is released under the Creative Commons GNU GPL license (http://creativecommons.org/licenses/GPL/2.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" somewhere 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;}// Return the available content width and height space in browser windowfunction GetInsideWindowSize() {	 if (window.innerWidth) {		  return {x:window.innerWidth, y:window.innerHeight};    }    else    {		 var baseArray = document.getElementsByTagName("base");		 if (baseArray.length == 0)		 {			 if (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) {				  return {x:document.body.parentNode.clientWidth, y:document.body.parentNode.clientHeight};			 } else if (document.body && document.body.clientWidth) {				  return {x:document.body.clientWidth, y:document.body.clientHeight};			 }		 }		 else		 {			 if (document.body && document.body.clientWidth) {				  return {x:document.body.clientWidth, y:document.body.clientHeight};			 } else if (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) {				  return {x:document.body.parentNode.clientWidth, y:document.body.parentNode.clientHeight};			 }		 }    }    return {x:0, y:0};}// 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;			if (parent.style && parent.style.overflow && parent.style.overflow != "")			{				left -= parent.scrollLeft;				top -= parent.scrollTop;			}			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};}function CreateRandomId(){	var randomNum = 0.0;	while (randomNum == 0.0)		randomNum = Math.random();	var random = randomNum + "";	return "id" + random.substr(2);}function MouseMoveRevert(e){	if (pbMouseMoveRevert != null && pbMouseMoveRevert.length != 0)	{		var evt = (e) ? e : window.event;		var mouse = {x:0, y:0};		if (evt.pageX || evt.pageY)		{			mouse.x = evt.pageX;			mouse.y = evt.pageY;		}		else if (evt.clientX || evt.clientY)		{			var scroll = GetScrollOffset();			mouse.x = evt.clientX + scroll.x;			mouse.y = evt.clientY + scroll.y;		}				for (var x = 0; x < pbMouseMoveRevert.length;)		{			if (pbMouseMoveRevert[x] != null)			{				var id = pbMouseMoveRevert[x].id;				if (typeof popBox[id] != "undefined" && popBox[id] != null && popBox[id].hTarg != 0)				{					// if the mouse is outside the box then call revert					if (mouse.x < popBox[id].xTarg || mouse.x > (popBox[id].xTarg + popBox[id].wTarg) || mouse.y < popBox[id].yTarg || mouse.y > (popBox[id].yTarg + popBox[id].hTarg))					{						var className = pbMouseMoveRevert[x].className;						pbMouseMoveRevert.splice(x, 1);						Revert(id, null, className);						continue;					}				}							}						x++;		}	}}// holds numerous properties related to position, size and motionvar popBox = new Array();var popBoxIds = new Array();// holds positioning value for the z axisvar popBoxZ = 100;// holds the popped image for each <img> tag with a pbsrc attributevar pbSrc = new Array();// holds the popbar function for each <img> tag with a pbShowPopBar attributevar pbPopBarFunc = new Array();// holds the array of image ids for onmousemove Revert callsvar pbMouseMoveRevert = null;// add initialization to window.onloadif (typeof window.onload == 'function'){	var func = window.onload;	window.onload = function(){func();InitPbSrc();InitPbPopBar();};}else{	window.onload = function(){InitPbSrc();InitPbPopBar();};}// loads all the popped src imagesfunction InitPbSrc(){	var images = null;	if (document.body)	{		if (document.body.getElementsByTagName)			images = document.body.getElementsByTagName("img");		else if (document.body.all)			images = document.body.all.tags("img");	}	if (images != null)	{		for (var x = 0; x < images.length; x++)		{			var poppedSrc = images[x].getAttribute('pbSrc');			if (poppedSrc != null)			{				if (images[x].id == "")					images[x].id = CreateRandomId();									if (pbSrc[images[x].id] == null)				{					pbSrc[images[x].id] = new Image();					pbSrc[images[x].id].src = poppedSrc;				}			}		}	}}// adds PopBar to imagesfunction InitPbPopBar(){	var images = null;	if (document.body)	{		if (document.body.getElementsByTagName)			images = document.body.getElementsByTagName("img");		else if (document.body.all)			images = document.body.all.tags("img");	}	if (images != null)	{		var imgArray = new Array();		for (var x = 0; x < images.length; x++)		{			if (images[x].id == "")				images[x].id = CreateRandomId();						imgArray[x] = images[x];		}		for (var x = 0; x < imgArray.length; x++)			CreatePopBar(imgArray[x]);	}}// initialize default popbox objectfunction InitPopBox(obj){	obj = GetRawObject(obj);	if (typeof popBox[obj.id] != "undefined" && popBox[obj.id] != null)		return obj;			var parent = document.body;	if (obj.id == "")		obj.id = CreateRandomId();	var elem = obj;	var startPos = GetElementPosition(elem);	var initSize = GetObjectSize(elem);	if (elem.style.position == "absolute" || elem.style.position == "relative")	{		parent = elem.parentNode;		startPos.x = parseInt(elem.style.left, 10);		startPos.y = parseInt(elem.style.top, 10);	}	// if there is a pbsrc then create that, else if it's not absolute or relative then create a copy	if (pbSrc[elem.id] != null || (elem.style.position != "absolute" && elem.style.position != "relative"))	{		var strSrc = (pbSrc[elem.id] != null) ? pbSrc[elem.id].src : elem.src;		var img = null;		try{img = document.createElement("<img src='" + strSrc + "' />");}		catch(ex){img = document.createElement("img"); img.src = strSrc;}		// copy image properties		img.border = elem.border;		img.className = elem.className;		img.height = elem.height;		img.id = "popcopy" + elem.id;		img.alt = elem.alt;		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";		img.style.cursor = elem.style.cursor;				parent.appendChild(img);		elem.style.visibility = "hidden";		elem = img;	}	popBoxIds.push(elem.id);		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:startPos.x,							yOriginal:startPos.y,							wOriginal:parseFloat(initSize.w),							hOriginal:parseFloat(initSize.h),							isPopped:false,							fnClick:null,							fnDone:null,							fnPre:null,							originalId:null,							cursor:""							};								if (typeof obj.onclick == "function")	{		popBox[elem.id].fnClick = elem.onclick;				if (popBoxAutoClose == true && (typeof obj.ondblclick != "function" || obj.ondblclick == null) && typeof obj.onmouseover != "function")			elem.ondblclick = function(){Revert(elem.id, null, elem.className);};	}	if (popBoxAutoClose == true && typeof obj.onmouseover == "function" && (typeof obj.onmouseout != "function" || obj.onmouseout == null))	{		if (popBoxMouseMoveRevert == true)		{			if (pbMouseMoveRevert == null)			{				pbMouseMoveRevert = new Array();				if (typeof document.onmousemove == 'function')				{					var func = document.onmousemove;					document.onmousemove = function(e){func(e);MouseMoveRevert(e);};				}				else				{					document.onmousemove = MouseMoveRevert;				}			}						pbMouseMoveRevert.push({id:elem.id, className:elem.className});		}		else		{			elem.onmouseout = function(){Revert(elem.id, null, elem.className);};		}	}	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 = elem;				if (bMDone == true && bSDone == true)		{			clearInterval(popBox[elem.id].interval);						elem.style.cursor = popBox[elem.id].cursor;			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 = "";					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					elem.parentNode.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;				CreatePopBar(obj);			}			else			{				popBox[elem.id].isPopped = true;				popBox[elem.id].isAnimating = false;				CreateRevertBar(elem);			}							if (func != null && typeof func == "function")				func(obj);		}	}	catch(ex){}}function HasRevertBar(obj){	if (typeof obj == "string") obj = GetRawObject(obj);		var elem = obj;	if (popBox[elem.id] != null && popBox[elem.id].originalId != null)		elem = GetRawObject(popBox[elem.id].originalId);	var pbShowBar = elem.getAttribute('pbShowRevertBar');	var pbShowText = elem.getAttribute('pbShowRevertText');	var pbShowImage = elem.getAttribute('pbShowRevertImage');	pbShowBar = (pbShowBar != null) ? (pbShowBar == "true" || pbShowBar == true) : popBoxShowRevertBar;	pbShowText = (pbShowText != null) ? (pbShowText == "true" || pbShowText == true) : popBoxShowRevertText;	pbShowImage = (pbShowImage != null) ? (pbShowImage == "true" || pbShowImage == true) : popBoxShowRevertImage;		return (pbShowBar || pbShowText || pbShowImage);}function HasCaption(obj){	if (typeof obj == "string") obj = GetRawObject(obj);	var elem = obj;	if (popBox[elem.id] != null && popBox[elem.id].originalId != null)		elem = GetRawObject(popBox[elem.id].originalId);	var pbShowCaption = elem.getAttribute('pbShowCaption');	pbShowCaption = (pbShowCaption != null) ? (pbShowCaption == "true" || pbShowCaption == true) : popBoxShowCaption;	var pbCaption = null;	if (pbShowCaption == true)	{		pbCaption = elem.getAttribute('pbCaption');		if (pbCaption == null && elem.title != "") pbCaption = elem.title;	}	return (pbCaption != null && pbCaption != "");}function CreateRevertBar(obj){	if (typeof obj == "string") obj = GetRawObject(obj);		var elem = obj;	if (popBox[elem.id] != null && popBox[elem.id].originalId != null)		elem = GetRawObject(popBox[elem.id].originalId);	var pbShowBar = elem.getAttribute('pbShowRevertBar');	var pbShowText = elem.getAttribute('pbShowRevertText');	var pbShowImage = elem.getAttribute('pbShowRevertImage');	var pbText = elem.getAttribute('pbRevertText');	var pbImage = elem.getAttribute('pbRevertImage');	pbShowBar = (pbShowBar != null) ? (pbShowBar == "true" || pbShowBar == true) : popBoxShowRevertBar;	pbShowText = (pbShowText != null) ? (pbShowText == "true" || pbShowText == true) : popBoxShowRevertText;	pbShowImage = (pbShowImage != null) ? (pbShowImage == "true" || pbShowImage == true) : popBoxShowRevertImage;	if (pbText == null) pbText = popBoxRevertText;	if (pbImage == null) pbImage = popBoxRevertImage;	var pbShowCaption = elem.getAttribute('pbShowCaption');	pbShowCaption = (pbShowCaption != null) ? (pbShowCaption == "true" || pbShowCaption == true) : popBoxShowCaption;	var pbCaption = null;	if (pbShowCaption == true)	{		pbCaption = elem.getAttribute('pbCaption');		if (pbCaption == null && elem.title != "") pbCaption = elem.title;	}	CreatePbBar(obj, pbShowBar, pbShowText, pbShowImage, pbText, pbImage, popBoxRevertBarAbove, true, pbCaption)}function CreatePopBar(obj){	if (typeof obj == "string") obj = GetRawObject(obj);	if (typeof pbPopBarFunc[obj.id] != 'undefined' && pbPopBarFunc[obj.id] != null) return;	var pbShowBar = obj.getAttribute('pbShowPopBar');	if (pbShowBar != null)	{		var pbShowText = obj.getAttribute('pbShowPopText');		var pbShowImage = obj.getAttribute('pbShowPopImage');		var pbText = obj.getAttribute('pbPopText');		var pbImage = obj.getAttribute('pbPopImage');		pbShowBar = (pbShowBar == "true" || pbShowBar == true);		pbShowText = (pbShowText != null) ? (pbShowText == "true" || pbShowText == true) : popBoxShowPopText;		pbShowImage = (pbShowImage != null) ? (pbShowImage == "true" || pbShowImage == true) : popBoxShowPopImage;		if (pbText == null) pbText = popBoxPopText;		if (pbImage == null) pbImage = popBoxPopImage;		CreatePbBar(obj, pbShowBar, pbShowText, pbShowImage, pbText, pbImage, popBoxPopBarAbove, false, null)	}}function CreatePbBar(obj, pbShowBar, pbShowText, pbShowImage, pbText, pbImage, pbBarAbove, isRevert, pbCaption){	if (pbShowBar == false && pbShowText == false && pbShowImage == false && pbCaption == null) return;	if (typeof obj == "string") obj = GetRawObject(obj);	var objCursor = "hand";	if (obj.currentStyle)		objCursor = obj.currentStyle.cursor;	else if (window.getComputedStyle)		objCursor = window.getComputedStyle(obj,null).cursor;	var fnClick = function(){if (typeof obj.onclick == 'function') obj.onclick();};	var fnMouseOut = function(){if (typeof obj.onmouseout == 'function') obj.onmouseout();};	var fnMouseOver = function(){if (typeof obj.onmouseover == 'function') obj.onmouseover();};	var fnRemove = new Array();	var isPositioned = (obj.style.position == "absolute" || obj.style.position == "relative");	var left = 0;	var top = 0;	var parentNode = obj.parentNode;	var objSpan = null;	if (isPositioned == true)	{		left = parseInt(obj.style.left, 10);		top = parseInt(obj.style.top, 10);		var padding = GetObjectPadding(obj);		left += padding.l;		top += padding.t;		}	else	{		objSpan = document.createElement("span");		objSpan = (obj.nextSibling != null) ? parentNode.insertBefore(objSpan, obj.nextSibling) : parentNode.appendChild(objSpan);		objSpan.style.position = "relative";		objSpan.style.left = "0px";		objSpan.style.top = "0px";		var floatValue = "";		if (obj.align == "left") floatValue = "left";		else if (obj.align == "right") floatValue = "right";		floatValue = (obj.style.styleFloat && obj.style.styleFloat != "") ? obj.style.styleFloat : (obj.style.cssFloat && obj.style.cssFloat != "") ? obj.style.cssFloat : floatValue;		if (typeof obj.style.styleFloat != "undefined") objSpan.style.styleFloat = floatValue;		else if (typeof obj.style.cssFloat != "undefined") objSpan.style.cssFloat = floatValue;				var imgPos = GetElementPosition(obj);		var spanPos = GetElementPosition(objSpan);		objSpan.style.left = (imgPos.x - spanPos.x) + "px";		objSpan.style.top = (floatValue != "") ? "1px" : (imgPos.y - spanPos.y) + "px";				parentNode = objSpan;	}	var width = parseInt(obj.style.width, 10);	var height = parseInt(obj.style.height, 10);	var size = GetObjectSize(obj);	if (isNaN(width) == true)		width = size.w;	else if (size.w > width)		left += ((size.w - width) / 2);	if (isNaN(height) == true)		height = size.h;	else if (size.h > height)		top += ((size.h - height) / 2);	if (pbBarAbove == true) top -= 20;	var z = obj.style.zIndex + 1;	if (pbShowBar == true)	{		var divTrans = document.createElement("div");		divTrans.id = "popBoxDivTrans" + z;		divTrans.style.width = width + "px";		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 = objCursor;		divTrans.style.zIndex = z;		if (pbBarAbove == false)		{			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;		if (isRevert == true)			divTrans.onmouseout = fnMouseOut;		else			divTrans.onmouseover = fnMouseOver;		parentNode.appendChild(divTrans);				fnRemove.push(function(){divTrans.parentNode.removeChild(divTrans);});	}	if (pbShowText == true)	{		var divText = document.createElement("div");		divText.id = "popBoxDivText" + z;		divText.style.width = width + "px";		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 = objCursor;		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 = pbText;		divText.onclick = fnClick;		if (isRevert == true)			divText.onmouseout = fnMouseOut;		else			divText.onmouseover = fnMouseOver;		parentNode.appendChild(divText);		fnRemove.push(function(){divText.parentNode.removeChild(divText);});	}		if (pbShowImage == true)	{		var imgPopped = null;		try{imgPopped = document.createElement("<img src='" + pbImage + "' />");}		catch(ex){imgPopped = document.createElement("img"); imgPopped.src = pbImage;}		imgPopped.id = "popBoxImgPopped" + z;		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 = objCursor;		imgPopped.style.zIndex = z;		imgPopped.onclick = fnClick;		if (isRevert == true)			imgPopped.onmouseout = fnMouseOut;		else			imgPopped.onmouseover = fnMouseOver;		parentNode.appendChild(imgPopped);		fnRemove.push(function(){imgPopped.parentNode.removeChild(imgPopped);});	}		if (pbCaption != null && pbCaption != "")	{		top += (height - 20);		if (pbBarAbove == true) top += 20;		if (popBoxCaptionBelow == true)  top += 20;		var divCapTrans = document.createElement("div");		divCapTrans.id = "popBoxDivCapTrans" + z;		divCapTrans.style.width = width - 2 + "px";		divCapTrans.style.height = "20px";		divCapTrans.style.borderStyle = "solid";		divCapTrans.style.borderWidth = "1px";		divCapTrans.style.borderColor = "#999999";		divCapTrans.style.padding = "0px";		divCapTrans.style.margin = "0px";		divCapTrans.style.position = "absolute";		divCapTrans.style.left = left + "px";		divCapTrans.style.top = top - 1 + "px";		divCapTrans.style.backgroundColor = "#ffffdd";		divCapTrans.style.zIndex = z;		if (popBoxCaptionBelow == false)		{			if (typeof divCapTrans.style.filter != 'undefined')				divCapTrans.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=70)";			if (typeof divCapTrans.style.opacity != 'undefined')				divCapTrans.style.opacity = "0.7";		}		parentNode.appendChild(divCapTrans);		fnRemove.push(function(){divCapTrans.parentNode.removeChild(divCapTrans);});		var divCapText = document.createElement("div");		divCapText.id = "popBoxDivCapText" + z;		divCapText.style.width = width - 20 + "px";		divCapText.style.height = "20px";		divCapText.style.borderStyle = "none";		divCapText.style.padding = "0px";		divCapText.style.margin = "0px";		divCapText.style.position = "absolute";		divCapText.style.left = left + 10 + "px";		divCapText.style.top = top + "px";		divCapText.style.textAlign = "center";		divCapText.style.fontFamily = "Arial, Verdana, Sans-Serif";		divCapText.style.fontSize = "10pt";		divCapText.style.overflowY = "hidden";		divCapText.style.backgroundColor = "Transparent";		divCapText.style.color = "#000000";		divCapText.style.zIndex = z;		parentNode.appendChild(divCapText);		fnRemove.push(function(){divCapText.parentNode.removeChild(divCapText);});		AddCaptionText(divCapTrans, divCapText, pbCaption);				if (popBoxExpandCaptions == true && divCapText.hasChildNodes() == true)		{			var spanMore = divCapText.lastChild;			if (spanMore && spanMore.onclick)			{				spanMore.id = CreateRandomId();				setTimeout(new Function("", "var spanMore = GetRawObject('" + spanMore.id + "'); if (spanMore != null && spanMore.onclick) { spanMore.onclick(); }"), 10);			}		}	}	if (fnRemove.length != 0)	{		if (objSpan != null)			fnRemove.push(function(){objSpan.parentNode.removeChild(objSpan);});				if (isRevert == true)		{			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]();}};		}		else		{			pbPopBarFunc[obj.id] = function(){for(var x = 0; x < fnRemove.length; x++){fnRemove[x]();}};		}	}}function AddCaptionText(divCapTrans, divCapText, caption){	var width = parseInt(divCapText.style.width, 10);	var divSizer = document.createElement("div");	divSizer.style.position = "absolute";	divSizer.style.width = width + "px";	divSizer.style.margin = "0px";	divSizer.style.fontFamily = divCapText.style.fontFamily;	divSizer.style.fontSize = divCapText.style.fontSize;	divSizer.style.visibility = "hidden";	divSizer.innerHTML = caption;	document.body.appendChild(divSizer);	var newSize = GetObjectSize(divSizer);	if (newSize.h > 20)	{		divSizer.innerHTML = caption + "..." + popBoxCaptionLessText;		newSize = GetObjectSize(divSizer);		var fullCaption = caption;		var charCount = parseInt(width * 0.14, 10) - 5; // safe estimate		divCapText.innerHTML = caption.substr(0, charCount) + "...";				var spanMore = document.createElement("span");		spanMore.style.color = "#0000ff";		spanMore.style.textDecoration = "underline";		spanMore.style.cursor = "pointer";		spanMore.onclick = function(){spanMore.parentNode.removeChild(spanMore);ResizeCaption(divCapTrans.id,divCapText.id,newSize.h,fullCaption);};		spanMore.innerHTML = popBoxCaptionMoreText;		divCapText.appendChild(spanMore);	}	else		divCapText.innerHTML = caption;	document.body.removeChild(divSizer);}function ResizeCaption(divCapTrans, divCapText, height, caption){	if (typeof divCapTrans == "string") divCapTrans = GetRawObject(divCapTrans);	if (typeof divCapText == "string") divCapText = GetRawObject(divCapText);	var h = parseInt(divCapText.style.height, 10);	var top = parseInt(divCapText.style.top, 10);		if (h < height)	{		if (h == 20)		{			height += 10;			divCapText.style.paddingTop = "5px";			divCapText.innerHTML = caption + "...";						var spanLess = document.createElement("span");			spanLess.style.color = "#0000ff";			spanLess.style.textDecoration = "underline";			spanLess.style.cursor = "pointer";			spanLess.onclick = function(){spanLess.parentNode.removeChild(spanLess);divCapText.innerHTML = caption;ResizeCaption(divCapTrans.id,divCapText.id,20,caption);};			spanLess.innerHTML = popBoxCaptionLessText;			divCapText.appendChild(spanLess);						if (popBoxCaptionBelow == false)			{				if (typeof divCapTrans.style.filter != 'undefined')					divCapTrans.style.filter = "";				if (typeof divCapTrans.style.opacity != 'undefined')					divCapTrans.style.opacity = "1.0";			}		}				if ((h + 10) >= height)		{			if (popBoxExpandCaptionsBelow == false)				top -= (height - h);			h = height;		}		else		{			if (popBoxExpandCaptionsBelow == false)				top -= 10;			h += 10;		}				divCapTrans.style.height = h + "px";		divCapText.style.height = h + "px";		divCapTrans.style.top = (top - 1) + "px";		divCapText.style.top = top + "px";		if (h != height)			setTimeout("ResizeCaption(\"" + divCapTrans.id + "\",\"" + divCapText.id + "\"," + height + ",\"" + caption + "\")", 10);	}	else	{		if ((h - 10) <= height)		{			if (popBoxExpandCaptionsBelow == false)				top += (h - height);			h = height;		}		else		{			if (popBoxExpandCaptionsBelow == false)				top += 10;			h -= 10;		}				divCapTrans.style.height = h + "px";		divCapText.style.height = h + "px";		divCapTrans.style.top = (top - 1) + "px";		divCapText.style.top = top + "px";		divCapText.style.paddingTop = "0px";		if (h == height)		{			if (popBoxCaptionBelow == false)			{				if (typeof divCapTrans.style.filter != 'undefined')					divCapTrans.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=70)";				if (typeof divCapTrans.style.opacity != 'undefined')					divCapTrans.style.opacity = "0.7";			}			AddCaptionText(divCapTrans, divCapText, caption);		}		else		{			setTimeout("ResizeCaption(\"" + divCapTrans.id + "\",\"" + divCapText.id + "\"," + height + ",\"" + caption + "\")", 10);		}	}}function CreateWaitImage(obj){	if (typeof obj == "string") obj = GetRawObject(obj);	var newId = "popBoxImgWait" + obj.id;	var imgWait = GetRawObject(newId);	if (imgWait != null)		return imgWait;	var left = 0;	var top = 0;	if (obj.style.position == "absolute" || obj.style.position == "relative")	{		left = parseInt(obj.style.left, 10);		top = parseInt(obj.style.top, 10);	}	else	{		var xy = GetElementPosition(obj);		left = xy.x;		top = xy.y;		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 (isNaN(width) == true)		width = size.w;	else if (size.w > width)		left += ((size.w - width) / 2);	if (isNaN(height) == true)		height = size.h;	else if (size.h > height)		top += ((size.h - height) / 2);	var parentNode = obj.parentNode;	try{imgWait = document.createElement("<img src='" + popBoxWaitImage.src + "' />");}	catch(ex){imgWait = document.createElement("img"); imgWait.src = popBoxWaitImage.src;}	imgWait.id = newId;	imgWait.style.position = "absolute";	imgWait.style.left = (left + (width / 2) - (popBoxWaitImage.width / 2)) + "px";	imgWait.style.top = (top + (height / 2) - (popBoxWaitImage.height / 2)) + "px";	imgWait.style.cursor = obj.style.cursor;	imgWait.style.zIndex = obj.style.zIndex + 1;	parentNode.appendChild(imgWait);	return imgWait;}// encapsulates the Popped image sizing logicfunction CalculateImageDimensions(newWidth, newHeight, fullWidth, fullHeight, windowSize){	if (newWidth == null)	{		if (newHeight == null)		{			newWidth = fullWidth;			newHeight = fullHeight;		}		else if (newHeight == 0)		{			newHeight = Math.min(windowSize.y, fullHeight);			var scale = parseFloat(newHeight) / parseFloat(fullHeight);			newWidth = parseInt(fullWidth * scale);		}		else		{			var scale = parseFloat(newHeight) / parseFloat(fullHeight);			newWidth = parseInt(fullWidth * scale);		}	}	else if (newWidth == 0)	{		if (newHeight == null)		{			newWidth = Math.min(windowSize.x, fullWidth);			var scale = parseFloat(newWidth) / parseFloat(fullWidth);			newHeight = parseInt(fullHeight * scale);		}		else if (newHeight == 0)		{			if (windowSize.x < fullWidth || windowSize.y < fullHeight)			{				var scale = Math.min(parseFloat(windowSize.x) / parseFloat(fullWidth), parseFloat(windowSize.y) / parseFloat(fullHeight));				newWidth = parseInt(fullWidth * scale);				newHeight = parseInt(fullHeight * scale);			}			else			{				newWidth = fullWidth;				newHeight = fullHeight;			}		}		else		{			var scale = parseFloat(newHeight) / parseFloat(fullHeight);			newWidth = Math.min(windowSize.x, parseInt(fullWidth * scale));		}	}	else	{		if (newHeight == null)		{			var scale = parseFloat(newWidth) / parseFloat(fullWidth);			newHeight = parseInt(fullHeight * scale);		}		else if (newHeight == 0)		{			var scale = parseFloat(newWidth) / parseFloat(fullWidth);			newHeight = Math.min(windowSize.y, parseInt(fullHeight * scale));		}	}		return {x:newWidth, y:newHeight};}function GetObjectToPop(obj){	if (typeof obj == "string") obj = GetRawObject(obj);	if (obj.id == "")		obj.id = CreateRandomId();	var poppedSrc = obj.getAttribute('pbSrcNL');	if (poppedSrc == null && pbSrc[obj.id] == null)		poppedSrc = obj.getAttribute('pbSrc');	if (poppedSrc != null && pbSrc[obj.id] == null)	{		var poppedImg = new Image();		poppedImg.src = poppedSrc;				if (pbSrc[obj.id] != null)			delete pbSrc[obj.id];					pbSrc[obj.id] = poppedImg;	}		return (pbSrc[obj.id] != null) ? pbSrc[obj.id] : obj;}function GetPoppedImageSize(obj){	var size = {x:0, y:0};	if (obj != null && typeof obj.id != 'undefined')	{		if (pbSrc[obj.id] != null)		{			size.x = pbSrc[obj.id].width;			size.y = pbSrc[obj.id].height;		}		else if (obj.naturalWidth && obj.naturalHeight)		{			size.x = obj.naturalWidth;			size.y = obj.naturalHeight;		}		else		{			var img = new Image();			img.src = obj.src;			size.x = img.width;			size.y = img.height;			delete img;		}	}	return size;}/**************************************************************************************************** This is where the user-callable section starts.* Function signatures above this line are subject to change.***************************************************************************************************/// Globals you can assignvar popBoxAutoClose = true;var popBoxMouseMoveRevert = true;var popBoxWaitImage = new Image();popBoxWaitImage.src = "css/images/spinner40.gif";var popBoxShowRevertBar = true;var popBoxShowRevertText = true;var popBoxShowRevertImage = true;var popBoxRevertText = "Click the image to shrink it.";var popBoxRevertImage = "css/images/magminus.gif";var popBoxRevertBarAbove = false;// there is no popBoxShowPopBar global, but instead the pbShowPopBar attribute must be// set on the img for the PopBar funtionality to work (can be true or false)var popBoxShowPopText = true;var popBoxShowPopImage = true;var popBoxPopText = "Click to expand.";var popBoxPopImage = "css/images/magplus.gif";var popBoxPopBarAbove = false;var popBoxShowCaption = false;var popBoxCaptionBelow = false;var popBoxCaptionMoreText = "more";var popBoxCaptionLessText = "less";var popBoxExpandCaptions = false;var popBoxExpandCaptionsBelow = false;// these custom attributes on the <img> element will override the globals above// pbShowRevertBar, pbShowRevertText, pbShowRevertImage, pbRevertText, pbRevertImage// pbShowPopBar, pbShowPopText, pbShowPopImage, pbPopText, pbPopImage, pbShowCaption// 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(obj, startX, startY, endX, endY, startW, startH, endW, endH, speedM, speedS, className, fnDone){	if (typeof obj == "string") obj = GetRawObject(obj);	if (obj == null || typeof obj != "object" || isNaN(startX) || isNaN(startY) || isNaN(endX) || isNaN(endY) || isNaN(startW) || isNaN(startH) || isNaN(endW) || isNaN(endH) || isNaN(speedM) || isNaN(speedS))		return;	var elem = InitPopBox(obj);	if (popBox[elem.id].isAnimating == true)	{		var str = "PopBox('" + elem.id + "'," + startX + "," + startY + "," + endX + "," + endY + "," + startW + "," + startH + "," + endW + "," + 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;		popBox[elem.id].cursor = elem.style.cursor;		elem.style.cursor = "default";		if (popBox[elem.id].isPopped == false)			elem.style.zIndex = ++popBoxZ;		var id = elem.id;		if (popBox[elem.id].originalId != null) id = popBox[elem.id].originalId;		if (pbPopBarFunc[id] != null)		{			pbPopBarFunc[id]();			pbPopBarFunc[id] = null;		}					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, or set the* popBoxAutoClose global to true and Revert will be called for you.***************************************************************************************************/// this basic method centers the image in the browser and displays it at its full resolution, subject to window size.function Pop(obj, speed, className){	PopEx(obj, null, null, 0, 0, speed, className);}// If newLeft is null then the image is centered horizontally in the browser. Ditto for newTop (vertically).// 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 newWidth is 0 then the full image width is used, subject to scaling and window size. Ditto for newHeight.// If newWidth is null the full width is used, regardless of window size, but still subject to scaling. Ditto for newHeight.function PopEx(obj, newLeft, newTop, newWidth, newHeight, speed, className){	if (typeof obj == "string") obj = GetRawObject(obj);	var objToPop = GetObjectToPop(obj);	var isReady = (typeof objToPop.readyState != 'undefined') ? (objToPop.readyState == "complete") : ((typeof objToPop.complete != 'undefined') ? (objToPop.complete == true) : true);	if (isReady == false)	{		var imgWait = CreateWaitImage(obj);		var str = "var imgWait = GetRawObject('" + imgWait.id + "'); if (imgWait != null) { imgWait.parentNode.removeChild(imgWait); } PopEx('" + obj.id + "',";		if (newLeft == null)			str += newLeft + ",";		else			str += "'" + newLeft + "',";		if (newTop == null)			str += newTop + ",";		else			str += "'" + newTop + "',";		str += newWidth + "," + newHeight + "," + speed + ",'" + className + "');";		objToPop.onload = new Function("", str);		return;	}	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);	// figure out the max window size	var windowSize = GetInsideWindowSize();	var hasRevertBar = HasRevertBar(obj);	var hasCaption = HasCaption(obj);	if (hasRevertBar == true && popBoxRevertBarAbove == true) windowSize.y -= 20;	if (hasCaption == true && popBoxCaptionBelow == true) windowSize.y -= 20;	var fullSize = {x:newWidth, y:newHeight};	if (newWidth == 0 || newHeight == 0 || newWidth == null || newHeight == null)	{		fullSize = GetPoppedImageSize(elem);				// some browsers have a race condition where it still doesn't get set so just fill the window		if (fullSize.x == 0 || fullSize.y == 0)		{			var scale = Math.min(parseFloat(windowSize.x) / parseFloat(elem.width), parseFloat(windowSize.y) / parseFloat(elem.height));			fullSize.x = parseInt(elem.width * scale);			fullSize.y = parseInt(elem.height * scale);		}	}	// adjust window size variables for new image boundaries	if (newLeft != null)	{		if (typeof newLeft == "string" && newLeft.indexOf("A") == (newLeft.length - 1))			newLeft = parseInt(newLeft, 10);		else			newLeft = popBox[elem.id].xOriginal + parseInt(newLeft, 10);					windowSize.x -= newLeft;	}	if (newTop != null)	{		if (typeof newTop == "string" && newTop.indexOf("A") == (newTop.length - 1))			newTop = parseInt(newTop, 10);		else			newTop = popBox[elem.id].yOriginal + parseInt(newTop, 10);					windowSize.y -= newTop;	}	// adjust for scrollbars that might appear (quick compromise for browser incompatibilities)	if (newWidth == null && newHeight == 0 && fullSize.x > (windowSize.x - 20))		windowSize.y -= 20;	else if (newWidth == 0 && newHeight == null && fullSize.y > (windowSize.y - 4))		windowSize.x -= 4;	var newSize = CalculateImageDimensions(newWidth, newHeight, fullSize.x, fullSize.y, windowSize);	// width and height are now set, so position it	if (newLeft == null || newTop == null)	{		var scroll = GetScrollOffset();		if (newLeft == null)		{			newLeft = ((windowSize.x / 2) + scroll.x) - (newSize.x / 2);			if (newLeft < 0) newLeft = 0;		}				if (newTop == null)		{			newTop = ((windowSize.y / 2) + scroll.y) - (newSize.y / 2);			if (hasRevertBar == true && popBoxRevertBarAbove == true) newTop += 10;			if (hasCaption == true && popBoxCaptionBelow == true) newTop -= 10;			if (newTop < 0) newTop = 0;		}	}	var func = null;	if (typeof PostPopProcessing == "function")		func = PostPopProcessing;	if (typeof PrePopProcessing == "function")		PrePopProcessing(obj);	PopBox(elem, startX, startY, newLeft, newTop, popBox[elem.id].wOriginal, popBox[elem.id].hOriginal, newSize.x, newSize.y, speed, speed, className, func);}function PopInPlace(obj, speed, className){	if (typeof obj == "string") obj = GetRawObject(obj);	var objToPop = GetObjectToPop(obj);	var isReady = (typeof objToPop.readyState != 'undefined') ? (objToPop.readyState == "complete") : ((typeof objToPop.complete != 'undefined') ? (objToPop.complete == true) : true);	if (isReady == false)	{		var imgWait = CreateWaitImage(obj);		var str = "var imgWait = GetRawObject('" + imgWait.id + "'); if (imgWait != null) { imgWait.parentNode.removeChild(imgWait); } PopInPlace('" + obj.id + "'," + speed + ",'" + className + "');";		objToPop.onload = new Function("", str);		return;	}	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);	// figure out the max window size	var windowSize = GetInsideWindowSize();	var hasRevertBar = HasRevertBar(obj);	var hasCaption = HasCaption(obj);	if (hasRevertBar == true && popBoxRevertBarAbove == true) windowSize.y -= 20;	if (hasCaption == true && popBoxCaptionBelow == true) windowSize.y -= 20;		var fullSize = GetPoppedImageSize(elem);		// some browsers have a race condition where it still doesn't get set so just fill the window	if (fullSize.x == 0 || fullSize.y == 0)	{		var scale = Math.min(parseFloat(windowSize.x) / parseFloat(elem.width), parseFloat(windowSize.y) / parseFloat(elem.height));		fullSize.x = parseInt(elem.width * scale);		fullSize.y = parseInt(elem.height * scale);	}	var newSize = CalculateImageDimensions(0, 0, fullSize.x, fullSize.y, windowSize);	var newLeft = startX - parseInt(((newSize.x - popBox[elem.id].wOriginal) / 2), 10);	var newTop = startY - parseInt(((newSize.y - popBox[elem.id].hOriginal) / 2), 10);	// have the best case position, now adjust it if it would expand beyond the window	var scroll = GetScrollOffset();	if (scroll.x > newLeft)	{		newLeft = scroll.x;	}	else	{		var xOffset = ((newLeft + newSize.x) - (windowSize.x + scroll.x));		if (xOffset > 0) newLeft -= xOffset;	}	if (scroll.y > newTop)	{		newTop = scroll.y;	}	else	{		var yOffset = ((newTop + newSize.y) - (windowSize.y + scroll.y));		if (yOffset > 0) newTop -= yOffset;	}	if (hasRevertBar == true && popBoxRevertBarAbove == true) newTop += 10;	if (hasCaption == true && popBoxCaptionBelow == true) newTop -= 10;	if (newTop < 0) newTop = 0;		var func = null;	if (typeof PostPopProcessing == "function")		func = PostPopProcessing;	if (typeof PrePopProcessing == "function")		PrePopProcessing(obj);	PopBox(elem, startX, startY, newLeft, newTop, popBox[elem.id].wOriginal, popBox[elem.id].hOriginal, newSize.x, newSize.y, 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 (obj == null || typeof popBox[obj.id] == "undefined" || popBox[obj.id] == null) return;	if (typeof speed == 'undefined' || speed == null || speed == 0)		speed = Math.max(popBox[obj.id].velM, popBox[obj.id].velS);			if (typeof className == 'undefined')		className = popBox[obj.id].originalClassName;		var func = null;	if (typeof PostRevertProcessing == "function")		func = PostRevertProcessing;	if (typeof PreRevertProcessing == "function")		PreRevertProcessing(obj);	PopBox(obj, popBox[obj.id].xTarg, popBox[obj.id].yTarg, popBox[obj.id].xOriginal, popBox[obj.id].yOriginal, popBox[obj.id].wTarg, popBox[obj.id].hTarg, popBox[obj.id].wOriginal, popBox[obj.id].hOriginal, speed, speed, className, func);}// Helper function to revert all images.function RevertAll(speed, className){	for (var i = 0; i < popBoxIds.length; i++)		Revert(popBoxIds[i], speed, className);}/**************************************************************************************************** These methods are the pre and 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.***************************************************************************************************/// called before the Pop begins// The parameter is the original object//function PrePopProcessing(obj)//{//}// called after the pop is complete// The parameter is the copy of the object that is resized//function PostPopProcessing(obj)//{//}// called before the Revert begins// The parameter is the copy of the object that is resized//function PreRevertProcessing(obj)//{//}// called after the Revert is complete// The parameter is the original object//function PostRevertProcessing(obj)//{//}