
var http = getHTTPObject();
var url = "findAddress?postCode=";
var cityOld = "";
var codeOld = "";
var postOld = "";
var streetOld = "";
var cityCompleter;
var codeCompleter;
var postCompleter;
var streetCompleter;
var cityField;
var codeField;
var postField;
var streetField;
var houseNumberField;
var flatNumberField;
var cityTD;
var codeTD;
var postTD;
var streetTD;
var houseNumberTD;
var flatNumberTD;
var oryginalCity;
var oryginalCode;
var oryginalPost;
var oryginalStreet;
var oryginalHouseNumber;
var oryginalFlatNumber;
var suggestedCity;
var suggestedCode;
var suggestedPost;
var suggestedStreet;
var suggestedHouseNumber;
var suggestedFlatNumber;
var oryginalCSSClass;
var oryginalTDCSSClass;
var changedCSSClass = "changed";
var watchValues = false;
var lastRadioValue;
/*funkcja ustawia wartosci pol globalnych*/
function setChangedValues(city, code, post, street, houseNumber, flatNumber) {
	watchValues = true;
	suggestedCity = city;
	suggestedCode = code;
	suggestedPost = post;
	suggestedStreet = street;
	suggestedHouseNumber = houseNumber;
	suggestedFlatNumber = flatNumber;
	cityField = $("city");
	codeField = $("code");
	postField = $("post");
	streetField = $("street");
	houseNumberField = $("house_number");
	flatNumberField = $("flat_number");
	cityTD = $("cityTD");
	codeTD = $("codeTD");
	postTD = $("postTD");
	streetTD = $("streetTD");
	houseNumberTD = $("houseNumberTD");
	flatNumberTD = $("flatNumberTD");
	oryginalCity = cityField.value;
	oryginalCode = codeField.value;
	oryginalPost = postField.value;
	oryginalStreet = streetField.value;
	oryginalHouseNumber = houseNumberField.value;
	oryginalFlatNumber = flatNumberField.value;
	oryginalCSSClass = (cityField.className);
	oryginalTDCSSClass = $("cityTD").className;
	lastRadioValue = "oryginal";
	setRadioChecked("changed");
}
function setRadioChecked(value) {
	var radios = document.checkForm.chosenAddress;
	for (i = 0; i < radios.length; i++) {
		radios[i].checked = false;
		if (radios[i].value == value) {
			radios[i].checked = true;
		}
	}
}
/*po zmianie jakiegos pola adresu przywraca domyslna klase pol i zaznacza radiobutona na 'Pozostan przy podanych wartosciach' wpisanych przez uzytkownika*/
function inputChanged() {
	if (watchValues == true && $("radioSuggested").checked) {
		if (isChanged(cityField.value, suggestedCity) || isChanged(codeField.value, suggestedCode) || isChanged(postField.value, suggestedPost) || isChanged(streetField.value, suggestedStreet) || isChanged(houseNumberField.value, suggestedHouseNumber) || isChanged(flatNumberField.value, suggestedFlatNumber)) {
			oryginalCity = cityField.value;
			oryginalCode = codeField.value;
			oryginalPost = postField.value;
			oryginalStreet = streetField.value;
			oryginalHouseNumber = houseNumberField.value;
			oryginalFlatNumber = flatNumberField.value;
			setCSSClass(cityField, oryginalCSSClass);
			setCSSClass(codeField, oryginalCSSClass);
			setCSSClass($("code_prefix"), "tdText20");
			setCSSClass($("code_sufix"), "tdTextCodeSufix");
			setCSSClass(postField, oryginalCSSClass);
			setCSSClass(streetField, oryginalCSSClass);
			setCSSClass(houseNumberField, "tdText40");
			setCSSClass(flatNumberField, "tdText40");
			setCSSClass(cityTD, oryginalTDCSSClass);
//			setCSSClass(codeTD, oryginalTDCSSClass);
			setCSSClass(postTD, oryginalTDCSSClass);
			setCSSClass(streetTD, oryginalTDCSSClass);
			setCSSClass(houseNumberTD, oryginalTDCSSClass);
			setCSSClass(flatNumberTD, oryginalTDCSSClass);
			setRadioChecked("oryginal");
			lastRadioValue = "oryginal";
		}
	}
}
function setCSSClass(field, className) {
	if (field.className.indexOf("Small") < 0) {
		field.className = className;
	} else {
		field.className = className + "Small";
	}
}
/*funkcja wywolywana przy zmianie zaznaczenia radiobuttonow*/
function changeFormAdress(value) {
	if (watchValues == true && lastRadioValue != value) {
		lastRadioValue = value;
		if ("oryginal" == value) {
			cityField.value = oryginalCity;
			codeField.value = oryginalCode;
			postField.value = oryginalPost;
			streetField.value = oryginalStreet;
			houseNumberField.value = oryginalHouseNumber;
			flatNumberField.value = oryginalFlatNumber;
			setCSSClass(cityField, oryginalCSSClass);
			setCSSClass(codeField, oryginalCSSClass);
			setCSSClass($("code_prefix"), "tdText20");
			setCSSClass($("code_sufix"), "tdTextCodeSufix");
			setCSSClass(postField, oryginalCSSClass);
			setCSSClass(streetField, oryginalCSSClass);
			setCSSClass(houseNumberField, "tdText40");
			setCSSClass(flatNumberField, "tdText40");
			setCSSClass(cityTD, oryginalTDCSSClass);
			//setCSSClass(codeTD, oryginalTDCSSClass);
			setCSSClass(postTD, oryginalTDCSSClass);
			setCSSClass(streetTD, oryginalTDCSSClass);
			setCSSClass(houseNumberTD, oryginalTDCSSClass);
			setCSSClass(flatNumberTD, oryginalTDCSSClass);
		}
		if ("changed" == value) {
			oryginalCity = cityField.value;
			if (isChanged(cityField.value, suggestedCity)) {
				cityField.value = suggestedCity;
				setCSSClass(cityField, changedCSSClass);
				setCSSClass(cityTD, changedCSSClass);
			}
			oryginalCode = codeField.value;
			if (isChanged(codeField.value, suggestedCode)) {
				codeField.value = suggestedCode;
				setCSSClass($("code_prefix"), "tdText20Changed");
				setCSSClass($("code_sufix"), "tdTextCodeSufixChanged");
				//setCSSClass(codeTD, changedCSSClass);
			}
			oryginalPost = postField.value;
			if (isChanged(postField.value, suggestedPost)) {
				postField.value = suggestedPost;
				setCSSClass(postField, changedCSSClass);
				setCSSClass(postTD, changedCSSClass);
			}
			oryginalStreet = streetField.value;
			if (isChanged(streetField.value, suggestedStreet)) {
				streetField.value = suggestedStreet;
				setCSSClass(streetField, changedCSSClass);
				setCSSClass(streetTD, changedCSSClass);
			}
			oryginalHouseNumber = houseNumberField.value;
			if (isChanged(houseNumberField.value, suggestedHouseNumber)) {
				houseNumberField.value = suggestedHouseNumber;
				setCSSClass(houseNumberField, "tdText40Changed");
				setCSSClass(houseNumberTD, changedCSSClass);
			}
			oryginalFlatNumber = flatNumberField.value;
			if (isChanged(flatNumberField.value, suggestedFlatNumber)) {
				flatNumberField.value = suggestedFlatNumber;
				setCSSClass(flatNumberField, "tdText40Changed");
				setCSSClass(flatNumberTD, changedCSSClass);
			}
		}
	}
}
function isChanged(value1, value2) {
	if (value1 == value2) {
		return false;
	} else {
		return true;
	}
}
function getHTTPObject() {
	var xmlhttp;
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	} else {
		if (window.ActiveXObject) {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlhttp;
}
function handleHttpResponse() {
	if (http.readyState == 4) {
		if (http.status == 200) {
			if (http.responseXML.documentElement != null) {
				results = http.responseXML.documentElement;
				if (results.getElementsByTagName("error")[0] != null) {
				} else {
					var responsePostCode = results.getElementsByTagName("postCode");
					if ((responsePostCode != null) && (responsePostCode[0] != null) && (responsePostCode[0].firstChild != null) && (responsePostCode[0].firstChild.data == $("code").value)) {
						setAddress(results);
					}
				}
			}
		}
	}
}
function isValueEmpty(field) {
	if (field.value.length == 0) {
		return true;
	} else {
		return false;
	}
}
function cityCompleter() {
	cityCompleter = new Ajax.Autocompleter("city", "cityDiv", "addressAutocompleter.do", {minChars:3, afterUpdateElement:setCity, paramName:"city_now", indicator:"cityProgress", dynamicParams:["city", "code", "post", "street", "house_number", "flat_number", "no_street_hidden", "code_prefix", "code_sufix"]});
}
function codeCompleter() {
	codeCompleter = new Ajax.Autocompleter("code_sufix", "codeDiv", "addressAutocompleter.do", {minChars:4, afterUpdateElement:setCode, paramName:"code_now", afterUpdateElement:mergeCodeAfixes, indicator:"codeProgress", dynamicParams:["city", "code", "post", "street", "house_number", "flat_number", "no_street_hidden", "code_prefix", "code_sufix"]});
}
function postCompleter() {
	postCompleter = new Ajax.Autocompleter("post", "postDiv", "addressAutocompleter.do", {minChars:3, afterUpdateElement:setPost, paramName:"post_now", indicator:"postProgress", dynamicParams:["city", "code", "post", "street", "house_number", "flat_number", "no_street_hidden", "code_prefix", "code_sufix"]});
}
function streetCompleter() {
	streetCompleter = new Ajax.Autocompleter("street", "streetDiv", "addressAutocompleter.do", {minChars:3, afterUpdateElement:setStreet, paramName:"street_now", indicator:"streetProgress", dynamicParams:["city", "code", "post", "street", "house_number", "flat_number", "no_street_hidden", "code_prefix", "code_sufix"]});
}
function setCity(text, li) {
	if (li.id.toLowerCase().indexOf(cityCompleter.options.lastToken.toLowerCase()) > -1) {
		$("city").value = li.id;
		//$("street").focus();		
	}
	return;
}
function setAddress(results) {
	var post = $("post");
	var responsePost = results.getElementsByTagName("post");
	if ((post.value.length == 0) && (responsePost != null) && (responsePost[0] != null) && (responsePost[0].firstChild != null)) {
		post.value = responsePost[0].firstChild.data;
	}
	var city = $("city");
	var responseCity = results.getElementsByTagName("city");
	if ((city.value.length == 0) && (responseCity != null) && (responseCity[0] != null) && (responseCity[0].firstChild != null)) {
		city.value = responseCity[0].firstChild.data;
	}
}
function setCode(text, li) {
	if (li.id.toLowerCase().indexOf(codeCompleter.options.lastToken.toLowerCase()) > -1) {
		$("code").value = li.id;
	}
	return;
}
function setPost(text, li) {
	if (li.id.toLowerCase().indexOf(postCompleter.options.lastToken.toLowerCase()) > -1) {
		$("post").value = li.id;
	}
	return;
}
function setStreet(text, li) {
	if (li.id.toLowerCase().indexOf(streetCompleter.options.lastToken.toLowerCase()) > -1) {
		$("street").value = li.id;
		//$("house_number").focus();
	}
	return;
}
function checkCity() {
	var cityNew = $("city");
	if (cityNew.value.length < 3) {
		cityCompleter.options.isCache = false;
	} else {
		if (cityOld.length > 2 && cityNew.value.toLowerCase().substr(0, 3) != cityOld.toLowerCase().substr(0, 3)) {
			cityCompleter.options.isCache = false;
		}
	}
	cityOld = cityNew.value.toLowerCase();
}
function checkCode() {
	if (($("code_prefix").value.length < 2) || ((isValueEmpty($("city"))) && (isValueEmpty($("post"))) && (isValueEmpty($("street"))))) {
		codeCompleter.options.minChars = 4;
		codeCompleter.options.isCache = false;
	} else {
		codeCompleter.options.minChars = 0;
	}
}
function findAddress() {
	var code = $("code").value;
	if (code.length == 6) {
		try {
			http.open("GET", url + code, true);
			http.onreadystatechange = handleHttpResponse;
			http.send(null);
		}
		catch (exception) {
		}
	}
}
function checkPost() {
	var postNew = $("post");
	if (postNew.value.length < 3) {
		postCompleter.options.isCache = false;
	} else {
		if (postOld.lengt > 2 && postNew.value.toLowerCase().substr(0, 3) != postOld.toLowerCase().substr(0, 3)) {
			postCompleter.options.isCache = false;
		}
	}
	postOld = postNew.value.toLowerCase();
}
function checkStreet() {
	var streetNew = $("street");
	if (streetNew.value.length < 3) {
		streetCompleter.options.isCache = false;
	} else {
		if (streetOld.length > 2 && streetNew.value.toLowerCase().substr(0, 3) != streetOld.toLowerCase().substr(0, 3)) {
			streetCompleter.options.isCache = false;
		}
	}
	streetOld = streetNew.value.toLowerCase();
}
function hideProgress(id) {
	$(id).style.display = "none";
}
function showProgress(id) {
	$(id).style.display = "block";
}
function mergeCode() {
	$("code").value = $("code_prefix").value + "-" + $("code_sufix").value;
	checkCode();
	inputChanged();
	findAddress();
}
function mergeCodeAfixes(text, li) {
	$("code_prefix").value = li.id.substring(0, 2);
	$("code_sufix").value = li.id.substring(3);
}
function setStreetAvailability() {
	if ($("no_street_check").checked) {
		$("no_street_hidden").value = "on";
		$("street").disabled = true;
		setGreyBckgr("street");
		postRequest["street"] = $("street").value== "" ? "" : "$%null%$";
		makePostFieldsEditable();
	} else {
		$("no_street_hidden").value = "off";
		$("street").disabled = false;
		setWhiteBckgr("street");
		postRequest["city"] = $("city").value.toLowerCase();
	}
}
var getPostInfoUrl = "getPostInfo.do";
var postRequest = new Object();
var doSubmit = false;
var canSubmit = true;
function getPostInfo() {
	var cityValue =$("city").value;
	var streetValue =$("street").disabled == false ? $("street").value : "";
	if ((postRequest["city"] != cityValue.toLowerCase()) || (postRequest["street"] != streetValue.toLowerCase()) || (postRequest["house_number"] != $("house_number").value.toLowerCase())) {
		postRequest["city"] = cityValue.toLowerCase();
		postRequest["street"] = streetValue.toLowerCase();
		postRequest["house_number"] = $("house_number").value.toLowerCase();
		var postRequestTmp = new Object();
		postRequestTmp["city"] = postRequest["city"];
		postRequestTmp["street"] = postRequest["street"];
		postRequestTmp["house_number"] = postRequest["house_number"];
		if ((cityValue != "" && streetValue != "") || (cityValue != "" && ($("house_number").value != ""))) {
			canSubmit = false;
			showProgress("pACProgress");
			makePostFieldsEditable();
			var pars = "city=" + cityValue + "&street=" + streetValue + "&houseNumber=" + $("house_number").value;
			new Ajax.Request(getPostInfoUrl, {parameters:pars, onSuccess:function (transport) {
				var results = transport.responseXML.documentElement;
				var errors = results.getElementsByTagName("error");
				var isChange = false;
				if (errors[0] != null) {
					makePostFieldsEditable();
					isChange = true;
				} else {
					var postName = results.getElementsByTagName("postName");
					var postCode = results.getElementsByTagName("postCode");
					var cityVal =$("city").value.toLowerCase();
					var streetVal =$("street").disabled == false ? $("street").value.toLowerCase() : "";
					var houseVal = $("house_number").value.toLowerCase();
					if ((cityVal != "" && streetVal != "" && cityVal == postRequestTmp["city"] && streetVal == postRequestTmp["street"] && houseVal == postRequestTmp["house_number"]) || (cityVal != "" && houseVal != "" && cityVal == postRequestTmp["city"] && houseVal == postRequestTmp["house_number"] && streetVal == postRequestTmp["street"])) {
						if (postName[0] != null) {
							$("post").value = postName[0].firstChild.data;
							$("post").readOnly = true;
							setGreyBckgr("post");
							isChange = true;
						} else {
							$("post").readOnly = false;
							setWhiteBckgr("post");
						}
						if (postCode[0] != null) {
							$("code_prefix").value = postCode[0].firstChild.data.substring(0, 2);
							$("code_sufix").value = postCode[0].firstChild.data.substring(3);
							$("code_prefix").readOnly = true;
							$("code_sufix").readOnly = true;
							setGreyBckgr("code_prefix");
							setGreyBckgr("code_sufix");
							isChange = true;
						} else {
							$("code_prefix").readOnly = false;
							$("code_sufix").readOnly = false;
							setWhiteBckgr("code_prefix");
							setWhiteBckgr("code_sufix");
							if (postName[0] == null) {
								isChange = true;
							}
						}
						canSubmit = true;
					}
				}
				if (doSubmit) {
					canSubmit = false;
					document.checkForm.submit();
				} else if (isChange) {					
					hideProgress("pACProgress");
				}
			}});
		} else {
			makePostFieldsReadOnly();
		}
	}
}
function DoSubmit() {
	if (canSubmit) {
		canSubmit = false;
		document.checkForm.submit();
	} else {
		doSubmit = true;
	}
}
function disablePostFields() {
	if (($("post").value == "") && ($("code_prefix").value == "") && ($("code_sufix").value == "") && ($("house_number").value == "") && ($("flat_number").value == "") && ($("city").value == "") && ($("street").value == "")) {
		$("post").readOnly = true;	
		setGreyBckgr("post");
		$("code_prefix").readOnly = true;
		$("code_sufix").readOnly = true;
		setGreyBckgr("code_prefix");
		setGreyBckgr("code_sufix");
	}
}
function setWhiteBckgr(id) {
	$(id).style.background = "#ffffff";
}
function setGreyBckgr(id) {
	$(id).style.background = "#EBEBEB";
}
function blurIfReadonly(id) {
	if ($(id).readOnly==true) {
		$(id).blur();
	}
}
function makePostFieldsReadOnly() {
	$("post").value = "";
	$("code_prefix").value = "";
	$("code_sufix").value = "";
	$("post").readOnly = true;
	$("code_prefix").readOnly = true;
	$("code_sufix").readOnly = true;
	setGreyBckgr("post");
	setGreyBckgr("code_prefix");
	setGreyBckgr("code_sufix");
	hideProgress("pACProgress");
}
function clearPostFields() {
	var cityValue =$("city").value;
	var streetValue =$("street").disabled == false ? $("street").value : "";
	var houseValue = $("house_number").value;
	if (!((cityValue != "" && streetValue != "") || (cityValue != "" && houseValue != ""))) {
		makePostFieldsReadOnly();
	}
}
function makePostFieldsEditable() {
	$("post").readOnly = false;
	setWhiteBckgr("post");
	$("code_prefix").readOnly = false;
	$("code_sufix").readOnly = false;
	setWhiteBckgr("code_prefix");
	setWhiteBckgr("code_sufix");
}
function autocompleteCode() {
	if (($("code_prefix").value.length == 2) && ($("code_prefix").readOnly == false)) {
		showProgress("codeProgress");
		codeCompleter.activate($("code_prefix"));
	}
}
var postRequestPost = new Object();
function getPostInfoIncludePost() {
	var cityValue =$("city").value;
	var streetValue =$("street").disabled == false ? $("street").value : "";
	var postValue = $("post").value;
	if (($("post").readOnly == false && postValue != "") && ((postRequestPost["city"] != cityValue.toLowerCase()) || (postRequestPost["street"] != streetValue.toLowerCase()) || (postRequestPost["house_number"] != $("house_number").value.toLowerCase()) || (postRequestPost["post"] != postValue.toLowerCase()))) {
		postRequestPost["city"] = cityValue.toLowerCase();
		postRequestPost["street"] = streetValue.toLowerCase();
		postRequestPost["house_number"] = $("house_number").value.toLowerCase();
		postRequestPost["post"] = postValue.toLowerCase();
		var postRequestTmp = new Object();
		postRequestTmp["city"] = postRequestPost["city"];
		postRequestTmp["street"] = postRequestPost["street"];
		postRequestTmp["house_number"] = postRequestPost["house_number"];
		postRequestTmp["post"] = postRequestPost["post"];
		if ((cityValue != "" && streetValue != "") || (cityValue != "" && ($("house_number").value != ""))) {
			canSubmit = false;
			showProgress("pACProgress");
			makePostFieldsEditable();
			var pars = "city=" + cityValue + "&street=" + streetValue + "&houseNumber=" + $("house_number").value + "&post=" + postValue;
			new Ajax.Request(getPostInfoUrl, {parameters:pars, onSuccess:function (transport) {
				var results = transport.responseXML.documentElement;
				var errors = results.getElementsByTagName("error");
				var isChange = false;
				if (errors[0] != null) {
					makePostFieldsEditable();
					isChange = true;
				} else {
					var postCode = results.getElementsByTagName("postCode");
					var cityVal =$("city").value.toLowerCase();
					var streetVal =$("street").disabled == false ? $("street").value.toLowerCase() : "";
					var houseVal = $("house_number").value.toLowerCase();
					var postVal = $("post").value.toLowerCase();
					if ((cityVal != "" && streetVal != "" && cityVal == postRequestTmp["city"] && streetVal == postRequestTmp["street"] && houseVal == postRequestTmp["house_number"] && postVal == postRequestTmp["post"]) || (cityVal != "" && houseVal != "" && cityVal == postRequestTmp["city"] && houseVal == postRequestTmp["house_number"] && streetVal == postRequestTmp["street"] && postVal == postRequestTmp["post"])) {
						if (postCode[0] != null) {
							$("code_prefix").value = postCode[0].firstChild.data.substring(0, 2);
							$("code_sufix").value = postCode[0].firstChild.data.substring(3);
							$("code_prefix").readOnly = true;
							$("code_sufix").readOnly = true;
							$("post").readOnly = true;
							setGreyBckgr("code_prefix");
							setGreyBckgr("code_sufix");
							setGreyBckgr("post");
							isChange = true;
						} else {
							$("code_prefix").readOnly = false;
							$("code_sufix").readOnly = false;
							$("post").readOnly = false;
							setWhiteBckgr("code_prefix");
							setWhiteBckgr("code_sufix");
							setWhiteBckgr("post");
							isChange = true;
						}
						canSubmit = true;
					}
				}
				if (doSubmit) {
					document.checkForm.submit();
				} else if (isChange) {					
					hideProgress("pACProgress");
				}
			}});
		} else {
			makePostFieldsReadOnly();
		}
	}
}
