(function($) {
    $(function() {

        $("#sok-land").change(function() {
            //När man byter till ett annat land än Sverige
            if ($(this).val() != "46") {

                //Inaktivera region  och sätt texten till "Ej valbar"
                $("#sok-region").val("-1");
                $("#sok-region :selected").text("Ej valbart");
                $("#sok-kommun").val("Ej valbart");

                $("#sok-region, #sok-kommun, #sok-kriterier-hlr :checkbox").attr("disabled", true);

            } else if ($(this).val() == "46") {

                //Aktivera region och kommun och sätt texten "Alla län" resp "Alla kommuner"
                if ($("#sok-region :selected").val() == -1) {
                    $("#sok-region :selected").text("Alla län");
                }
                $("#sok-kommun").val("Alla kommuner");

                $("#sok-region, #sok-kommun, #sok-kriterier-hlr :checkbox").removeAttr("disabled");

                $("#sok-region").trigger("change");
            }

            if ($("#sok-land").data("preSelValue") == -2) {
                //Tar bort kartsök värdet i selectbox
                $("#sok-land").removeOption("-2");
                $("#sok-region").removeOption("-2");
                $("#sok-kartsok").val(0);
            }

            // Sätt preValue till nuvarande värde
            $("#sok-land").data("preSelValue", $(this).val());
        }).trigger("change");

        //Konvertera select-rutan till multiselect om hiddenvariabeln indikerar detta.
        if ($("#use-multiselect").val() == 1) {

            //Callbackfunktion för att skapa texten för vilka objekt som är valda.
            //Den strippar bort alla blanksteg och siffror
            var callback =
                function(element, selectAllText) {
                    var strArray = new Array();

                    $(element).find('INPUT:checkbox:checked').slice(0,3).each( function() {
                        if( $(this).parent().text() != selectAllText) {
                            //Det reguljära uttrycktet filterar bort eventuella blanksteg samt antalet objekt i en kommun
                            strArray.push($(this).parent().text().match(/^[-\s]*(.+?)[\s()\d]*$/,"i")[1]);
                        }
                    });

                    //Vi vill ersätta sista elementet med punkter för att markera
                    //att det finns fler än två element.
                    if (strArray.length == 3) {
                       strArray[2] = "...";
                    }

                    return strArray.join(", ");

                } // Slut på callbackfunktionen
            $("#sok-kommun").multiselectz({selectAll: true,
                                        selectAllText: "Alla kommuner",
                                        selectAllValue: '-1',
                                        noneSelected: "Välj kommun",
                                        oneOrMoreSelectedCallback: callback});
            

            $("#sok-typ").multiselectz({selectAll: true,
                                        selectAllText: "Alla typer",
                                        selectAllValue: '-1',
                                        noneSelected: "Välj typ",
                                        oneOrMoreSelectedCallback: callback});


        }

        // Regionfiltrering fungerar olika beroende på om multiselect ska användas eller ej.
        if ($("#use-multiselect").val() == 0) {

            $("#sok-region").change(function() {
                $("#sok-kommun").attr("disabled", true);
                $("#sok-kommun").load("/sok/kommunlista", {
                    "id": $(this).val()
                }, function() {
                    $(this).removeAttr("disabled");
                });
            });

        } else {

            $("#sok-region").change(function() {
                $("#sok-kommun").multiselectz("loadUrl", $(this).val());
            });

        }


        $("#sok-sokfras").keydown(function(event) {
            if (event.keyCode == 32) {
                var sokfras = $(this).val();
                var inQuote = false;
                var numSpace = 0;

                for (i = 0; i < sokfras.length; i++) {
                    if (sokfras[i] == " " && !inQuote) {
                        numSpace++;
                    } else if (sokfras[i] == "\"") {
                        inQuote = !inQuote;
                    }
                }

                if (numSpace > 1 && !inQuote) {
                    return false;
                }
            }
        });


        // Sökning
        $(".sok-sok-hndl").click(function() {
            $(this).parents("form").submit();
            return false;
        });


        // Lägg in så fliken "Sök" triggar en ny sökning
        // om fliken är aktiv och man klickar på den eller länken i den.
        $("#pri-nav-sok.aktiv").click(function() {
            $("#sok-form").submit();
            return false;
        });


        $("#resultat-textlista tbody tr").hover(function() {
            $(this).addClass("hover").find(".detalj-box").show();
        },
        function() {
            $(this).removeClass("hover").find(".detalj-box").hide();
        });

        // Sliders
        var initializeSlider = function(idBase, min, max, step) {
            var formatNumber = function(num) {
                var ns = "" + num;
                var fs = "";

                var i, j;
                for (i = ns.length - 1, j = 1; i >= 0; i--, j++) {
                    fs = ns.charAt(i) + fs;

                    if (j == 3) {
                        j = 0;
                        fs = " " + fs;
                    }
                }

                return fs;
            };

            var initMax = parseInt($(idBase + "-hlr .slider-max-varde").val());
            var initMaxDisplay;

            if (initMax < 0) {
                initMax = max;
                initMaxDisplay = formatNumber(max) + "+";
            } else {
                initMaxDisplay = formatNumber(initMax);
            }
            
            $(idBase + "-hlr .slider-max-display span").html(initMaxDisplay);
            
            if(idBase == "#sok-hyra-avgift") {
                //Uppdaterar värden och uppritning av slidern
                function updateSliderForHyresAvgift(event, ui) {
                    var slider = $(this);

                    var max = slider.slider("option", "max");
                    var maxd = formatNumber(ui.value)
                    var maxv = ui.value;

                    if (max == ui.value) {
                        maxd += "+"
                        maxv = -1;
                    }

                    slider.siblings(".slider-max-display").find("span").html(maxd);
                    slider.siblings(".slider-max-varde").val(maxv);
                    dirtyForm(true); //Något har ändrats, sätt formuläret till dirty
                }


                $(idBase + "-slider").slider({
                    range: 'min',
                    min: 0,
                    max: max,
                    step: step,
                    value: initMax,
                    slide: updateSliderForHyresAvgift,
                    change: updateSliderForHyresAvgift
                });
                
            } else {
                var initMin = parseInt($(idBase + "-hlr .slider-min-varde").val());
                $(idBase + "-hlr .slider-min-display span").html(formatNumber(initMin));

                //Uppdaterar värden och uppritning av slidern
                function updateSlider(event, ui) {
                    var slider = $(this);

                    var max = slider.slider("option", "max");
                    var maxd = formatNumber(ui.values[1])
                    var maxv = ui.values[1];

                    if (max == ui.values[1]) {
                        maxd += "+"
                        maxv = -1;
                    }

                    if (ui.values[1] == 0 && idBase == "#sok-pris") {
                        return false;
                    }

                    slider.siblings(".slider-max-display").find("span").html(maxd);
                    slider.siblings(".slider-min-display").find("span").html(formatNumber(ui.values[0]));

                    slider.siblings(".slider-max-varde").val(maxv);
                    slider.siblings(".slider-min-varde").val(ui.values[0]);
                    dirtyForm(true); //Något har ändrats, sätt formuläret till dirty
                }

                $(idBase + "-slider").slider({
                    range: true,
                    min: min,
                    max: max,
                    step: step,
                    values: [initMin, initMax],
                    slide: updateSlider,
                    change: updateSlider
                });
            }
        };

        initializeSlider("#sok-rum", 0, 6, 1);
        initializeSlider("#sok-boyta", 0, 400, 10);
        initializeSlider("#sok-tomtarea", 0, 20000, 250);
        initializeSlider("#sok-pris", 0, 8000000, 100000);
        initializeSlider("#sok-hyra-avgift", 0, 20000, 500);

        $(".ui-slider").find(".ui-slider-handle:last").addClass("ui-slider-handle-right");

        //Lägger till tabindex på handtagen för sliders i sökformuläret.
        var startTabIndex = 10;
        $("#sok-pris-hlr, #sok-rum-hlr, #sok-boyta-hlr").find(".ui-slider-handle").each(function(i) {
            $(this).attr("tabindex", (startTabIndex+i));
        });


        startTabIndex = 24;
        $("#sok-tomtarea-hlr, #sok-hyra-avgift-hlr").find(".ui-slider-handle").each(function(i) {
            $(this).attr("tabindex", (startTabIndex+i));
        });


        //Återställer alla fält i sökformuläret till dess defaultvärden.
        $("#sok-rensa-hndl").click(function() {

            //Töm alla textfält på värden:
            $(":text").val('');
            
            //De andra två behöver vi uppdatera genom att trigga att en ändringar har skett.
            $("#sok-land").val(46).trigger("change");

            $("#sok-region").attr("checkall", "1");
            $("#sok-region").val(-1).trigger("change");



            //Återställ följande dropdowns till sina defaultvärden
            $("#sok-typ").multiselectz("checkSelectAll");
            $("#sok-inkommet").val("alla");
            $("#sok-visningsdatum").val("alla");
             
            //Återställ värdena för checkboxarna.
            $("#sok-visa-radhus").attr("checked", "checked");
            $("#sok-visa-overlatelser").attr("checked", "checked");
            $("#sok-visa-kranskommuner").removeAttr("checked");
            $("#sok-visa-hyres").removeAttr("checked");
            $("#sok-visa-nyprod").removeAttr("checked");
            $("#sok-visa-kommande").removeAttr("checked");

            //Återställ alla sliders.
            $("#sok-rum-slider").slider('values', 0, 0);
            $("#sok-rum-slider").slider('values', 1, 6);

            //Återställ alla sliders.
            $("#sok-boyta-slider").slider('values', 0, 0);
            $("#sok-boyta-slider").slider('values', 1, 400);
             
            //Återställ alla sliders.
            $("#sok-tomtarea-slider").slider('values', 0, 0);
            $("#sok-tomtarea-slider").slider('values', 1, 20000);
             
            //Återställ alla sliders.
            $("#sok-pris-slider").slider('values', 0, 0);
            $("#sok-pris-slider").slider('values', 1, 8000000);
             
            //Återställ alla sliders.
            $("#sok-hyra-avgift-slider").slider('value', 20000);


            //Visa knappen för att spara sök igen
            //$("#sok-spara-hndl").show();
            dirtyForm(false);
             
            //Returnerar false för att inte bubbla vidare några klickevent
            return false;
        });



        //Togglar den utökade sökfliken
        var toggleSok = function() {
            
            if ($("#visa-utokad-sok").val() == "0") {
                $("#sok .utokad-sok").show();
                //$("#utokad-sok-dolj").css("display", "block");
                $("#utokad-sok-dolj").show();
                $("#utokad-sok-visa").hide();
                $("#visa-utokad-sok").val(1);
                return false;
            } else {
                $("#sok .utokad-sok, #utokad-sok-dolj").hide();
                //$("#utokad-sok-visa").css("display", "block");
                $("#utokad-sok-visa").show();
                $("#visa-utokad-sok").val(0);
                return false;
            }
        }
        
        $("#utokad-sok-visa").click(toggleSok);
        $("#utokad-sok-dolj").click(toggleSok);

        // Hint för fritext
        function supports_input_placeholder() {
            var i = document.createElement('input');
            return 'placeholder' in i;
        }

        if (!supports_input_placeholder()) {
            $("#sok-sokfras-hlr").inputHintOverlay();
        }

        // Fritexthjälp
        $("#sok .hjalp").tooltip({position: "bottom right"});

        // Overlay
        $("a.statistik-hndl, a.projekt-hndl").overlay({
            top: "20%",
            onBeforeLoad: function() {
                var overlay = this.getOverlay();
                overlay.addClass("loading");

                var wrap = overlay.find(".contentWrap");
                wrap.load(this.getTrigger().attr("href"), function() {
                    overlay.removeClass("loading")
                });
            },
            onClose: function() {
                this.getOverlay().find(".contentWrap").html("");
            }
        });

        $("#objektstatistik .beskrivning-toggler").live("click", function() {
            $(this).siblings(".beskrivning").toggle();
            return false;
        });

        // Öppna beskrivningslänkar i nytt fönster
        $("a.oppna-lank, a.maklar-popup").click(function(ev) {
            window.open(this.href,'_blank','height=600,width=1000,resizable=1,scrollbars=1,location=0,status=0,toolbar=0,menubar=1,directories=0,left=10,top=10');
            return false;
        });

        // Intressanta objekt
        $("#resultat-bildlista .ta-bort-objekt").click(function() {
            return confirm($(this).attr("title"));
        });
        $("#objektlista-form-valj-alla-hndl").click(function() {
            var t = $(this);
            var bs = t.parents("table").find("input.checkbox");

            if (t.is(":checked")) {
                bs.attr("checked", "checked");
            } else {
                bs.removeAttr("checked");
            }
        });
        $("#objektlista-form-submit").click(function() {
            if (confirm($(this).attr("title"))) {
                $(this).parents("form").submit();
            }

            return false;
        });

        // Sortering
        $("#resultat-kontroll-sortering").change(function() {
            var sort = $("#resultat-kontroll-sortering").val();
            var sort_ord = $("#resultat-kontroll-sortering-ordning").val();

            if (sort == "senast") {
                sort_ord = "desc";
            }

            window.location = window.location.pathname + "?" + $.param({
                "sortering": sort,
                "sortering_ordning": sort_ord
            });
        });

        $("#resultat-kontroll-sortering-ordning").change(function() {
            var sort = $("#resultat-kontroll-sortering").val();
            var sort_ord = $("#resultat-kontroll-sortering-ordning").val();

            window.location = window.location.pathname + "?" + $.param({
                "sortering": sort,
                "sortering_ordning": sort_ord
            });
        });


        //Lägg till submit-funktionalitet för knapparna i listan med bevakningar
        $("#bevakning-andra-hndl").click(function() {
            $("#bevakning_action").val("andra");
            $(this).parents("form").submit();
            return false;
        });


        $("#bevakning-ta_bort-hndl").click(function() {
            if(confirm("Är du säker på att du vill ta bort denna bevakning?")) {
                $("#bevakning_action").val("ta_bort");
                $(this).parents("form").submit();
            }
            return false;
        });


        $("#bevakning-visa_resultat-hndl").click(function() {
            $("#bevakning_action").val("visa");
            $(this).parents("form").submit();
            return false;
        });

        // Submitta närmsta formulär på klick av knapp
        $("a.form-submit").click(function() {
            $(this).closest("form").submit();
            return false;
        });

        $("a.form-submit-confirm").click(function() {
            $("#submit-confirm").val(1)
            $(this).closest("form").submit();
            return false;
        });

        $("a.form-submit-close").click(function() {
            $(this).closest("form").submit();
            window.close();
            return false;
        });

        // Submitta närmsta formulär på enter-tryckning
        $("input.submit-on-keypress").keypress(function(event) {
            if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
                $(this).closest("form").submit();
                return false;
            } else {
                return true;
            }
        });

        // Bevakning måste vara valt för att kunna välja bevakning_epost
        $("#sokalternativ_bevakning").click(function() {
            if ($("#sokalternativ_bevakning").is(":checked")) {
                $("#spara-sok-bevakning-epost").attr("disabled", false);
            } else {
                $("#spara-sok-bevakning-epost").attr("disabled", true);
                $("#spara-sok-bevakning-epost").removeAttr("checked");
            }
        });

    });

    //Markera huruvida formuläret är uppdaterat (dirty) eller ej
    var dirtyForm = function(isDirty) {
        var isHidden = false; //Så att man inte kör hide() på knappen onödigt många gånger
        if (isDirty && isHidden == false) {
            $("#sok-spara-hndl").hide();
            isHidden = true;
        } else {
            $("#sok-spara-hndl").show();
            isHidden = false;
        }
    }

    //När något förändrar sig i formuläret ska forumuläret sättas som uppdaterat.
    $(document).ready(function() {
        $("input, select").change(function() {
            dirtyForm(true);
        });
    });


    $(document).ready(function(){

        //Lägg till autoresizefunktionalitet som sätter height på iframen
        //beroende på hur stort (högt) innehållet i iframen är.
        $(".autoresize").each(function() {

            height = -1;

            //Vissa webbläsare har endast contentDocument, andra har contentWindow och vissa har båda.
            //För de webbläsare som har båda använder vi den största sidhöjden, därav att detta är uppdelat
            //i egna ifsatser.

            //De iframes som inte innehåller några divar ska anses som tomma och dess höjd sätts till 0

            if ($(this).get(0).contentDocument) {
                if ($(this).get(0).contentDocument.body.getElementsByTagName('div').length > 0) {
                    height = $(this).get(0).contentDocument.body.offsetHeight;
                } else {
                    height = 0;
                }
            }


            if ($(this).get(0).contentWindow) {

                if (height == -1 || height < $(this).get(0).contentWindow.document.body.scrollHeight) {
                    if ($(this).get(0).contentWindow.document.body.getElementsByTagName('div').length > 0) {
                        height = $(this).get(0).contentWindow.document.body.scrollHeight;
                    } else {
                        height = 0;
                    }
                } 
            }

            //Defaulthöjden på dessa iframes kommer bli 600px om vi inte fick tag på något annant.
            if (height == -1) {
                height = 600;
            }

            //Sätt höjden på iframen
            $(this).attr("height", height + "px");
        });

        var hasProjektannons = false;

        // Navigering ovanför projektannonser
        $("#projektannonser iframe").each(function() {
            if ($(this).height() > 0) {hasProjektannons = true;}
        });

        if (hasProjektannons) {
            $(".paginering:first").clone().insertBefore("#projektannonser").css('margin-top', '0');
        }
    });


    // Fixa navigering ovanför projektannonser
    $(function() {
    });


    //Lägg till bevakare för alla checkboxfält som används för att
    //om användaren vill ha nya objekt i bevakningen via e-post.
    $(document).ready(function() {

        var uppdatera_bevakning = function(bevaknings_id, skicka) {
            $.ajax({
                type: "POST",
                url: "/bevakning/uppdatera_epostutskick",
                data: "bevaknings_id="+bevaknings_id+"&skicka="+skicka,
                error: function() {
                    alert("Kunde inte uppdatera bevakningen.");
                },
                success: function(msg) {
                    if (msg.length > 0) {
                        alert(msg);
                    }
                }

            });
        }

        $("form table.bevakning-lista :checkbox").change(function() {

            bevaknings_id = $(this).attr('name').match(/\d+/)[0];
            checked = ($(this).attr('checked')) ? 1 : 0 ;
            if (bevaknings_id) {
                uppdatera_bevakning(bevaknings_id, checked);
            }
        });
    });



    //Se om det finns något statusmeddelande som behöver visas i iframens
    $(document).ready(function() {
        $("#status_message_for_eniro_iframe").each(function(){
            if ($(this).val().length > 0) {
                alert($(this).val());
            }
        });
    });

    $(document).ready(function() {
        if ($("#sok-kartsok").val() == 1) {
            $("#sok-land").addOption("-2", "Kartsök");
            $("#sok-region").addOption("-2", "Kartsök");
            //$("#sok-region :selected").text("Kartsök");
            //$("#sok-kommun :selected").text("Kartsök");

            $("#sok-region").attr("disabled", true);
            $("#sok-kommun").attr("disabled", true);

            // Sätt preValue till -2 (kartsök) om kartsök är satt
            $("#sok-land").data("preSelValue", -2);
        } else {
            // Initiera preValue på selectbox till Sverige
            $("#sok-land").data("preSelValue", 46);
        }

        //Sätt kommun till ej valbart om land inte är Sverige vid laddningen av sidan.
        if ($("#sok-land").val() != 46) {
            $("#sok-kommun").val("Ej valbart");
        }
    });


    $(document).ready(function() {
        $("#bild-cycle-box").cycle({ 
            fx:      "scrollLeft", 
            speed:    400, 
            timeout:  15000
        });
    });




    //Loopa över exponeringsobjekten om det finns fler än 1 objekt att loopa över
    $(document).ready(function() {

        var expos =  $("#exponeringsobjekt tr.innehall");
        var current_index = 0;
        var length = expos.size();

        // Vi vill bara bläddra bland expoannonserna om det finns fler än 1
        if ( expos.size() > 1) {

            setInterval(function() {

                var next_index = current_index + 1;
                if(next_index >= length) {
                    next_index = 0;
                } 


                $(expos[current_index]).hide();
                $(expos[next_index]).show();

                current_index = next_index;

            }, 5000);

        }

    });


    // Används för att skrolla med en banner när användaren skrollar på sidan.
    $(document).ready(function(){
        var start = $("#banner-flytande-start");
        var banner = $("#banner-flytande");
        var win = $(window);

        win.scroll(function() {

            var startPos = start.offset({scroll: false}).top;

            if  (win.scrollTop() > startPos){
                banner.css({
                    position: "fixed",
                    top: 0
                });
            }

            if (win.scrollTop() <= startPos){

                banner.css("position", "relative");
                try {
                    banner.css("top", start.offset);
                } catch (err) {
                    // I vissa fall blir det fel i IE <= 7 så sätter vi
                    // position till static så att bannern hamnar på rätt plats igen (där den låg ursprunligen).
                    banner.css("position", "static");
                }
            }

        });
    });


    $(function() {
        var undersokningHlr = $("#hemnet-undersokning-hlr");
        if (undersokningHlr.length > 0 && $.cookie("hemnet-undersokning") != 1) {
            undersokningHlr.overlay({
                top: 'center',
                left: 'center',
                mask: {
                    color: '#fff',
                    loadSpeed: 200,
                    opacity: 0.5
                },
                load: true,
                closeOnClick: false,
                onClose: function() {
                    $.cookie("hemnet-undersokning", 1, {path: '/', expires: 30});
                }
            });
            $("a", undersokningHlr[0]).click(function() {
                undersokningHlr.data('overlay').close();
                return $(this).hasClass('ja');
            });
        }
    });

})(jQuery);
