function ajax_validate(elem){
	if(getElement(elem.id+"ValidationResulta")){
		hide(getElement(elem.id+"ValidationResulta"));	
	}
	ajaxValidationBusy = true;
	ajax_loading(elem);
	var position = getXYpos(elem);
	if(elem.value == "0"){
		var valueToSend = '^0';
	}
	else{
		var valueToSend = elem.value;
	}
	var xmlHttp = getXMLHttp();
	xmlHttp.onreadystatechange = function(){
		if(xmlHttp.readyState == 4){
//this is the output (after call below)
			handle_ajax_validate(xmlHttp.responseText, elem.id+"ValidationResult", position, elem);
			ajax_loading_done();
			ajaxValidationBusy = false;
			if(get_ajax_error_messages() == 0){		
				getElement('submit').disabled = false;
			}
			else{
				getElement('submit').disabled = true;
			}
		}
	}
//this is the input
	xmlHttp.open("GET", "/forms/ajax-form-validation/ajax_validate.php?val="+valueToSend+"&enforce="+elem.alt+"&x="+position['x']+"&y="+position['y']+"&type="+elem.type, true);
	xmlHttp.send(null);
}
function handle_ajax_validate(response, id, position, elem){
	// Response is in the form $message."^^".$okToSend
	var browserSize = getBrowserSize();
	if(browser == "IE"){
		var xOffset = parseInt(elem.offsetWidth); // Using getStyle() in IE can result in "auto" instead of an integer...
		var yOffset = -4;
		var marginOffset = 20;
	}
	else{
		var xOffset = parseInt(getStyle(elem, 'width'));
		var yOffset = -3;
		var marginOffset = 25;
	}
	var response = response.split("^^");
	//response[0] is message
	//return response[1]
	if(getElement(id+'a')){ // "a" and "b" can be any variable name...
		var x = getElement(id+'a');
		if(containsClassName(x, 'ajaxError')){
			x.className = x.className.replace("ajaxError", ""); // This "erases" a message
		}
		hide(x);
		x.id = id+"b";
	}
	if(response[0] == ""){
		var ok = document.createElement("IMG");
		ok.id = id+"a";
		ok.style.border = "0";
		ok.className = "ajax";
		ok.style.zIndex = 90;
		ok.src = "/forms/ajax-form-validation/icons/good.png";
		ok.style.position = "absolute";
		//ok.style.left = (position['x']+xOffset+14)+"px";
		ok.style.left = "50%";//(position['x']+xOffset+16)+"px";
		ok.style.marginLeft = parseInt(parseInt(position['x']+xOffset) - (parseInt(browserSize['width']) / 2))+marginOffset+"px";
		ok.style.top = (position['y']+yOffset+6)+"px";
		document.body.appendChild(ok);
	}
	else{
		var positionParent = getXYpos(elem.parentNode);
		var newP = document.createElement("DIV");
		newP.id = id+"a";
		newP.className = "ajax ajaxError";
		newP.style.zIndex = 95;
		newP.style.position = "absolute";
		newP.style.left = "50%";//(position['x']+xOffset+16)+"px";
		newP.style.marginLeft = parseInt(parseInt(position['x']+xOffset) - (parseInt(browserSize['width']) / 2))+marginOffset+"px";
		newP.style.top = (position['y']+yOffset)+"px";
		if(browser == "IE"){
			newP.style.width = 240+"px";
		}
		else{
			newP.style.width = parseInt(parseInt(elem.parentNode.offsetWidth) - (parseInt(elem.offsetLeft) - elem.parentNode.offsetLeft) - elem.offsetWidth - 32)+"px";
		}
		newP.style.padding = 4+"px";
		newP.style.backgroundColor = "#fedff8";
		newP.innerHTML = response[0];
		newP.style.border = '2px solid red';
		//document.body.appendChild(newP);
		elem.parentNode.appendChild(newP);

		triangle = document.createElement("IMG");
		triangle.src = "/forms/ajax-form-validation/icons/arrow.png";
		triangle.style.border = "0";
		triangle.style.position = "absolute";
		triangle.style.top = -1+"px";
		triangle.style.left = -22+"px";
		newP.appendChild(triangle);
	}
}