	var requestType = "pokrytie"; //"pokrytie" vs "sluzba" - different mesages

	var cities = null;
	var streets = null;
	var numbers = null;


	var accentMap = {
		"ľ": "l",
		"š": "s",
		"č": "c",
		"ť": "t",
		"ž": "z",
		"ý": "y",
		"á": "a",
		"í": "i",
		"é": "e",
		"ú": "u",
		"ä": "a",
		"ň": "n",
		"ď": "d",
		"ó": "o",
		"ô": "o",
		"ĺ": "l",
		"ŕ": "r"
	};

	var normalize = function( term ) {
		var ret = "";
		for ( var i = 0; i < term.length; i++ ) {
			ret += accentMap[ term.charAt(i).toLowerCase() ] || term.charAt(i).toLowerCase();
		}
		return ret;
	};

	function getMatch(json, label)
	{
		if (!label)
			return null;

		var value = null;

		label = normalize(label);

		for (i = 0; i < json.length; i++)
			if (normalize(json[i].label) == label)
			{
				if (!value)
					value = {"label" : json[i].label, "value" : json[i].value};
				else
					value = "DOUBLE";
			}

		return value;
	}

	function getIndex(json, name)
	{
		if (!name)
			return null;

		name = name.toLowerCase();

		for (i = 0; i < json.length; i++)
			if (json[i].name.toLowerCase() == name)
				return i;

		return null;
	}

	function getLabels(json)
	{
		var labels = Array();

		for (i = 0; i < json.length; i++)
			labels.push(json[i].name);

		return $.unique(labels);
	}

	function getStreetNumberCoverageStatus(numberName) 
	//output: - if there is any state different from X, that state will be on output (only one item of the same numbers should have nonempty value), 
	//	  - if there is only ampty state or X state, X will be on output,
	//	  - if the numberName doesn't match any item, the empty string will be on output
	{
		numberName = numberName.toUpperCase();

		var coverageStatus = "";
		for (i = 0; i < numbers.length; i++)
		{
			if (numbers[i].name.toUpperCase() == numberName)
			{
				var status = numbers[i].coverageStatus.toUpperCase();

				if ((status != "") && (status != "X"))			
					return status;

				coverageStatus = "X";
			}
		}
		return coverageStatus;
	}

	function Invalidate(type)
	{
		switch (type)
		{
		case "city&street&number":
			$('#cityid').val("");
			$("#street").attr("disabled", "disabled");
			$("#street").val("");

		case "street&number":
			$('#streetid').val("");
			$("#number").attr("disabled", "disabled");
			$("#number").val("");
		case "number":
			$('#numberid').val("");
			$("#coverage_info_outer").toggle(false);

			break;
		}
	}

	$(document).ready(function() {

		$("#odporucanie").change(function() {
			$("#sn_outer").toggle();
		});

		$("#city").attr("disabled", "disabled");
		$("#street").attr("disabled", "disabled");
		$("#number").attr("disabled", "disabled");
		LoadCities();
	});

	function LoadCities()
	{
		$("#city").addClass("ui-autocomplete-loading");
		Invalidate("city&street&number");

		$.ajax({ 
			url: "/web/app/ftth/zoznamMiest.html", 
			success: function(data){

				data = data.replace(/\"name\"/g, "\"label\"");
				data = data.replace(/\"id\"/g, "\"value\"");

				eval("cities = " + data);

			        CitiesAutocomplete(cities);

				$("#city").removeClass("ui-autocomplete-loading");
				$("#city").attr("disabled", "");

				$("#city").keyup(function()
				{
					Invalidate("city&street&number");

					var cityName = $.trim($("#city").val());
					var cityMatch = getMatch(cities, cityName);

					if (cityMatch)
					{
						if (cityMatch == "DOUBLE")
						{
							$("#city").attr("title", "Na slovensku sa nachádza viac obcí " + cityMatch.label + ", musíte si vybrať jednu z ponuky.");
						}
						else
							SetCity(cityMatch.label, cityMatch.value);
					}
				});
			}
		});
	}

	function CitiesAutocomplete(citiesNames) 
	{
		$( "#city" ).autocomplete({
//			source: citiesNames,
			source: function( request, response ) {
				var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
				response( $.grep( citiesNames, function( value ) {
					value = value.label || value.value || value;
					return matcher.test( value ) || matcher.test( normalize( value ) );
				}) );
			},


			minLength: 2,
			focus: function( event, ui ) {
				$( "#city" ).val( ui.item.label );
				return false;
			},                   
			select: function( event, ui ) 
			{
				if (ui.item)
					SetCity(ui.item.label, ui.item.value);

				return false;
			}
		});
	}

	function SetCity(name, id)
	{
		LoadStreets(id);
		$("#city").val(name);
		$("#cityid").val(id);
	}

	function LoadStreets(cityId)
	{
		$("#street").addClass("ui-autocomplete-loading");
		Invalidate("street&number");

		$.ajax({ 
			url: "/web/app/ftth/zoznamUlic.html?mesto=" + cityId, 
			success: function(data){

				data = data.replace(/\"name\"/g, "\"label\"");
				data = data.replace(/\"id\"/g, "\"value\"");

				eval("streets = " + data);

			        StreetsAutocomplete(cityId, streets);

				$("#street").removeClass("ui-autocomplete-loading");
				$("#street").attr("disabled", "");

				if (streets.length == 1)
					SetStreet(cityId, streets[0].label, streets[0].value);

				$("#street").keyup(function(){
					Invalidate("street&number");

					var streetName = $.trim($("#street").val());

					var streetMatch = getMatch(streets, streetName);

					if (streetMatch)
					{
						if (streetMatch == "DOUBLE")
						{
							$("#street").attr("title", "V tomto meste sa nachádza viac ulíc " + streetMatch.label + ", musíte si vybrať jednu z ponuky.");
						}
						else
							SetStreet(cityId, streetMatch.label, streetMatch.value);
					}
				});
			}
		});
	}

	function StreetsAutocomplete(cityId, streetsNames) 
	{
		$( "#street" ).autocomplete({
//			source: streetsNames,
			source: function( request, response ) {
				var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
				response( $.grep( streetsNames, function( value ) {
					value = value.label || value.value || value;
					return matcher.test( value ) || matcher.test( normalize( value ) );
				}) );
			},
			minLength: 2,
			focus: function( event, ui ) {
				$( "#street" ).val( ui.item.label );
				return false;
			},
			select: function( event, ui ) {
				
				if (ui.item)
					SetStreet(cityId, ui.item.label, ui.item.value);

				return false;
			}
		});
	}

	function SetStreet(cityId, name, id)
	{
		LoadNumbers(cityId, id);
		$("#street").val(name);
		$("#streetid").val(id);
	}

	function LoadNumbers(cityId, streetId)
	{
		$("#number").addClass("ui-autocomplete-loading");
		$('#numberid').val("");

		$.ajax({ 
			url: "/web/app/ftth/zoznamCisiel.html?mesto=" + cityId + "&ulica=" + streetId, 
			success: function(data){
				if (data.match(/Fault/gi))
				{
					$("#number").removeClass("ui-autocomplete-loading");
					$("#address_outer").html($("#address_outer").html() + "<div style=\"color:red;\">Chyba pri zisťovaní čísiel domov.</div>");
//					$("#address_outer").html($("#address_outer").html() + "<div style=\"color:red;\">" + data + "<br/>web/app/ftth/wsGetHouseNumbers.html?mesto=" + cityId + "&ulica=" + streetId + "</div>");
				}
				else
				{
					eval("numbers = " + data);

				        NumbersAutocomplete(getLabels(numbers));

					$("#number").removeClass("ui-autocomplete-loading");
					$("#number").attr("disabled", "");

					$("#number").keyup(function(){
						var numberInput = $.trim($("#number").val());

						var numberid = getIndex(numbers, numberInput);

						if (numberid)
							SetNumber(numberid);
						else
							SetNumber("nevyplnene");
					});
				}
			}
		});
	}

	function NumbersAutocomplete(numbersNames) 
	{
		$( "#number" ).autocomplete({
			source: numbersNames,
			focus: function( event, ui ) {
				$( "#number" ).val( ui.item.label );
				return false;
			},                   
			select: function( event, ui ) {
				if (ui.item)
                                       SetNumber(getIndex(numbers, ui.item.label));
				else
                                       SetNumber("nevyplnene");
			}
		});
	}

	function SetNumber(index)
	{
		if (index == "nevyplnene")
		{
			$("#coverage_info_message").html("");
			$("#coverage_info_outer").toggle(false);
		}
		else
		{
			$('#number').val(numbers[index].name);
			$('#numberid').val(numbers[index].id);


			DisplayCoverageInfo(getStreetNumberCoverageStatus(numbers[index].name));
		}
	}

	function DisplayCoverageInfo(coverageStatus)
	{
		if (coverageStatus == "")	//the street number isn't in database
			return;	

		var icon = (coverageStatus == "A") ? "<img src=\"http://img.orange.sk/orange_sk/img/portal/ftth_confirm-green.gif\" alt=\"gratulujeme\" />" : "<img src=\"http://img.orange.sk/orange_sk/img/portal/ftth_exclamation-red.gif\" alt=\"ľutujeme\" />";

		var statusText = new Array();
		statusText["A"] = "gratulujeme, služba Orange Doma je vo Vašej lokalite dostupná !" ;
		statusText["B"] = "Na zadanej adrese už v krátkom čase sprístupníme služby Orange Doma.";
		statusText["C"] = statusText["B"];
		statusText["E"] = "Na zadanej adrese sme chceli sprístupniť služby Orange Doma, ale zatiaľ sme nezískali súhlas s vnútornou inštaláciou optických liniek.";
		statusText["X"] = (requestType == "pokrytie") ? "Ľutujeme, ale služba Orange Doma nie je vo vašej lokalite dostupná." : "Ľutujeme, zadaná adresa nie je v dostupnosti služby Orange Doma.";
		statusText["D"] = statusText["X"];

		var instrText = new Array();
		instrText["A"] = "Vyplňte prosím údaje do predbežnej objednávky.";
		instrText["B"] = "Vyplnťe prosím formulár a budeme Vás kontaktovať hneď, ako bude možné služby Orange Doma na zadanej adrese využívat.";
		instrText["C"] = instrText["B"];
		instrText["E"] = "Ak máte záujem služby Orange Doma využívať, prosím vypíšte formulár a budeme vás informovať o možnostiach pripojenia zadanej adresy k optickej sieti spoločnosti Orange Slovensko, alebo kontaktujte linku Orange Doma 939.";
		instrText["X"] = "Ak máte záujem o služby Orange Doma, vyplnťe prosím tento kontaktný formulár.<br/><br/>Keď budú služby dostupné na adrese, ktorú ste uviedli, budeme Vás bezodkladne informovať.";
		instrText["D"] = instrText["X"];

		var text = (typeof statusText[coverageStatus] == "undefined") ? "" : statusText[coverageStatus];

		$("#coverage_info_message").html("<div id=\"message_icon\">" + icon + "</div><div id=\"message_text\">" + text + "</div>");
		$("#coverage_info_outer").toggle(true);
		$("#coverage_info_message_instructions").html(instrText[coverageStatus]);
		
		$("#coverageStatus").val(coverageStatus); 


		$("#adresa").html($("#city").val() + ", " + $("#street").val() + " " + $("#number").val());
		$("#contact_form_outer").toggle(true);
		$.scrollTo("#address_outer", 800);
	}

	function ReloadCaptcha()
	{
		d = new Date(); 
		$('#captchaimg').attr('src', '/imagetokenservlet?' + d.getTime());
	}	

	function checkForm() 
	{
		form = document.getElementById("form1");

		if (form.name.value=="") {
		    alert("Zadajte prosím meno");
		    return false;
		}

		if (form.surname.value=="") {
		    alert("Zadajte prosím priezvisko");
		    return false;
		}
		if (form.city.value==0) {
		    alert("Vyberte prosím mesto");
		    return false;
		}
		if (form.street.value=="") {
		    alert("Zadajte prosím ulicu");
		    return false;
		}
		if (form.number.value=="") {
		    alert("Zadajte prosím číslo");
		    return false;
		}
		if (form.phone.value.length < 4) {
		    alert("Zadajte prosím platné telefónne číslo");
		    return false;
		}
		if (form.object.value==0) {
		    alert("Zadajte objekt");
		    return false;
		}
		if (form.requestor.value==0) {
		    alert("Zadajte žiadatela");
		    return false;
		}
		if (form.suhlas.checked=="") {
		    alert("Chýba Váš súhlas so záujom o službu");
		    return false;
		}

		if (form.mail.value=="") {
		    alert("Zadajte prosím e-mail");
		    return false;
		}

		if (form.mail.value.replace(/^\s+|\s+$/g, "").indexOf(" ")>-1) {
		    alert("Zadaná e-mailová adresa obsahuje nepovolený znak - medzeru");
		    return false;
		}
  
		if (form.kod.value != "")
		{
			$.ajax({ 
				url: "/app/checkCaptcha.html?kod=" + $("#kod").val(), 
				success: function(data){

					data = $.trim(data);

					if( data.toUpperCase() != 'OK')
					{
						alert("Nesprávny overovací kód!");

						ReloadCaptcha();

						return false;
					}
					form.submit();
				}
			});

			return false;
		}
		else
		{
		    alert("Musíte zadať overovací kód!");
		    return false;
		}

		return true;
	}

