/*
*   Author: Erik Karlsson, www.xorath.com
*   Last modified: 2007-08-06, added post-rnd
*/
var ajaxHelper = 
{
    xmlHttpObj:null,
    running:false,
    ajaxHandlerUri:new String(),
    method:'POST',
    postdata:null,
    responseHandler:null,
    responseStr:null,
    ajaxHandlerUri:'ajax.php',
    MAX_INT:2147483647, 
    init:function(responseHandler, uri)
    {
        if ( typeof(uri) != 'undefined' )
            this.ajaxHandlerUri = uri;
            
        this.responseHandler = responseHandler;
        this.xmlHttpObj = this.getXmlHttpObj();
    },
	getXmlHttpObj:function()
	{
		var xmlHttpObj = null;
		var msxmlhttp = new Array(
		'Msxml2.XMLHTTP.5.0',
		'Msxml2.XMLHTTP.4.0',
		'Msxml2.XMLHTTP.3.0',
		'Msxml2.XMLHTTP',
		'Microsoft.XMLHTTP');
		for (var i = 0; i < msxmlhttp.length; i++) 
		{
			try 
			{
				xmlHttpObj = new ActiveXObject(msxmlhttp[i]);
			} 
			catch (e) 
			{
				xmlHttpObj = null;
			}
		}
			
		if ( ajaxHelper.xmlHttpObj == null && window.XMLHttpRequest )
			xmlHttpObj = new XMLHttpRequest();
		return xmlHttpObj;
	},
	doRequest:function(args)
	{
		if ( !ajaxHelper.running )
		{
	    	ajaxHelper.running = true;
	    	
			if ( !ajaxHelper.ajaxHandlerUri )
			{
				alert("Request handler not set");
				return;
			}
			
			ajaxHelper.postdata = "";
			//alert(args);
			if ( args instanceof Array )
			{
				for ( i = 0; i < args.length; ++i )
				{
					ajaxHelper.postdata += "arg" + i + "=" + args[i].toString();
					if ( i < args.length-1 )
						this.postdata += "&";
				}
			}
			else
			{
				ajaxHelper.postdata += "arg0" + "=" + args;
			}
			
			//Opera fix
			if ( ajaxHelper.xmlHttpObj == null )
				ajaxHelper.xmlHttpObj = ajaxHelper.getXmlHttpObj();
			
			
			
		
			if ( ajaxHelper.method == 'GET' )
				ajaxHelper.xmlHttpObj.open(ajaxHelper.method,ajaxHelper.ajaxHandlerUri + "?"+ajaxHelper.postdata,true);
			else
				ajaxHelper.xmlHttpObj.open(ajaxHelper.method,ajaxHelper.ajaxHandlerUri,true);

			
			ajaxHelper.xmlHttpObj.onreadystatechange = ajaxHelper.completeAjaxRequest;

			if ( ajaxHelper.method == 'POST' )
			{
				ajaxHelper.xmlHttpObj.setRequestHeader("Method", ajaxHelper.method + " " + ajaxHelper.ajaxHandlerUri  + " HTTP/1.1");
				ajaxHelper.xmlHttpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			}
			var rnd = Math.floor(Math.random()*ajaxHelper.MAX_INT);
			ajaxHelper.postdata += "&rnd=" + rnd;
			if ( ajaxHelper.method == 'POST' )
				ajaxHelper.xmlHttpObj.send(ajaxHelper.postdata);
			else
				ajaxHelper.xmlHttpObj.send(null);
				
			//alert("posted " + ajaxHelper.postdata);
				
		}
	},
	completeAjaxRequest:function()
	{
	    if ( ajaxHelper.xmlHttpObj == null || typeof(ajaxHelper.xmlHttpObj) == "undefined" )
	    {
		    alert ("Browser does not support HTTP Request")
		    return;
	    }
		if ( ajaxHelper.xmlHttpObj.readyState == 4 || ajaxHelper.xmlHttpObj.readyState == "complete" )
		{
		    eval("ajaxHelper.responseHandler(1, ajaxHelper.xmlHttpObj.responseText)");
                       
            //reinit for IE and opera
           // if ( document.all )
             //   ajaxHelper.xmlHttpObj = ajaxHelper.getXmlHttpObj();
                
    	    ajaxHelper.running = false;
    	}
    	else if ( ajaxHelper.xmlHttpObj.readyState < 4 )
    	{
    	    eval("ajaxHelper.responseHandler(0)");
    	}
    	return;
	}
}