var AJAX = {
    
XMLHttpFactories : [
        
		function () {return new XMLHttpRequest()},
        
		function () {return new ActiveXObject("Msxml2.XMLHTTP")},
        
		function () {return new ActiveXObject("Msxml3.XMLHTTP")},
        
		function () {return new ActiveXObject("Microsoft.XMLHTTP")}
    ],
    

createXMLHTTPObject : 
		function ()
    {
        
			xmlhttp = null;
        
			for (var i=0;i<AJAX.XMLHttpFactories.length;i++) {
            
				try {
                
					xmlhttp = AJAX.XMLHttpFactories[i]();
            
				    }
            
				catch (e) {
                
					   continue;
            
					  }
            
				break;
        
			}
        
			return xmlhttp;
    
		},
    

		
objectToURL : 
		function (url,query_str_obj)
    {
           
			url_str=url + '?';
           
			for(property in query_str_obj)
 url_str+= property + "=" + escape( query_str_obj[property] ) + "&";
           			return url_str;
    
		},
    

execute : 
		function (url, paramsobj, functionCallBack)
    {
        
			request = new Object();
        
			request.ajaxRequest = AJAX.createXMLHTTPObject();
        
			request.sendRequest = function() {
            
				if(request.ajaxRequest.readyState == 1){ //never happen,cause we create new request each time
                
					alert('error: still processing previous request');
                
					return;
            
				}
            
				var escapedurl= AJAX.objectToURL(url, paramsobj);
            //alert(escapedurl);
				request.ajaxRequest.open('get', escapedurl);
            				request.ajaxRequest.onreadystatechange = function()
            {
                
					if(request.ajaxRequest.readyState == 4 && request.ajaxRequest.status == 200)
                					{
                    
						//alert(request.ajaxobj.responseText);
                    
						functionCallBack(request.ajaxRequest);
                
					}
            
				}
            request.ajaxRequest.send(null);
        }
        request.sendRequest();
        			return request;
    
		}

};
