// holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject()  {
	// will store the reference to the XMLHttpRequest object
	var xmlHttp;
	// this should work for all browsers except IE6 and older
	try {
		// try to create XMLHttpRequest object
		xmlHttp = new XMLHttpRequest();
	}
	catch(e) {
		// assume IE6 or older
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		// try every prog id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)  {
			try  { 
				// try to create XMLHttpRequest object
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			} 
			catch (e) {}
		}
	}
	// return the created object or display an error message
	if (!xmlHttp)
		alert("Error creating the XMLHttpRequest object.");
	else 
		return xmlHttp;
}

 
// read a file from the server
function sendSiteFeedback() {
	// only continue if xmlHttp isn't void
	if (xmlHttp) {
		// try to connect to the server
		try {
			// get name
			var name = document.getElementById("txtName").value; 
			// get email
			var email = document.getElementById("txtEmail").value; 
			// get message
			var message = document.getElementById("txtMessage").value; 
				
			if (trimText(name).length < 1){
				alert("Please provide your name!");
				document.getElementById("txtName").focus();
			}			
			
			else if (isValidEmail(email)==false){
				alert("Please provide a valid email address!");
				document.getElementById("txtEmail").focus();
				document.getElementById("txtEmail").value="";
			}
			
			else if (trimText(message).length < 1){
				alert("Please type your message!");
				document.getElementById("txtMessage").focus();
			}		
			
			// Continue Execution
			else {
				// Show Processing Text
				document.getElementById('errText').innerHTML = "<span style='color:#FF0000'>Sending...</span>";
			
				// Hide the Contact Form
				document.getElementById('myDivContact').style.visibility = 'hidden';	
				
				// create the params string
				var params = "name=" + encodeURIComponent(name) + "&email=" + encodeURIComponent(email) + "&message=" + encodeURIComponent(message);			
				// initiate the asynchronous HTTP request
				xmlHttp.open("GET", "ajax_site_feedback.php?sid=" + Math.random() + "&" + params, true);
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(null);
			}
		}
		// display the error in case of failure
		catch (e) {
			alert("Can't connect to server:\n" + e.toString());
		}
	}
}

// function called when the state of the HTTP request changes
function handleRequestStateChange() {
	// when readyState is 4, we are ready to read the server response
	if (xmlHttp.readyState == 4) {
		// continue only if HTTP status is "OK"
		if (xmlHttp.status == 200) {
			try {
				// do something with the response from the server
				handleServerResponse();
			}
			catch(e) {
				// display error message
				alert("Error reading the response: " + e.toString());
			}
		} 
		else {
			// display status message
			alert("There was a problem retrieving the data:\n" + 
			xmlHttp.statusText);
		}
	}
}

// handles the response received from the server
function handleServerResponse() {
	// retrieve the server's response packaged as an XML DOM object
	var xmlResponse = xmlHttp.responseXML;
	// catching potential errors with IE and Opera
	if (!xmlResponse || !xmlResponse.documentElement)
		throw("Invalid XML structure:\n" + xmlHttp.responseText);
	
	// catching potential errors with Firefox
	var rootNodeName = xmlResponse.documentElement.nodeName;
	if (rootNodeName == "parsererror") 
		throw("Invalid XML structure:\n" + xmlHttp.responseText);
	// getting the root element (the document element)
	xmlRoot = xmlResponse.documentElement;
	// testing that we received the XML document we expect
	if (rootNodeName != "response" || !xmlRoot.firstChild)
		throw("Invalid XML structure:\n" + xmlHttp.responseText);
	// the value we need to display is the child of the root <response> element
	responseText = xmlRoot.firstChild.data;
	// build message
	var mesg;
	if (responseText == "1") {
		mesg = "<span style='color:#990000'>Message sent successfully. Thank You!</span>";
	}
	else {
		mesg = "<span style='color:#FF0000'>Unable to complete request. Please try again later!</span>";
	}
	// display the message
	document.getElementById("errText").innerHTML = mesg;
	document.getElementById('myDivContact').style.visibility = 'visible';
	// Clear fields
	document.getElementById('txtName').value = '';
	document.getElementById('txtEmail').value = '';	
	document.getElementById('txtMessage').value = '';
}
