/*** AJAXRequest ****/
function AjaxRequest(strUrl, strData, strCustHandler, strMethod, refParent, strResponseEl, strUsername, strPasswd)
{
	/*private vars Request object*/
	var _strUrl								= strUrl;
	var _strUsername					= strUsername;
	var _strPassword					= strPasswd;
	var _strMethod						= "POST";
	var _oXmlHttpRequest			= false;
	var _oParent							= refParent;
	var _strResponseElement		= strResponseEl

	/*public methods Request object*/
	/************************************
	*Description:
	*Vars:
	*************************************/
	this.getUrl = function()
	{
		return _strUrl; 
	} 

	/************************************
	*Description:
	*Vars:
	*************************************/
	this.getResponseElement = function()
	{
		return _strResponseElement; 
	} 

	/*private methods Request object*/
	/************************************
	*Description:
	*Vars:
	*************************************/
	var doRequest = function(strHandler, strQueryString, strMethod)
	{
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			_oXmlHttpRequest = new XMLHttpRequest();
		
			//if (_oXmlHttpRequest.overrideMimeType) {
			//	_oXmlHttpRequest.overrideMimeType('text/xml');
			//}

			try 
			{
				netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
			}
			catch (e) 
			{
				//alert("Permission UniversalBrowserRead denied.");
			}
		} 
		else if (window.ActiveXObject) 
		{ // IE
			try 
			{
				_oXmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) 
			{
				try 
				{
					_oXmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (e) {}
			}
		}

		if (!_oXmlHttpRequest) 
		{
			alert('Giving up :( Cannot create an XMLHTTP instance');
			return false;
		}

		_oXmlHttpRequest.open(strMethod, _strUrl, true, _strUsername, _strPassword);
		if(strMethod == "POST")
		{
			_oXmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}

		//set handler
		_oXmlHttpRequest.onreadystatechange = processResponse;
		
		//set custom handler
		if(strHandler!=""){_oXmlHttpRequest.onreadystatechange = strHandler;}

		//htmlEncode querystring
		strQueryString = strQueryString.replace(/[\s*]/gi, "%20"); //replace spaces
		//send request
		_oXmlHttpRequest.send(strQueryString);

		return true;
	}
	
	/************************************
	*Description:
	*Vars:
	*************************************/
	var processResponse = function()
	{
		if(_oXmlHttpRequest.readyState == 4)
		{
			_oParent.showResult(_strResponseElement, _oXmlHttpRequest.responseText);
			//removeRequestObject(this);
		}
		else if (_oXmlHttpRequest.readyState != 4)
		{
			_oParent.showResult(_strResponseElement, "<div class='ajax_preloader'>ogenblik a.u.b. ...</div>");
		}
	}

	/************************************
	*Description: uitvoeren request, toevoegen aan array
	*Vars:
	*************************************/
	doRequest(strCustHandler, strData, strMethod);
	addRequestObject(_oXmlHttpRequest, _strResponseElement);
}
/*** // AJAXRequest ****/

/**GLOBAL SCOPE ***/
var _arrListRequestObjects = new Array();
/** // GLOBAL SCOPE ***/

/*public methods*/
/************************************
*Description:
*Vars:
*************************************/
function showResult(strResponseElement, strResult)
{
	//writeElementText(strResult, strResponseElement);
	writeElementHTML(strResult, strResponseElement);
}

/************************************
*Description:
*Vars:
*************************************/
function writeElementText(strText, strElName)
{
	var oEl = document.getElementById(strElName);
	var oTextWrapperEl = document.createElement("div");

	if(strText=="")
	{
		strText = "......";
	}

	var oTextEl = document.createTextNode(strText);

	oTextWrapperEl.appendChild(oTextEl);
	if(oEl != null)
	{
		if(oEl.hasChildNodes)
		{
			oEl.childNodes[0].removeChild();
		}
		oEl.appendChild(oTextWrapperEl);
	}
	else if(oEl == null)
	{
		oEl = document.createElement("div");
		oEl.setAttribute("id",strElName);
		oEl.style.color = "#ff0000";
		oEl.style.border = "3px solid #ff0000";
		oEl.appendChild(oTextWrapperEl);
		document.body.appendChild(oEl);
	}
}


/************************************
*Description:
*Vars:
*************************************/
function writeElementHTML(strHTML, strElName)
{
	var oEl = document.getElementById(strElName);
	var oTextWrapperEl = document.createElement("div");

	if(strHTML=="")
	{
		strHTML = "<b>empty - ;)</b>";
	}

	oTextWrapperEl.innerHTML = strHTML;
	if(oEl != null)
	{
		oEl.innerHTML = "";
		oEl.appendChild(oTextWrapperEl);
	}
	else if(oEl == null)
	{
		oEl = document.createElement("div");
		oEl.setAttribute("id",strElName);
		oEl.style.color = "#ff0000";
		oEl.style.border = "3px solid #ff0000";
		oEl.appendChild(oTextWrapperEl);
		document.body.appendChild(oEl);
	}
}


/************************************
*Description: add requests objects
*Vars:
*************************************/
function addRequestObject(oReqObj, strEl)
{
	var blnAdded = false;
	var intItrHighest = 0;
	
	//check if there is a current request object for response element, yes removeit!
	for (intItr=0;intItr<_arrListRequestObjects.length;intItr++)
	{
		if(_arrListRequestObjects[intItr] != null)
		{
			if(strEl == _arrListRequestObjects[intItr][1])
			{
				_arrListRequestObjects[intItr][0].abort();
				_arrListRequestObjects[intItr] = null;
			}
		}
	}

	//add response object to array
	for (intItr=0;intItr<_arrListRequestObjects.length;intItr++)
	{
		if(_arrListRequestObjects[intItr] == null || _arrListRequestObjects[intItr] == undefined)
		{
			_arrListRequestObjects[intItr] = new Array();
			_arrListRequestObjects[intItr][0] = oReqObj;
			_arrListRequestObjects[intItr][1] = strEl;
			blnAdded = true;
			break;
		}
		intItrHighest = intItr;
	}
	//no empty spot; add response on the latest position of array
	if(blnAdded == false)
	{
		intItrHighest++;
		_arrListRequestObjects[intItrHighest] = new Array();
		_arrListRequestObjects[intItrHighest][0] = oReqObj;
		_arrListRequestObjects[intItrHighest][1] = strEl;
	}
}


/************************************
*Description: list with requests objects
*Vars:
*************************************/
function showRequestObjects()
{
	writeElementText("listing req objects", "arrlist");
	writeElementText("elements : " + _arrListRequestObjects.length, "arrlist");
	for (intItr=0;intItr<_arrListRequestObjects.length; intItr++ )
	{
		
		if(_arrListRequestObjects[intItr] == null)
		{
			writeElementText(intItr + " : " + "leeg", "arrlist");
		}
		else if (_arrListRequestObjects[intItr] != null)
		{
			writeElementText(intItr + " : " + _arrListRequestObjects[intItr][0] + "\n" +  _arrListRequestObjects[intItr][1], "arrlist");
		}
	}
}