﻿// Example header text. Can be configured in the options.

var refWs = "/umbraco/webservices/ReferenceDB.svc/";




// singleton
RefDB = function (ctorparams) {

    // private

    var _map = null;
    var _marker = null;
    var _mapElement = null;



    function resetSearch() {
        // clear cookies
        //        $.cookie("country", null);
        //        $.cookie("region", null);
        //        $.cookie("cities", null);
        //        $.cookie("advancedSearch", null);

        // Fix paging-bug
        $("#ref-search-button").click(function () { $("#ref-id").val(''); });
    }

    function showMap(elementId, lat, lng, text) {

        var position = new google.maps.LatLng(lat, lng);

        var _mapOptions = {
            zoom: 15,
            center: position,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            panControl: true,
            panControlOptions: {
                position: google.maps.ControlPosition.TOP_RIGHT
            },
            zoomControl: true,
            zoomControlOptions: {

                position: google.maps.ControlPosition.TOP_RIGHT
            }

        };

        // Add map
        _map = new google.maps.Map(document.getElementById(elementId), _mapOptions);

        var image = new google.maps.MarkerImage('/css/llentab/images/map_markers/LLMarker.png',
              new google.maps.Size(54, 64),
              new google.maps.Point(0, 0),
              new google.maps.Point(27, 64));
        var shadow = new google.maps.MarkerImage('/css/llentab/images/map_markers/LLMarkerShadow.png',
              new google.maps.Size(86, 46),
              new google.maps.Point(0, 0),
              new google.maps.Point(30, 46));
                

        // Add marker
        _marker = new google.maps.Marker({
            position: position,
            shadow: shadow,
            icon: image,
            map: _map,
            title: text
        });





    }


    // public methods
    return {
        reset: function () {
            resetSearch();
        },


        showMap: function (element, lat, lng, text) {
            showMap(element, lat, lng, text);
         

        }

    }

} ();



$(document).ready(function () {
  

    // Reference DB
    if ($("#ref-form").length) {
        
        
        
        
        $("#ref-area-min").watermark(RefDBLanguage.minWatermark, { useNative: false });
        $("#ref-area-max").watermark(RefDBLanguage.maxWatermark, { useNative: false });
        $("#ref-height-min").watermark(RefDBLanguage.minWatermark, { useNative: false });
        $("#ref-height-max").watermark(RefDBLanguage.maxWatermark, { useNative: false });
        $("#ref-length-min").watermark(RefDBLanguage.minWatermark, { useNative: false });
        $("#ref-length-max").watermark(RefDBLanguage.maxWatermark, { useNative: false });
        $("#ref-width-min").watermark(RefDBLanguage.minWatermark, { useNative: false });
        $("#ref-width-max").watermark(RefDBLanguage.maxWatermark, { useNative: false });

        $("#ref-query").watermark(RefDBLanguage.searchQueryWatermark, { useNative: false });

        $("#ref-country").change(function () { changeCountry($(this)) });
        $("#ref-region").change(function () { changeRegion($(this)) });

        // Init dropdowns

        var selectedCountry = $.cookie("country");
        if (selectedCountry != null) {
            $("#ref-country").val(selectedCountry);
        }

        $("#ref-country").change();

        $("#ref-city").click(function (event) {
            $(".ref-city-multiselect").toggleClass("active");
            event.stopPropagation();
        });


        $(".ref-city-multiselect").click(function (event) {
            event.stopPropagation();
        });


        $('body').click(function () {
            if ($(".ref-city-multiselect").hasClass("active")) {
                $(".ref-city-multiselect").removeClass("active");
            }
        });

        // Setup category handling
        $("#cat_all").click(function () {
            var allChecked = $(this).is(":checked");
            if (allChecked) {
                $(".ref-cat-item").attr("checked", false);
            }
        });

        $(".ref-cat-item").click(function () {
            var $checkedCategories = $(".ref-cat-item:checked");
            if ($checkedCategories.length > 0) {
                $("#cat_all").attr("checked", false);
            }
        });
        

        setupAdvancedLink();
        
    }
});


function setupAdvancedLink() {
    
    var $advLink = $("#ref-advanced-search");
    var cookieAdvanced = $.cookie("advancedSearch");
    if(cookieAdvanced != null && cookieAdvanced=="show") {
        $("#ref-advanced").show();
        $advLink.text(RefDBLanguage.hideAdvanced);
    }
    else {
        $advLink.text(RefDBLanguage.showAdvanced);
    }



    $advLink.click(function (event) {
        event.preventDefault();
        var $refAdv = $("#ref-advanced");
        var $advLink = $("#ref-advanced-search");
        var isVisible = $refAdv.is(":visible");
        if (!isVisible) {
            $refAdv.slideDown(200);
            $.cookie("advancedSearch", "show", { expires: 7 });
            $advLink.text(RefDBLanguage.hideAdvanced);
        }
        else {
            $(':input:checked,.ref-search-field-left,.ref-search-field-right', '#refForm')
             .val('')
             .removeAttr('checked')
             .removeAttr('selected');

            $("#cat_all").attr("checked", true);
            $("#ref-country").val('all').change();
            $refAdv.slideUp(200);
            $.cookie("advancedSearch", "hide", { expires: 7 });
            $advLink.text(RefDBLanguage.showAdvanced);
        }
        return false;
    });
}


function htmlDecode(value) {
    return $('<div/>').html(value).text();
}

function changeCountry(cb) {
    var $country = cb;

    $.cookie('country', $country.val(), { expires: 7 });

    var $regions = $("#ref-region");
    $regions.children().remove();
    
    $.ajax({
        type: "GET",
        url: refWs + "GetRegions",
        data:
            {
                languageCode: $country.val()
            },
        dataType: "json",
        success: function (msg) {
            loadRegions(msg);
        }
    });
}

function loadRegions(data) {
    $("#ref-region").append(
        $('<option></option>').val("all").html(RefDBLanguage.allRegions));

    $.each(data.d, function (index, item) {
        $("#ref-region").append(
        $('<option></option>').val(item.Id).html(item.Name)
    );
    });

    // Check if a cookie for regions is set
    var selectedRegion = $.cookie("region");
    if (selectedRegion != null) {
        $("#ref-region").val(selectedRegion);
        $("#ref-region").change();
    }

}




function changeRegion(cb) {
    var $region = cb;
    var $country = $("#ref-country");
    var siteId = $("#ref-site-id").val();

    $.cookie('region', $region.val(), { expires: 7 });

    // Are any cities selected?
    var $checkedCities = $(".ref-city-item:checked");
    if ($checkedCities.length > 0) {
        $.cookie("cities", null);
    }

    var $cities = $(".ref-city-multiselect-scroll");
    $cities.children().remove();

    $.ajax({
        type: "GET",
        url: refWs + "GetCities",
        data:
            {
                languageCode: $country.val()
            },
        dataType: "json",
        success: function (msg) {
            loadCities(msg);
        }
    });
}

function loadCities(data) {

    var checkedCities = $.cookie("cities");
    if (checkedCities != null) {
        checkedCities = checkedCities.split(',');
    }
    
    var $currentRegion = $("#ref-region");


    var $cities = $(".ref-city-multiselect-scroll");
    $cities.append($("<div class='ref-city-div'><input name='cities' id='city_all' type='checkbox' value=''/><label for='city_all'>"+ RefDBLanguage.allCities +"</label></div>"));

    
    for (var index = 0; index < data.d.length; index++) {

        var item = data.d[index];
        if ($currentRegion.val() != 'all') {
            if($currentRegion.val() != item.ParentId ) continue;
        }

        
        var cityId = "city_" + item.Id;
        var $div = $("<div class='ref-city-div'></div>");
        var $checkbox = $("<input type='checkbox' />").attr("id", cityId).addClass('ref-city-item').attr("name","ref-city").val(item.Id);
        var $label = $("<label></label>").text(item.Name).attr("for", cityId);

        $div.appendTo($cities);
        $checkbox.appendTo($div);
        $label.appendTo($div);

        $checkbox.click(function () { checkCity($(this)) });
        
        if(checkedCities!=null) {
            if ($.inArray(cityId, checkedCities) > -1) {
               $checkbox.attr("checked", true);
            }
        }
    }

    if (checkedCities == null) {
        $("#city_all").attr("checked", true);
    }
    setCheckedCities();

    $("#city_all").click(function () {
        var checked = $(this).is(":checked");
        if (checked) {
            
            // Clear all other
            $(".ref-city-multiselect").find(".ref-city-item").attr("checked", false);
            // Clear cookie
            $.cookie("cities", null);
        }
        setCheckedCities();
    });

    $(".ref-city-item").click(function () {
        var cityItem = $(this);
        if (cityItem.is(":checked")) {
            $("#city_all").attr("checked", false);
        }
    });
}


function checkCity(arg) {
    var $checkedCities = $(".ref-city-item:checked");
    if($checkedCities.length ==0) {
        $("#city_all").attr("checked", true);
    }
    var cityIds = new Array();
    
    for (var i = 0; i < $checkedCities.length; i++) {
        var item = $checkedCities[i];
        cityIds.push(item.id);
    }


    setCheckedCities();
    
    $.cookie("cities", cityIds, { expires: 7 });
}

function setCheckedCities() {
    var cityString = "";
    var $checkedCities = $(".ref-city-item:checked");
    if ($checkedCities.length == 0) {
        if (!$ ("#city_all").is(":checked")) {
            cityString = "Select cities";
        }
        else {
            cityString = RefDBLanguage.allCities;
        }
        
    }
    else {
        for (var i = 0; i < $checkedCities.length; i++) {
            var item = $($checkedCities[i]);
            var lbl = item.next();
            cityString += lbl.text() + ",";
        }
    }

    if (cityString.length > 20)
        cityString = cityString.substr(0, 20) + "...";

    if (cityString.substr(cityString.length-1, 1) == ',') {
        cityString = cityString.substr(0, cityString.length - 1);
    }
    $("#ref-city-input").val(cityString);
    
}

function RefChangePage(pageIndex) {
    var form = $("#refForm");
    var page = $("#ref-page");
    page.val(pageIndex);
    form.submit();
    return false;
}

function RefShowDetails(detailId) {
    var form = $("#refForm");
    var detailField = $("#ref-id");
    detailField.val(detailId);
    form.submit();
    return false;
}

