
var userPopupHandler = {
							isIE : ((document.all) ? true : false),
							popObjId : 'infoPopUp',
							popTimeout : 500,		/*	ms	*/
							popTimerTrigger : false,
							popHeader : '',
							popFooter : '',
							popActiveDiv : false,
							popLoadedWrap : false,
							popLoading : '<img src="/images/updating.gif" alt="" border="0">',
							popAddToY : 0,
							popGetLeft : function (obj) {
								var left = 0;
								while (obj != null ) {
									left += obj.offsetLeft;
									obj = obj.offsetParent;
								}
								return left;
							},
							popGetTop : function (obj) {
								var top = 0;
								while (obj != null ) {
									top += obj.offsetTop;
									obj = obj.offsetParent;
								}
								return top;
							},
						/*	Checks if parent elements have been scrolled */
							popGetParentScrollElement : function (obj) {
								while (obj != null) {
									var tmp = obj.scrollTop;
									if (tmp > 0) {
										if (obj.offsetParent != null) {	/* Do not return scrolled object if it is the body element */
											return obj;
										}
									}
									obj = obj.offsetParent;
								}
								return false;
							},
							popSetHeader : function (content) {
								this.popHeader = content;
							},
							popSetFooter : function (content) {
								this.popFooter = content;
							},
							
						/*	Unset other parameter as it will make no sense to the browser if both left and right are set */
							popSetPos : function (obj, x, y, side) {
								obj.style.top = y + 'px';
								if (side == 'right') {
									obj.style.left = x + 'px';
									obj.style.right = '';
								} else {
									obj.style.right = x + 'px';
									obj.style.left = '';
								}
							},

							popInsertContent : function (content) {
								document.getElementById(this.popObjId).innerHTML = (this.popHeader + content + this.popFooter);
							},

							popLoadContent : function (url) {
								this.popInsertContent(this.popLoading);
								makeHttpRequest(url, "userPopupHandler.popInsertContent");
							},

							popClearTimer : function () {
								window.self.clearTimeout(this.popTimerTrigger);
							},

							popShow : function () {
								this.popClearTimer();
								var popObj = document.getElementById(this.popObjId);
								popObj.style.display = 'block';
							},
							popHide : function () {
								this.popClearTimer();
								var popObj = document.getElementById(this.popObjId);
								popObj.style.display = 'none';
							},

							popGetWindowWidth : function () {
								var x = 0;
								if (self.innerHeight) {
									x = self.innerWidth;
								} else if (document.documentElement && document.documentElement.clientHeight) {
									x = document.documentElement.clientWidth;
								} else if (document.body) {
									x = document.body.clientWidth;
								}
								return x;
							},
							popGetWindowHeight : function () {
								var y = 0;
								if (self.innerHeight) {
									y = self.innerHeight;
								} else if (document.documentElement && document.documentElement.clientHeight) {
									y = document.documentElement.clientHeight;
								} else if (document.body) {
									y = document.body.clientHeight;
								}
								return y;
							},

							/**
							 *	loads html for popup, inserts it into wrapper, and shows the popup
							 *
							 *	@param DOMNode			domElem				The dom elem that the popup is positioned in relativity to...
							 *	@param string			urlOrHtml
							 *	@param undefined|true	dontMakeHttpRequest	True means that the HTML is inserted directly.. (aka no url i called)
							 */
							popGeneral : function (domElem, urlOrHtml, dontMakeHttpRequest) {
								var theHandler = this;
								theHandler.popClearTimer();

								/* Set popHeader and popFooter once */
								if (theHandler.popLoadedWrap === false) {

									makeHttpRequest('/ajax/popup_header.ajax.php?go=true', "userPopupHandler.popSetHeader");
									makeHttpRequest('/ajax/popup_footer.ajax.php?go=true', "userPopupHandler.popSetFooter");

									theHandler.popLoadedWrap = true;

									window.self.setTimeout(function() {
										if (dontMakeHttpRequest === undefined) {
											userPopupHandler.popGeneral(domElem, urlOrHtml);
										} else {
											theHandler.popInsertContent(urlOrHtml);
										}
									}, theHandler.popTimeout);
									return;
								}

								if (theHandler.popActiveDiv != domElem) {
									theHandler.popActiveDiv = domElem;

									if (dontMakeHttpRequest === undefined) {
										theHandler.popInsertContent(theHandler.popLoading);
										makeHttpRequest(urlOrHtml, "userPopupHandler.popInsertContent");

									} else {
										theHandler.popInsertContent(urlOrHtml);
									}
								}

								/* objWidth is an approximated value of how wide the element will be */
								var objWidth	= 340;
								var popObj 		= document.getElementById(theHandler.popObjId);
								var xMargin		= -2;
								var yMargin 	= -3;
								var left 		= theHandler.popGetLeft(domElem);
								var top 		= theHandler.popGetTop(domElem);
								var width 		= domElem.offsetWidth;
								var height 		= domElem.offsetHeight;
								var x 			= left + width + xMargin;
								var y 			= top + yMargin;
								var side 		= 'right';
								var winWidth 	= theHandler.popGetWindowWidth();

								/* Check if scrollbar is active */
								if (theHandler.popGetParentScrollElement(domElem)) {
									domElem			= theHandler.popGetParentScrollElement(domElem);
									left 		= theHandler.popGetLeft(domElem);
									top 		= theHandler.popGetTop(domElem);
									width 		= domElem.offsetWidth;
									height 		= domElem.offsetHeight;
									x 			= left + width + xMargin;
									y 			= top + yMargin;
								}

								/* Does popup overflow to the right, hang to the left */
								if (winWidth < (left + width + objWidth)) {
									x 		= winWidth - left + xMargin;
									side 	= 'left';
								}

								theHandler.popSetPos(popObj, x, y, side);
								theHandler.popTimerTrigger = window.self.setTimeout(function () {
									theHandler.popShow();
								}, theHandler.popTimeout);
							}
						}

/* User popup */
function popMouseOver(obj, userId) {
	var url = '/ajax/userpop.php?userid=' + userId;
	userPopupHandler.popGeneral(obj, url);
}

/* Challenge popup */
function popMouseOverChallenge(obj, challengeId) {
	var url = '/ajax/challenge_change_dialogue.php?challengeId=' + challengeId;
	userPopupHandler.popGeneral(obj, url);
}

/* Badge popup */
function popMouseOverBadge(obj, userId, badgeId) {
	var url = "/ajax/badgepop.php?userid=" + userId + "&badgeid=" + badgeId;
	userPopupHandler.popGeneral(obj, url);
}

/* Show image */
function popMouseOverImage(obj, image) {
	var url = "/ajax/imagepop.php?path=" + image;
	userPopupHandler.popGeneral(obj, url);
}

/* Trophy */
function popMouseOverTrophy(obj, userId, gid, placing, trophyImage, achieved, contestantNum) {
	var url = "/ajax/trophypop.php";
		url = url + "?gid=" + gid;
		url = url + "&userid=" + userId;
		url = url + "&placing=" + placing;
		url = url + "&trophyImage=" + trophyImage;
		url = url + "&achieved=" + achieved;
		url = url + "&contestantNum=" + contestantNum;
	userPopupHandler.popGeneral(obj, url);
}

/* Gifts */
function popMouseOverGift(obj, userId, giftId) {
	var url = "/ajax/giftpop.php";
		url = url + "?userid=" + userId;
		url = url + "&giftid=" + giftId;
	userPopupHandler.popGeneral(obj, url);
}

/* Hide element */
 function popMouseOut() {
	var theHandler = userPopupHandler;

	theHandler.popClearTimer();
	theHandler.popTimerTrigger = window.self.setTimeout(function () {
		theHandler.popHide();
	}, theHandler.popTimeout);
}
function popClearTimer () {
	userPopupHandler.popClearTimer();
}
function popLoadContent (url) {
	userPopupHandler.popLoadContent(url);
}