function QuoteCityStateSubmit(baseName, msg) {
	var fieldCity = document.getElementById(baseName+"city")
	var fieldState = document.getElementById(baseName+"state")
	if ((fieldCity.value == "") || (fieldState.value == "")) return;
	if (!CheckCity(fieldCity, msg)) return false;
	SendAjaxRequestField("CityStateValidate", fieldState.value+URLEncode(fieldCity.value), QuoteCityStateCallback, baseName);
}

function QuoteCityStateCallback(response, baseName) {
	parseXML(response);
	var city = fetchFieldFromXML("ajaxCity");
	var state = fetchFieldFromXML("ajaxState");
	var county = fetchFieldFromXML("ajaxCounty");
	var errormsg = fetchFieldFromXML("ajaxError");
	var zone = fetchFieldFromXML("ajaxZone");
	
	if ((errormsg != "Success") && (zone == "true")) {
		var fname = document.getElementById(baseName+"city");
		SetError(fname, errormsg);
		fname.focus();
		ErrorField = '';
		ErrorOccurred = false;
		return;
	}
	fetchQuoteStateSpecific();
}

function CheckCity(fname, msg) {
	var filter = /^([a-zA-Z. ])+$/;
	if (!filter.test(fname.value)) {
		if (typeof (msg) == "undefined") msg = fname.value + " is not a valid zipcode";
  		SetError(fname, msg);
		return false;
	}
	return true;
}

function QuoteZipCallback(response) {
	parseXML(response);
	var city = fetchFieldFromXML("ajaxCity");
	var state = fetchFieldFromXML("ajaxState");
	var county = fetchFieldFromXML("ajaxCounty");
	var errormsg = fetchFieldFromXML("ajaxError");
	if (errormsg != "Success") {
		var fname = document.getElementById("quote_zipcode");
		SetError(fname, errormsg);
		fname.focus();
		ErrorField = '';
		ErrorOccurred = false;
		return;
	}

	document.getElementById('quote_city').value = city;
	fname = document.getElementById('quote_state')
	fname.value = state;
	fetchQuoteStateSpecific();
}

function QuoteSubmitZip(fname, msg) {
	if (fname.value == "")
		return;
	if (!CheckZip(fname, msg))
		return false;
	args = fname.value;
	SendAjaxRequest("ZipValidate", args, QuoteZipCallback);
}

function SubmitZip(baseName, msg) {
	fname = document.getElementById(baseName+"zipcode");
	if (fname.value == "")
		return;
	if (!CheckZip(fname, msg))
		return false;
	args = fname.value;
	SendAjaxRequestField("ZipValidate", args, ZipCallback, baseName);
}

function ZipCallback(response, baseName) {
	parseXML(response);
	if (fetchFieldFromXML("ajaxError") != "Success") {
		var fname = document.getElementById(baseName+"zipcode");
		SetError(fname, fetchFieldFromXML("ajaxError"));
		fname.focus();
		ErrorField = '';
		ErrorOccurred = false;
		return;
	}
	document.getElementById(baseName+"city").value = fetchFieldFromXML("ajaxCity");;
	var fieldCounty = document.getElementById(baseName+"county");
	if (fieldCounty) fieldCounty.value = fetchFieldFromXML("ajaxCounty");
	document.getElementById(baseName+"state").value = fetchFieldFromXML("ajaxState");
}

function CheckZip(fname, msg) {
	var valid = "0123456789-";
	var hyphen_count = 0;
	var hyphen_pos;

	if (typeof (msg) == "undefined")
		msg = fname.value + " is not a valid zipcode";

	// if string is whitespace, bail out
	if (isWhitespace(fname.value)) {
		fname.value = "";
		return true;
	}

	if (fname.value.indexOf(" ") != -1) {
		return true;
	}

	// scan each character and make sure it is valid
	for ( var i = 0; i < fname.value.length; i++) {
		temp = fname.value.charAt(i);
		if (temp == "-") {
			hyphen_count++;
			hyphen_pos = i;
		}
		if (valid.indexOf(temp) == "-1") {
			SetError(fname, msg);
			return false;
		}
	}

	if (hyphen_count > 1) {
		SetError(fname, msg);
		return false;
	}
	if (hyphen_count == 1 && hyphen_pos != 5) {
		SetError(fname, msg);
		return false;
	}
	if (fname.value.length == 10) {
		if (hyphen_count != 1) {
			SetError(fname, msg);
			return false;
		}
	} else {
		if (fname.value.length != 5 && fname.value.length != 9) {
			SetError(fname, msg);
			return false;
		}
	}

	// Now remove the dash so that format works properly
	if (hyphen_count == 1)
		fname.value = fname.value.substr(0, 5) + fname.value.substr(6, 4);

	fname.value = FormatNumber(fname.value, 0, '#####-####', true);
	ClearError(fname);
	return true;
}
