var IE				= (document.all) ? true : false;
var popObjId 		= 'infoPopUp';
var popTimeout 		= 500; // MS
var popTimerTrigger = false;
var popHeader		= '';
var popFooter		= '';
var popActiveDiv	= false;
var popLoadedWrap	= false;
var popLoading		= '<img src="/images/updating.gif" alt="" border="0">';
var popAddToY		= 0;

function popGetLeft(obj) {
	var left = 0;
	while (obj != null ) {
		left += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	
	return left;
}

function popGetTop(obj) {
	var top = 0;
	while (obj != null ) {
		top += obj.offsetTop;
		obj = obj.offsetParent;
	}
	
	return top;
}

function popSetHeader(content) {
	popHeader = content;
}

function popSetFooter(content) {
	popFooter = content;
}

/* Checks if parent elements have been scrolled */
function popGetParentScrollElement(obj) {
	while (obj != null ) {
		
		if (IE) {
			var tmp = obj.scrollTop;
		} else {
			var tmp = obj.scrollTop;
		}
		
		if (tmp > 0) {
			
			/* Do not return scrolled object if it is the body element */
			if (obj.offsetParent != null) {
				return obj;
			}
		}
		obj = obj.offsetParent;
	}
	
	return false;
}

function popGeneral(obj, url) {
	popClearTimer();
	
	/* Set popHeader and popFooter once */
	if (popLoadedWrap == false) {
		
		makeHttpRequest('/ajax/popup_header.ajax.php?go=true', "popSetHeader");
		makeHttpRequest('/ajax/popup_footer.ajax.php?go=true', "popSetFooter");
		
		popLoadedWrap = true;
		
		setTimeout(function(){popGeneral(obj, url)}, popTimeout);
		
		return;
	}

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

	/* Check if scrollbar is active */
	if (popGetParentScrollElement(obj)) {
		obj				= popGetParentScrollElement(obj);
		var left 		= popGetLeft(obj);
		var top 		= popGetTop(obj);
		var width 		= obj.offsetWidth;
		var height 		= obj.offsetHeight;
		var x 			= left + width + xMargin;
		var y 			= top + yMargin;
	}
	
	/* Does popup overflow to the right, hang to the left */
	if (winWidth < (left + width + objWidth)) {
		var x 		= winWidth - left + xMargin;
		var side 	= 'left';
	}
	
	popSetPos(popObj, x, y, side);
	popTimerTrigger = setTimeout("popShow()", popTimeout);

}

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

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

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

/* Show image */
function popMouseOverImage(obj, image) {
	var url = "/ajax/imagepop.php?path=" + image;
	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;
	popGeneral(obj, url);
}

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

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

function popLoadContent(url) {
	popInsertContent(popLoading);
	makeHttpRequest(url, "popInsertContent");
}

/* Hide element */
function popMouseOut() {
	popClearTimer();
	popTimerTrigger = setTimeout("popHide()", popTimeout);
}

/* Unset other parameter as it will make no sense to the browser if both left and right are set */
function popSetPos(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 = '';
	}
}

function popClearTimer() {
	clearTimeout(popTimerTrigger);
}

function popShow() {
	popClearTimer();
	var popObj = document.getElementById(popObjId);
	popObj.style.display = 'block';
}

function popHide() {
	popClearTimer();
	var popObj = document.getElementById(popObjId);
	popObj.style.display = 'none';
}

function popGetWindowWidth() {
	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;
}

function popGetWindowHeight() {
	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;
}