function trim (sString) {
   return sString.replace(/^\s*|\s*$/g,"");
}

function getEventSource (IEEvent, W3CEvent) {
	var oSourceElement;
	if (IEEvent)
		oSourceElement = IEEvent.srcElement;
	else if (W3CEvent) 
		oSourceElement = W3CEvent.target;
	return oSourceElement;
}

function showCursorHand (evt) {
	var evtSrc = getEventSource(window.event, evt);
	evtSrc.style.cursor = "pointer";
}

function showCursorDefault (evt) {
	var evtSrc = getEventSource(window.event, evt);
	evtSrc.style.cursor = "default";
}

function appendNewChild (sElemType, oParent, sText) {
	var oElem = document.createElement(sElemType);
	if (sText && sText != "") {
		var oNode = document.createTextNode(sText);
		oElem.appendChild(oNode);
	}
	oParent.appendChild(oElem);
	return oElem;
}

function justifyAndPad (sString, sJustify, iFinalLength, sPadChar, sTruncateFlag) {
	sResult = String (sString);
	var iCount = 0;
	while (sResult.length < iFinalLength) {
		if (iCount > iFinalLength)
			break;
		if (sJustify == "left") 
			sResult = sResult + sPadChar;
		else if (sJustify == "right")
			sResult = sPadChar + sResult;
		else
			break;
		iCount++;
	}
	if (sTruncateFlag && sResult.length > iFinalLength)
		sResult = sResult.substring(0,iFinalLength);
	return sResult;
}

function stripLeadingZeros (sString) {
	var re = /^0*?([^0]{1})(.*?)$/i;
	if (re.test(sString)) {
		sString = sString.replace(re, "$1$2");
	}
	else {
		//all zeros
		var re = /^0+$/i;
		if (re.test(sString)) 
			sString = "0";
	}
	return sString;
}

function getXHR() {
	var aSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
							"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
							"Microsoft.XMLHTTP"];
							
	for (var x=0; x < aSignatures.length; x++) {
		try {
			var oReq = new ActiveXObject(aSignatures[x]);
			return oReq;
		}
		catch (oError) {
			// do nothing
		}
	}
	try {
		return new XMLHttpRequest();
	}
	catch (oError) {
		return null;
	}
}
