


function JSONGetXMLDoc( xmlHttpObj )
{
	var varName = "gTmp_" + (new Date().valueOf()) +"_"+ ((Math.random()*1000000)|0) ;
	return eval( varName+'=['+ xmlHttpObj.responseText +'];' ); // no " (double quote) in xmlHttpObj.responseText, use ' (single quote) here.
}





function GetXmlHttpObj( )
{
	var xmlHttpObj = null;

	try{ xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e)
	{
		try{ xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP"); }
		catch(e){ xmlHttpObj = null; }
	}
	
	if( !xmlHttpObj && (typeof XMLHttpRequest != "undefined") )
		xmlHttpObj = new XMLHttpRequest();
	
	return xmlHttpObj;
}





function JSONGetURL( url, async, handleStateChange )
{
	var xmlHttpObj = GetXmlHttpObj();

	if( ! xmlHttpObj )
		return;

	if( handleStateChange )
	{
		xmlHttpObj.onreadystatechange = function()
		{
			if( xmlHttpObj.readyState==4 && xmlHttpObj.status==200 )
			{
				handleStateChange( xmlHttpObj );
			}
		};
	}
	else
		xmlHttpObj.onreadystatechange = function(){}

	url += (url.indexOf('?')===-1?'?':'&') + (new Date().valueOf())+Math.random();
	xmlHttpObj.open("GET", url, async);
	xmlHttpObj.send(null);
}





function JSONPostURL( url, data, async, handleStateChange )
{ 
	var xmlHttpObj = GetXmlHttpObj(); 

	if (!xmlHttpObj)
		return;

	if( handleStateChange )
	{
		xmlHttpObj.onreadystatechange = function()
		{
			if( xmlHttpObj.readyState==4 && (xmlHttpObj.status==200 || xmlHttpObj.status==411) )
			{
				handleStateChange( xmlHttpObj.responseText );
			}
		};
	}
	else
		xmlHttpObj.onreadystatechange = function(){}

	url += (url.indexOf('?')===-1?'?':'&') + (new Date().valueOf())+Math.random();
	xmlHttpObj.open("POST", url, async);
	xmlHttpObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpObj.send(data);
}





function JSONPostByForm( form, async, handleStateChange )
{
	var formVars = new Array();
	for( var i=0; i<form.elements.length; i++ )
	{
		var formElement = form.elements[i];
		if( formElement.type=='checkbox' && !formElement.checked )
			continue;

		var v = new Object;
		v.name = formElement.name;
		v.value = formElement.value;
		formVars.push(v);
	}
	JSONPostURL( form.action, URLEncodeDict(formVars), async, handleStateChange );
}





function URLEncodeDict( dict )
{ 
	var result = new Array();
	for (var i=0; i<dict.length; i++)
		result.push( encodeURIComponent(dict[i].name) + "=" + encodeURIComponent(dict[i].value) );
	return result.join("&");
}


