


JSONGetXMLDoc = function( xmlHttpObj )
{
	var varName = "gTmp_" + (new Date().valueOf()) +"_"+ ((Math.random()*1000000)|0) ;
	return eval( varName+'='+ xmlHttpObj.responseText +'' );
}





var GetXmlHttpObj = function( )
{
	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;
}





var JSONGetURL = function( url, async, handleStateChange )
{
	var xmlHttpObj = GetXmlHttpObj();

	if( ! xmlHttpObj )
		return;

	var args = [];
	for( var i=3; i<arguments.length; i++ )
		args[args.length] = arguments[i];
	args.reverse();

	if( handleStateChange )
	{
		xmlHttpObj.onreadystatechange = function()
		{
			if( xmlHttpObj.readyState==4 && xmlHttpObj.status==200 )
			{
				args.push( xmlHttpObj );
				args.reverse();
				handleStateChange.apply(this,args);
			}
		};
	}
	else
		xmlHttpObj.onreadystatechange = function(){}

	url += (url.indexOf('?')===-1?'?':'&') + (new Date().valueOf())+Math.random();
	xmlHttpObj.open("GET", url, async);
	xmlHttpObj.send(null);
}





var JSONPostURL = function( url, data, async, handleStateChange )
{ 
	var xmlHttpObj = GetXmlHttpObj(); 

	if (!xmlHttpObj)
		return;

	var args = [];
	for( var i=4; i<arguments.length; i++ )
		args[args.length] = arguments[i];
	args.reverse();

	if( handleStateChange )
	{
		xmlHttpObj.onreadystatechange = function()
		{
			if( xmlHttpObj.readyState==4 && (xmlHttpObj.status==200 || xmlHttpObj.status==411) )
			{
				args.push( xmlHttpObj );
				args.reverse();
				handleStateChange.apply(this,args);
			}
		};
	}
	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);
}





var JSONPostByForm = function( 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;
		if( formElement.name == "" )
			continue;

		var v = new Object;
		v.name = formElement.name;
		v.value = formElement.value;
		formVars.push(v);
	}

	var args = [ form.action, URLEncodeDict(formVars), async, handleStateChange ];
	for( var i=3; i<arguments.length; i++ )
		args[args.length] = arguments[i];
	JSONPostURL.apply(this,args);
}





var URLEncodeDict = function( 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("&");
}



