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

        $("#sok-region").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());
            });

        }


        // 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-area", 0, 1000, 10);
        initializeSlider("#sok-pris", 0, 20000000, 100000);
        initializeSlider("#sok-hyra-avgift", 0, 500000, 10000);

        $(".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 = 4;
        $("#sok-area-hlr, #sok-pris-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");
            
            //Återställ alla sliders.
            $("#sok-area-slider").slider('values', 0, 0);
            $("#sok-area-slider").slider('values', 1, 1000);
              
            $("#sok-pris-slider").slider('values', 0, 0);
            $("#sok-pris-slider").slider('values', 1, 20000000);
             
            $("#sok-hyra-avgift-slider").slider('value', 500000);


            //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;
        });




        // Statistikpopup
        $("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("");
            }
        });

        // Ö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);
        });
    });


    //Lägg till autoresizefunktionalitet som sätter height på iframen
    //beroende på hur stort (högt) innehållet i iframen är.
    $(document).ready(function(){
        $(".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");
        });
    });



    //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 :selected").text("Kartsök");
            $("#sok-kommun :selected").text("Kartsök");

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

    });


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

})(jQuery);
