var ajax = {
	
	init:function() {

	    var xmlHttp = false;
	    try {
	      xmlHttp = new XMLHttpRequest();
	    }
	    catch (e) {
	      try {
	        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	      }
	      catch (e) {
	        try {
	          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	        }
	        catch (e) {}
	      }
	    }
	    return xmlHttp;
	},
	
	defaults: {
		
		method:'POST',
		url:unescape(window.location.pathname),
		successfunc:function(){
			alert(ajax.request.responseText);
		},
		failfunc: function(){
			alert('Connection error! Please try again later.');
		}
	},
	
	send:function(params) {

// parameters:
// successfunc: function to be executed when response has been received
// failfunc:	function to be executed if no response
// method:		get or post
// url:			destination url


// return true to support non-ajax enabled useragents		
		if (!ajax.init()) { return true; }
		
// abort if ajax request in progress, or no data
		if (ajax.inProgress || !ajax.data) { return false; }
		
// set default values
        if (!params) { params = {}; }
		for (var i in ajax.defaults) {

			if (params[i] === undefined) {
				params[i] = ajax.defaults[i];
			}
			else if ((i == 'successfunc' || i == 'failfunc') && typeof(params[i]) != 'function') {
				params[i] = ajax.defaults[i];
			}
		}
		params.method = params.method.toUpperCase();
		params.method = params.method == 'GET' || params.method == 'POST' ? params.method : ajax.defaults.method;
		
// initialise request
		ajax.request = ajax.init();
		
// callback function		
		ajax.request.onreadystatechange = function() {
			
			if (ajax.request.readyState == 4) {
				
				ajax.inProgress = false;
				if (ajax.request.status == 200 || ajax.request.status == 304) {
					
					params.successfunc();
				}
				else { params.failfunc(); }
			}
		}
		
		ajax.inProgress = true;
		if (params.method == 'GET') { params.url += '?' + params.data; }
		ajax.request.open(params.method, params.url, true);
		var data = null;
		if (params.method == 'POST') {
			ajax.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			data = ajax.data;
		}
		ajax.request.send(data);
		return false;
	},
	
	inProgress:false,
	data:false,
	request:false
};

