function HandleAlertMessage(message, id, type) {
	var target = jQuery('#' + id);
	if (target.length == 0) target = jQuery('#error-message');
	if (target.length == 0) target = jQuery('#user-message');
	if (target.length > 0) {
		target.html(message);
		target.attr('class', 'message');
		switch (type) {
			case "notice":
				target.addClass('message-notice');
				break;
			case "alert":
				target.addClass('message-alert');
				break;
			case "success":
				target.addClass('message-success');
				break;
		}
		target.show();
		ScrollToElement(target);
	} else
		alert(message);
}
function ScrollToElement(target) {
	//note: target element should be jQuery wrapped and visible (hidden will not return correct offset values)
	var win = jQuery(window);
	//if target is above or below visible window space, scroll to target
	//above, current window Y greater than target Y
	if ((win.scrollTop() > target.offset().top) || ((target.offset().top - win.height()) > win.scrollTop())) {
		jQuery('html, body').animate({ scrollTop: target.offset().top - 10 }, 200);
	}
}
/***
* getOffsetLeft and getOffsetTop use element's parentOffset to calculate the
* absolute position. If the element is absolutely positioned, the "left" style is used
***/
function getOffsetLeft(p) {
	return p.offsetParent != null ? getInt(p.offsetLeft) + getOffsetLeft(p.offsetParent)
		: ((new RegExp("^(absolute)$", "i")).test(getStyleByObj(p, "position")) ? getInt(p.offsetLeft) : getInt(getStyleByObj(p, "left")));
}
function getOffsetTop(p) {
	return p.offsetParent != null ? getInt(p.offsetTop) + getOffsetTop(p.offsetParent)
		: ((new RegExp("^(absolute)$", "i")).test(getStyleByObj(p, "position")) ? getInt(p.offsetTop) : getInt(getStyleByObj(p, "top")));
}

/* Used in getEventX and getEventY*/
function getEventTarget(e) {
	var obj = e.srcElement ? e.srcElement : e.target;
	return obj;
}

function showObject(obj, useiframehelper) {
	if (useiframehelper == null) useiframehelper = true;
	if (typeof (obj) == "string") obj = $(obj);
	if (obj) {
		if (getStyleByObj(obj, "display") == "none") {
			obj.displayattribute = "display";
		} else if (getStyleByObj(obj, "visibility") == "hidden") {
			obj.displayattribute = "visibility";
		}
		switch (obj.displayattribute) {
			case "visibility": obj.style.visibility = "visible";
				break;
			case "display": obj.style.display = "block";
				break;
		}
		if (useiframehelper) if ((new RegExp("^(absolute)$", "i")).test(getStyleByObj(obj, "position"))) showIFrameHelper(obj);
	}
}

function hideObject(obj, displayattribute) {
	if (typeof (obj) == "string") obj = $(obj);
	if (obj) {
		hideIFrameHelper(obj);
		if (displayattribute == null)
			displayattribute = obj.displayattribute ? obj.displayattribute : (new RegExp("^(absolute)$", "i")).test(getStyleByObj(obj, "position")) ? "visibility" : "display";
		switch (displayattribute) {
			case "visibility":
				obj.style.visibility = "hidden";
				break;
			default:
				obj.style.visibility = "";
				obj.style.display = "none";
				break;
		}
	}
}

/* used in showObject (not sure if it's needed)*/
function showIFrameHelper(obj, stoptrying) {
	var defaultZIndex = 100;
	if (!obj.parentNode && !stoptrying) {
		document.tempobj = obj;
		eval("document.iframehelper_" + obj.uniqueID + " = document.tempobj");
		window.setTimeout("showIFrameHelper(document.iframehelper_" + obj.uniqueID + ", true", 1);
	} else if (obj.parentNode) {
		if (gBrowserType() == 'IE' && gOS() == 'WIN' && gBrowserVersion() > 5) {
			var IFRAME_ID = 'iframehelper_' + obj.uniqueID;
			if (!$(IFRAME_ID)) {
				var newiframe = document.createElement('iframe');
				newiframe.setAttribute("id", IFRAME_ID);
				newiframe.style.position = "absolute";
				newiframe.style.visibility = "hidden";
				newiframe.style.border = 0;
				obj.parentNode.appendChild(newiframe);
			}
			var iframe = $(IFRAME_ID);
			iframe.width = obj.offsetWidth;
			iframe.height = obj.offsetHeight;
			iframe.style.left = obj.offsetLeft;
			iframe.style.top = obj.offsetTop;
			iframe.style.zIndex = getStyleByObj(obj, "zIndex") - 1;
			iframe.frameBorder = 0;
			iframe.style.border = "none";
			iframe.style.visibility = "visible";
			obj.iframehelper = iframe;
			document.tempobj = obj;
			eval("document.iframehelper_" + obj.uniqueID + " = document.tempobj");
			eval("obj.iframehelperupdatefn = function(e){updateIFrameHelper(document.iframehelper_" + obj.uniqueID + ");}");
			addEvent(document, "mousemove", obj.iframehelperupdatefn);
		}
	}
}

/* used in showIFrameHelper */
function updateIFrameHelper(obj) {
	obj.iframehelper.width = obj.offsetWidth;
	obj.iframehelper.height = obj.offsetHeight;
	obj.iframehelper.style.left = obj.offsetLeft;
	obj.iframehelper.style.top = obj.offsetTop;
	obj.iframehelper.style.zIndex = getStyleByObj(obj, "zIndex") - 1;
}
/* Used in hideObject*/
function hideIFrameHelper(obj) {
	if (gBrowserType() == 'IE' && gOS() == 'WIN' && gBrowserVersion() > 5) {
		var IFRAME_ID = 'iframehelper_' + obj.uniqueID;
		if ($(IFRAME_ID)) {
			$(IFRAME_ID).style.visibility = "hidden";
			if (obj.iframehelperupdatefn)
				removeEvent(document, "mousemove", obj.iframehelperupdatefn);
		}
	}
}
/* used all over the place*/
function addEvent(obj, evtName, fn) {
	try {
		removeEvent(obj, evtName, fn);
	} catch (e) { e = null; /*needd for minifier*/ }
	if (obj.addEventListener) {
		obj.addEventListener(evtName, fn, false);
	} else if (obj.attachEvent) {
		obj.attachEvent('on' + evtName, fn);
	} else {
		obj['on' + evtName] = fn;
	}
}
function removeEvent(obj, evtName, fn) {
	try {
		if (obj.removeEventListener) {
			obj.removeEventListener(evtName, fn, false);
		} else if (obj.detachEvent) {
			obj.detachEvent('on' + evtName, fn);
		} else {
			obj['on' + evtName] = null;
		}
	} catch (e) { e = null; /*needd for minifier*/ }
}

/* used in several functions in admintools.js*/
function getEventX(e) {
	if (gBrowserType() == 'NS' && !gIsSafari)
		var x = e.pageX;
	else if (gOS() == "MAC")
		var x = event.clientX;
	else
		var x = event ? event.x : e.x;

	if (e) {
		var node = getEventTarget(e);
		if (node.ownerDocument) {
			var pframe = node.ownerDocument.parentWindow ? node.ownerDocument.parentWindow : node.ownerDocument.defaultView;
			while ((pframe) && (pframe.frameElement)) {
				x += getOffsetLeft(pframe.frameElement);
				pframe = pframe.parent;
			}
		}
	}
	return x;
}

function getEventY(e) {
	if (gBrowserType() == 'NS' && !gIsSafari)
		var y = e.pageY;
	else if (gOS() == "MAC")
		var y = event.clientY;
	else
		var y = event ? event.y : e.y;

	if (e) {
		var node = getEventTarget(e);
		if (node.ownerDocument) {
			var pframe = node.ownerDocument.parentWindow ? node.ownerDocument.parentWindow : node.ownerDocument.defaultView;
			if (pframe) {
				while (pframe.frameElement) {
					y += getOffsetTop(pframe.frameElement);
					pframe = pframe.parent;
				}
			}
		}
	}
	return y;
}

/* Used several places in admintools.js*/
function getInt(i) {
	if (gIsSafari)
		return i.toString().replace((new RegExp("\\D+")), "").valueOf();
	else if ((new RegExp("\\d")).test(i))
		return parseInt(i);
	else
		return 0;
}

/*get the value of a parameters from the query string, general purpose AShay 9/10/2007*/
function getQueryParam(name) {
	var regexS = "[\\?&]" + name + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var tmpURL = window.location.href;
	var results = regex.exec(tmpURL);
	if (results == null) {
		return "";
	}
	else {
		return results[1];
	}
}

/*for results paging*/
function populateDropdowns(form, currentperpage, currentpage, totalresults, ppfrom, ppstep, ppto, pplist) {
	var lst2 = form.pg;
	if (lst2 != null) {
		for (i = lst2.length; i >= 1; i--) {
			lst2.options[i] = null;
		}
		lst2.options.length = 1;
		index = 2;
		pages = totalresults / currentperpage - 1;
		for (i = 0; i < pages; i++) {
			var opt = document.createElement('option');
			opt.value = index;
			opt.text = index;
			lst2.options[index - 1] = opt;
			if ((currentpage > 0) && (index == currentpage)) {
				lst2.options[index - 1].selected = true;
			}
			index = index + 1;
		}
	}
	var lst = form.pp;
	if (lst != null) {
		if (ppfrom != '' && ppstep != '' && ppto != '') {
			var val;
			var index, i;
			i = 0;
			for (val = ppfrom; val <= ppto; val = val + ppstep) {
				var opt = document.createElement('option');
				opt.value = val;
				opt.text = val;
				lst.options[i] = opt;
				if (val == currentperpage) {
					lst.options[i].selected = true;
				}
				i++;
			}
		} else {
			var pparray = pplist.split('|');
			var num = pparray.length;
			var i;
			var val;
			for (i = 0; i < num; i++) {
				var opt = document.createElement('option');
				if (pparray[i] == 'All') {
					val = totalresults;
				}
				else {
					val = pparray[i];
				}
				opt.value = val;
				opt.text = pparray[i];
				lst.options[i] = opt;
				if (val == currentperpage)
					lst.options[i].selected = true;
			}
		}
	}
}

/*using display, show if hidden, hide if shown*/
function showHideDisplay(obj) {
	if (typeof (obj) == "string") obj = $(obj);
	if (obj) {
		if (getStyleByObj(obj, "display") == "none") {
			obj.style.display = "block";
		} else if (getStyleByObj(obj, "display") == "block") {
			obj.style.display = "none";
		}

	}
}
