﻿//////////// //eigener Namespace
var YMSearchBox = function () {
	// Dauer des Highlight-Effekts in den Searchbox-Input-Textfeldern
	var HIGHLIGHT_EFFECT_DURATION = 900;

	// Farbe des Highlight-Effekts in den Searchbox-Input-Textfeldern
	var HIGHLIGHT_EFFECT_COLOR = "#ccc";

	// Dauer, die ein .NewsItem angezeigt wird, bis das nächste eingeblendet wird
	var NEWS_TIMEOUT = 5000;

	// Dauer des Überblend-Effektes beim Wechsel des .NewsItem
	var NEWS_FADE_DELAY = 1000;

	// Gesamtzahl der .NewsItem
	var news_count = 0;

	// Index des aktuell angezeigten .NewsItem
	var news_index = 0;

	// Vorbefüllter Wert im WAS-Eingabefeld
	var WhatInput_DefaultValue = "Was/Wen";

	// Vorbefüllter Wert im WO-Eingabefeld
	var WhereInput_DefaultValue = "Wo";

	// Vorbefüllter Wert im Straße-Eingabefeld
	var StreetInput_DefaultValue = "Straße";

	// Vorbefüllter Wert im Telefonnummer-Eingabefeld (Whitepages-Rückwärtssuche)
	var PhoneInput_DefaultValue = "Telefonnummer";

	// Array mit den Strings, die der Slider angibt (für UI).
	var sliderTextValues = ["1km", "5km", "10km", "20km", "50km", "Unbegrenzt"];

	// Array mit den Strings, die der Slider in das Radius-Formelement einträgt.
	var sliderDistanceValues = ["1000", "5000", "10000", "20000", "50000", "-1"];

	// bool für WhitePages, das angibt, ob aktuell das Rückwärtssuche-Formular angezeigt ist.
	var reverseSearchShown = false;

	// bool git an, ob SingleSlot Suche angezeigt wird (oder Erweiterte Suche = Default)
	var singleSlotSearchShown = false;

	// bool gibt an, ob WhitePagesMode aktiviert ist
	var whitePagesMode = false;

	// WAS-Eingabefeld
	var WhatInput;

	// WO-Eingabefeld
	var WhereInput;

	// WO-Eingabefeld im Cityguide
	var WhereInputCityGuide;

	// WO-Eingabefeld im Cityguide
	var WhereInputStreetCityGuide;

	// Telefonnummer-Eingabefeld
	var PhoneInput;

	//SessionGuid
	var SessionGuid;

	//Suchmodus
	var SearchMode = "SingleSlot";

	// Inhalt des Label über dem WAS-Feld in den WhitePages
	var WhitePagesDefaultWhatLabel;

	//5 Statische Vorschläge, Singleslot
	var SingleSlotSuggestions = [{ "label": "Ärzte in Berlin", "data": { "catchword": "Ärzte und Heilberufe", "city": "Berlin", "type": "all"} },
                                    { "label": "Disko in Hannover", "data": { "catchword": "Diskotheken", "city": "Hannover", "type": "all"} },
                                    { "label": "Eiscafe in Stuttgart", "data": { "catchword": "Eissalons", "city": "Stuttgart", "type": "all"} },
                                    { "label": "Supermarkt in Köln", "data": { "catchword": "Supermärkte", "city": "Köln", "type": "all"} },
                                    { "label": "Bahnhof in Karlsruhe", "data": { "catchword": "Bahnhöfe", "city": "Karlsruhe", "type": "all"}}];

	// Inhalt des Label über dem Telefonnummer-Feld in den WhitePages
	var WhitePagesPhoneLabel = "z.B. \"089 222324\"";

	var LiveServer = "http://www.yellowmap.de";
	var IPLocationProviderRelURL = "/YM/Provider/IPLocationProvider.ashx";

	var IPLookupResult = "";
	var IPLookupResultStreet = "";
	var IPLookupResultCity = "";

	//Wenn true, wird automatisch die IP-Adresse des Besuchers zu Lokalisierung verwendet.
	var GeoResolveIPEnabled = false;

	return {
		init: function () {
			jQuery(document).ready(function () {
				WhitePagesDefaultWhatLabel = jQuery("#HomePage-FormBox .What > label").html();
				if (document.getElementById("SearchBoxSessionGuidInput")) {
					SessionGuid = document.getElementById("SearchBoxSessionGuidInput").value;
				}
				else {
					SessionGuid = "";
				}

				//Initialisieren der Eingabefelder
				WhatInput = jQuery("#SearchBox_WhatInput");
				WhatInput_DefaultValue = WhatInput.attr("value");

				StreetInput = jQuery("#SearchBox_StreetInput");
				StreetInput_DefaultValue = StreetInput.attr("value");

				SingleSlotInput = jQuery("#SearchBox_SingleSlot");

				SearchMode = jQuery("#SearchMode").attr("value");

				WhereInputCityGuide = jQuery("#InputTownCityGuide");
				WhereInputStreetCityGuide = jQuery("#InputStreetCityGuide");
				WhereInput = jQuery("#SearchBox_WhereInput");
				WhereInput_DefaultValue = WhereInput.attr("value");

				PhoneInput = jQuery("#SearchBox_PhoneInput");
				PhoneInput_DefaultValue = PhoneInput.attr("value");

				//Slider mit SessionWerten (Radius) initialisieren.
				var sliderValue = 0;
				switch (jQuery("#SearchBoxRadiusInput").attr("value")) {
					case sliderDistanceValues[0]:
						sliderValue = 0;
						break;
					case sliderDistanceValues[1]:
						sliderValue = 1;
						break;
					case sliderDistanceValues[2]:
						sliderValue = 2;
						break;
					case sliderDistanceValues[3]:
						sliderValue = 3;
						break;
					case sliderDistanceValues[4]:
						sliderValue = 4;
						break;
					case sliderDistanceValues[5]:
						sliderValue = 5;
						break;
				}

				// SliderText setzen
				jQuery("#Slider_Text").text(sliderTextValues[sliderValue]);

				// Slider einbinden
				jQuery("#Slider_Control").slider({
					max: 5,
					change: ChangeRadius,
					slide: ChangeRadius,
					value: sliderValue
				});


				// Highlight-Effekt & Content-Copy für #Tipps
				jQuery("#Tipps > a").click(function () {
					WhatInput.removeClass("DefaultValue");
					WhatInput.attr("value", jQuery(this).html());
					WhatInput.effect("highlight", {
						color: HIGHLIGHT_EFFECT_COLOR
					}, HIGHLIGHT_EFFECT_DURATION);
					return false;
				});

				// Highlight-Effekt & Content-Copy für #MostWanted
				jQuery("#MostWanted > a").click(function () {
					WhereInput.removeClass("DefaultValue");
					WhereInput.attr("value", jQuery(this).html());
					WhereInput.effect("highlight", {
						color: HIGHLIGHT_EFFECT_COLOR
					}, HIGHLIGHT_EFFECT_DURATION);
					return false;
				});

				// Highlight-Effekt & Content-Copy für #Catalog
				jQuery("#Catalog li:not(.CatalogMore) a").click(function () {
					WhatInput.removeClass("DefaultValue");
					//WhatInput.attr("value", jQuery(this).html().replace(/&nbsp;/g, " "));
					WhatInput.attr("value", jQuery(this).attr("title"));
					WhatInput.effect("highlight", {
						color: HIGHLIGHT_EFFECT_COLOR
					}, HIGHLIGHT_EFFECT_DURATION);
					return false;
				});

				// Highlight-Effekt & Content-Copy für #BranchList, wenn #SearchBox_WhatInput vorhanden
				if (WhatInput.lenght > 0) {
					jQuery("#BranchList li a ").click(function () {
						WhatInput.removeClass("DefaultValue");
						WhatInput.attr("value", jQuery(this).html());
						WhatInput.effect("highlight", {
							color: HIGHLIGHT_EFFECT_COLOR
						}, HIGHLIGHT_EFFECT_DURATION);
						return false;
					});
				}

				//Autocomplete für WAS-Eingabefeld
				WhatInput.autocompletePlugin("../../YM/Poi/PoiJSService.aspx", {
					minChars: 1,
					selectFirst: false,
					scrollHeight: "auto",
					maxItemsToShow: 10,
					matchSubset: 0,
					inputClass: '',
					loadingClass: '',
					extraParams: {
						Action: 'AutoComplete',
						FieldName: 'Branch',
						NewSession: 'No'
					}
				});

				// =======
				// Auto-Complete Version 1, Wo-Feld
				// =======
				WhereInput.autocompletePlugin("../../YM/Poi/PoiJSService.aspx", {
					minChars: 0,
					selectFirst: false,
					scrollHeight: "auto",
					maxItemsToShow: 10,
					matchSubset: 0,
					inputClass: '',
					loadingClass: '',
					extraParams: {
						Action: 'AutoComplete',
						FieldName: 'Town',
						NewSession: 'No'
					}
				});


				// =======
				// Auto-Complete Version 1, Wo-Feld im Cityguide
				// =======
				WhereInputCityGuide.autocompletePlugin("../../YM/Poi/PoiJSService.aspx", {
					minChars: 2,
					selectFirst: false,
					scrollHeight: "auto",
					maxItemsToShow: 10,
					matchSubset: 0,
					inputClass: '',
					loadingClass: '',
					extraParams: {
						Action: 'AutoComplete',
						FieldName: 'Town',
						NewSession: 'No'
					}
				});


				// =======
				// Auto-Complete Version 2 für SingleSlot-Eingabefeld, Was- und Wo-Feld (Thesis von Alex)
				// =======
				var catchwordChosen = false;
				var cityChosen = false;

				//Wenn das Eingabefeld geleert wird, wird auch die Information zurückgesetzt
				SingleSlotInput.keydown(function (event) {
					if (this.value == "") {
						catchwordChosen = false;
						cityChosen = false;
					}
				});

				SingleSlotInput.autocomplete({
					open: function (event, ui) {
						// Weite der Suggestionbox festlegen und odd rows einfärben
						$(this).autocomplete("widget")
                         .width($(this).width())
                          .find("li.ui-menu-item:odd")
                           .addClass("ac_odd").end();
					},
					source: function (request, response) {
						// Wenn das Feld nur fokussiert wurde, werden statische Werte vorgeschlagen (als Beispiele)
						if (request.term.length == 0) {
							response(SingleSlotSuggestions);
						}
						// Andernfalls wird über AJAX der PoiJSService aufgerufen
						else {
							//Letzten Buchstaben entfernen, wenn Leerzeichen
							var eingabe = request.term;
							if (eingabe.substring(eingabe.length - 1, eingabe.length) == " ") {
								eingabe = eingabe.substring(0, eingabe.length - 1);
							}

							$.ajax({
								url: "../../YM/Poi/PoiJSService.aspx",
								data: {
									Action: 'AutoComplete',
									FieldName: 'SingleSlot',
									CityChosen: cityChosen, // true: keine weiteren Ortsvorschlage bringen, z.B. dann, wenn Ort aus Vorschlagsliste ausgewählt wurde
									CatchwordChosen: catchwordChosen, // true: keine weiteren Stichwortvorschläge bringen
									NewSession: 'No',
									limit: 5,
									FieldText: eingabe
								},
								success: function (data) {
									// Suggestions parsen
									data = data.substr(1, data.length - 1);
									data = eval('(' + data + ')');
									for (var i = 0, l = data.length; i < l; i++) {
										data[i] = eval('(' + data[i] + ')');
									}
									// Rückgabe
									response($.map(data, function (item) {
										var label = "";
										if (item.type == "place") {
											//PLZ u.s.w. nur bei subcity anzeigen und einfügen
											if (item.subcity && item.subcity != "") {
												label = item.prefix + item.plz + " " + item.city + " ( " + item.subcity + " )";
											}
											else {
												label = item.prefix + " " + item.plz + " " + item.city;
											}
										}
										if (item.type == "catchword") {
											label = item.prefix + item.catchword;
										}

										return {
											//Wert, der angezeigt werden soll (in Suggestion)
											label: label,
											//Daten aus Item
											data: item
										}
									}));
								}
							});
						}
					},
					autoFocus: false,
					// 0: statische Vorschläge von Anfang an; ist das nicht gewünscht, dann entsprechend höher setzen; 
					// Geschwindigkeit aber eigentlich auch bei niederigen Werten kein Problem
					minLength: 0,
					// Verzögerung für die Suche; hier nicht unter 100 gehen, da sonst zu häufig abgefragt wird; Standard: 300 
					delay: 200,
					// Auswahl wird angeklickt:
					select: function (event, ui) {
						if (event.keyCode == 9) {
							// Bei Tab nicht auf "Suchen" springen!
							event.preventDefault();
						}

						if (ui.item.data.type == "catchword") {
							catchwordChosen = true;
							this.value = ui.item.value; // Stichwort überschreibt im Moment alles
						}
						if (ui.item.data.type == "place") {
							cityChosen = true;
							if (ui.item.data.subcity == "") {
								this.value = ui.item.data.prefix + ui.item.data.city;
							}
							else {
								this.value = ui.item.data.prefix + ui.item.data.plz + " " + ui.item.data.city;
							}
						}
						if (ui.item.data.type == "all") { // Die Anfangswerte (statische Werte)
							catchwordChosen = true;
							cityChosen = true;
							this.value = ui.item.data.catchword + " in " + ui.item.data.city;
						}

						// Ist Stichwort und Ort ausgewählt, wird sofort automatisch gesucht.
						if (catchwordChosen && cityChosen) {
							$("#SearchBox_Form").submit();
						}

						return false;
					}
				}).focus(function () {
					//Anzeigen von Vorschlägen beim Fokussieren, bereits ohne Eingabe
					if (this.value == "") {
						$(this).trigger('keydown.autocomplete');
					}
				});


				//WhereInputCityGuide.focus().click();

				// Hinzufügen von "DefaultValue" Klasse wenn aktueller Wert nicht aus Session stammt.
				if (!WhatInput.hasClass("SessionValue")) {
					WhatInput.addClass("DefaultValue");
				}
				if (!WhereInput.hasClass("SessionValue")) {
					WhereInput.addClass("DefaultValue");
				}
				if (!PhoneInput.hasClass("SessionValue")) {
					PhoneInput.addClass("DefaultValue");
				}
				if (!StreetInput.hasClass("SessionValue")) {
					StreetInput.addClass("DefaultValue");
				}

				// Focus-Handling für WAS-Eingabefeld
				WhatInput.focus(function () {
					YMSearchBox.onFocusEvent(WhatInput, WhatInput_DefaultValue);
				});

				//Cursor standardmäßig ins WAS-Feld.
				//WhatInput.focus();

				// Blur-Handling für WAS-Eingabefeld
				WhatInput.blur(function () {
					YMSearchBox.onBlurEvent(WhatInput, WhatInput_DefaultValue);
				});

				// Focus-Handling für WO-Eingabefeld
				WhereInput.focus(function () {
					YMSearchBox.onFocusEvent(WhereInput, WhereInput_DefaultValue);
				});

				// Blur-Handling für WO-Eingabefeld
				WhereInput.blur(function () {
					YMSearchBox.onBlurEvent(WhereInput, WhereInput_DefaultValue);
				});

				// Focus-Handling für Telefonnummer-Eingabefeld
				PhoneInput.focus(function () {
					YMSearchBox.onFocusEvent(PhoneInput, PhoneInput_DefaultValue);
				});

				// Blur-Handling für Telefonnummer-Eingabefeld
				PhoneInput.blur(function () {
					YMSearchBox.onBlurEvent(PhoneInput, PhoneInput_DefaultValue);
				});

				// Focus-Handling für Telefonnummer-Eingabefeld
				StreetInput.focus(function () {
					YMSearchBox.onFocusEvent(StreetInput, StreetInput_DefaultValue);
				});

				// Blur-Handling für Telefonnummer-Eingabefeld
				StreetInput.blur(function () {
					YMSearchBox.onBlurEvent(StreetInput, StreetInput_DefaultValue);
				});

				// Vor Submit des Searchbox-Forms ggf. die DefaultWerte entfernen
				jQuery("#SearchBox_Form").submit(function () {
					if ((!WhatInput.hasClass("SessionValue") && !WhatInput.hasClass("NoReplace")) &&
                    (WhatInput.val() == WhatInput_DefaultValue ||
                    WhatInput.hasClass("DefaultValue"))) {
						WhatInput.attr("value", "");
					}
					if ((!WhereInput.hasClass("SessionValue") && !WhereInput.hasClass("NoReplace")) &&
                    (WhereInput.val() == WhereInput_DefaultValue ||
                    WhereInput.hasClass("DefaultValue"))) {
						WhereInput.attr("value", "");
					}
					if ((!PhoneInput.hasClass("SessionValue") && !PhoneInput.hasClass("NoReplace")) &&
                    (PhoneInput.val() == PhoneInput_DefaultValue ||
                    PhoneInput.hasClass("DefaultValue"))) {
						PhoneInput.attr("value", "");
					}

					if ((!StreetInput.hasClass("SessionValue") && !StreetInput.hasClass("NoReplace")) &&
                    (StreetInput.val() == StreetInput_DefaultValue ||
                    StreetInput.hasClass("DefaultValue"))) {
						StreetInput.attr("value", "");
					}

					if (WhereInput.val() != IPLookupResult) {
						//User hat etwas seit der IP-geokodierung geändert.
						jQuery("#SearchBoxLocXInput, #SearchBoxLocYInput, #SearchBoxZipInput, #SearchBoxTownInput ").val("");
					}
				});

				jQuery("#LocFormCityGuide").submit(function () {
					if (WhereInputStreetCityGuide.val() != IPLookupResultStreet || WhereInputCityGuide.val() != IPLookupResultCity) {
						//User hat etwas seit der IP-geokodierung geändert.
						jQuery("#SearchBoxLocXInput, #SearchBoxLocYInput, #SearchBoxZipInput, #SearchBoxTownInput ").val("");
					}
				});

				//Anzahl .NewsItems bestimmten
				news_count = jQuery("#Newsline .NewsItem").size();

				//Newsline-Effekt
				if (news_count > 1) {
					function switchNews() {
						jQuery("#Newsline .NewsItem:eq(" + news_index + ")").hide("drop", {
							direction: "down"
						}, NEWS_FADE_DELAY);
						function showNews() {
							jQuery("#Newsline .NewsItem:eq(" + news_index + ")").show("drop", {
								direction: "up"
							}, NEWS_FADE_DELAY);
						};
						setTimeout(showNews, NEWS_FADE_DELAY);
						setTimeout(switchNews, NEWS_FADE_DELAY + NEWS_TIMEOUT);
						news_index = (news_index + 1) % news_count;
					};

					setTimeout(switchNews, NEWS_TIMEOUT);
				}

				// Whitepages-Rückwärtssuche toggle.
				if (jQuery("#EnableReverseSearch").size() > 0) {
					jQuery("#HiddenQT").val("");
					PhoneInput.attr("disabled", true);
					WhatInput.attr("disabled", false);
					SingleSlotInput.attr("disabled", false);
				}

				// Whitepages-SingleSearch toggle.
				if (jQuery(".WhitePagesMode").size() > 0) {
					whitePagesMode = true;
					jQuery("#HiddenQT").val("");
					jQuery("#HideExtendedSearch").css("display", "block");
				}


				//Toggle für Rückwärtssuche in Whitepages.
				jQuery("#EnableReverseSearch > a:eq(0)").click(YMSearchBox.toggleReverseSearch);
				jQuery("#DisableReverseSearch > a:eq(0)").click(YMSearchBox.toggleReverseSearch);

				//Toggle für Extended/SingleSlot Suche
				jQuery("#ShowExtendedSearch  > a:eq(0)").click(YMSearchBox.toggleSearchMode);
				jQuery("#HideExtendedSearch  > a:eq(0)").click(YMSearchBox.toggleSearchMode);

				//SingleSlot im newSearchModule soll bei JS initial aktiviert sein, außer im WhitePagesMode oder wenn erweitert gesucht wird
				if (SearchMode == "SingleSlot" && jQuery(".newSearchModule").size() > 0 && !whitePagesMode) {
					YMSearchBox.toggleSearchMode();
				}
				else {
					singleSlotSearchShown = true;
					YMSearchBox.toggleSearchMode();
				}


				if (GeoResolveIPEnabled &&
                ((WhereInputCityGuide.length == 1 && WhereInputCityGuide.val().length == 0) ||
                (WhereInput.length == 1 && WhereInput.hasClass("DefaultValue")))) {
					YMSearchBox.geoResolveIP(function (Result) {
						if (typeof Result.LocX != 'undefined' && Result.LocX.length > 2) {
							var LocationAll = "";
							var LocationTwn = "";
							var LocationStr = "";

							jQuery("#SearchBoxLocXInput").val(Result.LocX);
							jQuery("#SearchBoxLocYInput").val(Result.LocY);

							if (typeof Result.Zip != 'undefined') {
								LocationTwn += Result.Zip + " ";
								jQuery("#SearchBoxZipInput").val(Result.Zip);
							}

							if (typeof Result.Twn != 'undefined') {
								LocationTwn += Result.Twn + " ";
								jQuery("#SearchBoxTownInput").val(Result.Twn);
							}

							if (typeof Result.Str != 'undefined') {
								LocationStr += Result.Street + " ";
							}

							if (typeof Result.HNo != 'undefined') {
								LocationStr += Result.HNo + " ";
							}
							LocationAll = LocationTwn + LocationStr;
							if (LocationAll.length > 1) {
								IPLookupResult = $.trim(LocationAll);
								IPLookupResultCity = $.trim(LocationTwn);
								WhereInputCityGuide.val(IPLookupResultCity);
								IPLookupResultStreet = $.trim(LocationStr);
								WhereInputStreetCityGuide.val(IPLookupResultStreet);
								WhereInput.removeClass("DefaultValue").val(IPLookupResult);
							}
						}
					});
				}
			});

			// Funktion für Slider-Radius-Change
			function ChangeRadius(e, ui) {
				switch (ui.value) {
					case 0:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
							break;
						}
					case 1:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
							break;
						}
					case 2:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
							break;
						}
					case 3:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
							break;
						}
					case 4:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
							break;
						}
					case 5:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
							break;
						}
					default:
						{
							jQuery("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[3]);
							break;
						}
				}
				jQuery("#Slider_Text").text(sliderTextValues[ui.value]);
			}
		},

		// Focus-Event bei inputfields.
		onFocusEvent: function (Element, DefaultValue) {
			if ((Element.hasClass("DefaultValue") || !Element.hasClass("SessionValue")) &&
            Element.attr("value") == DefaultValue) {
				Element.removeClass("DefaultValue");
				Element.attr("value", "");
			}
		},

		// Blur-Event bei inputfields.
		onBlurEvent: function (Element, DefaultValue) {
			Element.removeClass("NoReplace");
			if (Element.attr("value").length > 0) {
				Element.addClass("NoReplace");
			}
			if (Element.attr("value") == "") {
				Element.addClass("DefaultValue");
				Element.removeClass("SessionValue");
				Element.attr("value", DefaultValue);
			}
		},

		// Funktion zum Umschalten des Suchmodus (Erweiterte Suche/SingleSlot Suche)
		toggleSearchMode: function () {
			if (!singleSlotSearchShown) {
				jQuery("#SearchMode").attr("value", "SingleSlot");
				jQuery(".ExtendedInputFields1").css("display", "none");
				jQuery(".ExtendedInputFields2").css("display", "none");
				jQuery(".SingleInputField").css("display", "block");
				jQuery("#ShowExtendedSearch").css("display", "block");
				jQuery("#HideExtendedSearch").css("display", "none");
				singleSlotSearchShown = true;
				WhatInput.attr("disabled", true);
				WhereInput.attr("disabled", true);
				StreetInput.attr("disabled", true);
				if (whitePagesMode) {
					PhoneInput.attr("disabled", false);
					SingleSlotInput.attr("disabled", true);
					jQuery("#HiddenQT").val("20");
				}
				else {
					PhoneInput.attr("disabled", true);
					SingleSlotInput.attr("disabled", false);
					jQuery("#HiddenQT").val("");
				}
				SingleSlotInput.focus();
			}
			else {
				jQuery("#SearchMode").attr("value", "Extended");
				jQuery(".ExtendedInputFields1").css("display", "block");
				jQuery(".ExtendedInputFields2").css("display", "block");
				jQuery(".SingleInputField").css("display", "none");
				jQuery("#ShowExtendedSearch").css("display", "none");
				jQuery("#HideExtendedSearch").css("display", "block");
				singleSlotSearchShown = false;
				WhatInput.attr("disabled", false);
				WhereInput.attr("disabled", false);
				StreetInput.attr("disabled", false);
				PhoneInput.attr("disabled", true);
				SingleSlotInput.attr("disabled", true);
			}
		},

		// Funktion zum Umschalten der WhitePages-Rückwärtssuche
		toggleReverseSearch: function () {
			if (!reverseSearchShown) {
				if (!WhatInput || !PhoneInput) {
					WhatInput = jQuery("#SearchBox_WhatInput");
					WhereInput = jQuery("#SearchBox_WhereInput");
					PhoneInput = jQuery("#SearchBox_PhoneInput");
				}
				jQuery("#HomePage-FormBox .Where").css("display", "none");
				jQuery("#HomePage-FormBox .What > label").html(WhitePagesPhoneLabel);
				jQuery("#EnableReverseSearch").css("display", "none");
				jQuery("#DisableReverseSearch").css("display", "block");
				jQuery("#HiddenQT").val("20");
				jQuery("#HomePage-FormBox .Controls").children().not("button").css("visibility", "hidden");
				PhoneInput.css("display", "block").attr("disabled", false);
				WhatInput.css("display", "none").attr("disabled", true);
				WhereInput.attr("disabled", true);
				StreetInput.attr("disabled", true);
				reverseSearchShown = true;
			}
			else {
				jQuery("#HomePage-FormBox .Where").css("display", "block");
				jQuery("#HomePage-FormBox .What > label").html(WhitePagesDefaultWhatLabel);
				jQuery("#EnableReverseSearch").css("display", "block");
				jQuery("#DisableReverseSearch").css("display", "none");
				jQuery("#HiddenQT").val("18");
				jQuery("#HomePage-FormBox .Controls").children().not("button").css("visibility", "visible");
				PhoneInput.css("display", "none").attr("disabled", true);
				WhatInput.css("display", "block").attr("disabled", false);
				WhereInput.attr("disabled", false);
				StreetInput.attr("disabled", false);
				reverseSearchShown = false;
			}
			return false;
		},

		geoResolveIP: function (Callback) {
			if (window && window.location && window.location.hostname) {
				if (window.location.hostname == "localhost" || window.location.hostname.indexOf("ym-") != -1) {
					IPLocationProviderRelURL = "http://" + window.location.hostname + "/YM.NET/YM/YMPresentation" + IPLocationProviderRelURL;
				}
				else {
					IPLocationProviderRelURL = LiveServer + IPLocationProviderRelURL;
				}
			}

			$.ajax({
				url: IPLocationProviderRelURL,
				dataType: 'jsonp',
				success: function (JSON) {
					if (JSON != null && typeof JSON === "object") {
						Callback(JSON);
						return;
					}
					Callback({});
				}
			});
		}
	};
} ();

YMSearchBox.init();

