{"version":3,"sources":["modules/Module.PageSetup.js"],"names":["PageSetup","textSize","listElement","document","getElementById","currentFocus","addFocus","element","address","classList","add","children","style","backgroundPosition","lastElementChild","textContent","value","removeFocus","remove","removeElements","elementId","display","child","removeChild","addElements","arr","isRedirecting","length","forEach","item","li","createElement","div","inputValLength","name","DisplayName","substr","icon","padding","innerHTML","appendChild","LocationType","toUpperCase","backgroundImage","addEventListener","setAddressToInputFieldWithStyle","window","location","pathname","whatText","$","val","replace","whereText","ajax","url","data","JSON","stringify","Url","Lat","Lng","CouncilID","LocationID","contentType","type","success","response","path","origin","params","trim","push","encodeURIComponent","join","href","error","err","console","showSpinner","addClass","removeSpinner","removeClass","setCookie","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","cookie","getCookie","ca","split","i","c","charAt","substring","indexOf","handleNoGeolocation","errorMsg","off","on","slideUp","show","html","hide","slideDown","RequestLocation","destUrl","locationPrefix","wherePrefix","locationId","locationName","DestinationUrl","LocationUrlPrefix","WhereUrlPrefix","Council","ID","Name","gotoLocation","setPanelContents","hideLocationPanel","council","id","valid","parts","parse","isEmptyObject","e","parseInt","isNaN","GetLocationCookie","navigator","geolocation","getCurrentPosition","position","siteParam","AppSettings","AffiliateSiteID","getJSON","ApiUrl","coords","latitude","longitude","CouncilRegionID","LocalityID","findCouncilandLocation","log","enableHighAccuracy","focus","preventDefault","obj","datum","Postcode","CouncilDisplayName","CouncilURL","SetLocationCookie","Alert","text","title","okCallback","okLabel","modal","hadAction","checkCouncilandProceed","SearchTerm","dataType","Loaded","content","typeahead","findCouncilLocation","findCouncilandLocationNewHome","geocoder","google","maps","Geocoder","latlng","lat","parseFloat","lng","geocode","results","status","formatted_address","alert","locationTypeahead","fieldName","locations","hint","minLength","highlight","displayKey","source","ttAdapter","templates","suggestion","this","closest","parent","setupTooltipsStyling","attr","removeAttr","InitPage","previouslyFocused","_this","ajaxSetup","headers","Authorization","ApiToken","placeholder","activeElement","$field","filter","$inputs","$firstInput","first","$lastInput","last","which","shiftKey","InitTooltips","InitSearchButton","InitNavigation","InitSliders","InitPullout","InitTextSizeChange","ObfuscateEmails","InitMap","InitAutoComplete","InitCouncilSearch","ConfigureSettings","settings","InitValidation","validator","setDefaults","errorClass","validClass","findByName","find","append","unhighlight","addMethod","methods","remote","call","re","RegExp","optional","match","trimmedValue","parseExact","regexp","test","mobileRe","trimValue","startsWith","newValue","each","tooltip","trigger","$locationInput","arguments","event","stopImmediatePropagation","input","xhttp","XMLHttpRequest","onreadystatechange","readyState","responseText","open","send","click","target","is","setDefaultLocation","x","categoryId","serviceId","rad","txt","where","councilId","state","tempUrl","search","IsValidPassword","password","isValid","toggleClass","blur","touchMoved","closePullouts","hasClass","parents","GeolocateCouncil","posError","message","slick","slidesToShow","slide","autoplay","autoplaySpeed","next","shown","ModuleReference","ChangeTextSize","ResetTextSize","incrementCount","localStorage","getItem","setItem","SaveTextSize","size","increment","css","font-size","emailStart","emailAt","setText","Boolean","mapContainer","firstChild","MapView","LatLng","MY_MAPTYPE_ID","mapOptions","zoom","center","mapTypeControlOptions","mapTypeIds","MapTypeId","ROADMAP","mapTypeId","Map","customMapType","StyledMapType","featureType","stylers","saturation","elementType","hue","weight","mapTypes","set","ShowCategoriesMap","q","Bloodhound","datumTokenizer","tokenizers","whitespace","queryTokenizer","limit","query","beforeSend","ev","Site","complete","map","result","councils","initialize","datetimepicker","format","locale","useCurrent","showTodayButton","minDate","date","maxDate","bind","ready","keyCode","hideSelector","prop","requestedLocation","SendMail","email","To","Subject","Body","InitSearchResultsBehavior","SetCookie","GetCookie","SetupLocationNag"],"mappings":"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","file":"Module.PageSetup.min.js","sourcesContent":["\r\nvar PageSetup = (function() {\r\n    var textSize = 0;\r\n    var mapObjects = {};\r\n    var selectedLocation = false;\r\n    function convertPlace(addressComponents, types, formattedAddress, location) {\r\n        var suburb = '';\r\n        var num = '';\r\n        var route = '';\r\n        var addr = '';\r\n        var state = '';\r\n        var postcode = '';\r\n        var country = '';\r\n        var premise = '';\r\n        var subpremise = '';\r\n        var establishment = '';\r\n        for (var i = 0; i < addressComponents.length; i++) {\r\n            var comp = addressComponents[i];\r\n            if (comp.types.indexOf(\"premise\", 0) !== -1)\r\n                premise = comp.long_name;\r\n            else if (comp.types.indexOf(\"subpremise\", 0) !== -1)\r\n                subpremise = comp.long_name;\r\n            else if (comp.types.indexOf(\"establishment\", 0) !== -1)\r\n                establishment = comp.long_name;\r\n            else if (comp.types.indexOf(\"street_address\", 0) !== -1)\r\n                addr = comp.long_name;\r\n            else if (comp.types.indexOf(\"street_number\", 0) !== -1)\r\n                num = comp.long_name;\r\n            else if (comp.types.indexOf(\"route\", 0) !== -1)\r\n                route = comp.long_name;\r\n            else if (comp.types.indexOf(\"locality\", 0) !== -1)\r\n                suburb = comp.long_name;\r\n            else if (comp.types.indexOf(\"administrative_area_level_1\", 0) !== -1)\r\n                state = comp.short_name;\r\n            else if (comp.types.indexOf(\"postal_code\", 0) !== -1)\r\n                postcode = comp.short_name;\r\n            else if (comp.types.indexOf(\"country\", 0) !== -1)\r\n                country = comp.long_name;\r\n        }\r\n        if (addr.length === 0) {\r\n            addr = $.trim(num + \" \" + route);\r\n        }\r\n        // Look for text like Brunswick St & McLachlan St, Fortitude Valley QLD 4006, Australia\r\n        if (types.indexOf(\"intersection\", 0) !== -1) {\r\n            var ampersand = formattedAddress.indexOf(\"&\", 0);\r\n            var comma = formattedAddress.indexOf(\",\", 0);\r\n            if (ampersand > 0 && comma > ampersand) {\r\n                addr = \"Cnr of \" + $.trim(formattedAddress.substring(0, comma));\r\n            }\r\n        }\r\n        if (addr.length > 0 || suburb.length > 0) {\r\n            var result = {\r\n                building: $.trim(subpremise + \" \" + premise + \" \" + establishment),\r\n                address: addr,\r\n                suburb: suburb,\r\n                postcode: postcode,\r\n                state: state,\r\n                country: country,\r\n                latLng: location\r\n            };\r\n            if (location) {\r\n                result.lat = location.lat();\r\n                result.lng = location.lng();\r\n            }\r\n            return result;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    function InitAutocompleteSearch(inputElem, mapElem) {\r\n        var auto = getMapObject(inputElem, \"autocomplete\");\r\n        if (!auto) {\r\n            var input = $(inputElem).get(0);\r\n            var autocomplete = new google.maps.places.Autocomplete(input, { componentRestrictions: { country: 'au' } });\r\n            setMapObject(inputElem, \"autocomplete\", autocomplete);\r\n            google.maps.event.addListener(autocomplete, 'place_changed', function () {\r\n                var place = autocomplete.getPlace();\r\n                if (!place || !place.geometry) {\r\n                    $(inputElem).data(\"validated-place\", \"\").trigger(\"mcd:autocomplete\", {});\r\n                    return;\r\n                }\r\n                if (mapElem && $(mapElem).is(\":visible\")) {\r\n                    var map = getMapObject(mapElem, \"map\");\r\n                    if (map) {\r\n                        google.maps.event.trigger(map, 'resize');\r\n                        if (place.geometry.location) {\r\n                            map.setCenter(place.geometry.location);\r\n                            var addressMarker = getMapObject(mapElem, \"autocomplete-marker\");\r\n                            if (addressMarker) {\r\n                                addressMarker.setPosition(place.geometry.location);\r\n                                addressMarker.setMap(map);\r\n                            }\r\n                        }\r\n                        else if (place.geometry.viewport) {\r\n                            map.fitBounds(place.geometry.viewport);\r\n                        }\r\n                    }\r\n                }\r\n                var triggerResult = { location: convertPlace(place.address_components, place.types, place.formatted_address, place.geometry && place.geometry.location), result: place };\r\n                $(inputElem).data(\"validated-place\", $(inputElem).val()).trigger(\"mcd:autocomplete\", triggerResult);\r\n                var lat = place.geometry.location.lat();\r\n                var lng = place.geometry.location.lng();\r\n                var address = place.formatted_address;\r\n                var path = \"/SearchRegion?lat=\" + lat + \"&lng=\" + lng + \"&address=\" + address;\r\n                $.ajax({\r\n                    url: path,\r\n                    type: \"POST\",\r\n                    success: function (response) {\r\n                        window.location.href = window.location.origin  + '/' + response;\r\n                    }\r\n                });\r\n            });\r\n            $(inputElem).on(\"mcd:blur\", function () {\r\n                var value = $(this).data(\"validated-place\");\r\n                if (value && value !== $(this).val()) {\r\n                    $(this).data(\"validated-place\", \"\").trigger(\"mcd:autocomplete\", {});\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    var listElement = document.getElementById(\"suggestionList\");\r\n    var currentFocus = -1;\r\n\r\n    function addFocus(element) {\r\n        if (!element) return;\r\n        element.classList.add(\"focus-active\")\r\n        element.children[0].style.backgroundPosition = \"-18px -161px\"\r\n        setAddressToInputField(element.lastElementChild.textContent)\r\n    }\r\n\r\n    function removeFocus(element) {\r\n        element.classList.remove(\"focus-active\")\r\n        element.children[0].style.backgroundPosition = \"-1px -161px\"\r\n    }\r\n\r\n    function setAddressToInputField(address) {\r\n        var input = document.getElementById(\"SearchCriteria_WhereText\");\r\n        input.value = address;\r\n    }\r\n\r\n    function removeElements(elementId) {\r\n        var element = document.getElementById(elementId);\r\n\r\n        if (element) {\r\n            element.style.display = 'none';\r\n\r\n            var child = element.lastElementChild;\r\n            while (child) {\r\n                element.removeChild(child);\r\n                child = element.lastElementChild;\r\n            }\r\n        }\r\n    }\r\n\r\n    function setAddressToInputFieldWithStyle(item) {\r\n        var input = document.getElementById(\"SearchCriteria_WhereText\");\r\n        input.value = item.DisplayName;\r\n        var icon = document.getElementById(\"txt-location-input-icon\");\r\n        if (icon) {\r\n            if (item.LocationType.toUpperCase() == \"LGA\") {\r\n                icon.style.backgroundImage = \"url('/_static/static-page-assets/images/icons/lga_icons.png')\";\r\n            }\r\n            else {\r\n                icon.style.backgroundImage = \"url('/_static/static-page-assets/images/icons/pin_icons.png')\";\r\n            }\r\n        }\r\n    }\r\n\r\n    function addElements(arr, elementId, isRedirecting) {\r\n        var element = document.getElementById(elementId);\r\n        if (!element) return; // Early exit if element is not found\r\n\r\n        element.style.display = 'block'; // Make the container visible\r\n\r\n        if (arr.length > 1) {\r\n            arr.forEach(function (item) {\r\n                var li = document.createElement(\"li\");\r\n                var div = document.createElement(\"div\");\r\n\r\n                // Make the matching letters bold:\r\n                var inputValLength = document.getElementById(\"SearchCriteria_WhereText\").value.length;\r\n                var name = \"<strong>\" + item.DisplayName.substr(0, inputValLength) + \"</strong>\";\r\n                name += item.DisplayName.substr(inputValLength);\r\n\r\n                var icon = document.createElement(\"div\");\r\n                li.classList.add(\"suggestions-item\");\r\n                li.style.padding = \"0 4px\";\r\n                div.classList.add(\"suggestion-title\");\r\n                div.innerHTML = name;\r\n\r\n                li.appendChild(icon);\r\n                li.appendChild(div);\r\n                element.appendChild(li);\r\n\r\n                icon.classList.add(\"suggestion-icon\");\r\n                if (item.LocationType.toUpperCase() === \"LGA\") {\r\n                    icon.style.backgroundImage = \"url('/_static/static-page-assets/images/icons/lga_icons.png')\";\r\n                } else {\r\n                    icon.style.backgroundImage = \"url('/_static/static-page-assets/images/icons/pin_icons.png')\";\r\n                }\r\n\r\n                li.addEventListener(\"click\", function () {\r\n                    setAddressToInputFieldWithStyle(item);\r\n                    //storeSeletedAddressObj(item);\r\n                    removeElements(elementId);\r\n\r\n                    //document.getElementById(\"hfCouncilId\").value = item.CouncilID;\r\n                    //document.getElementById(\"hfLocationId\").value = item.LocationID;\r\n\r\n                    if (window.location.pathname !== \"/Search/Directory\") {\r\n                        if (isRedirecting) {\r\n                            var whatText = $('#SearchCriteria_WhatText').val().replace(/[,\\s]+/g, \"_\");\r\n                            var whereText = $('#SearchCriteria_WhereText').val().replace(/[,\\s]+/g, \"_\");\r\n                            var path = \"/StoreSearchedModelInSession\";\r\n                            $.ajax({\r\n                                url: path,\r\n                                data: JSON.stringify({\r\n                                    DisplayName: item.DisplayName,\r\n                                    Url: item.Url,\r\n                                    LocationType: item.LocationType,\r\n                                    Lat: item.Lat,\r\n                                    Lng: item.Lng,\r\n                                    CouncilID: item.CouncilID,\r\n                                    LocationID: item.LocationID\r\n                                }),\r\n                                contentType: \"application/json\",\r\n                                type: \"POST\",\r\n                                success: function (response) {\r\n                                    if (response && response.length > 0) {\r\n                                        var path = window.location.origin;\r\n                                        if (response[0] !== '/') {\r\n                                            path += '/';\r\n                                        }\r\n                                        path += response;\r\n                                        var params = [];\r\n                                        // Check if 'whatText' is not empty and add to parameters\r\n                                        if (whatText.trim() !== \"\") {\r\n                                            params.push(\"what=\" + encodeURIComponent(whatText));\r\n                                        }\r\n                                        // Check if 'whereText' is not empty and add to parameters\r\n                                        if (whereText.trim() !== \"\") {\r\n                                            params.push(\"where=\" + encodeURIComponent(whereText));\r\n                                        }\r\n                                        // Join parameters with '&' and append to the base URL\r\n                                        if (params.length > 0) {\r\n                                            path += \"?\" + params.join(\"&\");\r\n                                        }\r\n                                        window.location.href = path;\r\n                                    }\r\n                                },\r\n                                error: function (err) {\r\n                                    console.error(err);\r\n                                },\r\n                            });\r\n                        }\r\n                    }\r\n                });\r\n            });\r\n        }\r\n    }\r\n\r\n    function InitAutocompleteSearchCouncil(inputElem, mapElem) {\r\n        var whereText;\r\n        var whatText;\r\n\r\n        var isRedirecting = true;\r\n\r\n        var $locationInput = $(inputElem);\r\n        $locationInput.on(\"input\", function (event) {\r\n            event.preventDefault();\r\n            event.stopImmediatePropagation();\r\n            var input = $(this).val();\r\n            if (input.length >= 3) {\r\n                var xhttp = new XMLHttpRequest();\r\n                xhttp.onreadystatechange = function () {\r\n                    if (this.readyState == 4 && this.status == 200) {\r\n                        var data = JSON.parse(this.responseText)\r\n                        removeElements(\"suggestionList\");\r\n                        addElements(data, \"suggestionList\", isRedirecting);\r\n                    }\r\n                };\r\n\r\n                xhttp.open(\"GET\", window.AppSettings.ApiUrl + \"/api/v1/system/councils/searchall/\" + input, true);\r\n                xhttp.send();\r\n            }\r\n        });\r\n\r\n        // Remove suggestion list when user click somewhere else that is not one of the suggestion items\r\n        // and reset the location text\r\n        $(window).click(function (event) {\r\n            var target = $(event.target);\r\n            if (!target.is(\".suggestions-item\")) {\r\n                if (!selectedLocation) {\r\n                    removeElements(\"suggestionList\");\r\n                    setDefaultLocation(false, false);\r\n                }\r\n            }\r\n        });\r\n\r\n        $locationInput.on(\"click keydown\", function (e) {\r\n\r\n            var x;\r\n            if (listElement) x = listElement.children;\r\n\r\n            /*If the arrow DOWN key is pressed, focus on the elemen*/\r\n            if (e.which == 40) {\r\n                currentFocus++;\r\n                addFocus(x[currentFocus])\r\n                if (x[currentFocus - 1])\r\n                    removeFocus(x[currentFocus - 1])\r\n                if (currentFocus >= listElement.children.length) {\r\n                    currentFocus = 0;\r\n                    addFocus(x[currentFocus])\r\n                }\r\n            }\r\n            /*If the arrow UP key is pressed, focus on the elemen:*/\r\n            else if (e.which == 38) {\r\n                currentFocus--;\r\n                addFocus(x[currentFocus])\r\n                if (x[currentFocus + 1])\r\n                    removeFocus(x[currentFocus + 1])\r\n                if (currentFocus <= -1) {\r\n                    currentFocus = listElement.children.length - 1;\r\n                    addFocus(x[currentFocus])\r\n                }\r\n            }\r\n            /*If the ESC key is pressed, close the list*/\r\n            else if (e.which == 27) {\r\n                removeElements(\"suggestionList\");\r\n                setDefaultLocation(false, false);\r\n            }\r\n            /*If the ENTER key is pressed, prevent the form from being submitted,*/\r\n            else if (e.which == 13) {\r\n                e.preventDefault();\r\n                if (currentFocus > -1) {\r\n                    /*and simulate a click on the \"active\" item:*/\r\n                    if (listElement) {\r\n                        x[currentFocus].click();\r\n                        currentFocus = -1;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    function getMapObject(elem, type) {\r\n        var id = $(elem).attr(\"id\");\r\n        if (id) {\r\n            return mapObjects[id + \"/\" + type];\r\n        }\r\n        return undefined;\r\n    }\r\n    function setMapObject(elem, type, obj) {\r\n        var id = $(elem).attr(\"id\");\r\n        if (id) {\r\n            mapObjects[id + \"/\" + type] = obj;\r\n        }\r\n    }\r\n    function hidebanner() {\r\n        $(\"#virus-banner\").slideUp('slow');\r\n        $(\"#virus-banner\").hide();\r\n    }\r\n\r\n    function showSpinner(item) {\r\n        $(item).addClass(\"spinner\");\r\n    }\r\n\r\n    function removeSpinner(item) {\r\n        $(item).removeClass(\"spinner\");\r\n    }\r\n\r\n    function setCookie(cname, cvalue, exdays) {\r\n        var d = new Date();\r\n        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n        var expires = \"expires=\" + d.toUTCString();\r\n        document.cookie = cname + \"=\" + cvalue + \"; \" + expires + \"; secure=true\";\r\n    }\r\n\r\n    function getCookie(cname) {\r\n        var name = cname + \"=\";\r\n        var ca = document.cookie.split(';');\r\n        for (var i = 0; i < ca.length; i++) {\r\n            var c = ca[i];\r\n            while (c.charAt(0) == ' ') c = c.substring(1);\r\n            if (c.indexOf(name) === 0) return c.substring(name.length, c.length);\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    function handleNoGeolocation(errorMsg) {\r\n        $(\"#foundCouncil .btn-link\").off(\"click\");\r\n        $(\"#foundCouncil .btn-link\").on(\"click\", function () {\r\n            $(\"#foundCouncil\").slideUp('slow');\r\n        });\r\n\r\n        $(\"#foundCouncil .location-error\").show();\r\n        $(\"#foundCouncil .location-error .message-text\").html(errorMsg);\r\n        $(\"#foundCouncil .location-success\").hide();\r\n        $(\"#foundCouncil\").slideDown('slow');\r\n    }\r\n\r\n    function isValidPassword(password) {\r\n        var isValid = true;\r\n\r\n        // password bigger than 6 \r\n        if (password.length > 6) {\r\n            $(\"li.six-plus\").addClass(\"complete\");\r\n        } else {\r\n            $(\"li.six-plus\").removeClass(\"complete\");\r\n            isValid = false;\r\n        }\r\n\r\n        if (password.match(/[a-z]/)) {\r\n            $(\"li.lcase\").addClass(\"complete\");\r\n        } else {\r\n            $(\"li.lcase\").removeClass(\"complete\");\r\n            isValid = false;\r\n        }\r\n\r\n        if (password.match(/[A-Z]/)) {\r\n            $(\"li.ucase\").addClass(\"complete\");\r\n        } else {\r\n            $(\"li.ucase\").removeClass(\"complete\");\r\n            isValid = false;\r\n        }\r\n\r\n        //if password has at least one number give 1 point\r\n        if (password.match(/\\d+/)) {\r\n            $(\"li.numbers\").addClass(\"complete\");\r\n        } else {\r\n            $(\"li.numbers\").removeClass(\"complete\");\r\n            isValid = false;\r\n        }\r\n\r\n        if (password.indexOf(' ') == -1) {\r\n            $(\"li.nospaces\").addClass(\"complete\");\r\n        } else {\r\n            $(\"li.nospaces\").removeClass(\"complete\");\r\n            isValid = false;\r\n        }\r\n\r\n        //if password has at least one special caracther give 1 point\r\n        if (password.match(/.[!,@,#,$,%,^,&,*,=,?,_,~,-,.,(,)]/)) {\r\n            $(\"li.punctuation\").addClass(\"complete\");\r\n        } else {\r\n            $(\"li.punctuation\").removeClass(\"complete\");\r\n            isValid = false;\r\n        }\r\n\r\n        return isValid;\r\n    }\r\n\r\n    window.setupTooltipsStyling = function () {\r\n        $(document).on('mouseover', '[title]', function (e) {\r\n            //$(this).qtip({\r\n            //    overwrite: false,\r\n            //    content: $(this).attr('title'),\r\n            //    show: {\r\n            //        event: e.type,\r\n            //        ready: true\r\n            //    },\r\n            //    position: {\r\n            //        my: \"bottom right\",\r\n            //        at: \"top right\"\r\n            //    },\r\n            //    style: {\r\n            //        classes: 'qtip-dark qtip-shadow qtip-rounded'\r\n            //    },\r\n            //    events: {\r\n            //        show: function (event, api) {\r\n            //            var $el = $(api.elements.target[0]);\r\n            //            $el.qtip('option', 'position.my', ($el.data('tooltip-my') === undefined) ? 'bottom right' : $el.data('tooltip-my'));\r\n            //            $el.qtip('option', 'position.at', ($el.data('tooltip-at') === undefined) ? 'top right' : $el.data('tooltip-at'));\r\n            //        }\r\n            //    }\r\n            //}, e);\r\n            $(this).attr('oldtitle', $(this).attr('title'));\r\n            $(this).removeAttr('title');\r\n        });\r\n    };\r\n\r\n    function setupLocationNag() {\r\n        if ($(\"#popupModal\").length) {\r\n            $(\"#popupModal\").on(\"hidden.bs.modal\", function () {\r\n                RequestLocation();\r\n            });\r\n        }\r\n        else {\r\n            RequestLocation();\r\n        }\r\n    }\r\n\r\n    function RequestLocation(destUrl, locationPrefix, wherePrefix, locationId, locationName) {\r\n        var location = {};\r\n        location.DestinationUrl = destUrl;\r\n        location.LocationUrlPrefix = locationPrefix;\r\n        location.WhereUrlPrefix = wherePrefix;\r\n        location.Council = null;\r\n        location.ID = locationId;\r\n        location.Name = locationName;\r\n\r\n        if (location.ID > 0 || location.Name) {\r\n            // Pass through here when the user clicked on the Search button and has supplied a location\r\n            gotoLocation(location);\r\n            return;\r\n        }\r\n\r\n        setPanelContents(\"None\", location);\r\n\r\n        var offerHelp = getCookie(\"Mcdiary.LocationNag\");\r\n        if (offerHelp === \"Declined\") {\r\n            // Pass through here when the user has said No Thanks\r\n            if (location.DestinationUrl && location.DestinationUrl !== \"\") {\r\n                window.location.href = location.DestinationUrl;\r\n            }\r\n            hideLocationPanel();\r\n            return;\r\n        }\r\n\r\n        location = GetLocationCookie(location);\r\n        if (location.Council != null) {\r\n            // Show the user where we think they previously searched\r\n            setPanelContents(\"Previous\", location);\r\n        }\r\n        else {\r\n            RequestBrowserLocation(location);\r\n        }\r\n\r\n        showLocationPanel();\r\n\r\n        $(\"#btn-no-thanks\").off(\"click\").on(\"click\", function (e) {\r\n            e.preventDefault();\r\n            setCookie(\"Mcdiary.LocationNag\", \"Declined\");\r\n            if (location && location.DestinationUrl && location.DestinationUrl !== \"\") {\r\n                window.location.href = location.DestinationUrl;\r\n            }\r\n            hideLocationPanel();\r\n        });\r\n\r\n        // When a location is selected from autocomplete, adjust council properties and update cookie\r\n        $(\"#location-request\").on(\"typeahead:selected\", function (obj, datum) {\r\n            $.getJSON(window.AppSettings.ApiUrl + \"/api/v1/system/localities/id/\" + datum.LocalityID,\r\n                function (data) {\r\n                    if (data) {\r\n                        location.ID = datum.LocalityID;\r\n                        location.Name = data.Name + \" \" + data.Postcode;\r\n                        location.Council = {\r\n                            CouncilRegionID: data.CouncilRegionID,\r\n                            DisplayName: data.CouncilDisplayName,\r\n                            Url: data.CouncilURL\r\n                        };\r\n\r\n                        SetLocationCookie(location);\r\n                    } else {\r\n                        Alert(\"<p>We were unable to successfully determine the location you wish to search in. Please be more specific with your location or select an item from the list.</p>\", \"\");\r\n                    }\r\n                }\r\n            );\r\n        });\r\n    }\r\n\r\n    function Alert(text, title, okCallback, okLabel) {\r\n        title = title || \"Alert\";\r\n        okLabel = okLabel || \"OK\";\r\n        var id = 'autoAlertModal';\r\n        $(\"body\").remove(\"#\" + id);\r\n        var modal = $('\\\r\n                <div id=' + id + ' class=\"modal fade\" tabindex=\"-1\" role=\"dialog\"> \\\r\n                    <div class=\"modal-dialog\" role=\"document\"> \\\r\n                        <div class=\"modal-content\"> \\\r\n                            <form method=\"post\" action=\"\"> \\\r\n                                <div class=\"modal-header\"> \\\r\n                                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button> \\\r\n                                    <h4 class=\"modal-title\">' + title + '</h4> \\\r\n                                </div> \\\r\n                                <div class=\"modal-body\">' + text + '</div> \\\r\n                                <div class=\"modal-footer\"> \\\r\n                                    <button type=\"button\" class=\"btn btn-default modal-ok\" data-dismiss=\"modal\">' + okLabel + '</button> \\\r\n                                </div> \\\r\n                            </form> \\\r\n                        </div> \\\r\n                    </div> \\\r\n                </div>');\r\n\r\n        var hadAction = false;\r\n\r\n        modal.on(\"click\", \".modal-ok\", function (e) {\r\n            e.preventDefault();\r\n            hadAction = true;\r\n            if (okCallback) okCallback();\r\n        });\r\n\r\n        modal.on('hidden.bs.modal', function () {\r\n            modal.remove();\r\n\r\n            if (!hadAction) {\r\n                hadAction = true;\r\n                if (okCallback) okCallback();\r\n            }\r\n        });\r\n\r\n        modal.modal('show');\r\n    }\r\n\r\n    function gotoLocation(location) {\r\n        if (location.ID && location.ID !== 0) {\r\n            if (!location.Name) {\r\n                $.getJSON(window.AppSettings.ApiUrl + \"/api/v1/system/localities/id/\" + location.ID,\r\n                    function (data) {\r\n                        if (data) {\r\n                            location.Name = data.Name + \" \" + data.Postcode;\r\n                            location.Council = {\r\n                                CouncilRegionID: data.CouncilRegionID,\r\n                                DisplayName: data.CouncilDisplayName,\r\n                                Url: data.CouncilURL\r\n                            };\r\n                            checkCouncilandProceed(location);\r\n                        } else {\r\n                            Alert(\"<p>We were unable to successfully determine the location you wish to search in. Please be more specific with your location or select an item from the list.</p>\", \"\");\r\n                        }\r\n                    }\r\n                );\r\n            } else {\r\n                checkCouncilandProceed(location);\r\n            }\r\n        } else {\r\n            if (location.Name) {\r\n                $.ajax({\r\n                    type: \"POST\",\r\n                    url: window.AppSettings.ApiUrl + \"/api/v1/system/localities/search\",\r\n                    data: JSON.stringify({ SearchTerm: location.Name }),\r\n                    contentType: \"application/json; charset=utf-8\",\r\n                    dataType: \"json\",\r\n                    success: function (data) {\r\n                        if (data) {\r\n                            location.ID = data.LocalityID;\r\n                            location.Name = data.Name + \" \" + data.Postcode;\r\n                            location.Council = {\r\n                                CouncilRegionID: data.CouncilRegionID,\r\n                                DisplayName: data.CouncilDisplayName,\r\n                                Url: data.CouncilURL\r\n                            };\r\n                            checkCouncilandProceed(location);\r\n                        } else {\r\n                            Alert(\"<p>We were unable to successfully determine the location you wish to search in. Please be more specific with your location or select an item from the list.</p>\", \"\");\r\n                        }\r\n                    }\r\n                });\r\n            } else {\r\n                Alert(\"<p>The directory works best when we have a location to search in. Please specify a location.</p>\", \"\");\r\n            }\r\n        }\r\n    }\r\n\r\n    function checkCouncilandProceed(location) {\r\n        if (!location.Council || location.Council.CouncilRegionID == 0) {\r\n            $.getJSON(window.AppSettings.ApiUrl + \"/api/v1/system/councils/locality/\" + location.ID,\r\n                function (data) {\r\n                    if (data && data.Loaded) {\r\n                        location.Council = data;\r\n                        location.DestinationUrl = location.DestinationUrl || data.Url;\r\n                        SetLocationCookie(location);\r\n                        window.location.href = location.DestinationUrl;\r\n                    } else {\r\n                        Alert(\"<p>We were unable to successfully determine the location you wish to search in. Please be more specific with your location or select an item from the list.</p>\", \"\");\r\n                    }\r\n                }\r\n            );\r\n            return;\r\n        }\r\n        location.DestinationUrl = location.DestinationUrl || location.Council.Url;\r\n        SetLocationCookie(location);\r\n        window.location.href = location.DestinationUrl;\r\n    }\r\n\r\n    function showLocationPanel() {\r\n        $(\"#location-request-blind\").show();\r\n        $(\"#location-request-panel\").slideDown(\"slow\", function () { $(\"#location-request\").focus() });\r\n    }\r\n\r\n    function hideLocationPanel() {\r\n        $(\"#location-request-panel\").slideUp(\"slow\");\r\n        $(\"#location-request-blind\").hide();\r\n    }\r\n\r\n    function RequestBrowserLocation(location) {\r\n        if (window.navigator.geolocation) {\r\n            navigator.geolocation.getCurrentPosition(function (position) {\r\n                findCouncilandLocation(position, location);\r\n            }, function (error) {\r\n                console.log(\"Geolocation Error: \", error)\r\n            }, { enableHighAccuracy: true });\r\n        }\r\n    }\r\n    \r\n    function SetLocationCookie(location) {\r\n        setCookie(\"Mcdiary.Location\", \"Council:\" + JSON.stringify(location.Council) + \"|ID:\" + location.ID + \"|Name:\" + location.Name, 365);\r\n    }\r\n\r\n    function GetLocationCookie(location) {\r\n        var cookie = getCookie(\"Mcdiary.Location\");\r\n        var valid = true;\r\n        var council, id, name;\r\n        if (cookie) {\r\n            var parts = cookie.split('|');\r\n            for (var i = 0; i < parts.length; i++) {\r\n                if (parts[i].substr(0, 8) === \"Council:\") {\r\n                    try {\r\n                        council = JSON.parse(parts[i].substr(8));\r\n                        if ($.isEmptyObject(council)) {\r\n                            valid = false;\r\n                        }\r\n                    } catch (e) {\r\n                        valid = false;\r\n                    }\r\n                } else if (parts[i].substr(0, 3) === \"ID:\") {\r\n                    id = parseInt(parts[i].substr(3));\r\n                    if (isNaN(parseInt(id))) {\r\n                        valid = false;\r\n                    }\r\n                } else if (parts[i].substr(0, 5) === \"Name:\") {\r\n                    name = parts[i].substr(5);\r\n                }\r\n            }\r\n\r\n            if (valid && typeof council !== \"undefined\" && typeof id !== \"undefined\" && typeof name !== \"undefined\") {\r\n                location.Council = council;\r\n                location.ID = id;\r\n                location.Name = name;\r\n            }\r\n            else {\r\n                setCookie(\"Mcdiary.Location\", {}, -1);\r\n            }\r\n        }\r\n\r\n        return location;\r\n    }\r\n\r\n    function setPanelContents(content, location) {\r\n\r\n        $(\".locality-id\").val(location.ID);\r\n        $(\"#location-request\").typeahead(\"val\", location.Name);\r\n\r\n        switch (content) {\r\n            case \"None\":\r\n                $(\"#location-request-panel .inner .blurb\").html(\"<p>Want better results? <br /><strong>Tell us your location to refine your search</strong> <br />to help us find listings near you?</p>\");\r\n                break;\r\n\r\n            case \"Previous\":\r\n                $(\"#location-request-panel .inner .blurb\").html(\"<p>Previously you searched near <span>\" + location.Name + \"</span><br /><strong>Would you like to refine your search</strong><br />to listings in <span>\" + location.Council.DisplayName + \"</span>?</p>\");\r\n                break;\r\n\r\n            case \"Located\":\r\n                $(\"#location-request-panel .inner .blurb\").html(\"<p>It looks like you're near <span>\" + location.Name + \"</span><br /><strong>Would you like to refine your search</strong><br />to listings in <span>\" + location.Council.DisplayName + \"</span>?</p>\");\r\n                break;\r\n        }\r\n\r\n        $(\"#btn-go-location\").off(\"click\").on(\"click\", function (e) {\r\n            e.preventDefault();\r\n            location.ID = parseInt($(\"#hfLocationRequestId\").val());\r\n            location.Name = $(\"#location-request\").val();\r\n\r\n            if (location.Name === \"\") {\r\n                Alert(\"<p>The directory works best when we have a location to search in. Please specify a location.</p>\", \"\");\r\n                return;\r\n            }\r\n\r\n            gotoLocation(location);\r\n        });\r\n    }\r\n\r\n    function findCouncilLocation(position) {\r\n        var address = $(\"#autocomplete-location-new\").val();\r\n        var path = \"/SearchRegion?lat=\" + position.coords.latitude + \"&lng=\" + position.coords.longitude + \"&address=\" + address;\r\n\r\n        $.ajax({\r\n            url: path,\r\n            type: \"POST\",\r\n            success: function (response) {\r\n                window.location.href = window.location.origin + '/' + response;\r\n            }\r\n        });\r\n    }\r\n\r\n    function findCouncilandLocationNewHome(position) {\r\n        var geocoder = new google.maps.Geocoder();\r\n        var latlng = {\r\n            lat: parseFloat(position.coords.latitude),\r\n            lng: parseFloat(position.coords.longitude),\r\n        };\r\n        geocoder.geocode({ location: latlng }, function (results, status) {\r\n            if (status === \"OK\") {\r\n                if (results[0]) {\r\n                    $(\".autocomplete\").val(results[0].formatted_address);\r\n                }\r\n                else {\r\n                    window.alert(\"No results found\");\r\n                }\r\n            }\r\n            else {\r\n                window.alert(\"Geocoder failed due to: \" + status);\r\n            }\r\n        });\r\n    }\r\n\r\n    function findCouncilandLocation(position, location) {\r\n        var siteParam = \"\";\r\n        if (window.AppSettings.AffiliateSiteID) {\r\n            siteParam = \"?site=\" + window.AppSettings.AffiliateSiteID;\r\n        }\r\n\r\n        $.getJSON(window.AppSettings.ApiUrl + \"/api/v1/system/councils/\" + position.coords.latitude + \"/\" + position.coords.longitude + siteParam,\r\n            function (data) {\r\n                if (data.CouncilRegionID && data.CouncilRegionID > 0) {\r\n                    location.Council = data;\r\n                    findLocation(position, location);\r\n                }\r\n            }\r\n        );\r\n    }\r\n\r\n    function findLocation(position, location) {\r\n        $.getJSON(window.AppSettings.ApiUrl + \"/api/v1/system/localities/\" + position.coords.latitude + \"/\" + position.coords.longitude,\r\n            function (data) {\r\n                if ((data.LocalityID || 0) > 0 || (data.Name || \"\") !== \"\") {\r\n                    location.ID = data.LocalityID;\r\n                    location.Name = data.Name;\r\n                    setPanelContents(\"Located\", location);\r\n                }\r\n            }\r\n        );\r\n    }\r\n\r\n    function locationTypeahead(fieldName, locations) {\r\n        $(fieldName).typeahead({\r\n            hint: true,\r\n            minLength: 2,\r\n            highlight: true\r\n        }, {\r\n            name: \"locations\",\r\n            displayKey: \"Name\",\r\n            source: locations.ttAdapter(),\r\n            templates: {\r\n                suggestion: function (d) {\r\n                    return \"<p class='needsclick'>\" + d.Name + \"</p>\";\r\n                }\r\n            }\r\n        });\r\n        $(fieldName)\r\n            .on(\"typeahead:selected\", function (obj, datum) {\r\n                $(\".locality-id\", $(this).closest(\".twitter-typeahead\").parent()).val(datum.LocalityID);\r\n            }).on(\"typeahead:autocompleted\", function (obj, datum) {\r\n                $(\".locality-id\", $(this).closest(\".twitter-typeahead\").parent()).val(datum.LocalityID);\r\n            }).on(\"typeahead:asyncrequest\", function () {\r\n                $(\".locality-id\", $(this).closest(\".twitter-typeahead\").parent()).val(0);\r\n                $(this).addClass(\"spinner\");\r\n            }).on(\"typeahead:startupdate\", function () {\r\n                $(\".locality-id\", $(this).closest(\".twitter-typeahead\").parent()).val(0);\r\n                $(this).addClass(\"spinner\");\r\n            }).on(\"typeahead:datasetupdated\", function () {\r\n                $(this).removeClass(\"spinner\");\r\n                if (!$(this).val().length) {\r\n                    $(\".locality-id\", $(this).closest(\".twitter-typeahead\").parent()).val(0);\r\n                }\r\n            });\r\n    }\r\n\r\n    return {\r\n        InitPage: function () {\r\n            _this = this;\r\n\r\n            $.ajaxSetup({\r\n                headers: { 'Authorization': \"Basic \" + window.AppSettings.ApiToken }\r\n            });\r\n\r\n            // Placeholder support for IE\r\n            $('input').placeholder();\r\n\r\n            var previouslyFocused;\r\n            $(\".modal\").on(\"show.bs.modal\", function () {\r\n                previouslyFocused = document.activeElement;\r\n            });\r\n\r\n            $(\".modal\").on(\"shown.bs.modal\", function () {\r\n                // Make first input field in a modal get focus\r\n                var $field = $(\"input[type=text],textarea,select\", this).filter(\":visible:enabled:not([readonly]):first\");\r\n                if ($field != null) {\r\n                    $field.focus();\r\n                }\r\n\r\n                $(this).attr(\"aria-hidden\", \"false\");\r\n\r\n                // Handle behaviour when user _could_ be tabbing out of modal... confusing for screen reader users\r\n                var $inputs = $(\"select, input, textarea, button, a, [tabinput='0']\", this).filter(\":visible:not([disabled]):not([readonly])\");\r\n                var $firstInput = $inputs.first();\r\n                var $lastInput = $inputs.last();\r\n\r\n                $lastInput.on(\"keydown\", function (e) {\r\n                    if (e.which === 9 && !e.shiftKey) {\r\n                        e.preventDefault();\r\n                        $firstInput.focus();\r\n                    }\r\n                });\r\n\r\n                $firstInput.on(\"keydown\", function (e) {\r\n                    if (e.which === 9 && e.shiftKey) {\r\n                        e.preventDefault();\r\n                        $lastInput.focus();\r\n                    }\r\n                });\r\n            });\r\n\r\n            $(\".modal\").on(\"hidden.bs.modal\", function () {\r\n                $(this).attr(\"aria-hidden\", \"true\");\r\n\r\n                // Restore focus to previous element\r\n                if (previouslyFocused) {\r\n                    $(previouslyFocused).focus();\r\n                }\r\n            });\r\n            $(\"#btn-cross\").off(\"click\").on(\"click\", function (e) {\r\n                e.preventDefault();\r\n                \r\n                hidebanner();\r\n            });\r\n\r\n            // Initialise apsects of the page\r\n            _this.InitTooltips();\r\n            _this.InitSearchButton();\r\n            _this.InitNavigation();\r\n            _this.InitSliders();\r\n            _this.InitPullout();\r\n            _this.InitTextSizeChange();\r\n\r\n            _this.ObfuscateEmails();\r\n            _this.InitMap();\r\n\r\n            _this.InitAutoComplete();\r\n            _this.InitCouncilSearch();\r\n\r\n            // Tooltips for all elements with a non-empty title attribute\r\n            setupTooltipsStyling();\r\n        },\r\n\r\n        ConfigureSettings: function (settings) {\r\n            window.AppSettings = settings;\r\n        },\r\n\r\n        InitValidation: function () {\r\n            $.validator.setDefaults({\r\n                errorClass: \"has-error\",\r\n                validClass: \"has-success\",\r\n                highlight: function (element, errorClass, validClass) {\r\n\r\n                    if (element.type === \"radio\") {\r\n                        this.findByName(element.name).addClass(errorClass).removeClass(validClass);\r\n                    } else {\r\n                        $(element).closest('.form-row').removeClass(validClass).addClass(errorClass);\r\n                        $(element).closest('.form-row').find('i.glyphicon.form-control-feedback').remove();\r\n                        $(element).closest('.form-row').append('<i class=\"glyphicon glyphicon-remove form-control-feedback\"></i>');\r\n                    }\r\n                },\r\n                unhighlight: function (element, errorClass, validClass) {\r\n                    if (element.type === \"radio\") {\r\n                        this.findByName(element.name).removeClass(errorClass).addClass(validClass);\r\n                    } else {\r\n                        $(element).closest('.form-row').removeClass(errorClass).addClass(validClass);\r\n                        $(element).closest('.form-row').find('i.glyphicon.form-control-feedback').remove();\r\n                        $(element).closest('.form-row').append('<i class=\"glyphicon glyphicon-ok form-control-feedback\"></i>');\r\n                    }\r\n                }\r\n            });\r\n\r\n            $.validator.addMethod(\r\n                \"usernameAvailable\",\r\n                function (value, element) {\r\n                    var checkUrl = \"/api/Users/IsUsernameAvailable\";\r\n                    return $.validator.methods.remote.call(this, value, element, { url: checkUrl });\r\n                }, \"User name not available\"\r\n            );\r\n\r\n            $.validator.addMethod(\r\n                \"mobileAvailable\",\r\n                function (value, element) {\r\n                    var checkUrl = \"/api/Users/IsMobileAvailable\";\r\n                    return $.validator.methods.remote.call(this, value, element, { url: checkUrl });\r\n                }, \"That Mobile number is already in use\"\r\n            );\r\n\r\n            $.validator.addMethod(\r\n                \"emailAvailable\",\r\n                function (value, element) {\r\n                    var checkUrl = \"/api/Users/IsEmailAvailable\";\r\n                    return $.validator.methods.remote.call(this, value, element, { url: checkUrl });\r\n                }, \"Email address already in use\"\r\n            );\r\n\r\n            $.validator.addMethod(\r\n                \"mcdUsername\",\r\n                function (value, element) {\r\n                    var re = new RegExp(/^[A-Za-z0-9_@\\.]{5,}$/);\r\n                    return this.optional(element) || value.match(re);\r\n                },\r\n                \"Please enter a valid username.\"\r\n            );\r\n\r\n            $.validator.addMethod(\"ausPhone\", function (value, element) {\r\n                var re = new RegExp(/^04\\d{8}\\s*$|^(04\\d{2}\\s\\d{3}\\s\\d{3})\\s*$|^(\\d{2}\\s*\\d{4}\\s*\\d{4})\\s*$|^(\\(*\\d{2}\\)\\s*\\d{4}\\s*\\d{4})\\s*$|^13(\\s*\\d{2}){2,3}$|^(1300|1800)\\s*\\d{3}\\s*\\d{3}\\s*$/);\r\n                return this.optional(element) || value.match(re);\r\n            }, \"Please enter a valid Australian phone number.\");\r\n\r\n            $.validator.addMethod(\"ausMobile\", function (value, element) {\r\n                var trimmedValue = value.replace(/[^\\d\\+]/gi, '');\r\n                var re = new RegExp(/^\\({0,1}((0|\\+61)(4)){0,1}\\){0,1}(\\ |-){0,1}[0-9]{2}(\\ |-){0,1}[0-9]{2}(\\ |-){0,1}[0-9]{1}(\\ |-){0,1}[0-9]{3}$/);\r\n                return this.optional(element) || trimmedValue.match(re);\r\n            }, \"Please enter a valid Australian mobile number.\");\r\n\r\n            $.validator.addMethod(\"ausDate\", function (value, element) {\r\n                return Date.parseExact(value, \"d/M/yyyy\");\r\n            }, \"Please enter a value date. eg. d/M/yyyy\");\r\n\r\n            $.validator.addMethod(\"regex\", function (value, element, regexp) {\r\n                var re = new RegExp(regexp);\r\n                return this.optional(element) || value.match(re);\r\n            }, \"Please check your input.\");\r\n\r\n            $.validator.addMethod(\"simpleUrl\", function (value, element) {\r\n                // Customised version of the url test to make the prefix optional\r\n                return this.optional(element) || /^((https?|ftp):\\/\\/)?(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\r\n            }, \"Please enter a valid URL.\");\r\n\r\n            $(\".ausMobile\").on(\"blur\", function () {\r\n                var mobileRe = new RegExp(/^04\\d{8}$/);\r\n                var trimValue = $(this).val();\r\n\r\n                trimValue = trimValue.replace(/[^\\d\\+]/gi, '');\r\n\r\n                if (trimValue.startsWith(\"+61\")) {\r\n                    trimValue = trimValue.replace(\"+61\", \"0\");\r\n                }\r\n\r\n                if (trimValue.match(mobileRe)) {\r\n                    newValue = trimValue.substr(0, 4) + \" \" + trimValue.substr(4, 3) + \" \" + trimValue.substr(7, 3);\r\n                    $(this).val(newValue);\r\n                }\r\n            });\r\n\r\n        },\r\n\r\n        InitTooltips: function () {\r\n            // Create tooltips\r\n            $('[data-toggle=\"tooltip\"]').each(function () {\r\n                $(this).tooltip({\r\n                    trigger: \"hover focus\"\r\n                });\r\n                $(this).on(\"click touchend\", function (e) {\r\n                    e.preventDefault();\r\n                });\r\n            });\r\n        },\r\n\r\n        InitSearchButton: function () {\r\n            $(\"#hfLocationId\").val(arguments[0] || 0);\r\n            $('#autocomplete-location').val(arguments[1] || '');\r\n            //if (document.getElementById('autocomplete-location-new')) {\r\n            //    InitAutocompleteSearch('#autocomplete-location-new');\r\n            //}\r\n            if (document.getElementById('SearchCriteria_WhereText')) {\r\n                InitAutocompleteSearchCouncil('#SearchCriteria_WhereText')\r\n            }\r\n            $(\"#btn-search\").off('click touchend');\r\n            $(\"#btn-search\").on('click touchend', function (e) {\r\n                e.preventDefault();\r\n                var categoryId = $(\"#hfCategoryId\").val() || 0;\r\n                var serviceId = $(\"#hfServiceId\").val() || 0;\r\n                var locationId = $(\"#hfLocationId\").val() || 0;\r\n                var rad = $(\".ddl-radius\").val() || 50;\r\n                var txt = $('#autocomplete-category').val();\r\n                var where = $('#autocomplete-location').val();\r\n                var councilId = $(\"#hfCouncilId\").val() || 0;\r\n                if ($('#autocomplete-location-new').val() == \"\") {\r\n                    state = \"\";\r\n                }\r\n\r\n                var url = '/Search/Directory?what=' + encodeURIComponent(txt) +\r\n                    '&where=' + encodeURIComponent(where) +\r\n                    '&service=' + serviceId +\r\n                    '&category=' + categoryId +\r\n                    '&location=' + locationId +\r\n                    '&radius=' + rad +\r\n                    '&council=' + councilId;\r\n\r\n                window.location = url;\r\n            });\r\n\r\n            $(\".advanced-search-btn\").on('click touchend', function (e) {\r\n                e.preventDefault();\r\n                var categoryId = $(\"#hfCategoryId\").val() || 0;\r\n                var serviceId = $(\"#hfServiceId\").val() || 0;\r\n                var locationId = $(\"#hfLocationId\").val() || 0;\r\n                var rad = $(\".ddl-radius\").val() || 50;\r\n                var txt = $('#autocomplete-category').val() || \"\";\r\n                var where = $('#autocomplete-location').val() || \"\";\r\n                var councilId = $(\"#hfCouncilId\").val() || 0;\r\n\r\n                var tempUrl = '/Search/Advanced' + location.search;\r\n                \r\n                window.location = tempUrl;\r\n            });\r\n        },\r\n\r\n        IsValidPassword: function (password) {\r\n            return isValidPassword(password);\r\n        },\r\n\r\n        InitNavigation: function () {\r\n            // Bind toggle events for navigation pullouts\r\n            $(\".menu-button\").on(\"click touchend\", function () {\r\n                $(\".wrapper:eq(0)\").toggleClass(\"reveal-right\");\r\n                document.activeElement.blur();\r\n                return false;\r\n            });\r\n\r\n            // Close the navigation pullouts under certain conditions\r\n            // Track when the touch move event is detected\r\n            var touchMoved = false;\r\n            $(document).on(\"touchmove\", function (e) {\r\n                touchMoved = true;\r\n            });\r\n            $(document).on(\"click touchend\", function (e) {\r\n                // If the touchend event is detected, but the touchmoved flag is true, then don't try to close the menus\r\n                // This is to allow users to scroll down the browser in order to navigate a long menu, without it unexpectedly closing the menu\r\n                if (e.type == \"touchend\" && touchMoved)\r\n                    return;\r\n\r\n                // Close by default\r\n                var closePullouts = true;\r\n\r\n                // Except when a touch or click is detected in the nav panels\r\n                if ($(e.target).hasClass(\"mobile-menu\") || $(e.target).parents(\".mobile-menu\").length > 0)\r\n                    closePullouts = false;\r\n\r\n                if (closePullouts) {\r\n                    $(\".wrapper\").removeClass(\"reveal-right\");\r\n                }\r\n            });\r\n        },\r\n\r\n        GeolocateCouncil: function () {\r\n            if (window.navigator.geolocation) {\r\n                navigator.geolocation.getCurrentPosition(findCouncilandLocationNewHome, function (posError) {\r\n                    handleNoGeolocation(\"We were unable to get your location from your browser for the following reason: <em>\" + posError.message + \"</em>\");\r\n                });\r\n            } else {\r\n                handleNoGeolocation(\"Your browser was unable to provide us with your location details.\");\r\n            }\r\n        },\r\n\r\n        InitSliders: function () {\r\n            // Initialise any sliders with the 'slickify' class using its defined settings\r\n            $('.slickify').each(function () {\r\n                $(this).slick({\r\n                    slidesToShow: $(this).attr(\"data-slick-slidesToShow\"),\r\n                    slide: $(this).attr(\"data-slick-slideElement\"),\r\n                    autoplay: $(this).attr(\"data-slick-autoplay\") == \"true\",\r\n                    autoplaySpeed: $(this).attr(\"data-slick-autoplaySpeed\")\r\n                });\r\n            });\r\n        },\r\n\r\n        InitPullout: function () {\r\n            // Behaviour for the search panel pullout\r\n            $(\".pullout-button\").on(\"click touchend\", function (e) {\r\n                e.preventDefault();\r\n                $(this).next(\".pullout-content\").toggleClass(\"pullout-content-shown\");\r\n                $(this).toggleClass(\"pullout-button-active\");\r\n\r\n                var shown = $(this).next(\".pullout-content\").is(\".pullout-content-shown\");\r\n\r\n                $(this).next(\".pullout-content\").attr(\"tabindex\", shown ? \"0\" : \"-1\");\r\n                $(\"#btnSupportModal\").attr(\"tabindex\", shown ? \"0\" : \"-1\");\r\n            });\r\n\r\n            $(\"#btnSupportModal\").off(\"click touchend\").on(\"click touched\", function(e) {\r\n                $(\"#supportModal\").modal();\r\n                $(\"#website-help .pullout-content\").removeClass(\"pullout-content-shown\");\r\n                $(\"#website-help .pullout-button\").removeClass(\"pullout-button-active\");\r\n            });\r\n        },\r\n\r\n        InitTextSizeChange: function () {\r\n            var ModuleReference = this;\r\n            $(\".text-larger\").on(\"click touchend\", function (e) {\r\n                e.preventDefault();\r\n                var increment = 10;\r\n                ModuleReference.ChangeTextSize(increment);\r\n            });\r\n            $(\".text-smaller\").on(\"click touchend\", function (e) {\r\n                e.preventDefault();\r\n                var increment = -10;\r\n                ModuleReference.ChangeTextSize(increment);\r\n            });\r\n            $(\".textSizeIndicator\").on(\"click touchend\", function (e) {\r\n                e.preventDefault();\r\n                ModuleReference.ResetTextSize();\r\n            }).on(\"mouseover\", function (e) {\r\n                e.preventDefault();\r\n                $(\".textSizeIndicator\").text('Reset');\r\n            }).on(\"mouseout\", function (e) {\r\n                e.preventDefault();\r\n                if (textSize === 0) textSize = 100;\r\n                $(\".textSizeIndicator\").text(textSize + '%');\r\n            });\r\n            if (typeof (Storage) !== \"undefined\") {\r\n                // Check for previous changes to text size\r\n                var incrementCount = parseInt(localStorage.getItem(\"incrementCount\")) || 0;\r\n                var i;\r\n\r\n                if (incrementCount > 0) {\r\n                    // Increase font size until it matches previous setting\r\n                    for (i = 0; i < incrementCount; i++) {\r\n                        ModuleReference.ChangeTextSize(10);\r\n                    }\r\n                }\r\n                else if (incrementCount < 0) {\r\n                    // Decrease font size until it matches previous setting\r\n                    for (i = 0; i > incrementCount; i--) {\r\n                        ModuleReference.ChangeTextSize(-10);\r\n                    }\r\n                }\r\n            }\r\n        },\r\n\r\n        ResetTextSize: function () {\r\n            if (typeof (Storage) !== \"undefined\") {\r\n                localStorage.setItem(\"incrementCount\", 0);\r\n            }\r\n            var ModuleReference = this;\r\n            textSize = 100;\r\n            ModuleReference.ChangeTextSize(0);\r\n        },\r\n\r\n        SaveTextSize: function (size) {\r\n            if (typeof (Storage) !== \"undefined\") {\r\n                localStorage.setItem(\"incrementCount\", parseInt(size) || 0);\r\n            }\r\n        },\r\n\r\n        ChangeTextSize: function (increment) {\r\n            textSize = textSize === 0 ? (100 + increment) : (textSize + increment);\r\n            var ModuleReference = this;\r\n            ModuleReference.SaveTextSize((textSize - 100) / 10);\r\n            $(\".section, .pullout-content\").each(function () {\r\n                $(this).css({ \"font-size\": textSize + \"%\" });\r\n            });\r\n            $(\".textSizeIndicator\").text(textSize + '%');\r\n        },\r\n\r\n        ObfuscateEmails: function () {\r\n            var elementsToObfuscate = $(\".email-obfuscate\");\r\n            elementsToObfuscate.each(function () {\r\n                var emailStart = $(this).data(\"email-start\");\r\n                var emailAt = $(this).data(\"email-at\");\r\n                var setText = Boolean($(this).data(\"set-text\"));\r\n\r\n                $(this).attr(\"href\", \"mailto:\" + emailStart + \"@\" + emailAt);\r\n                if (setText)\r\n                    $(this).text(emailStart + \"@\" + emailAt);\r\n            });\r\n        },\r\n\r\n        InitMap: function () {\r\n            $(\".view-toggles .btn-map\").on('click touchend', function () {\r\n                ShowCategoriesMap();\r\n            });\r\n            function ShowCategoriesMap() {\r\n                var mapContainer = $(\"#search-map\");\r\n\r\n                // Check that the map isn't already initialised\r\n                if (mapContainer.length !== 0 && !mapContainer[0].firstChild) {\r\n                    var location = new google.maps.LatLng(-27.4679, 153.0278);\r\n\r\n                    var MY_MAPTYPE_ID = 'custom_style';\r\n\r\n                    var featureOpts = [\r\n                    { \"featureType\": \"water\", \"stylers\": [{ \"saturation\": -63 }] },\r\n                    { \"featureType\": \"road\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"administrative.province\", \"elementType\": \"labels.text\", \"stylers\": [{ \"hue\": \"#dd00ff\" }, { \"weight\": 1.2 }] },\r\n                    { \"featureType\": \"poi.government\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"poi.business\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"poi.government\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"poi.medical\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"poi.place_of_worship\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"poi.school\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"poi.sports_complex\", \"stylers\": [{ \"saturation\": -100 }] },\r\n                    { \"featureType\": \"water\", \"stylers\": [{ \"saturation\": 44 }] },\r\n                    { \"featureType\": \"administrative.locality\" }\r\n                    ];\r\n\r\n                    var mapOptions = {\r\n                        zoom: 12,\r\n                        center: location,\r\n                        mapTypeControlOptions: {\r\n                            mapTypeIds: [google.maps.MapTypeId.ROADMAP, MY_MAPTYPE_ID]\r\n                        },\r\n                        mapTypeId: MY_MAPTYPE_ID\r\n                    };\r\n\r\n                    window.MapView = new google.maps.Map(mapContainer[0], mapOptions);\r\n\r\n                    var styledMapOptions = { name: 'Custom Style' };\r\n\r\n                    var customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions);\r\n                    window.MapView.mapTypes.set(MY_MAPTYPE_ID, customMapType);\r\n                }\r\n                else {\r\n                    // If the map has already been loaded, trigger a resize event so that the map loads correctly.\r\n                    // This prevents a bug which caused the map to load incorrectly after the map had loaded then the browser size is changed.\r\n                    google.maps.event.trigger(window.MapView, 'resize');\r\n                }\r\n            }\r\n        },\r\n\r\n        InitAutoComplete: function () {\r\n            var siteParam = \"\";\r\n            if (window.AppSettings.AffiliateSiteID) {\r\n                siteParam = \"?site=\" + window.AppSettings.AffiliateSiteID;\r\n            }\r\n\r\n            var q = \"\";\r\n\r\n            // This is an example of how the autocomplete functionality could be acheived using an external json file. \r\n            // For documentation on other methods, see this page: http://twitter.github.io/typeahead.js/examples/\r\n            var locations = new Bloodhound({\r\n                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),\r\n                queryTokenizer: Bloodhound.tokenizers.whitespace,\r\n                limit: 10,\r\n                remote: {\r\n                    url: window.AppSettings.ApiUrl + \"/api/v1/system/localities/search\",\r\n                    replace: function (url, query) {\r\n                        q = query;\r\n                        // Change the url target url so it triggers\r\n                        url = url + '#' + encodeURIComponent(q);\r\n                        return url;\r\n                    },\r\n                    ajax: {\r\n                        beforeSend: function (ev, settings) {\r\n                            settings.data = JSON.stringify({ SearchTerm: q, Site: siteParam });\r\n                            showSpinner('#autocomplete-location');\r\n                        },\r\n                        complete: function () { removeSpinner('#autocomplete-location'); },\r\n                        dataType: \"json\",\r\n                        contentType: \"application/json; charset=utf-8\",\r\n                        type: \"POST\"\r\n                    },\r\n                    filter: function (results) {\r\n                        if (results.success) {\r\n                            return $.map(results.data, function (result) {\r\n                                return {\r\n                                    Name: result.Name,\r\n                                    LocalityID: result.LocalityID\r\n                                };\r\n                            });\r\n                        }\r\n\r\n                        return null;\r\n                    }\r\n                }\r\n            });\r\n\r\n            var councils = new Bloodhound({\r\n                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('DisplayName'),\r\n                queryTokenizer: Bloodhound.tokenizers.whitespace,\r\n                limit: 10,\r\n                remote: {\r\n                    url: window.AppSettings.ApiUrl + \"/api/v1/system/councils/search/%QUERY\" + siteParam,\r\n                    ajax: {\r\n                        beforeSend: function () { showSpinner('#autocomplete-council, #autocomplete-council-mobile'); },\r\n                        complete: function () { removeSpinner('#autocomplete-council, #autocomplete-council-mobile'); }\r\n                    }\r\n                }\r\n            });\r\n\r\n            // kicks off the loading/processing of `local` and `prefetch`\r\n            locations.initialize();\r\n            councils.initialize();\r\n\r\n            // passing in `null` for the `options` arguments will result in the default\r\n            // options being used\r\n\r\n            // Locations\r\n            //$('.where-field').typeahead({\r\n            //    hint: true,\r\n            //    minLength: 2,\r\n            //    highlight: true\r\n            //}, {\r\n            //    name: 'locations',\r\n            //    displayKey: 'Name',\r\n            //    source: locations.ttAdapter(),\r\n            //    templates: {\r\n            //        suggestion: function (d) {\r\n            //            return \"<p class='needsclick'>\" + d.Name + \"</p>\";\r\n            //        }\r\n            //    }\r\n            //});\r\n\r\n            //$('.where-field').bind('typeahead:change', function () {\r\n            //    $(\"#SearchCriteria_LocationID\").val('0');\r\n            //    $(\"#SearchCriteria_CouncilID\").val('0');\r\n            //});\r\n            //$('.where-field').on('typeahead:selected typeahead:autocompleted', function (obj, datum, name) {\r\n            //    $(\"#SearchCriteria_LocationID\").val(datum.LocalityID);\r\n            //    $(\"#SearchCriteria_CouncilID\").val(datum.CouncilID);\r\n            //});\r\n\r\n            $(\".datepicker\").datetimepicker({\r\n                format: \"D/MM/YYYY\",\r\n                locale: \"en-AU\",\r\n                useCurrent: true,   \r\n                showTodayButton: true\r\n            });\r\n\r\n            $(\"#SearchCriteria_SearchFrom\").on(\"dp.change\", function (e) {\r\n                $(\"#SearchCriteria_SearchTo\").data(\"DateTimePicker\").minDate(e.date);\r\n            });\r\n            $(\"#SearchCriteria_SearchTo\").on(\"dp.change\", function (e) {\r\n                $('#SearchCriteria_SearchFrom').data(\"DateTimePicker\").maxDate(e.date);\r\n            });\r\n\r\n            // Locations\r\n            locationTypeahead(\".location-filter\", locations);\r\n            locationTypeahead(\"#location-request\", locations);\r\n\r\n            // Councils \r\n            $('#autocomplete-council, #autocomplete-council-mobile').typeahead({\r\n                hint: true,\r\n                minLength: 2,\r\n                highlight: true\r\n            }, {\r\n                name: 'councils',\r\n                displayKey: 'DisplayName',\r\n                source: councils.ttAdapter(),\r\n                templates: {\r\n                    suggestion: function (d) {\r\n                        return \"<p class='needsclick'>\" + d.DisplayName + \"</p>\";\r\n                    }\r\n                }\r\n            });\r\n            $('#autocomplete-council, #autocomplete-council-mobile').bind('typeahead:selected', function (obj, datum, name) {\r\n                $.ajax({\r\n                    url: \"/StoreSearchedModelInSession\",\r\n                    type: \"POST\",\r\n                    contentType: \"application/json\",\r\n                    dataType: \"json\",\r\n                    data: null,\r\n                    error: function (result) {\r\n                        console.log(\"fail: \", result);\r\n                    },\r\n                    success: function (result) {\r\n                        console.log(\"victory\")\r\n                    },\r\n                })\r\n                window.location = datum.Url;\r\n            });\r\n\r\n            // Search On Press Enter\r\n            $(document).ready(function () {\r\n                $('#autocomplete-location-new').bind(\"keypress\", function (e) {\r\n                    if (e.keyCode == 13) {\r\n                        return false;\r\n                    }\r\n                });\r\n            });  \r\n        },\r\n\r\n        InitCouncilSearch: function () {\r\n            $(\".council-trail\").on(\"click\", \".regionfilter\", function () {\r\n                $(\"#councilModal\").modal(\"show\");\r\n                $(\"#autocomplete-council\").focus();\r\n            });\r\n\r\n            var hideSelector = getCookie(\"hide-council-selector\");\r\n            $('#setCouncilHide').prop('checked', hideSelector !== 'true');\r\n\r\n            $(\"#setCouncilHide\").on(\"click\", function () {\r\n                setCookie(\"hide-council-selector\", !$(\"#setCouncilHide\").is(\":checked\"), 365);\r\n            });\r\n\r\n            $(\"#locateMeHome\").click(function (e) {\r\n                e.preventDefault();\r\n                PageSetup.GeolocateCouncil();\r\n                $(\"#councilModal\").modal('hide');\r\n                requestedLocation = true;\r\n            })\r\n\r\n            $(\"#getMyCouncil\").on(\"click\", function (e) {\r\n                navigator.geolocation.getCurrentPosition(findCouncilLocation, function (posError) {\r\n                    handleNoGeolocation(\"We were unable to get your location from your browser for the following reason: <i>\" + posError.message + \"</i>\");\r\n                });\r\n            });\r\n\r\n            $(\"#locateMe\").on(\"click\", function (e) {\r\n                e.preventDefault();\r\n                PageSetup.GeolocateCouncil();\r\n                $(\"#councilModal\").modal('hide');\r\n                requestedLocation = true;\r\n            });\r\n        },\r\n\r\n        SendMail: function () {\r\n\r\n            var email = { To: arguments[0], Subject: arguments[1], Body: arguments[2] };\r\n\r\n            $.ajax({\r\n                type: 'POST',\r\n                url: \"/api/Email/Send\",\r\n                data: JSON.stringify(email),\r\n                contentType: 'application/json; charset=utf-8',\r\n                dataType: 'json',\r\n                success: function (data) { alert(data); },\r\n                error: function () { alert('Failed'); }\r\n            });\r\n        },\r\n\r\n        InitSearchResultsBehavior: function () {\r\n            setupTooltipsStyling();\r\n\r\n            $(\"a.phone\").each(function () {\r\n                $(this).attr(\"href\", \"tel:\" + $(this).data(\"phone\")\r\n                    .replace(/ /g, \"\")\r\n                    .replace(/\\(/g, \"\")\r\n                    .replace(/\\)/g, \"\"));\r\n            });\r\n        },\r\n\r\n        SetCookie: function (cname, cvalue, exdays) {\r\n            setCookie(cname, cvalue, exdays);\r\n        },\r\n\r\n        GetCookie: function (cname) {\r\n            return getCookie(cname);\r\n        },\r\n\r\n        SetupLocationNag: function () {\r\n            setupLocationNag();\r\n        }\r\n    };\r\n\r\n})();\r\n\r\n\r\n"]}