﻿//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 = "";
    
    // Vorbefüllter Wert im WO-Eingabefeld
    var WhereInput_DefaultValue = "";
    
    // Vorbefüllter Wert im Telefonnummer-Eingabefeld (Whitepages-Rückwärtssuche)
    var PhoneInput_DefaultValue = "";
    
    // 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;
    
    // WAS-Eingabefeld
    var WhatInput;
    
    // WO-Eingabefeld
    var WhereInput;
    
    // Telefonnummer-Eingabefeld
    var PhoneInput;
    
    //SessionGuid
    var SessionGuid;
    
    // Inhalt des Label über dem WAS-Feld in den WhitePages
    var WhitePagesDefaultWhatLabel;
    
    // Inhalt des Label über dem Telefonnummer-Feld in den WhitePages
    var WhitePagesPhoneLabel = "z.B. \"089 222324\"";
    
    return {
        init: function()
        {
            $(document).ready(function()
            {
                WhitePagesDefaultWhatLabel = $("#HomePage-FormBox .What > label").html();
                SessionGuid = document.getElementById("SearchBoxSessionGuidInput").value;
                WhatInput = $("#SearchBox_WhatInput");
                WhatInput_DefaultValue = WhatInput.attr("value");
                WhereInput = $("#SearchBox_WhereInput");
                WhereInput_DefaultValue = WhereInput.attr("value");
                PhoneInput = $("#SearchBox_PhoneInput");
                PhoneInput_DefaultValue = PhoneInput.attr("value");
                
                //Slider mit SessionWerten (Radius) initialisieren.
                var sliderValue = 0;
                switch ($("#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
                $("#Slider_Text").text(sliderTextValues[sliderValue]);
                
                // Slider einbinden
                $("#Slider_Control").slider({
                    max: 5,
                    change: ChangeRadius,
                    slide: ChangeRadius,
                    value: sliderValue
                });
                
                // Highlight-Effekt & Content-Copy für #Tipps
                $("#Tipps > a").click(function()
                {
                    WhatInput.removeClass("DefaultValue")
                    WhatInput.attr("value", $(this).html());
                    WhatInput.effect("highlight", {
                        color: HIGHLIGHT_EFFECT_COLOR
                    }, HIGHLIGHT_EFFECT_DURATION);
                    return false;
                });
                
                // Highlight-Effekt & Content-Copy für #MostWanted
                $("#MostWanted > a").click(function()
                {
                    WhereInput.removeClass("DefaultValue")
                    WhereInput.attr("value", $(this).html());
                    WhereInput.effect("highlight", {
                        color: HIGHLIGHT_EFFECT_COLOR
                    }, HIGHLIGHT_EFFECT_DURATION);
                    return false;
                });
                
                // Highlight-Effekt & Content-Copy für #Catalog
                $("#Catalog li:not(.CatalogMore) a").click(function()
                {
                    WhatInput.removeClass("DefaultValue")
                    WhatInput.attr("value", $(this).html().replace(/&nbsp;/g, " "));
                    WhatInput.effect("highlight", {
                        color: HIGHLIGHT_EFFECT_COLOR
                    }, HIGHLIGHT_EFFECT_DURATION);
                    return false;
                });
                
                // Highlight-Effekt & Content-Copy für #BranchList
                $("#BranchList li a ").click(function()
                {
                    WhatInput.removeClass("DefaultValue")
                    WhatInput.attr("value", $(this).html());
                    WhatInput.effect("highlight", {
                        color: HIGHLIGHT_EFFECT_COLOR
                    }, HIGHLIGHT_EFFECT_DURATION);
                    return false;
                });
                
                //Autocomplete für WAS-Eingabefeld
                WhatInput.autocomplete("../Poi/PoiJSService.aspx", {
                    minChars: 2,
                    selectFirst: false,
                    scrollHeight: "auto",
                    maxItemsToShow: 10,
                    matchSubset: 0,
                    inputClass: '',
                    loadingClass: '',
                    extraParams: {
                        Action: 'AutoComplete',
                        FieldName: 'Branch',
                        NewSession: 'No',
                        SessionGuid: SessionGuid
                    }
                });
                
                //Autocomplete für WO-Eingabefeld
                WhereInput.autocomplete("../Poi/PoiJSService.aspx", {
                    minChars: 2,
                    selectFirst: false,
                    scrollHeight: "auto",
                    maxItemsToShow: 10,
                    matchSubset: 0,
                    inputClass: '',
                    loadingClass: '',
                    extraParams: {
                        Action: 'AutoComplete',
                        FieldName: 'Town',
                        NewSession: 'No',
                        SessionGuid: SessionGuid
                    }
                });
                
                // 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");
                }
                
                // Focus-Handling für WAS-Eingabefeld
                WhatInput.focus(function()
                {
                    YMSearchBox.onFocusEvent(WhatInput, WhatInput_DefaultValue);
                });
                
                // 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);
                });
                
                // Vor Submit des Searchbox-Forms ggf. die DefaultWerte entfernen
                $("#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", "");
                    }
                });
                
                //Anzahl .NewsItems bestimmten
                news_count = $("#Newsline .NewsItem").size();
                
                //Newsline-Effekt
                if (news_count > 1) 
                {
                    function switchNews()
                    {
                        $(".NewsItem:eq(" + news_index + ")").hide("drop", {
                            direction: "down"
                        }, NEWS_FADE_DELAY);
                        function showNews()
                        {
                            $(".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 ($("#EnableReverseSearch").size() > 0) 
                {
                    $("#HiddenQT").val("");
                    PhoneInput.attr("disabled", "disabled");
                    WhatInput.attr("disabled", "");
                }
                
                //Toggle für Rückwärtssuche in Whitepages.
                $("#EnableReverseSearch > a:eq(0)").click(YMSearchBox.toggleReverseSearch);
                $("#DisableReverseSearch > a:eq(0)").click(YMSearchBox.toggleReverseSearch);
            });
            
            // Funktion für Slider-Radius-Change
            function ChangeRadius(e, ui)
            {
                switch (ui.value)
                {
                    case 0:
                    {
                        $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
                        break;
                    }
                    case 1:
                    {
                        $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
                        break;
                    }
                    case 2:
                    {
                        $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
                        break;
                    }
                    case 3:
                    {
                        $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
                        break;
                    }
                    case 4:
                    {
                        $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
                        break;
                    }
                    case 5:
                    {
                        $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[ui.value]);
                        break;
                    }
                    default:
                                                {
                            $("#SearchBoxRadiusInput").attr("value", sliderDistanceValues[3]);
                            break;
                        }
                }
                $("#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.attr("value", DefaultValue);
            }
        },
        
        // Funktion zum Umschalten der WhitePages-Rückwärtssuche
        toggleReverseSearch: function()
        {
            if (!reverseSearchShown) 
            {
                if (!WhatInput || !PhoneInput) 
                {
                    WhatInput = $("#SearchBox_WhatInput");
                    WhereInput = $("#SearchBox_WhereInput");
                    PhoneInput = $("#SearchBox_PhoneInput");
                }
                $("#HomePage-FormBox .Where").css("display", "none");
                $("#HomePage-FormBox .What > label").html(WhitePagesPhoneLabel);
                $("#EnableReverseSearch").css("display", "none");
                $("#DisableReverseSearch").css("display", "block")
                $("#HiddenQT").val("20");
                $("#HomePage-FormBox .Controls").children().not("button").css("visibility", "hidden");
                PhoneInput.css("display", "block").attr("disabled", "");
                WhatInput.css("display", "none").attr("disabled", "disabled");
                WhereInput.attr("disabled", "disabled");
                reverseSearchShown = true;
            }
            else 
            {
                $("#HomePage-FormBox .Where").css("display", "block");
                $("#HomePage-FormBox .What > label").html(WhitePagesDefaultWhatLabel);
                $("#EnableReverseSearch").css("display", "block");
                $("#DisableReverseSearch").css("display", "none");
                $("#HiddenQT").val("");
                $("#HomePage-FormBox .Controls").children().not("button").css("visibility", "visible");
                PhoneInput.css("display", "none").attr("disabled", "disabled");
                WhatInput.css("display", "block").attr("disabled", "");
                WhereInput.attr("disabled", "");
                reverseSearchShown = false;
            }
            return false;
        }
    };
}();

YMSearchBox.init();
