function createHttpRequester() {
	if (window.XMLHttpRequest) { // code for Mozilla, Safari, etc
		try {
			return new XMLHttpRequest();
		} 
		catch(e) {}
	} 
	else if (window.ActiveXObject) { // IE/Windows ActiveX version
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch(e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch(e) {}
		}
	}
	return null;
}


function getRemoteFile(url, doReturnXml, callbackFunc, callbackData) {
	var xmlHttp = createHttpRequester();
	if (xmlHttp == null) return null;
	try {
		var isAsync = (callbackFunc != null);
		xmlHttp.open("GET", url, isAsync);
		xmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
		
		if (isAsync) {
			xmlHttp.onreadystatechange = function() {
				if (xmlHttp.readyState == 4) {
					callbackFunc(doReturnXml ? xmlHttp.responseXML : xmlHttp.responseText, callbackData);
					delete xmlHttp.onreadystatechange;
				}
			};
		}
		
		xmlHttp.send("");
		if (isAsync) return null; // later
		if (doReturnXml) return xmlHttp.responseXML;
		return xmlHttp.responseText;
	}
	catch (e) {}
	return null;
}


function formatNumber(value, numDecimals, decimalChar) {
	if (numDecimals < 1) numDecimals = 1;
	if (numDecimals > 8) numDecimals = 8;
	if (decimalChar == null) decimalChar = ".";
	var factor = 1;
	for (var i = 0; i < numDecimals; i++) factor *= 10;
	value = Math.floor(factor * value) / factor;
	value = value.toString();
	var dotPos = value.indexOf(".");
	if (dotPos < 0) dotPos = value.indexOf(",");
	if (dotPos >= 0) {
		value = value.substring(0, dotPos) + decimalChar + value.substring(dotPos + 1);
		var numZerosToAdd = numDecimals - (value.length - dotPos);
		while (numZerosToAdd >= 0) {
			value += "0";
			numZerosToAdd--;
		}
	}
	else {
		value += decimalChar;
		for (var i = 0; i < numDecimals; i++) value += "0";
	}
	return value;
}


function constructMailLink(user, server) {
    return document.write("<a href='" + "mail" + "to:" + user + "@" + server + "'>" + user + "@" + server + "</a>");
}

