﻿
var postcodePath = "PostCode.php";
var captchaPath = "CheckCaptcha.php";
var captchaReloadPath = "Captcha.php?date={0}";
var operationalEmailPath = "EmailOperational.php";
var franchiseEmailPath = "EmailFranchises.php";
var genericEmailPath = "EmailGeneral.php";

var ERROR_Required = "Please fill in this required field.";
var ERROR_Email = "You have entered an incorrect email address.";
var ERROR_Phone = "Please enter a correct phone number";
var ERROR_Mobile = "Please enter a correct mobile number";
var ERROR_State = "Please select a valid state.";
var ERROR_Human = "That is not what the image says!";
var ERROR_HumanService = "We could not contact the image verification service. Please try again in a few minutes.";
var ERROR_SendEmail = "There was an error when sending your details.<br />Please try again in a few minutes.";

var EmailPattern = /^[0-9a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
var StatePattern = /NSW|VIC|QLD|NT|SA|TAS|WA/;
var PhonePattern = /[0-9 \-\(\)\[\]]+/;

var liFormat = "<div class=\"ErrorHeader\"></div><div class=\"ErrorContent\">{0}</div><div class=\"ErrorFooter\"></div>";
var emailFormat = "Name={0}&Email={1}&City={2}&WorkPhone={3}&MobilePhone={4}&Comments={5}&FirstLearn={6}&ContactAtWork={7}&PreferredSuburb={8}&PotentialSite={9}";
var genericEmailFormat = "Name={0}&Email={1}&City={2}&WorkPhone={3}&Fax={4}&Comments={5}&Address={6}&City={7}";

var QueryFranchise = null;
var QueryWiFi = null;
var QueryGeneral = null;

var PreferredSuburbRequired = null;
var CityRequired = null;
var EmailRequired = null;
var MobileRequired = null;
var WorkPhoneRequired = null;
var FullNameRequired = null;
var HumanCaptchaRequired = null;

var PreferredSuburbItem = null;
var FirstLearnItem = null;
var ContactAtWorkItem = null;
var HavePreferredSuburbItem = null;
var PreferredSuburbErrorItem = null;
var PotentialSiteItem = null;

var FullNameItem = null;
var WorkPhoneItem = null;
var MobileItem = null;
var PhoneItem = null;
var FaxItem = null;
var EmailItem = null;
var AddressItem = null;
var CityItem = null;
var PreferredSuburbItem = null;
var HumanCaptchaItem1 = null;
var HumanCaptchaItem2 = null;

var FullNameErrorItem = null;
var WorkPhoneErrorItem  = null;
var MobileErrorItem  = null;
var PhoneErrorItem = null;
var FaxErrorItem = null;
var EmailErrorItem = null;
var AddressErrorItem = null;
var CityErrorItem = null;
var PreferredSuburbErrorItem = null;

var ContactExtraInfo = null;

var EmailSendErrorItem = null;
var EmailSendSuccessItem = null;
var EmailSubmitItem = null;
var EmailProcessingItem = null;

var PreferedSuburbYes = null;
var thiz = this;

function PreferredSuburbChanged() {
	if (!PreferredSuburbItem) { PreferredSuburbItem = $("PreferredSuburbItem"); }
	if (!PreferedSuburbYes) { PreferedSuburbYes = $("PreferedSuburbYes"); }
	if (PreferedSuburbYes && PreferredSuburbItem) {
	    PreferredSuburbItem.setStyle('display', PreferedSuburbYes.checked ? 'block' : 'none');
    }	   
}

function SendEmailData() {
	
	var ok = false;
	
	var generalMode = QueryWiFi.checked||QueryGeneral.checked;
	
	var nameOk = CheckDataValues("FullName");
	
	var emailOk = CheckDataValues("Email");
	if (emailOk) { 
	    emailOk = CheckDataValues("Email", EmailPattern, ERROR_Email); 
	}	
	
	if (generalMode) {
	    ok = nameOk && emailOk;
	} else {	    
	    var cityOk = CheckDataValues("City");
	    var workphoneOk = CheckDataValues("WorkPhone", PhonePattern, ERROR_Phone);
	    var mobileOk = CheckDataValues("Mobile", PhonePattern, ERROR_Mobile);
	    var suburbOk = true;
	    if (PreferedSuburbYes.checked) {
		    suburbOk = CheckDataValues("PreferredSuburb");
	    }	    
	    ok = nameOk && emailOk && cityOk && suburbOk && workphoneOk && mobileOk;
	}

	//var ok = generalMode ? (nameOk && emailOk && cityOk && suburbOk && workphoneOk && mobileOk) : ();
	
	if (ok) {
		CheckCaptcha();
	}
	
}

function CheckCaptcha() {

	//var challenge = Recaptcha.get_challenge();
	//var response = Recaptcha.get_response();
	var humanErrorItem = $("HumanErrorItem");
	var txtCaptcha = $("HumanCaptcha").value;
	
	function CaptchaSuccess() {
		ReloadCaptcha();
		var response = this.response["text"];
		var ok = response=="OK!";
		if (ok) {
			humanErrorItem.style.display = "none";
			SendEMail();
		} else {
			humanErrorItem.style.display = "block";
			humanErrorItem.innerHTML = liFormat.replace(/\{0\}/, ERROR_Human);
			ShowSubmit();
		}
	}
	
	function CaptchaFailed() {
		ReloadCaptcha();
		humanErrorItem.style.display = "block";
		humanErrorItem.innerHTML = liFormat.replace(/\{0\}/, ERROR_HumanService);
		ShowSubmit();
	}
	
	HideSubmit();
	
//	SendEMail();
	
	var myXHR = new XHR({
		method: 'post',
		onSuccess: CaptchaSuccess,
		onFailure: CaptchaFailed
	}).send(captchaPath, 'txtCaptcha=' + txtCaptcha);

}

function SendEMail() {

	function EmailSuccess() {
		var response = this.response["text"];
		var ok = response.substr(0,2)=="OK";
		EmailSendSuccessItem.style.display = ok ? "block" : "none";
		EmailProcessingItem.style.display = "none";
		if (ok) {
			$("FullName").value = "";
			$("Email").value = "";
			$("City").value = "";
			$("WorkPhone").value = "";
			$("Mobile").value = "";
			$("Comments").value = "";
			$("Where").value = "";
			$("ContactAtWorkYes").checked = false;
			$("ContactAtWorkNo").checked = false;
			$("PreferredSuburb").value = "";
			$("PotentialSite").value = "";
			ShowSubmit();
		} else {
			EmailFailed();
		}		
	}
	
	function EmailFailed(){ 
	    EmailSendErrorItem.innerHTML = liFormat.replace(/\{0\}/, ERROR_SendEmail);		
	    EmailSendErrorItem.style.display = "block";
        ShowSubmit();
	}

	var generalMode = QueryWiFi.checked||QueryGeneral.checked;
	var emailParams = "";
	
	if (generalMode) {
	    emailParams = genericEmailFormat
		.replace(/\{0\}/, $("FullName").value)
		.replace(/\{1\}/, $("Email").value)
		.replace(/\{2\}/, $("City").value)
		.replace(/\{3\}/, $("Phone").value)
		.replace(/\{4\}/, $("Fax").value)
		.replace(/\{5\}/, $("Comments").value)
		.replace(/\{6\}/, $("Address").value);	
	} else {
        emailParams = emailFormat
	    .replace(/\{0\}/, $("FullName").value)
	    .replace(/\{1\}/, $("Email").value)
	    .replace(/\{2\}/, $("City").value)
	    .replace(/\{3\}/, $("WorkPhone").value)
	    .replace(/\{4\}/, $("Mobile").value)
	    .replace(/\{5\}/, $("Comments").value)
	    .replace(/\{6\}/, $("Where").value)
	    .replace(/\{7\}/, $("ContactAtWorkYes").checked ? "Yes" : "No")
	    .replace(/\{8\}/, $("PreferredSuburb").value)
	    .replace(/\{9\}/, $("PotentialSite").value);
	}
	
	EmailProcessingItem.style.display = "block";
	
	HideSubmit();
	
	var emailPath = "";
	
	if (QueryFranchise.checked) {
	    emailPath = franchiseEmailPath;
	} else if (QueryWiFi.checked) {
	    emailPath = operationalEmailPath;
	} else if (QueryGeneral.checked) {
	    emailPath = genericEmailPath;
	}
	if (emailPath) {
	    var myXHR = new XHR({
		    method: 'post',
		    onSuccess: EmailSuccess,
		    onFailure: EmailFailed
	    }).send(emailPath, emailParams);			
	} else {
	    EmailFailed();
	}
		
}

function HideSubmit() {
	EmailSubmitItem.style.display = "none";
	EmailSendSuccessItem.style.display = "none";
	EmailSendErrorItem.style.display = "none";
	EmailProcessingItem.style.display = "none";
}

function ShowSubmit() {	
	EmailSubmitItem.style.display = "block";
	EmailProcessingItem.style.display = "none";
}

function CheckDataValues(id, pattern, errorMessage, transform) {
	
	var item = $(id);
	var itemRef = $(id+"Item");
	var errorItemRef = $(id+"ErrorItem");
	var ok = false;
	
	if (transform) {
		if (transform=="U") { 
			item.value = item.value.toUpperCase();
		} else if (transform=="L") { 
			item.value = item.value.toLowerCase();
		}
	}
	
	if (pattern) {
		ok = item.value.match(pattern);
		errorItemRef.innerHTML = liFormat.replace(/\{0\}/, errorMessage || "");//errorMessage || "";
	} else {
		ok = (item.value.trim()!="");
		//errorItemRef.innerHTML = ERROR_Required;
		errorItemRef.innerHTML = liFormat.replace(/\{0\}/, ERROR_Required);
	}
	
	if (ok) { 
		itemRef.className = itemRef.className.replace(/\s?Error/, ""); 
	} else {
		itemRef.className += " Error";
	}
	
	errorItemRef.style.display = ok ? "none" : "block";
	itemRef.error = !ok;
	
	return ok;
	
}

function ShowHideFormValues() {

    var generalMode = QueryWiFi.checked||QueryGeneral.checked;

    FullNameItem.className = FullNameItem.className.replace(/\s?Error/, "");
    WorkPhoneItem.className = WorkPhoneItem.className.replace(/\s?Error/, "");
    MobileItem.className = MobileItem.className.replace(/\s?Error/, "");
    PhoneItem.className = PhoneItem.className.replace(/\s?Error/, "");
    FaxItem.className = FaxItem.className.replace(/\s?Error/, "");
    EmailItem.className = EmailItem.className.replace(/\s?Error/, "");
    AddressItem.className = AddressItem.className.replace(/\s?Error/, "");
    CityItem.className = CityItem.className.replace(/\s?Error/, "");
    PreferredSuburbItem.className = PreferredSuburbItem.className.replace(/\s?Error/, "");
    
    PreferredSuburbRequired.style.visibility = generalMode ? "hidden" : "visible";
    CityRequired.style.visibility = generalMode ? "hidden" : "visible";
    //EmailRequired.style.visibility = generalMode ? "hidden" : "visible";
    MobileRequired.style.visibility = generalMode ? "hidden" : "visible";
    WorkPhoneRequired.style.visibility = generalMode ? "hidden" : "visible";
    //FullNameRequired.style.visibility = generalMode ? "hidden" : "visible";
    
    PhoneItem.style.display = generalMode ? "block" : "none"; 
    FaxItem.style.display = generalMode ? "block" : "none"; 
    AddressItem.style.display = generalMode ? "block" : "none";     
    WorkPhoneItem.style.display = generalMode ? "none" : "block"; 
    MobileItem.style.display = generalMode ? "none" : "block";     
            
    FullNameErrorItem.style.display = "none";
    WorkPhoneErrorItem.style.display = "none";
    MobileErrorItem.style.display = "none";
    PhoneErrorItem.style.display = "none";
    FaxErrorItem.style.display = "none";
    EmailErrorItem.style.display = "none";
    AddressErrorItem.style.display = "none";
    CityErrorItem.style.display = "none";
    PreferredSuburbErrorItem.style.display = "none";
    
    ContactExtraInfo.style.display = generalMode ? "none" : "block"; 
    
}


function PostInitializeDom() {
	//KioskSearchTextfield = $("KioskSearchTextfield");
	//HotspotSearchTextfield = $("HotspotSearchTextfield");
}

function ReloadCaptcha() {
	$("HumanCaptchaImage").src = captchaReloadPath.replace(/\{0\}/, (new Date()));
}

function InitializeComplete() {

	ReloadCaptcha();
	
    QueryFranchise = $("QueryFranchise");
    QueryWiFi = $("QueryWiFi");
    QueryGeneral = $("QueryGeneral"); 
    
    PreferredSuburbRequired = $("PreferredSuburbRequired");
    CityRequired = $("CityRequired");
    EmailRequired = $("EmailRequired");
    MobileRequired = $("MobileRequired");
    WorkPhoneRequired = $("WorkPhoneRequired");
    FullNameRequired = $("FullNameRequired");    
    
    PreferredSuburbItem = $("PreferredSuburbItem");    
    FirstLearnItem = $("FirstLearnItem");    
    ContactAtWorkItem = $("ContactAtWorkItem");    
    HavePreferredSuburbItem = $("HavePreferredSuburbItem");    
    PreferredSuburbErrorItem = $("PreferredSuburbErrorItem");    
    PotentialSiteItem = $("PotentialSiteItem"); 
    
    FullNameItem = $("FullNameItem");
    WorkPhoneItem = $("WorkPhoneItem");
    MobileItem = $("MobileItem");       
    PhoneItem = $("PhoneItem");    
    FaxItem = $("FaxItem");
    EmailItem = $("EmailItem");
    AddressItem = $("AddressItem");
    CityItem = $("CityItem");
    PreferredSuburbItem = $("PreferredSuburbItem");
	HumanCaptchaItem1 = $("HumanCaptchaItem1");
	HumanCaptchaItem2 = $("HumanCaptchaItem2");	
            
    FullNameErrorItem = $("FullNameErrorItem");
    WorkPhoneErrorItem = $("WorkPhoneErrorItem");
    MobileErrorItem = $("MobileErrorItem");
    PhoneErrorItem = $("PhoneErrorItem");    
    FaxErrorItem = $("FaxErrorItem");
    EmailErrorItem = $("EmailErrorItem");    
    AddressErrorItem = $("AddressErrorItem");
    CityErrorItem = $("CityErrorItem");
    PreferredSuburbErrorItem = $("PreferredSuburbErrorItem");
    
    ContactExtraInfo = $("ContactExtraInfo");
    
	EmailSendErrorItem = $("EmailSendErrorItem");
	EmailSendSuccessItem = $("EmailSendSuccessItem");
	EmailSubmitItem = $("EmailSubmitItem");
	EmailProcessingItem = $("EmailProcessingItem");	    
    
    QueryGeneral.checked = true;   
    QueryFranchise.onclick = ShowHideFormValues;    
    QueryWiFi.onclick = ShowHideFormValues; 
    QueryGeneral.onclick = ShowHideFormValues; 
    
    ShowHideFormValues();
    
	var suburbInput = $("PreferredSuburb");
	var PreferedSuburbYes = $("PreferedSuburbYes");
	
	var indicator2 = new Element('div', {'class': 'autocompleter-loading', 'styles': {'display': 'none'}}).setHTML('').injectAfter(suburbInput);
	var completer2 = new Autocompleter.Ajax.Json(suburbInput, postcodePath, {
		
		'onRequest': function(el) {
			indicator2.setStyle('display', '');
		},
		
		'onComplete': function(el) {
			indicator2.setStyle('display', 'none');
		},
				
		'ajaxOptions': { method: 'get' } ,
		
		'injectNode' : document.body //window.gecko ? document.body : ScrollContainer
		
	});
	
	var cityInput = $("City");
	var indicator3 = new Element('div', {'class': 'autocompleter-loading', 'styles': {'display': 'none'}}).setHTML('').injectAfter(cityInput);
	var completer3 = new Autocompleter.Ajax.Json(cityInput, postcodePath, {
		
		'onRequest': function(el) {
			indicator3.setStyle('display', '');
		},
		
		'onComplete': function(el) {
			indicator3.setStyle('display', 'none');
		},
		
		'ajaxOptions': { method: 'get' },
		
		'injectNode' : document.body //window.gecko ? document.body : ScrollContainer
	});
	
	thiz.PreferredSuburbChanged();    
    	
	
//		var operationalXHR = new XHR({
//			method: 'get',
//			onSuccess: ProcessOperationalData,
//			onFailure: OperationalDataLoadError
//		}).send(PATH_OPERATIONALDATA.replace(/\{0\}/, new Date()));
	
}
