{"version":3,"sources":["app-basic.js","au-fallback.js","au.js","au-helpers.js","au-navigation.js","au-cookies.js","au-design.js","au-basic.js","au-responsive.js","au-defaults.js","au-maps.js","au-init.js"],"names":["pressed","url","location","href","pres","replaceall","s","x","y","length","found","indexOf","substring","multipressed","xx","urlPattern","StartValue","allow","OK","i","elements","type","selectedIndex","options","value","toLowerCase","window","alert","AU","pageLang","cdn","version","bss","ready","addReadyFunction","fn","push","console","log","error","load","addLoadFunction","resize","addResizeFunction","scroll","addScrollFunction","navigation","helpers","getUnicodeKey","e","unicode","keyCode","charCode","rewriteLink","text","trim","replace","getQuerystring","key","default_","regex","RegExp","qs","exec","getInternetExplorerVersion","rv","navigator","userAgent","ua","re","parseFloat","$1","isMobileDevice","test","getXML","source","callback","jQuery","ajax","dataType","success","data","isElementInViewport","element","rect","getBoundingClientRect","top","left","bottom","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementPartlyInViewport","offsetTop","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","pageYOffset","pageXOffset","trimText","label","amount","end","validateEmail","email","componentToHex","c","hex","toString","rgbToHex","r","g","b","this","getPageContent","retrieveSelector","insertSelector","urlAllowed","protocolAndHost","protocol","host","insertElement","accentMap","é","ä","ö","á","ü","normalizeAccents","term","ret","charAt","menu","setClick","on","headerMenu","parents","hasClass","removeClass","addClass","setUtility","databox","init","alphabox","setBreadcrumb","bc","crumbs","crumbCutOff","eq","after","toggleClass","addExtraMenuItem","topLevelMenuItems","each","topLevelMenuItem","topLevelSubMenu","prepend","attr","setTopBar","topBarLinks","topBarContent","parent","responsive","state","NAME","topBarTimeout","setTimeout","show","css","hide","clearTimeout","preventDefault","not","toggle","selectedUM","search","val","focus","frontpage","setTargetGroups","buttons","groups","toggleGroup","group","btn","button","cookies","set","c_name","exdays","path","exdate","Date","setDate","getDate","c_value","encodeURI","toUTCString","cookie","get","c_start","c_end","decodeURI","alertElement","noAlertPeriod","strings","header","paragraph","alertCookies","replaceCookieTexts","createElement","setAttribute","innerHTML","globalFooter","querySelector","insertAdjacentElement","style","display","allowCookies","initCookieScript","cookieScriptId","head","cookieScriptManipulationCode","cookieScriptVersion","insertBefore","firstElementChild","addEventListener","accept","duration","byGUI","undefined","design","setFocusFieldIds","setBuildingLinks","elementToSearchSelector","elementToSearch","mapUrl","buildingPhrase","html","onCollapseOpen","onCollapseClose","setCollapse","openEvent","createEvent","initEvent","closeEvent","collapsibles","me","domElement","unbind","dispatchEvent","d","target","openCollapsibleFromHash","hash","scrollIntoView","grayscale","src","supportsCanvas","getContext","imageData","px","gray","canvas","context","img","Image","drawImage","getImageData","putImageData","toDataURL","err","setBannerElementsReady","hover","find","stop","animate","opacity","setBannerElementsLoad","setHero","hero","scrollTop","parseInt","setMagnificPopup","lightbox","rels","Object","keys","index","magnificPopup","gallery","enabled","modal","newsImgs","setTopWarning","topWarning","class","topWarningTextDa","topWarningTextEn","basic","ipure","flowbox","boxes","piechart","social","news","feeds","stateHistory","modes","PHONE","ID","MAX","TABLET","DESKTOP","detectDevice","Foundation","MediaQuery","current","setMarkup","markupRenderFunctions","runMarkupFunctions","utilityLinks","sectionHeader","pageNav","titleBar","menuTitle","leftMenu","tablesScroll","append","wrap","before","table","wasPhone","states","is","unwrap","edutables","tables","scriptLoaded","loadExternal","dg","AUDiagramme","componentsUrl","getScript","DEFAULT_util_staffportal_da","config","container","alphabet","link","stacked","background","color","overlay","DEFAULT_util_staffportal_en","DEFAULT_util_department_da","DEFAULT_util_department_en","DEFAULT_util_staffservice_da","title","description","links","noResultsAlphabet","noResultsSearch","noResultsUri","placeHolder","mode","DEFAULT_util_staffservice_en","DEFAULT_util_phdportal_da","DEFAULT_util_phdportal_en","DEFAULT_util_student_da","linkColor","DEFAULT_util_student_en","DEFAULT_staff_staffservice_da","DEFAULT_staff_staffservice_en","GOOGLE_MAPS_API_KEY","maps","loadGoogleMapsScript","shouldLoadGoogleMapsScript","shouldLoadGoogleMapsScriptAsync","loadGoogleMapsScriptAsync","scriptUrl","script","onload","onerror","event","appendChild","googleMapsScriptLoaded","googleMapsScriptCallback","CustomEvent","create","zoomLevel","center","scrollWheel","draggable","clickable","streetView","pco","zco","svco","mapOptions","zoom","scrollwheel","streetViewControl","mapTypeControlOptions","mapTypeIds","google","MapTypeId","ROADMAP","HYBRID","MapTypeControlStyle","DROPDOWN_MENU","position","ControlPosition","RIGHT_TOP","mapTypeId","panControlOptions","zoomControlOptions","streetViewControlOptions","map","Map","isNaN","setBounds","markers","bounds","LatLngBounds","j","extend","fitBounds","marker","add","point","markerIcon","markerDraggable","markerClickable","markerPanTo","markerClickZoom","markerClickZoomLevel","infoWindow","windowContent","id","Marker","icon","addListener","open","setContent","panTo","getPosition","getZoom","setZoom","trigger","route","destinationFrom","destinationTo","directionsDisplay","directionsService","calc","from","to","travelMode","waypointLocations","waypoints","stopover","request","origin","destination","response","status","DirectionsStatus","getMap","setMap","setDirections","createDirectionObjects","rendererOptions","DirectionsRenderer","panel","setPanel","geocodePersonAddress","address","centerMap","func","geocoder","geocode","results","GeocoderStatus","LatLng","geometry","lat","lng","markerDrag","markerClick","clickPanTo","clickZoom","clickZoomLevel","getDistanceBetweenPoints","point1","point2","spherical","computeDistanceBetween","convertFromLatLng","coord","Math","round","convertToLatLng","getCurrentDate","date","month","getMonth","currentDate","getFullYear","getCurrentTime","hours","getHours","minutes","getMinutes","currentTime","sortSelect","$","selectedValue","sort","a","sortAlphaObj","name","single","image","_markerDrag","_markerClick","_clickPanTo","_clickZoom","_clickZoomLevel","defaultZoomLevel","_defaultZoomLevel","_scrollWheel","_draggable","_clickable","_streetView","centerLat","_centerLat","centerLng","_centerLng","mapWidth","mapHeight","mapDivs","firstMapLoaded","findFirstMap","firstMap","getElementById","loadMaps","dataFunc","locations","combinedPoints","l","names","latitude","longitude","points","name_en","switchmode","getJSON","DirectionsService","InfoWindow","Geocoder","divUsed","currentMap","k","m","mapContainer","setMapContent","span","option","selected","click","idSplit","split","switchMode","change","onchangeHybrid","setMapTypeId","clear","n","setCenter","setMapClickEvent","p","widget","googleMaps","widgets","constants","BUILDING","DEPARTMENT","OVERLAY","markerWidth","markerHeight","overlayMarkerWidth","overlayMarkerHeight","pin","loadMap","loaded","loadData","w","building","department","setAutoCompletes","checkForSearchQuery","ieVersion","xdr","XDomainRequest","parseJSON","responseText","onprogress","send","loc","acLocOptions","minLength","autoFocus","select","ui","item","setBuildingMarker","getBuilding","setDepartmentMarkers","getDepartment","setOverlayMarker","getOverlay","acPeopleOptions","String","prototype","searchCrossSite","getPeople","searchDetailsCrossSite","setPersonMarker","autocomplete","getBuildingString","query","containsBuildingNumber","match","cbn","bs","bldg","querySplit","people","clearMarkers","clearOld","showContent","MarkerImage","Size","content","empty","searchDetailsWrapper","departmentsdetails","addressNode","street","zip","city","buildingNode","buildings","place","groupid","groupname","getPersonDetails","personHTML","buildingNumber","officePhone","iw","number","departmentId","mergeOptions","hasOwnProperty","conf","wdgt","foundation","AUCDNPATH","classList","contains","langAttr","getAttribute","disableAddThisForOldNews","sharers","newsSharer","newsLists","cludoDanishPath","cludoEnglishPath","defaultTracking","cmForms","form","privacyEmail","findBtn","sz","async","getElementsByTagName","parentNode"],"mappings":"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","file":"app-basic.js","sourcesContent":["'use strict';\n\n/**\r\n * @author TRH\r\n */\n\n/*** GLOBALT AU OBJEKT ***/\n\nvar AU = {\n pageLang: 'da', // Default sprog\n cdn: 'https://cdn.au.dk',\n version: '202204211100',\n bss: false,\n ready: [],\n addReadyFunction: function addReadyFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the ready array\n if (AU.ready.indexOf(fn) === -1) {\n AU.ready.push(fn);\n } else {\n console.log(\"Function already exists in AU.ready and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.ready.\");\n }\n },\n load: [],\n addLoadFunction: function addLoadFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the load array\n if (AU.load.indexOf(fn) === -1) {\n AU.load.push(fn);\n } else {\n console.log(\"Function already exists in AU.load and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.load.\");\n }\n },\n resize: [],\n addResizeFunction: function addResizeFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the resize array\n if (AU.resize.indexOf(fn) === -1) {\n AU.resize.push(fn);\n } else {\n console.log(\"Function already exists in AU.resize and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.resize.\");\n }\n },\n scroll: [],\n addScrollFunction: function addScrollFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the scroll array\n if (AU.scroll.indexOf(fn) === -1) {\n AU.scroll.push(fn);\n } else {\n console.log(\"Function already exists in AU.scroll and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.scroll.\");\n }\n },\n navigation: {}\n};\n'use strict';\n\n/**\r\n * Titel: HELPERS\r\n * Beskrivelse: hjælpemetoder som kan anvendes på tværs af alle scripts\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\n\nAU.helpers = {\n getUnicodeKey: function getUnicodeKey(e) {\n var unicode = e.keyCode ? e.keyCode : e.charCode;\n return unicode;\n },\n rewriteLink: function rewriteLink(text) {\n return text.trim().toLowerCase().replace(/ /g, '_').replace(/æ/g, 'ae').replace(/ø/g, 'oe').replace(/å/g, 'aa');\n },\n getQuerystring: function getQuerystring(key, default_) {\n if (!default_) {\n default_ = '';\n }\n\n key = key.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n var regex = new RegExp(\"[\\\\?&]\" + key + \"=([^&#]*)\");\n\n var qs = regex.exec(window.location.href);\n\n if (qs === null) {\n return default_;\n } else {\n return qs[1];\n }\n },\n getInternetExplorerVersion: function getInternetExplorerVersion() {\n var rv = -1;\n if (navigator.userAgent.indexOf('Trident') > -1) {\n var ua = navigator.userAgent;\n var re = new RegExp(\"rv:([0-9]{1,}[.0-9]{0,})\");\n if (re.exec(ua) !== null) {\n rv = parseFloat(RegExp.$1);\n }\n }\n return rv;\n },\n isMobileDevice: function isMobileDevice() {\n return (/Mobile|iP(hone|od|ad)|Android|IEMobile/i.test(navigator.userAgent)\n );\n },\n getXML: function getXML(source, callback) {\n jQuery.ajax({\n type: 'GET',\n url: source,\n dataType: 'xml',\n success: function success(data) {\n if (typeof callback === 'function') {\n callback(data);\n }\n }\n });\n },\n isElementInViewport: function isElementInViewport(element) {\n if (element === null) {\n return false;\n }\n\n var rect = element.getBoundingClientRect();\n\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n },\n isElementPartlyInViewport: function isElementPartlyInViewport(element) {\n var top = element.offsetTop;\n var left = element.offsetLeft;\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n while (element.offsetParent) {\n element = element.offsetParent;\n top += element.offsetTop;\n left += element.offsetLeft;\n }\n\n return top < window.pageYOffset + window.innerHeight && left < window.pageXOffset + window.innerWidth && top + height > window.pageYOffset && left + width > window.pageXOffset;\n },\n trimText: function trimText(label, amount, end) {\n if (label.length > amount) {\n return label.substring(0, amount) + end;\n }\n\n return label;\n },\n validateEmail: function validateEmail(email) {\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(email);\n },\n componentToHex: function componentToHex(c) {\n var hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n },\n rgbToHex: function rgbToHex(r, g, b) {\n return this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n },\n getPageContent: function getPageContent(url, retrieveSelector, insertSelector, callback) {\n var urlAllowed = function urlAllowed(url) {\n var protocolAndHost = location.protocol + '//' + location.host;\n return url.indexOf(protocolAndHost) === 0;\n };\n\n var insertElement = jQuery(insertSelector);\n if (urlAllowed(url)) {\n insertElement.load(url + ' ' + retrieveSelector, function () {\n if (typeof callback === 'function') {\n callback();\n }\n });\n return true;\n } else {\n return false;\n }\n },\n accentMap: {\n 'é': 'e',\n 'ä': 'æ',\n 'ö': 'ø',\n 'á': 'a',\n 'ü': 'y'\n },\n normalizeAccents: function normalizeAccents(term, accentMap) {\n if (!accentMap) {\n accentMap = this.accentMap;\n }\n\n var ret = '';\n for (var i = 0; i < term.length; i++) {\n ret += accentMap[term.charAt(i)] || term.charAt(i);\n }\n return ret;\n }\n};\n'use strict';\n\n/**\r\n * Titel: NAVIGATION\r\n * Beskrivelse: initialisering af menuer, fade (som stadig bruges til news), brødkrummer m.m.\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\n\nAU.navigation.menu = {\n setClick: function setClick() {\n jQuery('button.menu-icon').on('click', function () {\n var headerMenu = jQuery(this).parents('.header-menu');\n if (headerMenu.hasClass('open')) {\n headerMenu.removeClass('open');\n if (!AU.bss) {\n jQuery('.search').removeClass('hide');\n }\n } else {\n headerMenu.addClass('open');\n if (!AU.bss) {\n jQuery('.search').addClass('hide');\n }\n }\n });\n },\n setUtility: function setUtility() {\n jQuery(document).on('show.zf.dropdown', 'header .dropdown-pane', function () {\n AU.databox.init();\n AU.alphabox.init();\n });\n },\n setBreadcrumb: function setBreadcrumb() {\n var bc = jQuery('#au_breadcrumb');\n var crumbs = jQuery('> a', bc);\n var crumbCutOff = 3;\n if (crumbs.length > crumbCutOff) {\n bc.addClass('collapse');\n crumbs.eq(0).after('
   
');\n jQuery('.bc-expand span').on('click', function () {\n bc.toggleClass('collapse');\n });\n }\n },\n addExtraMenuItem: function addExtraMenuItem() {\n // Fix til den mobile menu, hvor der indsættes et ekstra top-level menupunkt\n var topLevelMenuItems = jQuery('.top-bar > div > ul.menu li.has-submenu');\n topLevelMenuItems.each(function () {\n var topLevelMenuItem = jQuery('> a', this);\n var topLevelSubMenu = jQuery('ul.submenu', this);\n topLevelSubMenu.prepend('
  • ' + topLevelMenuItem.text() + '
  • ');\n });\n },\n setTopBar: function setTopBar() {\n var topBarLinks = jQuery('body:not(.department):not(.neutral) .top-bar .menu > li > a, body.department:not(.omnibus) .top-bar.custom .menu > li > a');\n var headerMenu = jQuery('.header-menu');\n topBarLinks.each(function () {\n var topBarContent = jQuery('.top-bar-content', jQuery(this).parent());\n jQuery(this).on('mouseover', function () {\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\n AU.navigation.topBarTimeout = setTimeout(function () {\n topBarContent.show().css('width', headerMenu.css('width'));\n }, 300);\n }\n }).on('mouseout', function () {\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\n topBarContent.hide();\n clearTimeout(AU.navigation.topBarTimeout);\n }\n }).on('click', function (e) {\n if (AU.helpers.isMobileDevice()) {\n e.preventDefault();\n jQuery('.top-bar-content').not(topBarContent).hide();\n topBarContent.toggle().css('width', headerMenu.css('width'));\n }\n });\n });\n\n jQuery('.top-bar-content').on('mouseover', function () {\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\n jQuery(this).show();\n }\n }).on('mouseout', function () {\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\n jQuery(this).hide();\n }\n });\n\n if (typeof window.selectedUM !== 'undefined' && window.selectedUM !== 100) {\n // 100 = ingenting.\n jQuery('.top-bar .menu > li:eq(' + (window.selectedUM - 1) + ')').addClass('active');\n }\n }\n};\n\nAU.navigation.search = {\n setClick: function setClick() {\n jQuery('#tx_googlequery_searchform_ss_q, #cludo-search-form-input').on('focusout', function () {\n jQuery('#tx_googlequery_searchform_ss_q, #cludo-search-form-input').val('');\n jQuery('.section-header').removeClass('opensearch');\n });\n\n jQuery('.au_searchbox').on('click', function () {\n jQuery('.section-header').addClass('opensearch');\n jQuery('#tx_googlequery_searchform_ss_q, #cludo-search-form-input').focus();\n });\n }\n};\n\nAU.navigation.frontpage = {\n setTargetGroups: function setTargetGroups() {\n var buttons = jQuery('.target-groups .button');\n var groups = jQuery('.target-groups + div > div > .csc-default');\n var toggleGroup = function toggleGroup(i) {\n var group = groups.eq(i);\n group.toggleClass('active');\n groups.not(group).removeClass('active');\n };\n buttons.each(function (i, btn) {\n var button = jQuery(btn);\n button.on('click', function (e) {\n e.preventDefault();\n jQuery(this).toggleClass('active');\n buttons.not(button).removeClass('active');\n toggleGroup(i);\n });\n });\n }\n};\n'use strict';\n\n/**\r\n * Titel: COOKIES\r\n * Beskrivelse: Hjælpemetoder til get/set af cookies samt initialisering af cookievarsling\r\n * Status: er ikke blevet ændret siden 2011-designet. Cookieadvarslen kunne med fordel skrives om til ES6/React\r\n */\n\nAU.cookies = {\n set: function set(c_name, value, exdays, path) {\n if (typeof path === 'undefined') {\n path = ';path=/;domain=au.dk';\n }\n\n var exdate = new Date();\n exdate.setDate(exdate.getDate() + exdays);\n var c_value = encodeURI(value) + (exdays === null ? '' : '; expires=' + exdate.toUTCString());\n document.cookie = c_name + '=' + c_value + path;\n },\n get: function get(c_name) {\n var c_value = document.cookie;\n var c_start = c_value.indexOf(' ' + c_name + '=');\n if (c_start === -1) {\n c_start = c_value.indexOf(c_name + '=');\n }\n if (c_start === -1) {\n c_value = null;\n } else {\n c_start = c_value.indexOf('=', c_start) + 1;\n var c_end = c_value.indexOf(';', c_start);\n if (c_end === -1) {\n c_end = c_value.length;\n }\n c_value = decodeURI(c_value.substring(c_start, c_end));\n }\n return c_value;\n },\n alertElement: null,\n noAlertPeriod: 365,\n strings: {\n header: '',\n paragraph: '',\n button: ''\n },\n init: function init() {\n if (window.alertCookies) {\n var replaceCookieTexts = function replaceCookieTexts(text) {\n return text.replace('{0}', AU.cookies.strings.header).replace('{1}', AU.cookies.strings.paragraph).replace('{2}', AU.cookies.strings.button);\n };\n\n var alertElement = document.createElement('div');\n alertElement.setAttribute('id', 'au_cookiesalert');\n alertElement.innerHTML = replaceCookieTexts('

    {0}

    {1}

    ');\n var globalFooter = document.querySelector('footer.global');\n if (globalFooter) {\n globalFooter.insertAdjacentElement('afterend', alertElement);\n alertElement.style.display = 'none';\n this.alertElement = alertElement;\n }\n\n var allowCookies = this.get('allow_cookies');\n if (allowCookies === null) {\n this.alert();\n }\n }\n },\n initCookieScript: function initCookieScript() {\n if (typeof window.cookieScriptId !== 'undefined') {\n // Insert scripts and CSS for Pop Up\n var head = document.head;\n var cookieScriptManipulationCode = document.createElement('script');\n cookieScriptManipulationCode.setAttribute('src', '//cdn.au.dk/res/cookiescript/cookie-modal.min.js?a=' + (typeof window.cookieScriptVersion !== 'undefined' ? window.cookieScriptVersion : '1'));\n cookieScriptManipulationCode.setAttribute('charset', 'UTF-8');\n cookieScriptManipulationCode.setAttribute('type', 'text/javascript');\n head.insertBefore(cookieScriptManipulationCode, head.firstElementChild);\n }\n },\n alert: function alert() {\n if (this.alertElement !== null) {\n this.alertElement.style.display = 'block';\n\n document.querySelector('#au_cookiesalert_yes button').addEventListener('click', function (e) {\n e.preventDefault();\n AU.cookies.accept(AU.cookies.noAlertPeriod, true);\n });\n }\n },\n accept: function accept(duration, byGUI) {\n var path = location.host.indexOf('au.dk') > -1 ? undefined : ';path=/';\n this.set('allow_cookies', 'true', duration, path);\n if (byGUI) {\n this.alertElement.style.display = 'none';\n }\n }\n};\n'use strict';\n\n/**\r\n * Titel: DESIGN\r\n * Beskrivelse: metoder som udbedrer en række \"shortcomings\" i designet eller tilføjer ekstra features til elementer\r\n * Status: er en blanding af nyt og gammelt. ES5-syntax hele vejen igennem\r\n */\n\nAU.design = {\n setFocusFieldIds: function setFocusFieldIds() {\n jQuery('.au_focus').each(function (i) {\n if (!jQuery(this).attr('id')) {\n jQuery(this).attr('id', 'focusid_' + i);\n }\n });\n },\n setBuildingLinks: function setBuildingLinks(elementToSearchSelector) {\n var elementToSearch = jQuery(elementToSearchSelector);\n\n if (elementToSearch.length > 0) {\n var mapUrl = AU.pageLang === \"da\" ? '//www.au.dk/kort/' : '//www.au.dk/en/map/';\n var buildingPhrase = AU.pageLang === \"da\" ? 'bygning' : 'building';\n var re = new RegExp('(' + buildingPhrase + ' (\\\\d{4}))', 'ig');\n jQuery.each(elementToSearch, function () {\n jQuery(this).html(jQuery(this).html().replace(re, '$1'));\n });\n }\n },\n onCollapseOpen: [],\n onCollapseClose: [],\n setCollapse: function setCollapse() {\n\n var openEvent = document.createEvent('Event');\n openEvent.initEvent('collapsible-open', true, true);\n\n var closeEvent = document.createEvent('Event');\n closeEvent.initEvent('collapsible-close', true, true);\n\n var collapsibles = jQuery('.csc-frame.au_collapsible');\n collapsibles.each(function () {\n var me = jQuery(this);\n var domElement = me.get(0);\n var header = jQuery('> .csc-header', me);\n\n header.unbind('click').on('click', function () {\n me.toggleClass('au_collapsed');\n if (me.hasClass('au_collapsed')) {\n domElement.dispatchEvent(closeEvent);\n } else {\n domElement.dispatchEvent(openEvent);\n }\n });\n\n var d = AU.design;\n domElement.addEventListener('collapsible-open', function (e) {\n for (var i = 0; i < d.onCollapseOpen.length; i++) {\n if (typeof d.onCollapseOpen[i] === 'function') {\n d.onCollapseOpen[i](e.target);\n }\n }\n }, false);\n\n domElement.addEventListener('collapsible-close', function (e) {\n for (var i = 0; i < d.onCollapseClose.length; i++) {\n if (typeof d.onCollapseClose[i] === 'function') {\n d.onCollapseClose[i](e.target);\n }\n }\n }, false);\n });\n\n this.openCollapsibleFromHash(location.hash);\n\n jQuery(window).on('hashchange', function () {\n AU.design.openCollapsibleFromHash(location.hash);\n });\n },\n openCollapsibleFromHash: function openCollapsibleFromHash(hash) {\n if (hash.indexOf('c') === 1) {\n jQuery(hash + '.csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible').removeClass('au_collapsed');\n jQuery(hash).parents('.au_collapsible').removeClass('au_collapsed');\n document.querySelector(hash).scrollIntoView();\n }\n },\n grayscale: function grayscale(src) {\n try {\n var supportsCanvas = !!document.createElement('canvas').getContext;\n if (supportsCanvas) {\n var canvas = document.createElement('canvas'),\n context = canvas.getContext('2d'),\n imageData,\n px,\n length,\n i = 0,\n gray,\n img = new Image();\n\n img.src = src;\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0);\n\n imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n px = imageData.data;\n length = px.length;\n\n for (; i < length; i += 4) {\n gray = px[i] * 0.3 + px[i + 1] * 0.59 + px[i + 2] * 0.11;\n px[i] = px[i + 1] = px[i + 2] = gray;\n }\n\n context.putImageData(imageData, 0, 0);\n return canvas.toDataURL();\n } else {\n return src;\n }\n } catch (err) {\n console.log(err);\n return src;\n }\n },\n setBannerElementsReady: function setBannerElementsReady() {\n jQuery('.aubanner a').hover(function () {\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 1 }, 200);\n }, function () {\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 0 }, 500);\n });\n },\n setBannerElementsLoad: function setBannerElementsLoad() {\n jQuery('.aubanner:not(.aubanner-2) img').each(function () {\n // Fordi det er fuldstændig utænkeligt, at vi kan få fjernet Prototype fra pure.au.dk...\n var bc = jQuery('.aubanner-content', jQuery(this).parents('.aubanner'));\n bc.css('background-image', \"url('\" + AU.design.grayscale(this.src) + \"')\");\n }).animate({ opacity: 1 }, 500);\n },\n setHero: function setHero() {\n var hero = jQuery('.hero');\n if (hero.length > 0) {\n jQuery(window).scroll(function () {\n var x = jQuery(this).scrollTop() + (jQuery('body').hasClass('layout13') ? 0 : -200);\n hero.css('background-position-y', parseInt(x / 10) + 'px');\n });\n }\n },\n setMagnificPopup: function setMagnificPopup() {\n var lightbox = jQuery('.csc-textpic a[rel*=\"lightbox\"], .image a[rel*=\"lightbox\"]');\n\n // http://stackoverflow.com/questions/6900958/using-jquery-to-perform-a-function-on-elements-with-unique-rel-attribute\n var rels = {};\n lightbox.each(function () {\n var r = jQuery(this).attr('rel');\n rels[r] = 1;\n });\n\n rels = Object.keys(rels);\n jQuery.each(rels, function (index, value) {\n jQuery('a[rel=\"' + value + '\"]').magnificPopup({\n type: 'image',\n gallery: {\n enabled: true\n },\n modal: false\n });\n });\n\n var newsImgs = jQuery('.au_news-single-sub-images a, .au_news-single-img a, .news-set1-img1all a');\n newsImgs.magnificPopup({\n type: 'image',\n gallery: {\n enabled: true\n },\n modal: false\n });\n },\n setTopWarning: function setTopWarning() {\n if (window.topWarning) {\n jQuery('body').prepend(jQuery('
    ', {\n 'class': 'ie-warning',\n 'html': AU.pageLang == 'da' ? window.topWarningTextDa : window.topWarningTextEn\n }));\n }\n }\n};\n\"use strict\";\n\nAU.basic = true;\n\nAU.ipure = {\n source: {}\n};\n\nAU.design.setMagnificPopup = function () {\n return;\n};\n\nAU.databox = {\n init: function init() {\n return;\n }\n};\n\nAU.flowbox = {\n init: function init() {\n return;\n }\n};\n\nAU.alphabox = {\n boxes: [],\n init: function init() {\n return;\n }\n};\n\nAU.piechart = {\n init: function init() {\n return;\n }\n};\n\nAU.social = {\n init: function init() {\n return;\n }\n};\n\nAU.news = {\n feeds: [],\n init: function init() {\n return;\n }\n};\n'use strict';\n\n/**\r\n * Titel: FALLBACK\r\n * Beskrivelse: består af den ældgamle 'pingAnalytics' til GA-tracking og nogle ukendte/LF-udviklede funktioner, der kan ske at være i brug rundt omkring...\r\n * Status: Do. Not. Touch.\r\n */\n\nfunction pressed(url) {\n location.href = url;\n}\n\nfunction pres(url) {\n location.href = url;\n}\n\nfunction replaceall(s, x, y) {\n if (x.length > 0) {\n var found = s.indexOf(x);\n while (found >= 0) {\n s = s.substring(0, found) + y + s.substring(found + x.length, s.length);\n found = s.indexOf(x, found + y.length);\n }\n }\n return s;\n}\n\nfunction multipressed(xx, urlPattern, StartValue) {\n var url = urlPattern;\n var allow = StartValue;\n var OK = true;\n for (var i = 0; i < xx.elements.length; i++) {\n if (xx.elements[i].type === 'select-one') {\n if (OK) {\n OK = xx.elements[i].selectedIndex >= allow;\n }\n url = replaceall(url, '$' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\n url = replaceall(url, '¤' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\n }\n }\n url = url.toLowerCase();\n if (OK) {\n location.href = url;\n } else {\n window.alert('Vælg en værdi i alle felter!');\n }\n}\n\n// En kommentar\n'use strict';\n\n/**\r\n * Titel: RESPONSIVE\r\n * Beskrivelse: indeholder efterhånden primært logik til omsættelse af tabeller til responsiv opførsel (lister), herunder studiediagrammerne. Derudover er der en lille smule logik til det nye design\r\n * Status: er kun i nogen grad omskrevet fra 2011/2015-udgaven\r\n */\n\nAU.responsive = {\n state: null,\n stateHistory: [],\n modes: {\n PHONE: {\n ID: 0,\n NAME: 'PHONE',\n MAX: 640\n },\n TABLET: {\n ID: 1,\n NAME: 'TABLET',\n MAX: 1024\n },\n DESKTOP: {\n ID: 2,\n NAME: 'DESKTOP'\n }\n },\n detectDevice: function detectDevice() {\n\n var state = null;\n var modes = AU.responsive.modes;\n if (Foundation.MediaQuery.current === 'small') {\n state = modes.PHONE;\n } else if (Foundation.MediaQuery.current === 'medium') {\n state = modes.TABLET;\n } else {\n state = modes.DESKTOP;\n }\n\n if (state !== AU.responsive.state) {\n AU.responsive.state = state;\n AU.responsive.stateHistory.push(state.NAME);\n console.log(state.NAME);\n AU.responsive.setMarkup();\n }\n },\n markupRenderFunctions: [],\n runMarkupFunctions: function runMarkupFunctions() {\n for (var i = 0; i < this.markupRenderFunctions.length; i++) {\n if (typeof this.markupRenderFunctions[i] === 'function') {\n this.markupRenderFunctions[i]();\n }\n }\n },\n setMarkup: function setMarkup() {\n var state = AU.responsive.state;\n\n var utilityLinks = jQuery('.utility-links');\n var headerMenu = jQuery('.header-menu');\n var sectionHeader = jQuery('.section-header .logo');\n\n var pageNav = jQuery('#au_section_nav_inner_list');\n var titleBar = jQuery('.title-bar');\n var menuTitle = jQuery('.menu-title');\n var leftMenu = jQuery('.left-menu');\n var tablesScroll = jQuery('table.au_responsive_table_scroll');\n\n if (state.NAME === 'PHONE') {\n\n headerMenu.append(utilityLinks);\n if (jQuery('body').hasClass('universe')) {\n headerMenu.after(pageNav);\n pageNav.wrap('
    ');\n } else {\n utilityLinks.before(pageNav);\n }\n titleBar.before(menuTitle);\n pageNav.addClass('responsive-pagenav');\n\n tablesScroll.each(function () {\n var table = jQuery(this);\n table.wrap('
    ');\n });\n } else {\n\n var wasPhone = function wasPhone() {\n var states = AU.responsive.stateHistory.length;\n return states > 1 ? AU.responsive.stateHistory[states - 2] === 'PHONE' : false;\n };\n\n if (wasPhone()) {\n sectionHeader.append(utilityLinks);\n leftMenu.append(pageNav);\n pageNav.before(menuTitle);\n }\n\n tablesScroll.each(function () {\n var table = jQuery(this);\n if (table.parent().is('div.responsive-table-container')) {\n table.unwrap();\n }\n });\n }\n\n this.runMarkupFunctions();\n }\n};\n\nAU.edutables = {\n tables: [],\n scriptLoaded: false,\n loadExternal: function loadExternal() {\n var dg = new AUDiagramme(AU.pageLang, AU.edutables.tables);\n dg.init();\n },\n init: function init() {\n if (this.tables.length > 0) {\n if (!this.scriptLoaded) {\n var componentsUrl = AU.cdn + '/components/umd/diagramme.js';\n jQuery.getScript(componentsUrl, function () {\n AU.edutables.loadExternal();\n AU.edutables.scriptLoaded = true;\n });\n } else {\n this.loadExternal();\n }\n }\n }\n};\n\nAU.addReadyFunction(function () {\n AU.responsive.detectDevice();\n AU.edutables.init();\n});\n\nAU.addResizeFunction(function () {\n AU.responsive.detectDevice();\n});\n'use strict';\n\n// Default søgeboks til medarbejderportaler til utility-box\nvar DEFAULT_util_staffportal_da = {\n config: {\n container: '#au_databox_staff_utility',\n alphabet: 0,\n buttons: [{\n text: 'Institutter',\n link: ''\n }, {\n text: 'Fakulteter',\n link: ''\n }, {\n text: 'Fællesadministrationen',\n link: ''\n }, {\n text: 'Øvrige enheder',\n link: ''\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n color: '#37a0cb',\n overlay: false\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/6'\n }\n};\nvar DEFAULT_util_staffportal_en = {\n config: {\n container: '#au_databox_staff_utility',\n alphabet: 0,\n buttons: [{\n text: 'Departments',\n link: ''\n }, {\n text: 'Faculties',\n link: ''\n }, {\n text: 'Other units',\n link: ''\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n color: '#37a0cb',\n overlay: false\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/7'\n }\n};\n\n// Default søgeboks til institutter til utility-box\nvar DEFAULT_util_department_da = {\n config: {\n container: '#au_databox_unit_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'http://arts.au.dk'\n }, {\n text: 'Health',\n link: 'http://health.au.dk'\n }, {\n text: 'Natural Sciences',\n link: 'http://nat.au.dk'\n }, {\n text: 'Technical Sciences',\n link: 'http://tech.au.dk'\n }, {\n text: 'Aarhus BSS',\n link: 'http://bss.au.dk'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/47'\n }\n};\nvar DEFAULT_util_department_en = {\n config: {\n container: '#au_databox_unit_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'http://arts.au.dk/en/'\n }, {\n text: 'Health',\n link: 'http://health.au.dk/en/'\n }, {\n text: 'Natural Sciences',\n link: 'http://nat.au.dk/en/'\n }, {\n text: 'Technical Sciences',\n link: 'http://tech.au.dk/en/'\n }, {\n text: 'Aarhus BSS',\n link: 'http://bss.au.dk/en/'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/52'\n }\n};\n\n// Default alphabox med medarbejderservice til utility-box\nvar DEFAULT_util_staffservice_da = {\n config: {\n container: '#au_alphabox_staff_utility',\n title: 'Find værktøjer, vejledninger og serviceydelser',\n url: 'http://medarbejdere.au.dk/administration/',\n description: 'Find flere informationer om',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/administration/it/'\n }, {\n title: 'Økonomi',\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\n }, {\n title: 'Bygninger',\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\n }, {\n title: 'Kommunikation',\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\n }, {\n title: 'Studieadm.',\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\n }, {\n title: 'Forskningspraksis',\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\n }, {\n title: 'Internationalt',\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\n }],\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks'\n },\n search: {\n placeHolder: 'Søg i værktøjer m.m.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\n }\n};\nvar DEFAULT_util_staffservice_en = {\n config: {\n container: '#au_alphabox_staff_utility',\n title: 'Find tools, guidelines and services',\n url: 'http://medarbejdere.au.dk/en/administration/',\n description: 'Find more information about',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/en/administration/it/'\n }, {\n title: 'Finance',\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\n }, {\n title: 'Buildings',\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\n }, {\n title: 'Communication',\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\n }, {\n title: 'Studies adm.',\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\n }, {\n title: 'Research Practice',\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\n }, {\n title: 'International',\n url: 'http://medarbejdere.au.dk/en/administration/international/'\n }],\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\n noResultsSearch: 'Your search did not return any results. Please try other words.',\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service'\n },\n search: {\n placeHolder: 'Search for tools, etc.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\n }\n};\n\n// Default søgeboks til ph.d.-portaler til utility-box\nvar DEFAULT_util_phdportal_da = {\n config: {\n container: '#au_databox_phd_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'https://phd.arts.au.dk'\n }, {\n text: 'Health',\n link: 'https://phd.health.au.dk/'\n }, {\n text: 'Natural Sciences',\n link: 'https://phd.nat.au.dk/'\n }, {\n text: 'Technical Sciences',\n link: 'https://phd.tech.au.dk/'\n }, {\n text: 'Aarhus BSS',\n link: 'https://bss.au.dk/phd/'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/50'\n }\n};\nvar DEFAULT_util_phdportal_en = {\n config: {\n container: '#au_databox_phd_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'https://phd.arts.au.dk'\n }, {\n text: 'Health',\n link: 'https://phd.health.au.dk/'\n }, {\n text: 'Natural Sciences',\n link: 'https://phd.nat.au.dk/'\n }, {\n text: 'Technical Sciences',\n link: 'https://phd.tech.au.dk/'\n }, {\n text: 'Aarhus BSS',\n link: 'https://bss.au.dk/phd/'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/50'\n }\n};\n\n// Default alphabox med studieportaler til utility-box\nvar DEFAULT_util_student_da = {\n config: {\n container: '#au_alphabox_student_utility',\n title: 'Studieportaler',\n url: 'http://studerende.au.dk',\n links: []\n },\n search: {\n placeHolder: 'Søg efter studieportal'\n },\n background: {\n color: '#2a4a0f',\n linkColor: '#8bad3f'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/2?itemsOnly=true'\n }\n};\nvar DEFAULT_util_student_en = {\n config: {\n container: '#au_alphabox_student_utility',\n title: 'Study portals',\n url: 'http://studerende.au.dk/en/',\n links: []\n },\n search: {\n placeHolder: 'Search for Study portal'\n },\n background: {\n color: '#2a4a0f',\n linkColor: '#8bad3f'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/4?itemsOnly=true'\n }\n};\n\n// Default alphabox med medarbejderservice til medarbejdere.au.dk (forside m.m.)\nvar DEFAULT_staff_staffservice_da = {\n config: {\n container: '#au_alphabox_1',\n title: 'Find værktøjer, vejledninger og serviceydelser',\n url: 'http://medarbejdere.au.dk/administration/',\n description: 'Find flere informationer om',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/administration/it/'\n }, {\n title: 'Økonomi',\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\n }, {\n title: 'Bygninger',\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\n }, {\n title: 'Kommunikation',\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\n }, {\n title: 'Studieadm.',\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\n }, {\n title: 'Forskningspraksis',\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\n }, {\n title: 'Internationalt',\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\n }],\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks'\n },\n search: {\n placeHolder: 'Søg i værktøjer m.m.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\n }\n};\nvar DEFAULT_staff_staffservice_en = {\n config: {\n container: '#au_alphabox_1',\n title: 'Find tools, guidelines and services',\n url: 'http://medarbejdere.au.dk/en/administration/',\n description: 'Find more information about',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/en/administration/it/'\n }, {\n title: 'Finance',\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\n }, {\n title: 'Buildings',\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\n }, {\n title: 'Communication',\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\n }, {\n title: 'Studies adm.',\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\n }, {\n title: 'Research Practice',\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\n }, {\n title: 'International',\n url: 'http://medarbejdere.au.dk/en/administration/international/'\n }],\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\n noResultsSearch: 'Your search did not return any results. Please try other words.',\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service'\n },\n search: {\n placeHolder: 'Search for tools, etc.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\n }\n};\n'use strict';\n\n/**\r\n * Titel: MAPS\r\n * Beskrivelse: Google Maps-baseret kortløsning.\r\n * Status: er noget af det ældste kode, vi har kørende. Virker som sådan fint nok, men ved et større kortprojekt ville det være oplagt at få omskrevet\r\n */\n\nvar GOOGLE_MAPS_API_KEY = \"AIzaSyBP04DSgKVcqkYGO_Xb4GgqXHMzRO_2jzo\";\n\nAU.maps = {\n loadGoogleMapsScript: function loadGoogleMapsScript() {\n // Check if the global variable for loading Google Maps is defined, if not default to false\n var shouldLoadGoogleMapsScript = typeof window.loadGoogleMapsScript !== 'undefined' ? window.loadGoogleMapsScript : false;\n var shouldLoadGoogleMapsScriptAsync = typeof window.loadGoogleMapsScriptAsync !== 'undefined' ? window.loadGoogleMapsScriptAsync : true; // Default to true for async\n\n // Early return if we should not load the Google Maps script\n if (shouldLoadGoogleMapsScript) {\n console.log(\"Google Maps script will be loaded manually on this page\");\n } else {\n return;\n }\n\n // Construct the base URL with the API key\n var scriptUrl = 'https://maps.googleapis.com/maps/api/js?key=' + GOOGLE_MAPS_API_KEY;\n\n // Conditionally add the async loading parameter to the URL\n if (shouldLoadGoogleMapsScriptAsync) {\n scriptUrl += '&loading=async';\n }\n\n scriptUrl += '&callback=AU.maps.googleMapsScriptCallback';\n\n // Create a script element and set the constructed URL\n var script = document.createElement('script');\n script.src = scriptUrl;\n\n // Handle the script load success\n script.onload = function () {\n console.log(\"Google Maps script has been loaded successfully. Now waiting for the callback to initialize.\");\n };\n\n // Handle script load failure and capture details\n script.onerror = function (event) {\n console.error(\"Error loading Google Maps script:\", event);\n console.error(\"Script URL:\", event.target.src); // URL of the failed script\n };\n\n // Append the script to the document's head to initiate the load\n document.head.appendChild(script);\n },\n // If the Google maps script is loaded, we use this callback to dispatch an googleMapsScriptLoadedEvent event\n googleMapsScriptLoaded: false,\n googleMapsScriptCallback: function googleMapsScriptCallback() {\n AU.maps.googleMapsScriptLoaded = true;\n console.log(\"Google Maps script callback has been executed. Google Maps is ready for use.\");\n\n // Dispatch a custom event to notify that Google Maps is ready\n var event = new CustomEvent('googleMapsScriptLoadedEvent');\n window.dispatchEvent(event);\n },\n create: function create(container, width, height, zoomLevel, center, scrollWheel, draggable, clickable, streetView, pco, zco, svco) {\n\n var mapOptions = {\n zoom: zoomLevel,\n center: center,\n scrollwheel: AU.helpers.isMobileDevice() || AU.responsive.state.NAME == 'PHONE' ? false : scrollWheel,\n draggable: draggable,\n clickable: clickable,\n streetViewControl: streetView,\n mapTypeControlOptions: {\n mapTypeIds: ['default', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.HYBRID],\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,\n position: google.maps.ControlPosition.RIGHT_TOP\n },\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n panControlOptions: !pco ? {} : pco,\n zoomControlOptions: !zco ? {} : zco,\n streetViewControlOptions: !svco ? {} : svco\n };\n\n // Opretter kort\n var map = new google.maps.Map(container, mapOptions);\n\n // Kortets størrelse sættes\n container.style.width = !isNaN(width) ? width + 'px' : width;\n container.style.height = !isNaN(height) ? height + 'px' : height;\n\n return map;\n },\n setBounds: function setBounds(map, markers) {\n var bounds = new google.maps.LatLngBounds();\n for (var i = 0; i < markers.length; i++) {\n for (var j = 0; j < markers[i].length; j++) {\n bounds.extend(markers[i][j].position);\n }\n }\n map.fitBounds(bounds);\n },\n marker: {\n add: function add(map, point, markerIcon, markerDraggable, markerClickable, markerPanTo, markerClickZoom, markerClickZoomLevel, infoWindow, windowContent, title, id) {\n var marker = new google.maps.Marker({\n position: point,\n map: map,\n icon: markerIcon,\n draggable: markerDraggable,\n title: title\n });\n\n if (typeof id !== 'undefined') {\n marker.set('id', id);\n }\n\n // Listeners tilføjes markør\n google.maps.event.addListener(marker, 'click', function () {\n if (windowContent !== '

    ') {\n // Infowindow åbner ved klik\n infoWindow.open(map, this);\n infoWindow.setContent(windowContent);\n }\n\n if (markerClickable) {\n if (markerPanTo) {\n map.panTo(this.getPosition());\n }\n\n if (!markerClickZoom || map.getZoom() > markerClickZoomLevel) {\n map.setZoom(map.getZoom());\n } else {\n map.setZoom(markerClickZoomLevel);\n }\n }\n });\n\n // At flytte en markør betragtes som et klik på kortet (det giver tilsyneladende ingen problemer, skulle der ikke være defineret click-event på kortet)\n if (markerDraggable) {\n google.maps.event.addListener(marker, 'dragend', function (point) {\n google.maps.event.trigger(map, 'click', point);\n });\n }\n\n return marker;\n }\n },\n route: {\n destinationFrom: false,\n destinationTo: false,\n directionsDisplay: null,\n directionsService: null,\n calc: function calc(map, from, to, travelMode, directionsService, directionsDisplay, waypointLocations) {\n if (from !== '') {\n var waypoints = [];\n if (typeof waypointLocations !== 'undefined') {\n for (var i = 0; i < waypointLocations.length; i++) {\n waypoints.push({\n location: waypointLocations[i],\n stopover: false\n });\n }\n }\n\n var request = {\n origin: from,\n destination: to,\n travelMode: travelMode,\n waypoints: waypoints\n };\n\n directionsService.route(request, function (response, status) {\n if (status === google.maps.DirectionsStatus.OK) {\n if (directionsDisplay.getMap() === null) {\n directionsDisplay.setMap(map);\n }\n directionsDisplay.setDirections(response);\n } else {\n window.alert(status);\n }\n });\n }\n },\n createDirectionObjects: function createDirectionObjects(map, container) {\n var rendererOptions = {\n draggable: true\n };\n\n var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);\n var panel = container;\n\n directionsDisplay.setMap(map);\n directionsDisplay.setPanel(panel);\n\n return directionsDisplay;\n }\n },\n geocodePersonAddress: function geocodePersonAddress(map, options, icon, address, centerMap, infoWindow, windowContent, func) {\n AU.maps.geocoder.geocode({\n 'address': address\n }, function (results, status) {\n if (status === google.maps.GeocoderStatus.OK) {\n var point = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());\n var marker = AU.maps.marker.add(map, point, icon, options.markerDrag, options.markerClick, options.clickPanTo, options.clickZoom, options.clickZoomLevel, infoWindow, windowContent, '');\n\n if (typeof func === 'function') {\n func(marker, point, centerMap, infoWindow, windowContent);\n }\n }\n });\n },\n helpers: {\n getDistanceBetweenPoints: function getDistanceBetweenPoints(point1, point2) {\n return google.maps.geometry.spherical.computeDistanceBetween(point1, point2);\n },\n convertFromLatLng: function convertFromLatLng(coord) {\n return Math.round(coord * 1000000);\n },\n convertToLatLng: function convertToLatLng(coord) {\n var c;\n if (coord.length === 7) {\n c = coord.substring(0, 1) + '.' + coord.substring(1);\n }\n if (coord.length === 8) {\n c = coord.substring(0, 2) + '.' + coord.substring(2);\n }\n if (coord.length === 9) {\n c = coord.substring(0, 3) + '.' + coord.substring(3);\n }\n return c;\n },\n getCurrentDate: function getCurrentDate() {\n var d = new Date();\n var date = d.getDate();\n var month = d.getMonth() + 1;\n var currentDate = (date < 10 ? '0' + date : date) + '.' + (month < 10 ? '0' + month : month) + '.' + ('' + d.getFullYear()).substring(2);\n return currentDate;\n },\n getCurrentTime: function getCurrentTime() {\n var d = new Date();\n var hours = d.getHours();\n var minutes = d.getMinutes();\n var currentTime = (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes);\n return currentTime;\n },\n sortSelect: function sortSelect(element) {\n $(element).each(function () {\n var selectedValue = $(this).val();\n $(this).html($('option', $(this)).sort(function (a, b) {\n return a.text === b.text ? 0 : a.text < b.text ? -1 : 1;\n }));\n $(this).val(selectedValue);\n });\n },\n sortAlphaObj: function sortAlphaObj(a, b) {\n if (typeof a.name !== 'undefined' && typeof b.name !== 'undefined') {\n return a.name > b.name ? 1 : -1;\n }\n return 0;\n }\n },\n infoWindow: null,\n geocoder: null\n};\n\n// Slut på det generelle (\"biblioteket\") – nedenstående omhandler de små kort, som (primært) sidder på institutsiderne\n\nvar maps = [];\n\nAU.maps.single = {\n options: {\n image: '',\n markerDrag: !window._markerDrag ? false : window._markerDrag,\n markerClick: !window._markerClick ? true : window._markerClick,\n clickPanTo: !window._clickPanTo ? false : window._clickPanTo,\n clickZoom: !window._clickZoom ? false : window._clickZoom,\n clickZoomLevel: window._clickZoomLevel || 12,\n defaultZoomLevel: window._defaultZoomLevel || 16,\n scrollWheel: !window._scrollWheel ? false : window._scrollWheel,\n draggable: !window._draggable ? true : window._draggable,\n clickable: !window._clickable ? true : window._clickable,\n streetView: !window._streetView ? false : window._streetView,\n centerLat: window._centerLat || 56.20,\n centerLng: window._centerLng || 10.50,\n mapWidth: '99.5%',\n mapHeight: 275\n },\n center: null,\n maps: window.maps,\n mapDivs: [],\n firstMapLoaded: false,\n findFirstMap: function findFirstMap() {\n var i = 1;\n var firstMap;\n do {\n firstMap = document.getElementById('au_map' + (i === 1 ? '' : i));\n i++;\n } while (!firstMap && i <= 2);\n\n return firstMap;\n },\n loadMaps: function loadMaps() {\n // Enten populeres kortet med manuelle punkter (fra sourcen) eller også henter vi fra datakilde (iPure / XML)\n if (AU.maps.single.maps.length > 0) {\n AU.maps.single.init();\n } else {\n if (typeof window.path !== 'undefined') {\n\n var dataFunc = function dataFunc(data) {\n var locations = data.locations;\n var combinedPoints = [];\n var name;\n for (var l = 0; l < locations.length; l++) {\n name = locations[l].names[0].name;\n var lat = locations[l].latitude;\n var lng = locations[l].longitude;\n var url = locations[l].url;\n var text = locations[l].text;\n\n var points = [];\n var point = {\n latitude: lat,\n longitude: lng,\n title: name,\n text: text\n };\n points.push(point);\n combinedPoints.push(point);\n\n if ($('#au_map').length > 0) {\n AU.maps.single.maps.push({\n name: name,\n name_en: name,\n container: '#au_map',\n mapWidth: AU.maps.single.options.mapWidth,\n mapHeight: AU.maps.single.options.mapHeight,\n href: url,\n points: points,\n switchmode: 'dropdown',\n load: false\n });\n }\n }\n\n if ($('#au_map2').length > 0) {\n AU.maps.single.maps.push({\n name: name,\n name_en: name,\n container: '#au_map2',\n mapWidth: AU.maps.single.options.mapWidth,\n mapHeight: AU.maps.single.options.mapHeight,\n href: '',\n points: combinedPoints,\n load: true\n });\n }\n\n AU.maps.single.init();\n };\n\n $.getJSON(window.path, function (data) {\n dataFunc(data);\n });\n }\n }\n\n AU.maps.single.firstMapLoaded = true;\n },\n init: function init() {\n\n AU.maps.route.directionsService = new google.maps.DirectionsService();\n AU.maps.infoWindow = new google.maps.InfoWindow();\n AU.maps.geocoder = new google.maps.Geocoder();\n\n var divUsed = false;\n for (var i = 0; i < AU.maps.single.maps.length; i++) {\n\n var currentMap = AU.maps.single.maps[i];\n\n currentMap.map = null;\n currentMap.markers = [];\n\n // Finder ud af, om vi allerede har brugt den angivne div\n for (var k = 0; k < AU.maps.single.mapDivs.length; k++) {\n if (AU.maps.single.mapDivs[k] === currentMap.container) {\n divUsed = true;\n break;\n } else {\n divUsed = false;\n }\n }\n\n // Hvis vi ikke har brugt div'en, opretter vi kortet\n if (!divUsed) {\n var mapContainer = $(currentMap.container).get(0);\n var options = AU.maps.single.options;\n\n currentMap.map = AU.maps.create(mapContainer, currentMap.mapWidth, currentMap.mapHeight, options.defaultZoomLevel, AU.maps.single.center, options.scrollWheel, options.draggable, options.clickable, options.streetView);\n AU.maps.single.mapDivs.push(AU.maps.single.maps[i].container);\n\n if (currentMap.load) {\n this.setMapContent(currentMap, false);\n }\n\n $(currentMap.container).after($('
    ', {\n 'class': 'au_maps_switchlink'\n }));\n\n if (typeof currentMap.switchmode !== 'undefined' && currentMap.switchmode === 'dropdown') {\n $(currentMap.container + ' + div').append($('');\n jQuery(form).append('');\n }\n });\n\n // Alle funktioner, som er pushet til ready-objektet, løbes igennem\n for (var i = 0; i < AU.ready.length; i++) {\n if (typeof AU.ready[i] === 'function') {\n try {\n // Attempt to execute the function\n AU.ready[i]();\n } catch (e) {\n // Catch any error and log it, but don't stop execution\n console.error(\"Error in AU.ready function loop (au-init.js) at index: \" + i, e);\n }\n }\n }\n\n /*\r\n if (typeof findWidgetInit === 'function') {\r\n var dropdownWidgetLoaded = false;\r\n jQuery(document).on('show.zf.dropdown', function () {\r\n if (!dropdownWidgetLoaded) {\r\n findWidgetInit('header .find-container');\r\n dropdownWidgetLoaded = true;\r\n }\r\n });\r\n }\r\n */\n\n var findBtn = document.querySelector('header .find-button');\n if (findBtn) {\n findBtn.setAttribute('href', AU.pageLang === 'da' ? 'https://www.au.dk/kort/' : 'https://www.au.dk/en/map/');\n }\n\n if ((typeof AU.basic === 'undefined' || !AU.basic) && (typeof window.defaultTracking === 'undefined' || window.defaultTracking)) {\n // Siteimprove\n (function () {\n var sz = document.createElement('script');\n sz.type = 'text/plain';\n sz.async = true;\n sz.setAttribute('data-cookiescript', 'accepted');\n sz.setAttribute('data-cookiecategory', 'performance');\n sz.src = '//siteimproveanalytics.com/js/siteanalyze_4573657.js';\n var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(sz, s);\n })();\n }\n });\n\n jQuery(window).on('load', function () {\n AU.design.setBannerElementsLoad();\n\n for (var i = 0; i < AU.load.length; i++) {\n if (typeof AU.load[i] === 'function') {\n AU.load[i]();\n }\n }\n });\n\n jQuery(window).on('resize', function () {\n for (var i = 0; i < AU.resize.length; i++) {\n if (typeof AU.resize[i] === 'function') {\n AU.resize[i]();\n }\n }\n });\n\n jQuery(window).on('scroll', function () {\n for (var i = 0; i < AU.scroll.length; i++) {\n if (typeof AU.scroll[i] === 'function') {\n AU.scroll[i]();\n }\n }\n });\n})();","/**\r\n * Titel: FALLBACK\r\n * Beskrivelse: består af den ældgamle 'pingAnalytics' til GA-tracking og nogle ukendte/LF-udviklede funktioner, der kan ske at være i brug rundt omkring...\r\n * Status: Do. Not. Touch.\r\n */\r\n\r\nfunction pressed(url) {\r\n location.href = url;\r\n}\r\n\r\nfunction pres(url) {\r\n location.href = url;\r\n}\r\n\r\nfunction replaceall(s, x, y) {\r\n if (x.length > 0) {\r\n var found = s.indexOf(x);\r\n while (found >= 0) {\r\n s = s.substring(0, found) + y + s.substring(found + x.length, s.length);\r\n found = s.indexOf(x, found + y.length);\r\n }\r\n }\r\n return s;\r\n}\r\n\r\nfunction multipressed(xx, urlPattern, StartValue) {\r\n var url = urlPattern;\r\n var allow = StartValue;\r\n var OK = true;\r\n for (var i = 0; i < xx.elements.length; i++) {\r\n if (xx.elements[i].type === 'select-one') {\r\n if (OK) {\r\n OK = (xx.elements[i].selectedIndex >= allow);\r\n }\r\n url = replaceall(url, '$' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\r\n url = replaceall(url, '¤' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\r\n }\r\n }\r\n url = url.toLowerCase();\r\n if (OK) {\r\n location.href = url;\r\n } else {\r\n window.alert('Vælg en værdi i alle felter!');\r\n }\r\n}\r\n\r\n// En kommentar","/**\r\n * @author TRH\r\n */\r\n\r\n/*** GLOBALT AU OBJEKT ***/\r\n\r\nvar AU = {\r\n pageLang: 'da', // Default sprog\r\n cdn: 'https://cdn.au.dk',\r\n version: '202204211100',\r\n bss: false,\r\n ready: [],\r\n addReadyFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the ready array\r\n if (AU.ready.indexOf(fn) === -1) {\r\n AU.ready.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.ready and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.ready.\");\r\n }\r\n },\r\n load: [],\r\n addLoadFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the load array\r\n if (AU.load.indexOf(fn) === -1) {\r\n AU.load.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.load and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.load.\");\r\n }\r\n },\r\n resize: [],\r\n addResizeFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the resize array\r\n if (AU.resize.indexOf(fn) === -1) {\r\n AU.resize.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.resize and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.resize.\");\r\n }\r\n },\r\n scroll: [],\r\n addScrollFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the scroll array\r\n if (AU.scroll.indexOf(fn) === -1) {\r\n AU.scroll.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.scroll and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.scroll.\");\r\n }\r\n },\r\n navigation: {}\r\n};","/**\r\n * Titel: HELPERS\r\n * Beskrivelse: hjælpemetoder som kan anvendes på tværs af alle scripts\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\r\n\r\nAU.helpers = {\r\n getUnicodeKey: function (e) {\r\n var unicode = e.keyCode ? e.keyCode : e.charCode;\r\n return unicode;\r\n },\r\n rewriteLink: function (text) {\r\n return text.trim().toLowerCase().replace(/ /g, '_').replace(/æ/g, 'ae').replace(/ø/g, 'oe').replace(/å/g, 'aa');\r\n },\r\n getQuerystring: function (key, default_) {\r\n if (!default_) {\r\n default_ = '';\r\n }\r\n\r\n key = key.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\r\n var regex = new RegExp(\"[\\\\?&]\" + key + \"=([^&#]*)\");\r\n\r\n var qs = regex.exec(window.location.href);\r\n\r\n if (qs === null) {\r\n return default_;\r\n } else {\r\n return qs[1];\r\n }\r\n },\r\n getInternetExplorerVersion: function () {\r\n var rv = -1;\r\n if (navigator.userAgent.indexOf('Trident') > -1) {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"rv:([0-9]{1,}[.0-9]{0,})\");\r\n if (re.exec(ua) !== null) {\r\n rv = parseFloat(RegExp.$1);\r\n }\r\n }\r\n return rv;\r\n },\r\n isMobileDevice: function () {\r\n return (/Mobile|iP(hone|od|ad)|Android|IEMobile/i).test(navigator.userAgent);\r\n },\r\n getXML: function (source, callback) {\r\n jQuery.ajax({\r\n type: 'GET',\r\n url: source,\r\n dataType: 'xml',\r\n success: function (data) {\r\n if (typeof callback === 'function') {\r\n callback(data);\r\n }\r\n }\r\n });\r\n },\r\n isElementInViewport: function (element) {\r\n if (element === null) {\r\n return false;\r\n }\r\n\r\n var rect = element.getBoundingClientRect();\r\n\r\n return (rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth));\r\n },\r\n isElementPartlyInViewport: function (element) {\r\n var top = element.offsetTop;\r\n var left = element.offsetLeft;\r\n var width = element.offsetWidth;\r\n var height = element.offsetHeight;\r\n\r\n while (element.offsetParent) {\r\n element = element.offsetParent;\r\n top += element.offsetTop;\r\n left += element.offsetLeft;\r\n }\r\n\r\n return (\r\n top < (window.pageYOffset + window.innerHeight) &&\r\n left < (window.pageXOffset + window.innerWidth) &&\r\n (top + height) > window.pageYOffset &&\r\n (left + width) > window.pageXOffset\r\n );\r\n },\r\n trimText: function (label, amount, end) {\r\n if (label.length > amount) {\r\n return label.substring(0, amount) + end;\r\n }\r\n\r\n return label;\r\n },\r\n validateEmail: function (email) {\r\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(email);\r\n },\r\n componentToHex: function (c) {\r\n var hex = c.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n },\r\n rgbToHex: function (r, g, b) {\r\n return this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\r\n },\r\n getPageContent: function (url, retrieveSelector, insertSelector, callback) {\r\n var urlAllowed = function (url) {\r\n var protocolAndHost = location.protocol + '//' + location.host;\r\n return url.indexOf(protocolAndHost) === 0;\r\n };\r\n\r\n var insertElement = jQuery(insertSelector);\r\n if (urlAllowed(url)) {\r\n insertElement.load(url + ' ' + retrieveSelector, function () {\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n accentMap: {\r\n 'é': 'e',\r\n 'ä': 'æ',\r\n 'ö': 'ø',\r\n 'á': 'a',\r\n 'ü': 'y'\r\n },\r\n normalizeAccents: function (term, accentMap) {\r\n if (!accentMap) {\r\n accentMap = this.accentMap;\r\n }\r\n\r\n var ret = '';\r\n for (var i = 0; i < term.length; i++) {\r\n ret += accentMap[term.charAt(i)] || term.charAt(i);\r\n }\r\n return ret;\r\n }\r\n};","/**\r\n * Titel: NAVIGATION\r\n * Beskrivelse: initialisering af menuer, fade (som stadig bruges til news), brødkrummer m.m.\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\r\n\r\nAU.navigation.menu = {\r\n setClick: function () {\r\n jQuery('button.menu-icon').on('click', function () {\r\n var headerMenu = jQuery(this).parents('.header-menu');\r\n if (headerMenu.hasClass('open')) {\r\n headerMenu.removeClass('open');\r\n if (!AU.bss) {\r\n jQuery('.search').removeClass('hide');\r\n }\r\n } else {\r\n headerMenu.addClass('open');\r\n if (!AU.bss) {\r\n jQuery('.search').addClass('hide');\r\n }\r\n }\r\n });\r\n },\r\n setUtility: function () {\r\n jQuery(document).on('show.zf.dropdown', 'header .dropdown-pane', function () {\r\n AU.databox.init();\r\n AU.alphabox.init();\r\n });\r\n },\r\n setBreadcrumb: function () {\r\n var bc = jQuery('#au_breadcrumb');\r\n var crumbs = jQuery('> a', bc);\r\n var crumbCutOff = 3;\r\n if (crumbs.length > crumbCutOff) {\r\n bc.addClass('collapse');\r\n crumbs.eq(0).after('
       
    ');\r\n jQuery('.bc-expand span').on('click', function () {\r\n bc.toggleClass('collapse');\r\n });\r\n }\r\n },\r\n addExtraMenuItem: function () { // Fix til den mobile menu, hvor der indsættes et ekstra top-level menupunkt\r\n var topLevelMenuItems = jQuery('.top-bar > div > ul.menu li.has-submenu');\r\n topLevelMenuItems.each(function () {\r\n var topLevelMenuItem = jQuery('> a', this);\r\n var topLevelSubMenu = jQuery('ul.submenu', this);\r\n topLevelSubMenu.prepend('
  • ' + topLevelMenuItem.text() + '
  • ');\r\n });\r\n },\r\n setTopBar: function () {\r\n var topBarLinks = jQuery('body:not(.department):not(.neutral) .top-bar .menu > li > a, body.department:not(.omnibus) .top-bar.custom .menu > li > a');\r\n var headerMenu = jQuery('.header-menu');\r\n topBarLinks.each(function () {\r\n var topBarContent = jQuery('.top-bar-content', jQuery(this).parent());\r\n jQuery(this).on('mouseover', function () {\r\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\r\n AU.navigation.topBarTimeout = setTimeout(function () {\r\n topBarContent.show().css('width', headerMenu.css('width'));\r\n }, 300);\r\n }\r\n }).on('mouseout', function () {\r\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\r\n topBarContent.hide();\r\n clearTimeout(AU.navigation.topBarTimeout);\r\n }\r\n }).on('click', function (e) {\r\n if (AU.helpers.isMobileDevice()) {\r\n e.preventDefault();\r\n jQuery('.top-bar-content').not(topBarContent).hide();\r\n topBarContent.toggle().css('width', headerMenu.css('width'));\r\n }\r\n });\r\n });\r\n\r\n jQuery('.top-bar-content').on('mouseover', function () {\r\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\r\n jQuery(this).show();\r\n }\r\n }).on('mouseout', function () {\r\n if (AU.responsive.state.NAME != 'PHONE' && !AU.helpers.isMobileDevice()) {\r\n jQuery(this).hide();\r\n }\r\n });\r\n\r\n if (typeof window.selectedUM !== 'undefined' && window.selectedUM !== 100) { // 100 = ingenting.\r\n jQuery('.top-bar .menu > li:eq(' + (window.selectedUM - 1) + ')').addClass('active');\r\n }\r\n }\r\n};\r\n\r\nAU.navigation.search = {\r\n setClick: function () {\r\n jQuery('#tx_googlequery_searchform_ss_q, #cludo-search-form-input').on('focusout', function () {\r\n jQuery('#tx_googlequery_searchform_ss_q, #cludo-search-form-input').val('');\r\n jQuery('.section-header').removeClass('opensearch');\r\n });\r\n\r\n jQuery('.au_searchbox').on('click', function () {\r\n jQuery('.section-header').addClass('opensearch');\r\n jQuery('#tx_googlequery_searchform_ss_q, #cludo-search-form-input').focus();\r\n });\r\n }\r\n};\r\n\r\nAU.navigation.frontpage = {\r\n setTargetGroups: function () {\r\n var buttons = jQuery('.target-groups .button');\r\n var groups = jQuery('.target-groups + div > div > .csc-default');\r\n var toggleGroup = function (i) {\r\n var group = groups.eq(i);\r\n group.toggleClass('active');\r\n groups.not(group).removeClass('active');\r\n }\r\n buttons.each(function (i, btn) {\r\n var button = jQuery(btn);\r\n button.on('click', function (e) {\r\n e.preventDefault();\r\n jQuery(this).toggleClass('active');\r\n buttons.not(button).removeClass('active');\r\n toggleGroup(i);\r\n });\r\n });\r\n }\r\n};\r\n","/**\r\n * Titel: COOKIES\r\n * Beskrivelse: Hjælpemetoder til get/set af cookies samt initialisering af cookievarsling\r\n * Status: er ikke blevet ændret siden 2011-designet. Cookieadvarslen kunne med fordel skrives om til ES6/React\r\n */\r\n\r\nAU.cookies = {\r\n set: function (c_name, value, exdays, path) {\r\n if (typeof path === 'undefined') {\r\n path = ';path=/;domain=au.dk';\r\n }\r\n\r\n var exdate = new Date();\r\n exdate.setDate(exdate.getDate() + exdays);\r\n var c_value = encodeURI(value) + ((exdays === null) ? '' : '; expires=' + exdate.toUTCString());\r\n document.cookie = c_name + '=' + c_value + path;\r\n },\r\n get: function (c_name) {\r\n var c_value = document.cookie;\r\n var c_start = c_value.indexOf(' ' + c_name + '=');\r\n if (c_start === -1) {\r\n c_start = c_value.indexOf(c_name + '=');\r\n }\r\n if (c_start === -1) {\r\n c_value = null;\r\n }\r\n else {\r\n c_start = c_value.indexOf('=', c_start) + 1;\r\n var c_end = c_value.indexOf(';', c_start);\r\n if (c_end === -1) {\r\n c_end = c_value.length;\r\n }\r\n c_value = decodeURI(c_value.substring(c_start, c_end));\r\n }\r\n return c_value;\r\n },\r\n alertElement: null,\r\n noAlertPeriod: 365,\r\n strings: {\r\n header: '',\r\n paragraph: '',\r\n button: ''\r\n },\r\n init: function () {\r\n if (window.alertCookies) {\r\n var replaceCookieTexts = function (text) {\r\n return text.replace('{0}', AU.cookies.strings.header).replace('{1}', AU.cookies.strings.paragraph).replace('{2}', AU.cookies.strings.button);\r\n };\r\n\r\n var alertElement = document.createElement('div');\r\n alertElement.setAttribute('id', 'au_cookiesalert');\r\n alertElement.innerHTML = replaceCookieTexts('

    {0}

    {1}

    ');\r\n var globalFooter = document.querySelector('footer.global');\r\n if (globalFooter) {\r\n globalFooter.insertAdjacentElement('afterend', alertElement);\r\n alertElement.style.display = 'none';\r\n this.alertElement = alertElement;\r\n }\r\n\r\n var allowCookies = this.get('allow_cookies');\r\n if (allowCookies === null) {\r\n this.alert();\r\n }\r\n }\r\n },\r\n initCookieScript: function () {\r\n if (typeof window.cookieScriptId !== 'undefined') {\r\n // Insert scripts and CSS for Pop Up\r\n var head = document.head;\r\n var cookieScriptManipulationCode = document.createElement('script');\r\n cookieScriptManipulationCode.setAttribute('src', '//cdn.au.dk/res/cookiescript/cookie-modal.min.js?a=' + (typeof window.cookieScriptVersion !== 'undefined' ? window.cookieScriptVersion : '1'));\r\n cookieScriptManipulationCode.setAttribute('charset', 'UTF-8');\r\n cookieScriptManipulationCode.setAttribute('type', 'text/javascript');\r\n head.insertBefore(cookieScriptManipulationCode, head.firstElementChild);\r\n }\r\n },\r\n alert: function () {\r\n if (this.alertElement !== null) {\r\n this.alertElement.style.display = 'block';\r\n\r\n document.querySelector('#au_cookiesalert_yes button').addEventListener('click', function (e) {\r\n e.preventDefault();\r\n AU.cookies.accept(AU.cookies.noAlertPeriod, true);\r\n });\r\n }\r\n },\r\n accept: function (duration, byGUI) {\r\n var path = location.host.indexOf('au.dk') > -1 ? undefined : ';path=/';\r\n this.set('allow_cookies', 'true', duration, path);\r\n if (byGUI) {\r\n this.alertElement.style.display = 'none';\r\n }\r\n }\r\n};","/**\r\n * Titel: DESIGN\r\n * Beskrivelse: metoder som udbedrer en række \"shortcomings\" i designet eller tilføjer ekstra features til elementer\r\n * Status: er en blanding af nyt og gammelt. ES5-syntax hele vejen igennem\r\n */\r\n\r\nAU.design = {\r\n setFocusFieldIds: function () {\r\n jQuery('.au_focus').each(function (i) {\r\n if (!jQuery(this).attr('id')) {\r\n jQuery(this).attr('id', 'focusid_' + i);\r\n }\r\n });\r\n },\r\n setBuildingLinks: function (elementToSearchSelector) {\r\n var elementToSearch = jQuery(elementToSearchSelector);\r\n\r\n if (elementToSearch.length > 0) {\r\n var mapUrl = AU.pageLang === \"da\" ? '//www.au.dk/kort/' : '//www.au.dk/en/map/';\r\n var buildingPhrase = AU.pageLang === \"da\" ? 'bygning' : 'building';\r\n var re = new RegExp('(' + buildingPhrase + ' (\\\\d{4}))', 'ig');\r\n jQuery.each(elementToSearch, function () {\r\n jQuery(this).html(jQuery(this).html().replace(re, '$1'));\r\n });\r\n }\r\n },\r\n onCollapseOpen: [],\r\n onCollapseClose: [],\r\n setCollapse: function () {\r\n\r\n var openEvent = document.createEvent('Event');\r\n openEvent.initEvent('collapsible-open', true, true);\r\n\r\n var closeEvent = document.createEvent('Event');\r\n closeEvent.initEvent('collapsible-close', true, true);\r\n\r\n var collapsibles = jQuery('.csc-frame.au_collapsible');\r\n collapsibles.each(function () {\r\n var me = jQuery(this);\r\n var domElement = me.get(0);\r\n var header = jQuery('> .csc-header', me);\r\n\r\n header.unbind('click').on('click', function () {\r\n me.toggleClass('au_collapsed');\r\n if (me.hasClass('au_collapsed')) {\r\n domElement.dispatchEvent(closeEvent);\r\n } else {\r\n domElement.dispatchEvent(openEvent);\r\n }\r\n });\r\n\r\n var d = AU.design;\r\n domElement.addEventListener('collapsible-open', function (e) {\r\n for (var i = 0; i < d.onCollapseOpen.length; i++) {\r\n if (typeof d.onCollapseOpen[i] === 'function') {\r\n d.onCollapseOpen[i](e.target);\r\n }\r\n }\r\n }, false);\r\n\r\n\r\n domElement.addEventListener('collapsible-close', function (e) {\r\n for (var i = 0; i < d.onCollapseClose.length; i++) {\r\n if (typeof d.onCollapseClose[i] === 'function') {\r\n d.onCollapseClose[i](e.target);\r\n }\r\n }\r\n }, false);\r\n });\r\n\r\n this.openCollapsibleFromHash(location.hash);\r\n\r\n jQuery(window).on('hashchange', function () {\r\n AU.design.openCollapsibleFromHash(location.hash);\r\n });\r\n },\r\n openCollapsibleFromHash: function (hash) {\r\n if (hash.indexOf('c') === 1) {\r\n jQuery(hash + '.csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible').removeClass('au_collapsed');\r\n jQuery(hash).parents('.au_collapsible').removeClass('au_collapsed');\r\n document.querySelector(hash).scrollIntoView();\r\n }\r\n },\r\n grayscale: function (src) {\r\n try {\r\n var supportsCanvas = !!document.createElement('canvas').getContext;\r\n if (supportsCanvas) {\r\n var canvas = document.createElement('canvas'),\r\n context = canvas.getContext('2d'),\r\n imageData, px, length, i = 0, gray,\r\n img = new Image();\r\n\r\n img.src = src;\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n context.drawImage(img, 0, 0);\r\n\r\n imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n px = imageData.data;\r\n length = px.length;\r\n\r\n for (; i < length; i += 4) {\r\n gray = px[i] * 0.3 + px[i + 1] * 0.59 + px[i + 2] * 0.11;\r\n px[i] = px[i + 1] = px[i + 2] = gray;\r\n }\r\n\r\n context.putImageData(imageData, 0, 0);\r\n return canvas.toDataURL();\r\n } else {\r\n return src;\r\n }\r\n } catch(err) {\r\n console.log(err);\r\n return src;\r\n }\r\n },\r\n setBannerElementsReady: function () {\r\n jQuery('.aubanner a').hover(\r\n function () {\r\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 1 }, 200);\r\n },\r\n function () {\r\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 0 }, 500);\r\n }\r\n );\r\n },\r\n setBannerElementsLoad: function () {\r\n jQuery('.aubanner:not(.aubanner-2) img').each(function () { // Fordi det er fuldstændig utænkeligt, at vi kan få fjernet Prototype fra pure.au.dk...\r\n var bc = jQuery('.aubanner-content', jQuery(this).parents('.aubanner'));\r\n bc.css('background-image', \"url('\" + AU.design.grayscale(this.src) + \"')\");\r\n }).animate({ opacity: 1 }, 500);\r\n },\r\n setHero: function () {\r\n var hero = jQuery('.hero');\r\n if (hero.length > 0) {\r\n jQuery(window).scroll(function () {\r\n var x = jQuery(this).scrollTop() + (jQuery('body').hasClass('layout13') ? 0 : -200);\r\n hero.css('background-position-y', parseInt(x / 10) + 'px');\r\n });\r\n }\r\n },\r\n setMagnificPopup: function () {\r\n var lightbox = jQuery('.csc-textpic a[rel*=\"lightbox\"], .image a[rel*=\"lightbox\"]');\r\n\r\n // http://stackoverflow.com/questions/6900958/using-jquery-to-perform-a-function-on-elements-with-unique-rel-attribute\r\n var rels = {};\r\n lightbox.each(function () {\r\n var r = jQuery(this).attr('rel');\r\n rels[r] = 1;\r\n });\r\n\r\n rels = Object.keys(rels);\r\n jQuery.each(rels, function (index, value) {\r\n jQuery('a[rel=\"' + value + '\"]').magnificPopup({\r\n type: 'image',\r\n gallery: {\r\n enabled: true\r\n },\r\n modal: false\r\n });\r\n });\r\n\r\n var newsImgs = jQuery('.au_news-single-sub-images a, .au_news-single-img a, .news-set1-img1all a');\r\n newsImgs.magnificPopup({\r\n type: 'image',\r\n gallery: {\r\n enabled: true\r\n },\r\n modal: false\r\n });\r\n },\r\n setTopWarning: function () {\r\n if (window.topWarning) {\r\n jQuery('body').prepend(jQuery('
    ', {\r\n 'class': 'ie-warning',\r\n 'html': AU.pageLang == 'da' ? window.topWarningTextDa : window.topWarningTextEn\r\n }));\r\n }\r\n }\r\n};","AU.basic = true;\r\n\r\nAU.ipure = {\r\n source: {\r\n\r\n }\r\n};\r\n\r\nAU.design.setMagnificPopup = function () {\r\n return;\r\n};\r\n\r\nAU.databox = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.flowbox = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.alphabox = {\r\n boxes: [],\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.piechart = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.social = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.news = {\r\n feeds: [],\r\n init: function () {\r\n return;\r\n }\r\n};","/**\r\n * Titel: RESPONSIVE\r\n * Beskrivelse: indeholder efterhånden primært logik til omsættelse af tabeller til responsiv opførsel (lister), herunder studiediagrammerne. Derudover er der en lille smule logik til det nye design\r\n * Status: er kun i nogen grad omskrevet fra 2011/2015-udgaven\r\n */\r\n\r\nAU.responsive = {\r\n state: null,\r\n stateHistory: [],\r\n modes: {\r\n PHONE: {\r\n ID: 0,\r\n NAME: 'PHONE',\r\n MAX: 640\r\n },\r\n TABLET: {\r\n ID: 1,\r\n NAME: 'TABLET',\r\n MAX: 1024\r\n },\r\n DESKTOP: {\r\n ID: 2,\r\n NAME: 'DESKTOP'\r\n }\r\n },\r\n detectDevice: function () {\r\n\r\n var state = null;\r\n var modes = AU.responsive.modes;\r\n if (Foundation.MediaQuery.current === 'small') {\r\n state = modes.PHONE;\r\n }\r\n else if (Foundation.MediaQuery.current === 'medium') {\r\n state = modes.TABLET;\r\n }\r\n else {\r\n state = modes.DESKTOP;\r\n }\r\n\r\n if (state !== AU.responsive.state) {\r\n AU.responsive.state = state;\r\n AU.responsive.stateHistory.push(state.NAME);\r\n console.log(state.NAME);\r\n AU.responsive.setMarkup();\r\n }\r\n },\r\n markupRenderFunctions: [],\r\n runMarkupFunctions: function () {\r\n for (var i = 0; i < this.markupRenderFunctions.length; i++) {\r\n if (typeof this.markupRenderFunctions[i] === 'function') {\r\n this.markupRenderFunctions[i]();\r\n }\r\n }\r\n },\r\n setMarkup: function () {\r\n var state = AU.responsive.state;\r\n\r\n var utilityLinks = jQuery('.utility-links');\r\n var headerMenu = jQuery('.header-menu');\r\n var sectionHeader = jQuery('.section-header .logo');\r\n\r\n var pageNav = jQuery('#au_section_nav_inner_list');\r\n var titleBar = jQuery('.title-bar');\r\n var menuTitle = jQuery('.menu-title');\r\n var leftMenu = jQuery('.left-menu');\r\n var tablesScroll = jQuery('table.au_responsive_table_scroll');\r\n\r\n if (state.NAME === 'PHONE') {\r\n\r\n headerMenu.append(utilityLinks);\r\n if (jQuery('body').hasClass('universe')) {\r\n headerMenu.after(pageNav);\r\n pageNav.wrap('
    ');\r\n } else {\r\n utilityLinks.before(pageNav);\r\n }\r\n titleBar.before(menuTitle);\r\n pageNav.addClass('responsive-pagenav');\r\n\r\n tablesScroll.each(function () {\r\n var table = jQuery(this);\r\n table.wrap('
    ');\r\n });\r\n\r\n } else {\r\n\r\n var wasPhone = function () {\r\n var states = AU.responsive.stateHistory.length;\r\n return states > 1 ? AU.responsive.stateHistory[states - 2] === 'PHONE' : false;\r\n };\r\n\r\n if (wasPhone()) {\r\n sectionHeader.append(utilityLinks);\r\n leftMenu.append(pageNav);\r\n pageNav.before(menuTitle);\r\n\r\n }\r\n\r\n tablesScroll.each(function () {\r\n var table = jQuery(this);\r\n if (table.parent().is('div.responsive-table-container')) {\r\n table.unwrap();\r\n }\r\n });\r\n }\r\n\r\n this.runMarkupFunctions();\r\n }\r\n};\r\n\r\nAU.edutables = {\r\n tables: [],\r\n scriptLoaded: false,\r\n loadExternal: function () {\r\n const dg = new AUDiagramme(AU.pageLang, AU.edutables.tables);\r\n dg.init();\r\n },\r\n init: function () {\r\n if (this.tables.length > 0) {\r\n if (!this.scriptLoaded) {\r\n const componentsUrl = AU.cdn + '/components/umd/diagramme.js';\r\n jQuery.getScript(componentsUrl, function () {\r\n AU.edutables.loadExternal();\r\n AU.edutables.scriptLoaded = true;\r\n });\r\n } else {\r\n this.loadExternal();\r\n }\r\n }\r\n }\r\n};\r\n\r\nAU.addReadyFunction(function () {\r\n AU.responsive.detectDevice();\r\n AU.edutables.init();\r\n});\r\n\r\nAU.addResizeFunction(function () {\r\n AU.responsive.detectDevice();\r\n});\r\n","// Default søgeboks til medarbejderportaler til utility-box\r\nconst DEFAULT_util_staffportal_da = {\r\n config: {\r\n container: '#au_databox_staff_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Institutter',\r\n link: ''\r\n }, {\r\n text: 'Fakulteter',\r\n link: ''\r\n }, {\r\n text: 'Fællesadministrationen',\r\n link: ''\r\n }, {\r\n text: 'Øvrige enheder',\r\n link: ''\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n color: '#37a0cb',\r\n overlay: false\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/6'\r\n }\r\n};\r\nconst DEFAULT_util_staffportal_en = {\r\n config: {\r\n container: '#au_databox_staff_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Departments',\r\n link: ''\r\n }, {\r\n text: 'Faculties',\r\n link: ''\r\n }, {\r\n text: 'Other units',\r\n link: ''\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n color: '#37a0cb',\r\n overlay: false\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/7'\r\n }\r\n};\r\n\r\n// Default søgeboks til institutter til utility-box\r\nconst DEFAULT_util_department_da = {\r\n config: {\r\n container: '#au_databox_unit_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'http://arts.au.dk'\r\n }, {\r\n text: 'Health',\r\n link: 'http://health.au.dk'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'http://nat.au.dk'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'http://tech.au.dk'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'http://bss.au.dk'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/47'\r\n }\r\n};\r\nconst DEFAULT_util_department_en = {\r\n config: {\r\n container: '#au_databox_unit_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'http://arts.au.dk/en/'\r\n }, {\r\n text: 'Health',\r\n link: 'http://health.au.dk/en/'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'http://nat.au.dk/en/'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'http://tech.au.dk/en/'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'http://bss.au.dk/en/'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/52'\r\n }\r\n};\r\n\r\n// Default alphabox med medarbejderservice til utility-box\r\nconst DEFAULT_util_staffservice_da = {\r\n config: {\r\n container: '#au_alphabox_staff_utility',\r\n title: 'Find værktøjer, vejledninger og serviceydelser',\r\n url: 'http://medarbejdere.au.dk/administration/',\r\n description: 'Find flere informationer om',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/administration/it/'\r\n }, {\r\n title: 'Økonomi',\r\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\r\n }, {\r\n title: 'Bygninger',\r\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\r\n }, {\r\n title: 'Kommunikation',\r\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\r\n }, {\r\n title: 'Studieadm.',\r\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\r\n }, {\r\n title: 'Forskningspraksis',\r\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\r\n }, {\r\n title: 'Internationalt',\r\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\r\n }],\r\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\r\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\r\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks',\r\n },\r\n search: {\r\n placeHolder: 'Søg i værktøjer m.m.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\r\n }\r\n};\r\nconst DEFAULT_util_staffservice_en = {\r\n config: {\r\n container: '#au_alphabox_staff_utility',\r\n title: 'Find tools, guidelines and services',\r\n url: 'http://medarbejdere.au.dk/en/administration/',\r\n description: 'Find more information about',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/en/administration/it/'\r\n }, {\r\n title: 'Finance',\r\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\r\n }, {\r\n title: 'Buildings',\r\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\r\n }, {\r\n title: 'Communication',\r\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\r\n }, {\r\n title: 'Studies adm.',\r\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\r\n }, {\r\n title: 'Research Practice',\r\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\r\n }, {\r\n title: 'International',\r\n url: 'http://medarbejdere.au.dk/en/administration/international/'\r\n }],\r\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\r\n noResultsSearch: 'Your search did not return any results. Please try other words.',\r\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service',\r\n },\r\n search: {\r\n placeHolder: 'Search for tools, etc.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\r\n }\r\n};\r\n\r\n// Default søgeboks til ph.d.-portaler til utility-box\r\nconst DEFAULT_util_phdportal_da = {\r\n config: {\r\n container: '#au_databox_phd_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'https://phd.arts.au.dk'\r\n }, {\r\n text: 'Health',\r\n link: 'https://phd.health.au.dk/'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'https://phd.nat.au.dk/'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'https://phd.tech.au.dk/'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'https://bss.au.dk/phd/'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/50'\r\n }\r\n};\r\nconst DEFAULT_util_phdportal_en = {\r\n config: {\r\n container: '#au_databox_phd_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'https://phd.arts.au.dk'\r\n }, {\r\n text: 'Health',\r\n link: 'https://phd.health.au.dk/'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'https://phd.nat.au.dk/'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'https://phd.tech.au.dk/'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'https://bss.au.dk/phd/'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/50'\r\n }\r\n};\r\n\r\n// Default alphabox med studieportaler til utility-box\r\nconst DEFAULT_util_student_da = {\r\n config: {\r\n container: '#au_alphabox_student_utility',\r\n title: 'Studieportaler',\r\n url: 'http://studerende.au.dk',\r\n links: []\r\n },\r\n search: {\r\n placeHolder: 'Søg efter studieportal'\r\n },\r\n background: {\r\n color: '#2a4a0f',\r\n linkColor: '#8bad3f'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/2?itemsOnly=true'\r\n }\r\n};\r\nconst DEFAULT_util_student_en = {\r\n config: {\r\n container: '#au_alphabox_student_utility',\r\n title: 'Study portals',\r\n url: 'http://studerende.au.dk/en/',\r\n links: []\r\n },\r\n search: {\r\n placeHolder: 'Search for Study portal'\r\n },\r\n background: {\r\n color: '#2a4a0f',\r\n linkColor: '#8bad3f'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/4?itemsOnly=true'\r\n }\r\n};\r\n\r\n// Default alphabox med medarbejderservice til medarbejdere.au.dk (forside m.m.)\r\nconst DEFAULT_staff_staffservice_da = {\r\n config: {\r\n container: '#au_alphabox_1',\r\n title: 'Find værktøjer, vejledninger og serviceydelser',\r\n url: 'http://medarbejdere.au.dk/administration/',\r\n description: 'Find flere informationer om',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/administration/it/'\r\n }, {\r\n title: 'Økonomi',\r\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\r\n }, {\r\n title: 'Bygninger',\r\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\r\n }, {\r\n title: 'Kommunikation',\r\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\r\n }, {\r\n title: 'Studieadm.',\r\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\r\n }, {\r\n title: 'Forskningspraksis',\r\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\r\n }, {\r\n title: 'Internationalt',\r\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\r\n }],\r\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\r\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\r\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks',\r\n },\r\n search: {\r\n placeHolder: 'Søg i værktøjer m.m.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\r\n }\r\n};\r\nconst DEFAULT_staff_staffservice_en = {\r\n config: {\r\n container: '#au_alphabox_1',\r\n title: 'Find tools, guidelines and services',\r\n url: 'http://medarbejdere.au.dk/en/administration/',\r\n description: 'Find more information about',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/en/administration/it/'\r\n }, {\r\n title: 'Finance',\r\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\r\n }, {\r\n title: 'Buildings',\r\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\r\n }, {\r\n title: 'Communication',\r\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\r\n }, {\r\n title: 'Studies adm.',\r\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\r\n }, {\r\n title: 'Research Practice',\r\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\r\n }, {\r\n title: 'International',\r\n url: 'http://medarbejdere.au.dk/en/administration/international/'\r\n }],\r\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\r\n noResultsSearch: 'Your search did not return any results. Please try other words.',\r\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service',\r\n },\r\n search: {\r\n placeHolder: 'Search for tools, etc.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\r\n }\r\n};","/**\r\n * Titel: MAPS\r\n * Beskrivelse: Google Maps-baseret kortløsning.\r\n * Status: er noget af det ældste kode, vi har kørende. Virker som sådan fint nok, men ved et større kortprojekt ville det være oplagt at få omskrevet\r\n */\r\n\r\nconst GOOGLE_MAPS_API_KEY = \"AIzaSyBP04DSgKVcqkYGO_Xb4GgqXHMzRO_2jzo\";\r\n\r\nAU.maps = {\r\n loadGoogleMapsScript: function () {\r\n // Check if the global variable for loading Google Maps is defined, if not default to false\r\n var shouldLoadGoogleMapsScript = typeof window.loadGoogleMapsScript !== 'undefined' ? window.loadGoogleMapsScript : false;\r\n var shouldLoadGoogleMapsScriptAsync = typeof window.loadGoogleMapsScriptAsync !== 'undefined' ? window.loadGoogleMapsScriptAsync : true; // Default to true for async\r\n\r\n // Early return if we should not load the Google Maps script\r\n if (shouldLoadGoogleMapsScript) {\r\n console.log(\"Google Maps script will be loaded manually on this page\");\r\n } else{\r\n return;\r\n }\r\n\r\n // Construct the base URL with the API key\r\n var scriptUrl = 'https://maps.googleapis.com/maps/api/js?key=' + GOOGLE_MAPS_API_KEY;\r\n\r\n // Conditionally add the async loading parameter to the URL\r\n if (shouldLoadGoogleMapsScriptAsync) {\r\n scriptUrl += '&loading=async';\r\n }\r\n\r\n scriptUrl += '&callback=AU.maps.googleMapsScriptCallback';\r\n\r\n // Create a script element and set the constructed URL\r\n var script = document.createElement('script');\r\n script.src = scriptUrl;\r\n\r\n // Handle the script load success\r\n script.onload = function () {\r\n console.log(\"Google Maps script has been loaded successfully. Now waiting for the callback to initialize.\");\r\n };\r\n\r\n // Handle script load failure and capture details\r\n script.onerror = function (event) {\r\n console.error(\"Error loading Google Maps script:\", event);\r\n console.error(\"Script URL:\", event.target.src); // URL of the failed script\r\n };\r\n\r\n // Append the script to the document's head to initiate the load\r\n document.head.appendChild(script);\r\n },\r\n // If the Google maps script is loaded, we use this callback to dispatch an googleMapsScriptLoadedEvent event\r\n googleMapsScriptLoaded: false,\r\n googleMapsScriptCallback: function () {\r\n AU.maps.googleMapsScriptLoaded = true;\r\n console.log(\"Google Maps script callback has been executed. Google Maps is ready for use.\");\r\n\r\n // Dispatch a custom event to notify that Google Maps is ready\r\n const event = new CustomEvent('googleMapsScriptLoadedEvent');\r\n window.dispatchEvent(event);\r\n },\r\n create: function (container, width, height, zoomLevel, center, scrollWheel, draggable, clickable, streetView, pco, zco, svco) {\r\n\r\n var mapOptions = {\r\n zoom: zoomLevel,\r\n center: center,\r\n scrollwheel: (AU.helpers.isMobileDevice() || AU.responsive.state.NAME == 'PHONE') ? false : scrollWheel,\r\n draggable: draggable,\r\n clickable: clickable,\r\n streetViewControl: streetView,\r\n mapTypeControlOptions: {\r\n mapTypeIds: ['default', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.HYBRID],\r\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,\r\n position: google.maps.ControlPosition.RIGHT_TOP\r\n },\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n panControlOptions: !pco ? {} : pco,\r\n zoomControlOptions: !zco ? {} : zco,\r\n streetViewControlOptions: !svco ? {} : svco\r\n };\r\n\r\n // Opretter kort\r\n var map = new google.maps.Map(container, mapOptions);\r\n\r\n // Kortets størrelse sættes\r\n container.style.width = !isNaN(width) ? width + 'px' : width;\r\n container.style.height = !isNaN(height) ? height + 'px' : height;\r\n\r\n return map;\r\n },\r\n setBounds: function (map, markers) {\r\n var bounds = new google.maps.LatLngBounds();\r\n for (var i = 0; i < markers.length; i++) {\r\n for (var j = 0; j < markers[i].length; j++) {\r\n bounds.extend(markers[i][j].position);\r\n }\r\n }\r\n map.fitBounds(bounds);\r\n },\r\n marker: {\r\n add: function (map, point, markerIcon, markerDraggable, markerClickable, markerPanTo, markerClickZoom, markerClickZoomLevel, infoWindow, windowContent, title, id) {\r\n var marker = new google.maps.Marker({\r\n position: point,\r\n map: map,\r\n icon: markerIcon,\r\n draggable: markerDraggable,\r\n title: title\r\n });\r\n\r\n if (typeof id !== 'undefined') {\r\n marker.set('id', id);\r\n }\r\n\r\n // Listeners tilføjes markør\r\n google.maps.event.addListener(marker, 'click', function () {\r\n if (windowContent !== '

    ') {\r\n // Infowindow åbner ved klik\r\n infoWindow.open(map, this);\r\n infoWindow.setContent(windowContent);\r\n }\r\n\r\n if (markerClickable) {\r\n if (markerPanTo) {\r\n map.panTo(this.getPosition());\r\n }\r\n\r\n if (!markerClickZoom || map.getZoom() > markerClickZoomLevel) {\r\n map.setZoom(map.getZoom());\r\n } else {\r\n map.setZoom(markerClickZoomLevel);\r\n }\r\n }\r\n });\r\n\r\n // At flytte en markør betragtes som et klik på kortet (det giver tilsyneladende ingen problemer, skulle der ikke være defineret click-event på kortet)\r\n if (markerDraggable) {\r\n google.maps.event.addListener(marker, 'dragend', function (point) {\r\n google.maps.event.trigger(map, 'click', point);\r\n });\r\n }\r\n\r\n return marker;\r\n }\r\n },\r\n route: {\r\n destinationFrom: false,\r\n destinationTo: false,\r\n directionsDisplay: null,\r\n directionsService: null,\r\n calc: function (map, from, to, travelMode, directionsService, directionsDisplay, waypointLocations) {\r\n if (from !== '') {\r\n var waypoints = [];\r\n if (typeof waypointLocations !== 'undefined') {\r\n for (var i = 0; i < waypointLocations.length; i++) {\r\n waypoints.push({\r\n location: waypointLocations[i],\r\n stopover: false\r\n });\r\n }\r\n }\r\n\r\n var request = {\r\n origin: from,\r\n destination: to,\r\n travelMode: travelMode,\r\n waypoints: waypoints\r\n };\r\n\r\n directionsService.route(request, function (response, status) {\r\n if (status === google.maps.DirectionsStatus.OK) {\r\n if (directionsDisplay.getMap() === null) {\r\n directionsDisplay.setMap(map);\r\n }\r\n directionsDisplay.setDirections(response);\r\n } else {\r\n window.alert(status);\r\n }\r\n });\r\n }\r\n },\r\n createDirectionObjects: function (map, container) {\r\n var rendererOptions = {\r\n draggable: true\r\n };\r\n\r\n var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);\r\n var panel = container;\r\n\r\n directionsDisplay.setMap(map);\r\n directionsDisplay.setPanel(panel);\r\n\r\n return directionsDisplay;\r\n }\r\n },\r\n geocodePersonAddress: function (map, options, icon, address, centerMap, infoWindow, windowContent, func) {\r\n AU.maps.geocoder.geocode({\r\n 'address': address\r\n }, function (results, status) {\r\n if (status === google.maps.GeocoderStatus.OK) {\r\n var point = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());\r\n var marker = AU.maps.marker.add(map, point, icon, options.markerDrag, options.markerClick, options.clickPanTo, options.clickZoom, options.clickZoomLevel, infoWindow, windowContent, '');\r\n\r\n if (typeof func === 'function') {\r\n func(marker, point, centerMap, infoWindow, windowContent);\r\n }\r\n\r\n }\r\n });\r\n\r\n },\r\n helpers: {\r\n getDistanceBetweenPoints: function (point1, point2) {\r\n return google.maps.geometry.spherical.computeDistanceBetween(point1, point2);\r\n },\r\n convertFromLatLng: function (coord) {\r\n return Math.round(coord * 1000000);\r\n },\r\n convertToLatLng: function (coord) {\r\n var c;\r\n if (coord.length === 7) {\r\n c = coord.substring(0, 1) + '.' + coord.substring(1);\r\n }\r\n if (coord.length === 8) {\r\n c = coord.substring(0, 2) + '.' + coord.substring(2);\r\n }\r\n if (coord.length === 9) {\r\n c = coord.substring(0, 3) + '.' + coord.substring(3);\r\n }\r\n return c;\r\n },\r\n getCurrentDate: function () {\r\n var d = new Date();\r\n var date = d.getDate();\r\n var month = d.getMonth() + 1;\r\n var currentDate = (date < 10 ? ('0' + date) : date) + '.' + (month < 10 ? ('0' + month) : month) + '.' + ('' + d.getFullYear()).substring(2);\r\n return currentDate;\r\n },\r\n getCurrentTime: function () {\r\n var d = new Date();\r\n var hours = d.getHours();\r\n var minutes = d.getMinutes();\r\n var currentTime = (hours < 10 ? ('0' + hours) : hours) + ':' + (minutes < 10 ? ('0' + minutes) : minutes);\r\n return currentTime;\r\n },\r\n sortSelect: function (element) {\r\n $(element).each(function () {\r\n var selectedValue = $(this).val();\r\n $(this).html($('option', $(this)).sort(function (a, b) {\r\n return a.text === b.text ? 0 : a.text < b.text ? -1 : 1;\r\n }));\r\n $(this).val(selectedValue);\r\n });\r\n },\r\n sortAlphaObj: function (a, b) {\r\n if (typeof a.name !== 'undefined' && typeof b.name !== 'undefined') {\r\n return a.name > b.name ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n },\r\n infoWindow: null,\r\n geocoder: null\r\n};\r\n\r\n// Slut på det generelle (\"biblioteket\") – nedenstående omhandler de små kort, som (primært) sidder på institutsiderne\r\n\r\nvar maps = [];\r\n\r\nAU.maps.single = {\r\n options: {\r\n image: '',\r\n markerDrag: !window._markerDrag ? false : window._markerDrag,\r\n markerClick: !window._markerClick ? true : window._markerClick,\r\n clickPanTo: !window._clickPanTo ? false : window._clickPanTo,\r\n clickZoom: !window._clickZoom ? false : window._clickZoom,\r\n clickZoomLevel: window._clickZoomLevel || 12,\r\n defaultZoomLevel: window._defaultZoomLevel || 16,\r\n scrollWheel: !window._scrollWheel ? false : window._scrollWheel,\r\n draggable: !window._draggable ? true : window._draggable,\r\n clickable: !window._clickable ? true : window._clickable,\r\n streetView: !window._streetView ? false : window._streetView,\r\n centerLat: window._centerLat || 56.20,\r\n centerLng: window._centerLng || 10.50,\r\n mapWidth: '99.5%',\r\n mapHeight: 275\r\n },\r\n center: null,\r\n maps: window.maps,\r\n mapDivs: [],\r\n firstMapLoaded: false,\r\n findFirstMap: function () {\r\n var i = 1;\r\n var firstMap;\r\n do {\r\n firstMap = document.getElementById('au_map' + (i === 1 ? '' : i));\r\n i++;\r\n } while (!firstMap && i <= 2);\r\n\r\n return firstMap;\r\n },\r\n loadMaps: function () {\r\n // Enten populeres kortet med manuelle punkter (fra sourcen) eller også henter vi fra datakilde (iPure / XML)\r\n if (AU.maps.single.maps.length > 0) {\r\n AU.maps.single.init();\r\n } else {\r\n if (typeof window.path !== 'undefined') {\r\n\r\n var dataFunc = function (data) {\r\n var locations = data.locations;\r\n var combinedPoints = [];\r\n var name;\r\n for (var l = 0; l < locations.length; l++) {\r\n name = locations[l].names[0].name;\r\n var lat = locations[l].latitude;\r\n var lng = locations[l].longitude;\r\n var url = locations[l].url;\r\n var text = locations[l].text;\r\n\r\n var points = [];\r\n var point = {\r\n latitude: lat,\r\n longitude: lng,\r\n title: name,\r\n text: text\r\n };\r\n points.push(point);\r\n combinedPoints.push(point);\r\n\r\n if ($('#au_map').length > 0) {\r\n AU.maps.single.maps.push({\r\n name: name,\r\n name_en: name,\r\n container: '#au_map',\r\n mapWidth: AU.maps.single.options.mapWidth,\r\n mapHeight: AU.maps.single.options.mapHeight,\r\n href: url,\r\n points: points,\r\n switchmode: 'dropdown',\r\n load: false\r\n });\r\n }\r\n }\r\n\r\n if ($('#au_map2').length > 0) {\r\n AU.maps.single.maps.push({\r\n name: name,\r\n name_en: name,\r\n container: '#au_map2',\r\n mapWidth: AU.maps.single.options.mapWidth,\r\n mapHeight: AU.maps.single.options.mapHeight,\r\n href: '',\r\n points: combinedPoints,\r\n load: true\r\n });\r\n }\r\n\r\n AU.maps.single.init();\r\n };\r\n\r\n $.getJSON(window.path, function (data) {\r\n dataFunc(data);\r\n });\r\n }\r\n }\r\n\r\n AU.maps.single.firstMapLoaded = true;\r\n },\r\n init: function () {\r\n\r\n AU.maps.route.directionsService = new google.maps.DirectionsService();\r\n AU.maps.infoWindow = new google.maps.InfoWindow();\r\n AU.maps.geocoder = new google.maps.Geocoder();\r\n\r\n var divUsed = false;\r\n for (var i = 0; i < AU.maps.single.maps.length; i++) {\r\n\r\n var currentMap = AU.maps.single.maps[i];\r\n\r\n currentMap.map = null;\r\n currentMap.markers = [];\r\n\r\n // Finder ud af, om vi allerede har brugt den angivne div\r\n for (var k = 0; k < AU.maps.single.mapDivs.length; k++) {\r\n if (AU.maps.single.mapDivs[k] === currentMap.container) {\r\n divUsed = true;\r\n break;\r\n } else {\r\n divUsed = false;\r\n }\r\n }\r\n\r\n // Hvis vi ikke har brugt div'en, opretter vi kortet\r\n if (!divUsed) {\r\n var mapContainer = $(currentMap.container).get(0);\r\n var options = AU.maps.single.options;\r\n\r\n currentMap.map = AU.maps.create(mapContainer, currentMap.mapWidth, currentMap.mapHeight, options.defaultZoomLevel, AU.maps.single.center, options.scrollWheel, options.draggable, options.clickable, options.streetView);\r\n AU.maps.single.mapDivs.push(AU.maps.single.maps[i].container);\r\n\r\n if (currentMap.load) {\r\n this.setMapContent(currentMap, false);\r\n }\r\n\r\n $(currentMap.container).after($('
    ', {\r\n 'class': 'au_maps_switchlink'\r\n }));\r\n\r\n if (typeof currentMap.switchmode !== 'undefined' && currentMap.switchmode === 'dropdown') {\r\n $(currentMap.container + ' + div').append($('');\r\n jQuery(form).append('');\r\n }\r\n });\r\n\r\n // Alle funktioner, som er pushet til ready-objektet, løbes igennem\r\n for (var i = 0; i < AU.ready.length; i++) {\r\n if (typeof (AU.ready[i]) === 'function') {\r\n try {\r\n // Attempt to execute the function\r\n AU.ready[i]();\r\n } catch (e) {\r\n // Catch any error and log it, but don't stop execution\r\n console.error(\"Error in AU.ready function loop (au-init.js) at index: \" + i, e);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n if (typeof findWidgetInit === 'function') {\r\n var dropdownWidgetLoaded = false;\r\n jQuery(document).on('show.zf.dropdown', function () {\r\n if (!dropdownWidgetLoaded) {\r\n findWidgetInit('header .find-container');\r\n dropdownWidgetLoaded = true;\r\n }\r\n });\r\n }\r\n */\r\n\r\n var findBtn = document.querySelector('header .find-button');\r\n if (findBtn) {\r\n findBtn.setAttribute('href', AU.pageLang === 'da' ? 'https://www.au.dk/kort/' : 'https://www.au.dk/en/map/');\r\n }\r\n\r\n if ((typeof AU.basic === 'undefined' || !AU.basic) && (typeof window.defaultTracking === 'undefined' || window.defaultTracking)) {\r\n // Siteimprove\r\n (function () {\r\n var sz = document.createElement('script'); \r\n sz.type = 'text/plain'; \r\n sz.async = true;\r\n sz.setAttribute('data-cookiescript', 'accepted');\r\n sz.setAttribute('data-cookiecategory', 'performance');\r\n sz.src = '//siteimproveanalytics.com/js/siteanalyze_4573657.js';\r\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sz, s);\r\n })();\r\n }\r\n });\r\n\r\n jQuery(window).on('load', function () {\r\n AU.design.setBannerElementsLoad();\r\n\r\n for (var i = 0; i < AU.load.length; i++) {\r\n if (typeof (AU.load[i]) === 'function') {\r\n AU.load[i]();\r\n }\r\n }\r\n });\r\n\r\n jQuery(window).on('resize', function () {\r\n for (var i = 0; i < AU.resize.length; i++) {\r\n if (typeof (AU.resize[i]) === 'function') {\r\n AU.resize[i]();\r\n }\r\n }\r\n });\r\n\r\n jQuery(window).on('scroll', function () {\r\n for (var i = 0; i < AU.scroll.length; i++) {\r\n if (typeof (AU.scroll[i]) === 'function') {\r\n AU.scroll[i]();\r\n }\r\n }\r\n });\r\n})();\r\n"]}