// ==================================================
// general function for making XMLHttpRequest objects
// ==================================================
function oMakeXmlHttpRequest() {
	var httpRequest;
	// check if mozilla
	if (window.XMLHttpRequest) { 
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) {
			httpRequest.overrideMimeType('application/xml');
		}
	} 
	else if (window.ActiveXObject) {
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!httpRequest) {
		alert("An error occurred: Cannot create an XMLHTTP instance");
		return false;
	} else {
		return httpRequest;
	}
}
// =================================================
// oActiveDiv
// =================================================
function oActiveDiv(strId,strSendMethod,strUrl,strStylesheetUrl) {
	// properties
	this.divId =										strId;
	this.div =											document.getElementById(strId);
	this.divOverlay =									document.getElementById(strId + "Overlay");
	this.sendMethod =									strSendMethod;
	this.url =											strUrl;
	this.stylesheetUrl =								strStylesheetUrl;
    // xml docs
	this.request = 										oMakeXmlHttpRequest();
	this.request.onreadystatechange = 					function() { oActiveDivProcessResponse(strId) }
	this.stylesheet = 									new ActiveXObject("Msxml2.DOMDocument");
	this.stylesheet.load(strStylesheetUrl);
	// methods
	this.resetRequest =									oActiveDivResetRequest;
	this.reposition =									oActiveDivReposition;
	this.sendRequest =									oActiveDivSendRequest;
}

function oActiveDivProcessResponse(strId) {
	var oActiveDiv = eval("o" + strId);
	try {
		if (oActiveDiv.request.readyState == 4) {
			if (oActiveDiv.request.status > 300) {
				alert("Server error: " + oActiveDiv.request.status);
			} else {
				oActiveDiv.div.innerHTML = oActiveDiv.request.responseXML.transformNode(oActiveDiv.stylesheet);
				oActiveDiv.divOverlay.style.display = "";
				oActiveDiv.reposition();
			}
		}
	} catch(e) {
		alert("Caught exception while processing the response" + e.description);
	}
}

function oActiveDivSendRequest() { 
	this.request.open(this.sendMethod,this.url,true);
	this.request.send(null);
}

function oActiveDivResetRequest(strId) {
	this.request = null;
	this.request = oMakeXmlHttpRequest();
	this.request.onreadystatechange = function() { oActiveDivProcessResponse(strId) }
}


function oActiveDivReposition() {
	//Find browser width
	var myWidth = 0;
	if (typeof(self.innerWidth ) == 'number') {
		// Non-IE
		myWidth = self.innerWidth;
		if (self.scrollMaxY > 0) {
			myWidth = myWidth - 18;
		} else {
			myWidth = myWidth - 2;
		}
	} else {
		if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
			// IE 6+ in standards compliant mode
			myWidth = document.documentElement.clientWidth;
		} else {
			if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
				// IE 4 compatible
				myWidth = document.body.clientWidth;
			}
		}
	}
	this.divOverlay.style.left = (myWidth - 200)/2 + "px";
	this.divOverlay.style.top = "300px";
}
