/*
	FILE : framework_common.js
	DATE : 7.3.2007.dave
	COPY : Copyright 2007 David A Striegel
*/

// EASY DEBUG OUTPUT ALTERNATIVE TO ALERT
var _console = null;
function debug(msg)
{
	if ((_console == null) || (_console.closed))
	{
		_console = window.open("","console","width=400,height=200,resizable,scrollbars");
		_console.document.open("text/plain");
	}

	_console.document.writeln(msg);
}

// =============================================================================

// PREVENT SUBMIT OF FORM BY PRESSING ENTER
function noEnter() {
	return !(window.event && window.event.keyCode == 13);
}

// =============================================================================

// DEFINED FOR USE ANYWHERE - EASY WAY TO ADD UNOBTRUSIVE EVENT LISTENERS
function addEvent(obj, evType, fn){
	if (obj.addEventListener){
		if (evType == 'mousewheel') evType = 'DOMMouseScroll';
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType,fn);
		return r;
	} else {
		return false;
	}
}

// =============================================================================

// DEFINED FOR USE ANYWHERE - JS ESCAPE WITH ADDED SUPPORT FOR (+,",',/)
function URLencode(sStr) {
	return escape(sStr)
		.replace(/\+/g, '%2B')
		.replace(/\"/g,'%22')
		.replace(/\'/g, '%27')
		.replace(/\//g, '%2F');
}

// =============================================================================

// GET THE NEXT SIBLING OF NODETYPE ELEMENT
function getNextSibling(node) {
	while ((node = node.nextSibling))
		if (node.nodeType == 1) return node;
	return null;
};

// GET THE PREVIOUS SIBLING OF NODETYPE ELEMENT
function getPreviousSibling(node) {
	while ((node = node.previousSibling))
		if (node.nodeType == 1) return node;
	return null;
};

// =============================================================================

function getWindowDim() {
	var winW = 0, winH = 0;
	var iebody = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
	var winW = (document.all)? iebody.clientWidth : window.innerWidth;
	var winH = (document.all)? iebody.clientHeight : window.innerHeight;
	return [winW,winH];
}

function getScrollOffset() {
	var iebody = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;
	var scrollLeft = (document.all)? iebody.scrollLeft : pageXOffset;
	var scrollTop = (document.all)? iebody.scrollTop : pageYOffset;
	return [scrollLeft, scrollTop];
}

// GETS THE TRUE OFFSET OF AN ELEMENT BY WALKING BACK THROUGH THE DOM. PASS THE
// ID OF A HIERARCHICAL PARENT TO GET THE OFFSET TO THAT POINT.  WILL ONLY WORK
// WITH CORRECTLY STRUCTURED CSS.
function getOffset(element) {
	var valueT = 0, valueL = 0;
	do {
		p = Element.getStyle(element, 'float');
		valueL += (p == 'right')?(element.offsetParent.offsetWidth - element.offsetWidth):(element.offsetLeft || 0);
		valueT += element.offsetTop  || 0;
		element = element.offsetParent;
	} while (element);
	return [valueL,valueT];
}

// =============================================================================

// DEFINED FOR USE ANYWHERE - SHOW THE RESPONSE OF AN AJAX REQUEST - DEBUGGING
function showResponse(originalRequest) {
	alert(originalRequest.responseText);
}