function ajax(options){

	options = {
		type: options.type || "POST",
		url: options.url || "",
		timeout: options.timeout || 5000,
		onComplete: options.onComplete || function(){},
		onError: options.onError || function(){},
		onSuccess: options.onSuccess || function(){},
		data: options.data || "",
		profileDiv: options.profileDiv
	};
	
	if (typeof XMLHttpRequest == "undefined")
		
		XMLHttpRequest = function(){
		return new ActiveXObject(
			navigator.userAgent.indexOf("MSIE 5") >= 0 ?
			"Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"
		);
	};
		
	var xml = new XMLHttpRequest();
	
	xml.open(options.type, options.url, true);
	
	var timeoutLength = options.timeout;
	
	//var requestDone = false;
	
	//setTimeout(function(){
		//requestDone = true;
		
	//}, timeoutLength);
	
	
	xml.onreadystatechange = function(){
	
	if (xml.readyState == 4) {
		if (httpSuccess(xml)) {
			
			options.onSuccess( httpData(xml, options.type));
		}
		else
		{
			options.onError();
		}
		options.onComplete();
		xml = null;
	}
};


xml.send(null);


function httpSuccess(r) {
	try {
	
		return !r.status && location.protocol == "file:" || (r.status >= 200 && r.status < 300) || r.status == 304 || navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined";
		} catch(e){}
		
		return false;
	}
	
function httpData(r,type) {
	var ct = r.getResponseHeader("content-type");
	
	var data = !type && ct && ct.indexOf("xml") >= 0;
	data = type == "xml" || data ? r.responseXML : r.responseText;
	
	if (type == "script") 
		eval.call(window, data);
	parseJSON(data);
	return data;
	}
	
function parseJSON(data){
	
	eval(data);
	var responseDiv = document.getElementById("serverResponse");
	responseDiv.innerHTML = "";
	
	for (keys in test) {
 		var value = (test[keys]) ;
		var responseText = document.createTextNode(" " + keys + ": " + value);
		var breakTag = document.createElement("<br>");
		responseDiv.appendChild(responseText);
		responseDiv.appendChild(breakTag);
	} 
	
	positionPreview(options.profileDiv);
}



function positionPreview(profileDiv)
{
	var parentDiv = document.getElementById(profileDiv);
	var xPos = pageX(parentDiv)+30;
	var detailsDiv = document.getElementById("serverResponse");
	detailsDiv.style.display = 'block';
	var parentDivHeight = detailsDiv.offsetHeight;
	var yPos = pageY(parentDiv)-(parentDivHeight-10);
	
	detailsDiv.style.left = xPos;
	detailsDiv.style.top = yPos;
}

function pageX(elem) {
	return elem.offsetParent ?
		elem.offsetLeft + pageX(elem.offsetParent) :
		elem.offsetLeft;
}

function pageY(elem) {
	return elem.offsetParent ?
		elem.offsetTop + pageY(elem.offsetParent) : 
		elem.offsetTop;
}

}

function hidePreview() {
	document.getElementById("serverResponse").style.display = 'none';
}


