Ajax = {};
Ajax.HOST = "http://"+window.location.host+"/cgi-bin/mygeolog.cgi"; 
Ajax.get = function(function_, params_, callback_){
	Ajax.send(function_, params_, callback_, "GET");
}
Ajax.post = function(function_, xml_, callback_){
	Ajax.send(function_, xml_, callback_, "POST"); 	
}
 
 Ajax.send = function(function_, params_, callback_, action){
 	var xmlhttp = new XMLHttpRequest();
	
	var url = Ajax.HOST+"?f="+function_+"&rand="+Math.random();
	if(action == "GET")
		url += Ajax.serializeParams(params_);
	var async = (callback_ ? 1:0);
	xmlhttp.open(action, url, async);		
	xmlhttp.send(action == "POST" ? params_ : "");
		
	if(!async){
		var response = xmlhttp.responseText;
		var json = Ajax.parseToObject(xmlhttp.responseText);
		if(json.status_code != 200){		
			Utils.displayError(json.status_text);
		}
		return json;
	}
	
	xmlhttp.onreadystatechange = function() { 
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {								
			var json = Ajax.parseToObject(xmlhttp.responseText);	
			if(json.status_code != 200){	
				Utils.displayError(json.status_text);
			}
			else		
				callback_(json);			
		}
 	}							
 }
 
 Ajax.parseToObject = function(data){
	try{
		json = eval("("+data+")");
		if(json.status){
			json.status_code = json.status.code;
			json.status_text = json.status.text || "";			
		}
	}catch(ex){
		json = {status_code: 500, status_text: 'internal_server_error'};
	}
	
	return json;
 }
 
 Ajax.serializeParams = function(object){
	var param_string = ""; 
	if(!object)
		return param_string;
	for(var param in object){
		var val = object[param].toString();
		if(val){					
			val = encodeURI(val).replace(/;/gim, "%3B").replace(/&/gim, escape("&")).replace(/\\/gim, escape("\\")).replace("#", "%23");			
			param_string += "&"+param+"="+val;
		}
	}	
	return param_string; 
}

// IE support
if (window.ActiveXObject && !window.XMLHttpRequest) {
    window.XMLHttpRequest = function() {
        var name = (navigator.userAgent.toLowerCase().indexOf('msie 5') != -1)
            ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP';
        return new ActiveXObject(name);
    }
}

 
 
