/**
 * @author jontj1
 */

 //holds an instance of XMLHttpRequest
 var xmlHttp = createXmlHttpRequestObject();
 //holds the remote server address
 var serverAddress = "../includes/ajaxEnquiry.php";
 //when set to true, display detailed error messages
 var showErrors = false;
 
 var formType;
 
 function createXmlHttpRequestObject(){
 	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 when try block fails
		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('timmy');
		displayError("Error creating the XMLHttpRequest object");
	}else{
		return xmlHttp;
	}
 }
 
 //function to handle the HTTP response
 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{
				readResponse();
			}catch(e){
				//display error message
				displayError(e.toString()+"here3");
			}
		}else{
			//display error message
			displayError(xmlHttp.statusText+"here4");
		}
	}
 }
 
 //function that displays an error message
 function displayError(message){
 	//ignore errors if showErrors is false
	if(showErrors){
		//turn error displaying off
		showErrors = false;
		//display error message
		alert("Error encountered: \n"+message);
		//retry validation after 10 seconds
		setTimeout("validate();", 10000);
	}
 }
 
 function submitQuickEnquiry(){
 	//only continue if xmlHttp isnt void
	if(xmlHttp){
		formType = 'propertyEnquiry';
		buildWaitingBox();
		//build the string of values to send to the server
		var form_prs = document.getElementById('form_prs').value;
		var form_usrId = document.getElementById('form_usrId').value;
		var form_agent = document.getElementById('form_agent').value;
		var form_prId = document.getElementById('form_prId').value;
		var form_propType = document.getElementById('form_propType').value;
		var form_enquiry1 = document.getElementById('form_enquiry1').checked;
		if(form_enquiry1==true){
			form_enquiry1 = "on";
		}else{
			form_enquiry1 = "off";
		}
		var form_enquiry2 = document.getElementById('form_enquiry2').checked;
		if(form_enquiry2==true){
			form_enquiry2 = "on";
		}else{
			form_enquiry2 = "off";
		}
		var form_enquiry3 = document.getElementById('form_enquiry3').checked;
		if(form_enquiry3==true){
			form_enquiry3 = "on";
		}else{
			form_enquiry3 = "off";
		}
		var form_nameTitle = document.getElementById('form_nameTitle').value;
		var form_nameFirst = document.getElementById('form_nameFirst').value;
		var form_nameLast = document.getElementById('form_nameLast').value;
		var form_email = document.getElementById('form_email').value;
		var form_phoneType = document.getElementById('form_phoneType').value;
		var form_phoneNumber = document.getElementById('form_phoneNumber').value;
		var form_callTime = document.getElementById('form_callTime').value;
		var form_address1 = document.getElementById('form_address1').value;
		var form_address2 = document.getElementById('form_address2').value;
		var form_town = document.getElementById('form_town').value;
		var form_country = document.getElementById('form_country').value;
		var form_postcode = document.getElementById('form_postcode').value;
		var form_message = document.getElementById('form_message').value;
		var form_toSell = document.getElementById('form_toSell').value;
		var form_toRent = document.getElementById('form_toRent').value;
		var form_valued = document.getElementById('form_valued').checked;
		if(form_valued==true){
			form_valued = "on";
		}else{
			form_valued = "off";
		}
		var form_mortgage = document.getElementById('form_mortgage').checked;
		if(form_mortgage==true){
			form_mortgage = "on";
		}else{
			form_mortgage = "off";
		}
		var form_mintInfo = document.getElementById('form_mintInfo').checked;
		if(form_mintInfo==true){
			form_mintInfo = "on";
		}else{
			form_mintInfo = "off";
		}
		var form_thirdPartyInfo = document.getElementById('form_thirdPartyInfo').checked;
		if(form_thirdPartyInfo==true){
			form_thirdPartyInfo = "on";
		}else{
			form_thirdPartyInfo = "off";
		}
		var form_emailMe = document.getElementById('form_emailMe').checked;
		if(form_emailMe==true){
			form_emailMe = "on";
		}else{
			form_emailMe = "off";
		}
		var valuesString = "form_prs="+form_prs+
							"&form_usrId="+form_usrId+
							"&form_agent="+form_agent+
							"&form_prId="+form_prId+
							"&form_propType="+form_propType+
							"&form_enquiry1="+form_enquiry1+
							"&form_enquiry2="+form_enquiry2+
							"&form_enquiry3="+form_enquiry3+
							"&form_nameTitle="+form_nameTitle+
							"&form_nameFirst="+form_nameFirst+
							"&form_nameLast="+form_nameLast+
							"&form_email="+form_email+
							"&form_phoneType="+form_phoneType+
							"&form_phoneNumber="+form_phoneNumber+
							"&form_callTime="+form_callTime+
							"&form_address1="+form_address1+
							"&form_address2="+form_address2+
							"&form_town="+form_town+
							"&form_country="+form_country+
							"&form_postcode="+form_postcode+
							"&form_message="+form_message+
							"&form_toSell="+form_toSell+
							"&form_toRent="+form_toRent+
							"&form_valued="+form_valued+
							"&form_mortgage="+form_mortgage+
							"&form_mintInfo="+form_mintInfo+
							"&form_thirdPartyInfo="+form_thirdPartyInfo+
							"&form_emailMe="+form_emailMe;
		sendQuery(valuesString);
	}
 }
 
 function submitAgentEnquiry(){
 	if(xmlHttp){
		formType = 'agentEnquiry';
		buildWaitingBox();
		//build the string of values to send to the server
		var form_usrId = document.getElementById('form_usrId').value;
		var form_agent = document.getElementById('form_agent').value;
		var form_nameTitle = document.getElementById('form_nameTitle').value;
		var form_nameFirst = document.getElementById('form_nameFirst').value;
		var form_nameLast = document.getElementById('form_nameLast').value;
		var form_email = document.getElementById('form_email').value;
		var form_phoneType = document.getElementById('form_phoneType').value;
		var form_phoneNumber = document.getElementById('form_phoneNumber').value;
		var form_callTime = document.getElementById('form_callTime').value;
		var form_address1 = document.getElementById('form_address1').value;
		var form_address2 = document.getElementById('form_address2').value;
		var form_town = document.getElementById('form_town').value;
		var form_country = document.getElementById('form_country').value;
		var form_postcode = document.getElementById('form_postcode').value;
		var form_message = document.getElementById('form_message').value;
		var form_mintInfo = document.getElementById('form_mintInfo').checked;
		if(form_mintInfo==true){
			form_mintInfo = "on";
		}else{
			form_mintInfo = "off";
		}
		var form_thirdPartyInfo = document.getElementById('form_thirdPartyInfo').checked;
		if(form_thirdPartyInfo==true){
			form_thirdPartyInfo = "on";
		}else{
			form_thirdPartyInfo = "off";
		}
		var form_emailMe = document.getElementById('form_emailMe').checked;
		if(form_emailMe==true){
			form_emailMe = "on";
		}else{
			form_emailMe = "off";
		}
		var valuesString = "form_type=contactAgent"+
							"&form_usrId="+form_usrId+
							"&form_agent="+form_agent+
							"&form_nameTitle="+form_nameTitle+
							"&form_nameFirst="+form_nameFirst+
							"&form_nameLast="+form_nameLast+
							"&form_email="+form_email+
							"&form_phoneType="+form_phoneType+
							"&form_phoneNumber="+form_phoneNumber+
							"&form_callTime="+form_callTime+
							"&form_address1="+form_address1+
							"&form_address2="+form_address2+
							"&form_town="+form_town+
							"&form_country="+form_country+
							"&form_postcode="+form_postcode+
							"&form_message="+form_message+
							"&form_mintInfo="+form_mintInfo+
							"&form_thirdPartyInfo="+form_thirdPartyInfo+
							"&form_emailMe="+form_emailMe;
		sendQuery(valuesString);
	}
 }
 
 function sendQuery(valuesString){
 	//try to connect to the server
	try{
		//continue only if the XMLHTTPRequest object isnt busy
		if((xmlHttp.readyState==4 || xmlHttp.readyState == 0)){
			//make a server request to validate the extracted data
			xmlHttp.open("POST", serverAddress, true);
			xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlHttp.onreadystatechange = handleRequestStateChange;
			xmlHttp.send(valuesString);
		}
	}catch(e){
		//display an error when failing to connect to the server
		//TO DO - change the form action and submit here as if JS is off
		displayError(e.toString()+"here");
	}
 }
 
 //read the servers response
 function readResponse(){
 	//retrieve the servers response
	var response = xmlHttp.responseText;
	//server error?
	if(response.indexOf("ERRNO")>=0 || response.indexOf("error:")>=0 || response.length==0){
		throw(response.length == 0 ? "Server error." : response+'here2');
	}
	//get response in XML format (assume the response is valid XML)
	responseXml = xmlHttp.responseXML;
	//get the document element
	var xmlDoc = responseXml.documentElement;
	var result = xmlDoc.getElementsByTagName("result")[0].firstChild.data;
	var error = xmlDoc.getElementsByTagName("error")[0].firstChild.data;
	var message = xmlDoc.getElementsByTagName("message")[0].firstChild.data;
	//show the feedback
	var htmlMessage = message.replace(/BRTAG/g,"<br />");
	htmlMessage = htmlMessage.replace(/STRTAG/g,"<strong>");
	htmlMessage = htmlMessage.replace(/OFFSTRNGTAG/g,"</strong>");
	showFeedback(result, htmlMessage, error);
	updateEmailStats(error);
	//clear the form if now errors found
	clearForm(error);
 }
 
 function buildWaitingBox(){
 	var containerDiv = document.createElement('div');
	containerDiv.setAttribute('id', 'feedbackPopupEnquiry');
	var titleDiv = document.createElement('div');
	titleDiv.setAttribute('class', 'divTitle');
	titleDiv.setAttribute('id', 'divTitle');
	titleDiv.innerHTML = 'Sending...';
	var contentDiv = document.createElement('div');
	contentDiv.setAttribute('class', 'feedbackContent');
	var messageP = document.createElement('p');
	messageP.setAttribute('class', 'center');
	messageP.setAttribute('id', 'feedbackMessageContainer');
	var animGif = document.createElement('img');
	animGif.setAttribute('src', '../img/green_rot.gif');
	var breakTag = document.createElement('br');
	var waitText = document.createTextNode('(Please wait...)');
	var buttonDiv = document.createElement('p');
	buttonDiv.setAttribute('class', 'center');
	buttonDiv.setAttribute('id', 'buttonContainer');
	
	messageP.appendChild(animGif);
	messageP.appendChild(breakTag);
	messageP.appendChild(waitText);
	contentDiv.appendChild(messageP);
	contentDiv.appendChild(buttonDiv);
	containerDiv.appendChild(titleDiv);
	containerDiv.appendChild(contentDiv);
	document.getElementById("feedbackHolder").appendChild(containerDiv);
 }
 
 function showFeedback(result, message){
 	document.getElementById('divTitle').innerHTML = result;
	document.getElementById('feedbackMessageContainer').innerHTML = message;
	var button = document.createElement('a');
	button.setAttribute('href', 'javascript: removeFeedback();');
	button.setAttribute('id', 'removeFeedbackBtn');
	button.innerHTML = 'Ok';
	
	document.getElementById('buttonContainer').appendChild(button);
 }
 
 function updateEmailStats(error){
 	if(error==0){
		var agentId = document.getElementById('form_usrId').value;
		if(agentId>0){
			updateStats(agentId,'emails_sent');
		}
	}
 }
 
 function clearForm(error){
 	if(error==0){
		//no error found, clear the form
		document.getElementById('form_nameTitle').value = "Title";
		document.getElementById('form_nameFirst').value = "First name";
		document.getElementById('form_nameLast').value = "Last name";
		document.getElementById('form_email').value = "";
		document.getElementById('form_phoneType').options[0].selected = true;
		document.getElementById('form_phoneNumber').value = "";
		document.getElementById('form_callTime').options[0].selected = true;
		document.getElementById('form_address1').value = "";
		document.getElementById('form_address2').value = "";
		document.getElementById('form_town').value = "";
		document.getElementById('form_country').options[0].selected = true;
		document.getElementById('form_postcode').value = "";
		document.getElementById('form_message').value = "";
		document.getElementById('form_messageNumChars').innerHTML = "(0 / 1000)";
		document.getElementById('form_mintInfo').checked = true;
		document.getElementById('form_thirdPartyInfo').checked = false;
		document.getElementById('form_emailMe').checked = true;
		
		if(formType=="propertyEnquiry"){
			document.getElementById('form_enquiry1').checked = true;
			document.getElementById('form_enquiry2').checked = false;
			document.getElementById('form_enquiry3').checked = false;
			document.getElementById('form_toSell').options[0].selected = true;
			document.getElementById('form_toRent').options[0].selected = true;
			document.getElementById('form_valued').checked = false;
			document.getElementById('form_mortgage').checked = false;
		}
	}
 }
 
 function removeFeedback(){
 	var popupContainer = document.getElementById('feedbackHolder');
 	var oldPopup = document.getElementById('feedbackPopupEnquiry');
	popupContainer.removeChild(oldPopup);
 }

