var xmlHttp=GetXmlHttpObject();

function sendEmail(frm)
{
	xmlHttp=GetXmlHttpObject();
	var params =getRequestBody(frm);
	document.getElementById('sendEmailLoading').innerHTML = "Sending message...";
	xmlHttp.onreadystatechange=function(){
		if (xmlHttp.readyState==4)
		{ 
			if(xmlHttp.status == 200){
				document.getElementById('sendEmailLoading').innerHTML = "Email successfully sent.";
			}
			else{ 
				document.getElementById('sendEmailLoading').innerHTML = "<br/>Sorry, couldn't send that email. Please use your usual email client to send your message."; 
			}
		}
	};
	xmlHttp.open("POST", frm.action, true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttp.send(params);
}

// *** AJAX FUNCTIONS **************************************
function GetXmlHttpObject()
{
	var xmlHttp=null;
	try	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e){
		// Internet Explorer
		try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (e) {	xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");	}
	}
	return xmlHttp;
}
function encodeNameAndValue(sName, sValue){
	var sParam = encodeURIComponent(sName);
	sParam += "=";
	sParam += encodeURIComponent(sValue);
	return sParam;
}
function getRequestBody(oForm)
{
	//array to hold the params
	var aParams = new Array();
	
	//iterate over each element in the form
	for(var i=0;i<oForm.elements.length;i++){
		//get reference to the form
		var oField = oForm.elements[i];
		//different behavior based on the type of field
		switch(oField.type){
			//buttons - we don't care
			case "button":
			case "submit":
			case "reset":
				break;
				
			//checkboxes/radio buttons - only return the value if the conrol is checked.
			case "checkbox":
			case "radio":
				if(!oField.checked){
					break;
				}
				
			//text/hidden/password all return the value
			case "text":
			case "hidden":
			case "password":
				aParams.push(encodeNameAndValue(oField.name, oField.value));
				break;
				
			//everything else
			default:
				switch(oField.tagName.toLowerCase()){
					case "select":
						aParams.push(encodeNameAndValue(oField.name, oField.options[oField.selectedIndex].value));
					break;
				default:
					aParams.push(encodeNameAndValue(oField.name, oField.value));
				}
		}
	}
	return aParams.join("&");
}
