{"version":3,"sources":["app.js","au-fallback.js","au.js","au-helpers.js","au-navigation.js","au-cookies.js","au-ipure.js","au-design.js","au-social.js","au-databox.js","au-flowbox.js","au-alphabox.js","au-responsive.js","au-news.js","au-maps.js","au-piechart.js","au-defaults.js","au-search.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","ipure","searchCrossSite","searchDetailsCrossSite","photos","getPerson","xml","name","$","find","room","lastname","firstname","details","detailsSource","person","getPersonDetails","func","multipleDepartments","centerMap","street","zip","city","address","nameNode","photoNode","addressNode","webNode","phoneNode","departmentNode","firstName","lastName","auid","photoSrc","found_addresses","j","k","officePhone","buildingNumber","personHTML","mobilePhone","n","getPeople","people","peopleXML","p","id","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","stop","animate","opacity","setBannerElementsLoad","setHero","hero","scrollTop","parseInt","setMagnificPopup","lightbox","rels","Object","keys","index","magnificPopup","gallery","enabled","modal","newsImgs","setTopWarning","topWarning","class","topWarningTextDa","topWarningTextEn","social","config","mode","container","tracking","links","classname","sharing","direction","icons","spacing","title","size","color","initFunc","sharers","newsSharer","peopleXsSharer","mergeOptions","sharer","hasOwnProperty","conf","renderButtons","shareTitle","shareUrl","services","dirClass","iconClass","spacedClass","append","disableAddThisForOldNews","trackingFunc","box","fb","twitter","linkedin","mail","loaded","openShareDialog","open","instashow","getScript","yottie","ajaxSetup","cache","boxes","scriptLoaded","loadExternal","db","AUDatabox","componentsUrl","flowbox","AUFlowbox","ab","AUAlphabox","stateHistory","modes","PHONE","ID","MAX","TABLET","DESKTOP","detectDevice","Foundation","MediaQuery","current","setMarkup","markupRenderFunctions","runMarkupFunctions","utilityLinks","sectionHeader","pageNav","titleBar","menuTitle","leftMenu","tablesScroll","wrap","before","table","wasPhone","states","is","unwrap","edutables","tables","dg","AUDiagramme","disqus_no_style","disqus_shortname","disqus_url","disqus_loaded","news","feeds","setPopup","AUNews","AUNewsCollage","body","popup","appendChild","fc","componentsUri","String","prototype","hashCode","ch","l","Math","abs","charCodeAt","namespace","history","replaceHash","newhash","replaceState","back","GOOGLE_MAPS_API_KEY","maps","loadGoogleMapsScript","shouldLoadGoogleMapsScript","shouldLoadGoogleMapsScriptAsync","loadGoogleMapsScriptAsync","scriptUrl","script","onload","onerror","event","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","extend","fitBounds","marker","add","point","markerIcon","markerDraggable","markerClickable","markerPanTo","markerClickZoom","markerClickZoomLevel","infoWindow","windowContent","Marker","icon","addListener","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","geocoder","geocode","results","GeocoderStatus","LatLng","geometry","lat","lng","markerDrag","markerClick","clickPanTo","clickZoom","clickZoomLevel","getDistanceBetweenPoints","point1","point2","spherical","computeDistanceBetween","convertFromLatLng","coord","round","convertToLatLng","getCurrentDate","date","month","getMonth","currentDate","getFullYear","getCurrentTime","hours","getHours","minutes","getMinutes","currentTime","sortSelect","selectedValue","sort","a","sortAlphaObj","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","names","latitude","longitude","points","name_en","switchmode","getJSON","DirectionsService","InfoWindow","Geocoder","divUsed","currentMap","m","mapContainer","setMapContent","span","link","option","selected","click","idSplit","split","switchMode","change","onchangeHybrid","setMapTypeId","clear","setCenter","setMapClickEvent","widget","googleMaps","widgets","constants","BUILDING","DEPARTMENT","OVERLAY","markerWidth","markerHeight","overlayMarkerWidth","overlayMarkerHeight","pin","loadMap","loadData","w","building","department","overlay","setAutoCompletes","checkForSearchQuery","ieVersion","xdr","XDomainRequest","parseJSON","responseText","onprogress","send","loc","acLocOptions","minLength","autoFocus","select","ui","item","setBuildingMarker","getBuilding","setDepartmentMarkers","getDepartment","setOverlayMarker","getOverlay","acPeopleOptions","setPersonMarker","autocomplete","getBuildingString","query","containsBuildingNumber","match","cbn","bs","bldg","querySplit","clearMarkers","clearOld","showContent","MarkerImage","Size","content","empty","searchDetailsWrapper","departmentsdetails","buildingNode","buildings","place","groupid","groupname","iw","number","departmentId","wdgt","piechart","colors","pie","highlight","col","amt","usePound","slice","num","getData","colorIndex","pd","createLegend","Chart","legendHolder","generateLegend","firstChild","childNodes","legendNode","addEvent","activeSegment","segments","save","fillColor","highlightColor","showTooltip","restore","draw","parentNode","pies","mountNode","visible","getComputedStyle","chartPie","Pie","tooltipTemplate","animation","pieLegend","DEFAULT_util_staffportal_da","alphabet","stacked","background","DEFAULT_util_staffportal_en","DEFAULT_util_department_da","DEFAULT_util_department_en","DEFAULT_util_staffservice_da","description","noResultsAlphabet","noResultsSearch","noResultsUri","placeHolder","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","CludoSearch","searchUrl","primaryDanish","baseUrlAppend","baseUrl","engineId","cludoEngineId","filters","DomainName","cludoSettings","customerId","searchInputs","initSearchBoxText","loading","endlessScroll","stopAfterPage","resultsPerPage","bottomOffset","language","disableAutocomplete","disableCludoAutocomplete","customCallbackAfterSearch","checkForBanners","Cludo","banners","wrapInner","foundation","AUCDNPATH","classList","contains","langAttr","getAttribute","newsLists","cludoDanishPath","cludoEnglishPath","defaultTracking","cmForms","form","privacyEmail","findBtn","basic","sz","async","getElementsByTagName"],"mappings":"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","file":"app.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('{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: IPURE\r\n * Beskrivelse: Globale funktioner til kald af iPure-personsøgning - bruges på kort og i nyt medarbejderdesign\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\n\nAU.ipure = {\n source: {\n searchCrossSite: '//ipure.nfit.au.dk/searchPeople.php?sort=lno&q=',\n searchDetailsCrossSite: '//ipure.nfit.au.dk/current/da_DK/lno/',\n photos: 'http://ipure.nfit.au.dk/current/'\n },\n getPerson: function getPerson(xml) {\n var name = $(xml).find('name');\n var room = name.attr('room');\n var lastname = name.attr('lastName');\n var firstname = name.attr('firstName');\n var details = $(xml).find('details');\n var detailsSource = details.attr('external');\n\n var person = {\n lastname: lastname,\n firstname: firstname,\n room: room,\n detailsSource: detailsSource\n };\n\n return person;\n },\n getPersonDetails: function getPersonDetails(xml, func, multipleDepartments) {\n\n var nameNode = $(xml).find('name');\n var photoNode = $(xml).find('photo');\n var addressNode = $(xml).find('address');\n var webNode = $(xml).find('web');\n var phoneNode = $(xml).find('phone');\n var departmentNode = $(xml).find('department');\n\n var firstName = nameNode.attr('firstName');\n var lastName = nameNode.attr('lastName');\n var auid = nameNode.attr('employeeId');\n var photoSrc = photoNode.attr('external');\n var centerMap, street, zip, city, address;\n\n // Vi løber alle tilknyttede enheder igennem og finder ud af, om adresserne er forskellige\n var found_addresses = [];\n for (var j = 0; j < departmentNode.length; j++) {\n street = $(addressNode[j]).attr('street');\n zip = $(addressNode[j]).attr('zip');\n city = $(addressNode[j]).attr('city');\n address = street + \", \" + zip + \" \" + city;\n var found = false;\n for (var k = 0; k < found_addresses.length; k++) {\n if (found_addresses[k] === address) {\n found = true;\n }\n }\n if (j === 0 || !found) {\n found_addresses.push(address);\n }\n }\n\n var email;\n var officePhone;\n var buildingNumber;\n var personHTML = '';\n if (typeof photoSrc !== 'undefined') {\n personHTML += '';\n }\n\n if (found_addresses.length === 1) {\n for (var n = 0; n < departmentNode.length; n++) {\n personHTML += '' + $(departmentNode[n]).attr('name') + '
';\n }\n centerMap = true;\n } else {\n personHTML += '' + $(departmentNode[i]).attr('name') + '
';\n centerMap = false;\n }\n\n if (typeof buildingNumber !== 'undefined') {\n personHTML += (AU.pageLang === \"da\" ? \"Bygning \" : \"Building \") + buildingNumber;\n if (typeof room !== 'undefined') {\n personHTML += \", \" + (AU.pageLang === \"da\" ? \"Kontor \" : \"Office \") + room + \"
\";\n } else {\n personHTML += \"\";\n }\n }\n\n personHTML += '' + street + ', ' + zip + ' ' + city + '
';\n\n if (typeof officePhone !== 'undefined') {\n if (AU.helpers.isMobileDevice()) {\n personHTML += 'T: ' + officePhone + '
';\n } else {\n personHTML += 'T: ' + officePhone + '
';\n }\n }\n\n if (typeof mobilePhone !== 'undefined') {\n if (AU.helpers.isMobileDevice()) {\n personHTML += 'M: ' + mobilePhone + '
';\n } else {\n personHTML += 'M: ' + mobilePhone + '
';\n }\n }\n\n if (typeof email !== 'undefined') {\n personHTML += 'E: ' + email + '
';\n }\n\n /*\r\n if (typeof auid !== 'undefined') {\r\n personHTML += 'ID: AU' + auid + '';\r\n }\r\n */\n\n personHTML += '
') {\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 }\n } else {\n // Ellers opretter vi en ny visning på det samme kort/den samme div\n for (var m = 0; m < AU.maps.single.maps.length; m++) {\n if (AU.maps.single.maps[m].container === AU.maps.single.mapDivs[k]) {\n currentMap.map = AU.maps.single.maps[m].map;\n break;\n }\n }\n }\n\n if (typeof currentMap.switchmode !== 'undefined') {\n if (currentMap.switchmode === 'links') {\n\n var span = $('', {\n 'text': ' | '\n });\n\n var link = $('', {\n 'id': 'au_maps_switchlink_' + i,\n 'href': '#',\n 'text': AU.pageLang === 'da' ? currentMap.name : currentMap.name_en\n });\n\n span.append(link);\n $(currentMap.container + ' + div').append(span);\n }\n\n if (currentMap.switchmode === 'dropdown') {\n var option = $('', {\n 'value': i,\n 'text': AU.pageLang === 'da' ? currentMap.name : currentMap.name_en\n });\n\n if (typeof window.selected !== 'undefined' && (currentMap.name === window.selected || currentMap.name_en === window.selected)) {\n option.attr('selected', 'selected');\n }\n\n $(currentMap.container + ' + div select').append(option);\n }\n }\n }\n\n $('.au_maps_switchlink a').click(function (e) {\n\n e.preventDefault();\n\n var idSplit = $(this).attr('id').split('au_maps_switchlink_');\n if (idSplit.length === 2) {\n var id = idSplit[1];\n AU.maps.single.switchMode(id);\n $(AU.maps.single.maps[id].container + ' + div a').css('font-weight', 'normal');\n $(this).css('font-weight', 'bold');\n }\n });\n\n $.each($('.au_maps_switchlink'), function () {\n if ($('a', this).length > 1) {\n $('.au_maps_switchlink span:first-child a').trigger('click');\n }\n\n if ($('select', this).length > 0) {\n var id = $('select option:selected', this).val();\n AU.maps.single.switchMode(id);\n }\n });\n\n $('.au_maps_switchlink select').change(function () {\n var id = $(this).val();\n AU.maps.single.switchMode(id);\n });\n },\n switchMode: function switchMode(id) {\n this.setMapContent(maps[id], true);\n if (typeof maps[id].onchangeHybrid !== 'undefined') {\n if (maps[id].onchangeHybrid) {\n maps[id].map.setMapTypeId(google.maps.MapTypeId.HYBRID);\n } else {\n maps[id].map.setMapTypeId('default');\n }\n }\n },\n setMapContent: function setMapContent(map, clear) {\n if (clear) {\n for (var i = 0; i < AU.maps.single.maps.length; i++) {\n if (map.map === AU.maps.single.maps[i].map) {\n for (var n = 0; n < AU.maps.single.maps[i].markers.length; n++) {\n AU.maps.single.maps[i].markers[n].setMap(null);\n }\n AU.maps.single.maps[i].markers = [];\n }\n }\n }\n\n if (map.points.length > 0) {\n var centerMap = false;\n var options = AU.maps.single.options;\n for (var j = 0; j < map.points.length; j++) {\n var title = !map.points[j].title ? '' : map.points[j].title;\n var text = !map.points[j].text ? '
' + title + '
' : map.points[j].text;\n var point = new google.maps.LatLng(map.points[j].latitude, map.points[j].longitude);\n var marker = AU.maps.marker.add(map.map, point, options.image, options.markerDrag, options.markerClick, options.clickPanTo, options.clickZoom, options.clickZoomLevel, AU.maps.infoWindow, text, title);\n map.markers.push(marker);\n if (centerMap) {\n map.setCenter(point);\n }\n }\n if (map.points.length > 1) {\n AU.maps.setBounds(map.map, [map.markers]);\n } else {\n map.map.setCenter(map.markers[0].position);\n map.map.setZoom(AU.maps.single.options.defaultZoomLevel);\n }\n }\n\n if (map.href !== null) {\n this.setMapClickEvent(map.map, map.href);\n }\n },\n setMapClickEvent: function setMapClickEvent(map, href) {\n google.maps.event.addListener(map, 'click', function (p) {\n window.location = href;\n });\n }\n};\n\nAU.maps.widget = {\n googleMaps: true,\n widgets: [],\n constants: {\n BUILDING: -1,\n DEPARTMENT: -1,\n OVERLAY: -1,\n markerWidth: 24,\n markerHeight: 33,\n overlayMarkerWidth: 24,\n overlayMarkerHeight: 33,\n centerLat: 56.168995,\n centerLng: 10.203113\n },\n options: {\n config: {\n container: '#universe-utility-map',\n mapContainer: 'au_map_widget',\n pin: true,\n image: '',\n defaultZoomLevel: 17,\n markerDrag: false,\n markerClick: false,\n clickPanTo: false,\n clickZoom: false,\n clickZoomLevel: 17\n }\n },\n data: {\n source: {\n data: \"//typo3.au.dk/maps/xmltojson.php\"\n },\n locations: []\n },\n loadMap: function loadMap(widget) {\n if (widget.mapContainer && this.googleMaps) {\n widget.map = AU.maps.create(widget.mapContainer, '100%', 190, widget.config.defaultZoomLevel, new google.maps.LatLng(56.169046, 10.203107), true, true, false, false);\n widget.loaded = true;\n google.maps.event.trigger(widget.map, 'resize');\n }\n },\n loadData: function loadData(widget) {\n\n var dataFunc = function dataFunc(data) {\n\n var w = AU.maps.widget;\n\n w.constants.BUILDING = data.constants[0].building;\n w.constants.DEPARTMENT = data.constants[0].department;\n w.constants.OVERLAY = data.constants[0].overlay;\n\n w.data.locations = data.locations;\n w.setAutoCompletes(widget);\n\n w.checkForSearchQuery(widget);\n };\n\n var ieVersion = AU.helpers.getInternetExplorerVersion();\n if (ieVersion > 6 && ieVersion < 10) {\n var xdr = window.XDomainRequest ? new XDomainRequest() : null;\n if (xdr !== null) {\n xdr.onload = function () {\n dataFunc(jQuery.parseJSON(xdr.responseText));\n };\n\n xdr.onprogress = function () {};\n\n xdr.open('get', AU.maps.widget.data.source.data);\n xdr.send();\n }\n } else {\n jQuery.getJSON(this.data.source.data, function (data) {\n dataFunc(data);\n });\n }\n },\n setAutoCompletes: function setAutoCompletes(widget) {\n\n var search = [];\n for (var i = 0; i < this.data.locations.length; i++) {\n var loc = this.data.locations[i];\n for (var n = 0; n < loc.names.length; n++) {\n search.push({\n id: loc.id,\n label: loc.names[n].name,\n value: loc.names[n].name,\n type: loc.type\n });\n }\n }\n\n // Lokationer\n var acLocOptions = {\n source: search,\n minLength: 3,\n autoFocus: true,\n select: function select(event, ui) {\n\n var id = ui.item.id;\n var w = AU.maps.widget;\n if (ui.item.type === w.constants.BUILDING) {\n w.setBuildingMarker(widget, w.getBuilding(id), true, true, true);\n } else if (ui.item.type === w.constants.DEPARTMENT) {\n w.setDepartmentMarkers(widget, w.getDepartment(id));\n } else {\n w.setOverlayMarker(widget, w.getOverlay(id), true, true, true, true);\n }\n }\n };\n\n // Personsøgning\n var acPeopleOptions = {\n source: function source(request, response) {\n var search = request.term;\n if (typeof String.prototype.trim === \"function\") {\n search = search.trim();\n }\n AU.helpers.getXML(AU.ipure.source.searchCrossSite + encodeURI(search), function (data) {\n response(AU.ipure.getPeople(data));\n });\n },\n minLength: 3,\n autoFocus: true,\n select: function select(event, ui) {\n AU.helpers.getXML(AU.ipure.source.searchDetailsCrossSite + ui.item.url, function (data) {\n AU.maps.widget.setPersonMarker(widget, data);\n });\n }\n };\n\n jQuery('.au_maps_widget_acl', widget.container).autocomplete(acLocOptions);\n jQuery('.au_maps_widget_acp', widget.container).autocomplete(acPeopleOptions);\n },\n checkForSearchQuery: function checkForSearchQuery(widget) {\n if (!widget.pin && AU.helpers.getQuerystring('q') !== \"\") {\n\n var getBuildingString = function getBuildingString(query) {\n\n var containsBuildingNumber = function containsBuildingNumber(query) {\n var re = new RegExp('(\\\\d{4})', 'ig');\n return query.match(re);\n };\n\n var cbn = containsBuildingNumber(query);\n if (cbn !== null) {\n return cbn[0];\n }\n\n return \"\";\n };\n\n var query = decodeURI(AU.helpers.getQuerystring('q'));\n if (typeof String.prototype.trim === \"function\") {\n query = query.trim();\n }\n\n var bs = getBuildingString(query);\n if (bs !== \"\") {\n var bldg = this.getBuilding(bs);\n if (bldg !== null) {\n this.setBuildingMarker(widget, bldg, true, true, true);\n jQuery('.au_maps_widget_acl', widget.container).val((AU.pageLang === \"da\" ? 'Bygning ' : 'Building ') + bldg.id);\n }\n } else {\n var querySplit = query.split(\" \");\n if (querySplit.length > 1 || query.indexOf('+') > -1) {\n query = query.replace(/\\+/g, ' ');\n AU.helpers.getXML(AU.ipure.source.searchCrossSite + encodeURI(query), function (data) {\n var people = AU.ipure.getPeople(data);\n if (people.length === 1) {\n AU.helpers.getXML(AU.ipure.source.searchDetailsCrossSite + people[0].url, function (data) {\n AU.maps.widget.setPersonMarker(widget, data);\n jQuery('.au_maps_widget_acp', widget.container).val(query);\n });\n } else if (people.length > 1) {\n jQuery('.au_maps_widget_acp', widget.container).val(query).focus().autocomplete('search');\n }\n });\n }\n }\n }\n },\n clearMarkers: function clearMarkers(widget) {\n for (var i = 0; i < widget.markers.length; i++) {\n widget.markers[i].setMap(null);\n }\n widget.markers = [];\n },\n setBuildingMarker: function setBuildingMarker(widget, building, clearOld, centerMap, showContent) {\n\n if (AU.maps.widget.googleMaps) {\n if (clearOld) {\n this.clearMarkers(widget);\n }\n\n var point = new google.maps.LatLng(building.latitude, building.longitude);\n var icon = new google.maps.MarkerImage(widget.config.image, null, null, null, new google.maps.Size(this.constants.markerWidth, this.constants.markerHeight));\n var windowContent = '';\n\n var marker = AU.maps.marker.add(widget.map, point, icon, false, false, false, false, widget.config.defaultZoomLevel, AU.maps.infoWindow, windowContent, building.names[0].name);\n widget.markers.push(marker);\n\n if (centerMap) {\n widget.map.setCenter(point);\n }\n }\n\n widget.content.empty();\n if (showContent) {\n widget.content.append('' + (AU.pageLang === \"da\" ? 'Vis på bygningskortet.' : 'Show on the building map.') + '
';\n if (typeof buildingNumber === \"undefined\" && w.googleMaps) {\n AU.maps.geocodePersonAddress(widget.map, widget.config, icon, address, centerMap, iw, windowContent, function (marker, point, centerMap, infoWindow, windowContent) {\n widget.content.empty();\n widget.content.append(personHTML);\n widget.markers.push(marker);\n\n if (w.googleMaps) {\n if (centerMap) {\n widget.map.setCenter(point);\n } else {\n AU.maps.setBounds(widget.map, [widget.markers]);\n }\n }\n });\n } else {\n\n if (w.googleMaps) {\n var building = w.getBuilding(buildingNumber);\n w.setBuildingMarker(widget, building, true, centerMap, false);\n }\n widget.content.empty();\n widget.content.append(personHTML);\n }\n });\n },\n getBuilding: function getBuilding(number) {\n var building = null;\n for (var i = 0; i < this.data.locations.length; i++) {\n if (this.data.locations[i].type === this.constants.BUILDING && this.data.locations[i].id === number.toString()) {\n building = this.data.locations[i];\n break;\n }\n }\n return building;\n },\n getDepartment: function getDepartment(departmentId) {\n var department = null;\n for (var i = 0; i < this.data.locations.length; i++) {\n if (this.data.locations[i].type === this.constants.DEPARTMENT && this.data.locations[i].id === departmentId.toString()) {\n department = this.data.locations[i];\n break;\n }\n }\n return department;\n },\n getOverlay: function getOverlay(id) {\n var place;\n for (var i = 0; i < this.data.locations.length; i++) {\n if (this.data.locations[i].type === this.constants.OVERLAY && this.data.locations[i].id === id.toString()) {\n place = this.data.locations[i];\n }\n }\n return place;\n },\n mergeOptions: function mergeOptions(widget) {\n if (!widget.hasOwnProperty('config')) {\n widget.config = {};\n }\n\n for (var conf in this.options.config) {\n if (!widget.config.hasOwnProperty(conf)) {\n widget.config[conf] = this.options.config[conf];\n }\n }\n },\n init: function init() {\n if (typeof google === \"undefined\") {\n AU.maps.widget.googleMaps = false;\n }\n\n if (AU.maps.widget.googleMaps) {\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\n for (var i = 0; i < this.widgets.length; i++) {\n var wdgt = this.widgets[i];\n this.mergeOptions(wdgt);\n wdgt.container = jQuery(wdgt.config.container);\n wdgt.mapContainer = document.getElementById(wdgt.config.mapContainer);\n wdgt.content = jQuery('.au_maps_widget_content', wdgt.container);\n wdgt.markers = [];\n wdgt.loaded = false;\n\n if (!wdgt.config.pin) {\n this.loadMap(wdgt);\n this.loadData(wdgt);\n }\n }\n }\n};\n'use strict';\n\nAU.piechart = {\n options: {\n config: {\n container: '.pie-container',\n canvas: '#pie1',\n width: 250,\n height: 250,\n colors: ['#b9e5fb', '#6ecff6', '#00bdf2', '#00aeef', '#008bbf', '#006991', '#004563', '#37373a', '#4c4d4f', '#6d6e71', '#818285', '#9d9fa2', '#bcbdc0'],\n data: [{ value: 50, label: 'Data 1' }, { value: 50, label: 'Data 2' }]\n }\n },\n mergeOptions: function mergeOptions(pie) {\n if (!pie.hasOwnProperty('config')) {\n pie.config = {};\n }\n\n for (var conf in this.options.config) {\n if (!pie.config.hasOwnProperty(conf)) {\n pie.config[conf] = this.options.config[conf];\n }\n }\n\n if (!pie.hasOwnProperty('data')) {\n pie.data = {};\n }\n\n for (var d in this.options.data) {\n if (!pie.data.hasOwnProperty(d)) {\n pie.data[d] = this.options.data[d];\n }\n }\n },\n highlight: function highlight(col, amt) {\n\n var usePound = false;\n\n if (col[0] === \"#\") {\n col = col.slice(1);\n usePound = true;\n }\n\n var num = parseInt(col, 16);\n var r = (num >> 16) + amt;\n\n if (r > 255) {\n r = 255;\n } else if (r < 0) {\n r = 0;\n }\n\n var b = (num >> 8 & 0x00FF) + amt;\n\n if (b > 255) {\n b = 255;\n } else if (b < 0) {\n b = 0;\n }\n\n var g = (num & 0x0000FF) + amt;\n\n if (g > 255) {\n g = 255;\n } else if (g < 0) {\n g = 0;\n }\n\n return (usePound ? '#' : '') + (g | b << 8 | r << 16).toString(16);\n },\n getData: function getData(pie) {\n var data = [];\n var colorIndex = 0;\n for (var i = 0; i < pie.config.data.length; i++) {\n var pd = pie.config.data[i];\n\n if (colorIndex === pie.config.colors.length - 1) {\n colorIndex = 0;\n }\n\n data.push({\n value: pd.value,\n label: pd.label,\n color: pie.config.colors[colorIndex],\n highlight: this.highlight(pie.config.colors[colorIndex], 10)\n });\n\n colorIndex++;\n }\n\n return data;\n },\n createLegend: function createLegend(pie, canvas) {\n var helpers = Chart.helpers;\n var legendHolder = document.createElement('div');\n legendHolder.innerHTML = pie.generateLegend();\n helpers.each(legendHolder.firstChild.childNodes, function (legendNode, index) {\n helpers.addEvent(legendNode, 'mouseover', function () {\n var activeSegment = pie.segments[index];\n activeSegment.save();\n activeSegment.fillColor = activeSegment.highlightColor;\n pie.showTooltip([activeSegment]);\n activeSegment.restore();\n });\n });\n helpers.addEvent(legendHolder.firstChild, 'mouseout', function () {\n pie.draw();\n });\n canvas.parentNode.parentNode.appendChild(legendHolder.firstChild);\n },\n pies: [],\n init: function init() {\n for (var i = 0; i < this.pies.length; i++) {\n var pie = this.pies[i];\n if (!pie.loaded) {\n pie.id = i;\n this.mergeOptions(pie);\n var mountNode = document.querySelector(pie.config.container);\n var visible = mountNode && AU.helpers.isElementPartlyInViewport(mountNode) && getComputedStyle(mountNode)['visibility'] != 'hidden';\n if (visible) {\n $(pie.config.container).append('');\n pie.canvas = document.querySelector(pie.config.canvas);\n var chartPie = new Chart(pie.canvas.getContext('2d')).Pie(this.getData(pie), { tooltipTemplate: \"<%if (label){%><%=label.length > 15 ? (label.substring(0, 15) + '...') : label %> : <%}%><%= value %>%\", animation: true });\n this.createLegend(chartPie, pie.canvas);\n pie.loaded = true;\n }\n }\n }\n\n var pieLegend = $('.pie-legend');\n if (pieLegend !== null) {\n pieLegend.addClass('resetlist');\n }\n }\n};\n\nAU.addScrollFunction(function () {\n AU.piechart.init();\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$.ajaxSetup({\n cache: true\n});\nvar CludoSearch;\nAU.search = {\n init: function init(searchUrl) {\n // Cludo\n var primaryDanish = typeof window.primaryDanish == 'undefined' ? true : window.primaryDanish;\n var baseUrlAppend = primaryDanish ? AU.pageLang == 'da' ? '' : 'en/' : AU.pageLang == 'da' ? 'da/' : '';\n var baseUrl = jQuery('base') == null ? location.host : jQuery('base').attr('href') + baseUrlAppend;\n if (baseUrl.indexOf('http') === -1) {\n baseUrl = 'https:' + baseUrl;\n }\n var engineId = typeof window.cludoEngineId == 'undefined' || window.cludoEngineId === 0 ? AU.pageLang == 'da' ? 2151 : 8956 : window.cludoEngineId;\n var filters = baseUrl.indexOf('www.au.dk') > -1 || typeof window.cludoEngineId != 'undefined' && window.cludoEngineId > 0 ? {} : { 'DomainName': [baseUrl] };\n jQuery.getScript('//customer.cludo.com/scripts/bundles/search-script.min.js', function () {\n var cludoSettings = {\n customerId: 511,\n engineId: engineId,\n searchUrl: searchUrl,\n searchInputs: ['cludo-search-form', 'cludo-search-content-form', 'cludo-search-mobile-form'],\n initSearchBoxText: '',\n loading: \"{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: IPURE\r\n * Beskrivelse: Globale funktioner til kald af iPure-personsøgning - bruges på kort og i nyt medarbejderdesign\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\r\n\r\nAU.ipure = {\r\n source: {\r\n searchCrossSite: '//ipure.nfit.au.dk/searchPeople.php?sort=lno&q=',\r\n searchDetailsCrossSite: '//ipure.nfit.au.dk/current/da_DK/lno/',\r\n photos: 'http://ipure.nfit.au.dk/current/'\r\n },\r\n getPerson: function(xml) {\r\n var name = $(xml).find('name');\r\n var room = name.attr('room');\r\n var lastname = name.attr('lastName');\r\n var firstname = name.attr('firstName');\r\n var details = $(xml).find('details');\r\n var detailsSource = details.attr('external');\r\n\r\n var person = {\r\n lastname: lastname,\r\n firstname: firstname,\r\n room: room,\r\n detailsSource: detailsSource\r\n };\r\n\r\n return person;\r\n },\r\n getPersonDetails: function(xml, func, multipleDepartments) {\r\n\r\n var nameNode = $(xml).find('name');\r\n var photoNode = $(xml).find('photo');\r\n var addressNode = $(xml).find('address');\r\n var webNode = $(xml).find('web');\r\n var phoneNode = $(xml).find('phone');\r\n var departmentNode = $(xml).find('department');\r\n\r\n var firstName = nameNode.attr('firstName');\r\n var lastName = nameNode.attr('lastName');\r\n var auid = nameNode.attr('employeeId');\r\n var photoSrc = photoNode.attr('external');\r\n var centerMap, street, zip, city, address;\r\n\r\n // Vi løber alle tilknyttede enheder igennem og finder ud af, om adresserne er forskellige\r\n var found_addresses = [];\r\n for (var j = 0; j < departmentNode.length; j++) {\r\n street = $(addressNode[j]).attr('street');\r\n zip = $(addressNode[j]).attr('zip');\r\n city = $(addressNode[j]).attr('city');\r\n address = street + \", \" + zip + \" \" + city;\r\n var found = false;\r\n for (var k = 0; k < found_addresses.length; k++) {\r\n if (found_addresses[k] === address) {\r\n found = true;\r\n }\r\n }\r\n if (j === 0 || !found) {\r\n found_addresses.push(address);\r\n }\r\n }\r\n\r\n var email;\r\n var officePhone;\r\n var buildingNumber;\r\n var personHTML = '';\r\n if (typeof photoSrc !== 'undefined') {\r\n personHTML += '';\r\n }\r\n\r\n if (found_addresses.length === 1) {\r\n for (var n = 0; n < departmentNode.length; n++) {\r\n personHTML += '' + $(departmentNode[n]).attr('name') + '
';\r\n }\r\n centerMap = true;\r\n } else {\r\n personHTML += '' + $(departmentNode[i]).attr('name') + '
';\r\n centerMap = false;\r\n }\r\n\r\n if (typeof buildingNumber !== 'undefined') {\r\n personHTML += (AU.pageLang === \"da\" ? \"Bygning \" : \"Building \") + buildingNumber;\r\n if (typeof room !== 'undefined') {\r\n personHTML += \", \" + (AU.pageLang === \"da\" ? \"Kontor \" : \"Office \") + room + \"
\";\r\n } else {\r\n personHTML += \"\";\r\n }\r\n }\r\n\r\n personHTML += '' + street + ', ' + zip + ' ' + city + '
';\r\n\r\n if (typeof officePhone !== 'undefined') {\r\n if (AU.helpers.isMobileDevice()) {\r\n personHTML += 'T: ' + officePhone + '
';\r\n } else {\r\n personHTML += 'T: ' + officePhone + '
';\r\n }\r\n }\r\n\r\n if (typeof mobilePhone !== 'undefined') {\r\n if (AU.helpers.isMobileDevice()) {\r\n personHTML += 'M: ' + mobilePhone + '
';\r\n } else {\r\n personHTML += 'M: ' + mobilePhone + '
';\r\n }\r\n }\r\n\r\n if (typeof email !== 'undefined') {\r\n personHTML += 'E: ' + email + '
';\r\n }\r\n\r\n /*\r\n if (typeof auid !== 'undefined') {\r\n personHTML += 'ID: AU' + auid + '';\r\n }\r\n */\r\n\r\n personHTML += '
') {\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 }\r\n\r\n } else {\r\n // Ellers opretter vi en ny visning på det samme kort/den samme div\r\n for (var m = 0; m < AU.maps.single.maps.length; m++) {\r\n if (AU.maps.single.maps[m].container === AU.maps.single.mapDivs[k]) {\r\n currentMap.map = AU.maps.single.maps[m].map;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (typeof currentMap.switchmode !== 'undefined') {\r\n if (currentMap.switchmode === 'links') {\r\n\r\n var span = $('', {\r\n 'text': ' | '\r\n });\r\n\r\n var link = $('', {\r\n 'id': 'au_maps_switchlink_' + i,\r\n 'href': '#',\r\n 'text': AU.pageLang === 'da' ? currentMap.name : currentMap.name_en\r\n });\r\n\r\n span.append(link);\r\n $(currentMap.container + ' + div').append(span);\r\n }\r\n\r\n if (currentMap.switchmode === 'dropdown') {\r\n var option = $('', {\r\n 'value': i,\r\n 'text': AU.pageLang === 'da' ? currentMap.name : currentMap.name_en\r\n });\r\n\r\n if (typeof window.selected !== 'undefined' && (currentMap.name === window.selected || currentMap.name_en === window.selected)) {\r\n option.attr('selected', 'selected');\r\n }\r\n\r\n $(currentMap.container + ' + div select').append(option);\r\n }\r\n }\r\n }\r\n\r\n $('.au_maps_switchlink a').click(function (e) {\r\n\r\n e.preventDefault();\r\n\r\n var idSplit = $(this).attr('id').split('au_maps_switchlink_');\r\n if (idSplit.length === 2) {\r\n var id = idSplit[1];\r\n AU.maps.single.switchMode(id);\r\n $(AU.maps.single.maps[id].container + ' + div a').css('font-weight', 'normal');\r\n $(this).css('font-weight', 'bold');\r\n }\r\n });\r\n\r\n $.each($('.au_maps_switchlink'), function () {\r\n if ($('a', this).length > 1) {\r\n $('.au_maps_switchlink span:first-child a').trigger('click');\r\n }\r\n\r\n if ($('select', this).length > 0) {\r\n var id = $('select option:selected', this).val();\r\n AU.maps.single.switchMode(id);\r\n }\r\n });\r\n\r\n $('.au_maps_switchlink select').change(function () {\r\n var id = $(this).val();\r\n AU.maps.single.switchMode(id);\r\n });\r\n },\r\n switchMode: function (id) {\r\n this.setMapContent(maps[id], true);\r\n if (typeof maps[id].onchangeHybrid !== 'undefined') {\r\n if (maps[id].onchangeHybrid) {\r\n maps[id].map.setMapTypeId(google.maps.MapTypeId.HYBRID);\r\n } else {\r\n maps[id].map.setMapTypeId('default');\r\n }\r\n }\r\n },\r\n setMapContent: function (map, clear) {\r\n if (clear) {\r\n for (var i = 0; i < AU.maps.single.maps.length; i++) {\r\n if (map.map === AU.maps.single.maps[i].map) {\r\n for (var n = 0; n < AU.maps.single.maps[i].markers.length; n++) {\r\n AU.maps.single.maps[i].markers[n].setMap(null);\r\n }\r\n AU.maps.single.maps[i].markers = [];\r\n }\r\n }\r\n }\r\n\r\n if (map.points.length > 0) {\r\n var centerMap = false;\r\n var options = AU.maps.single.options;\r\n for (var j = 0; j < map.points.length; j++) {\r\n var title = !map.points[j].title ? '' : map.points[j].title;\r\n var text = !map.points[j].text ? ('
' + title + '
') : map.points[j].text;\r\n var point = new google.maps.LatLng(map.points[j].latitude, map.points[j].longitude);\r\n var marker = AU.maps.marker.add(map.map, point, options.image, options.markerDrag, options.markerClick, options.clickPanTo, options.clickZoom, options.clickZoomLevel, AU.maps.infoWindow, text, title);\r\n map.markers.push(marker);\r\n if (centerMap) {\r\n map.setCenter(point);\r\n }\r\n }\r\n if (map.points.length > 1) {\r\n AU.maps.setBounds(map.map, [map.markers]);\r\n } else {\r\n map.map.setCenter(map.markers[0].position);\r\n map.map.setZoom(AU.maps.single.options.defaultZoomLevel);\r\n }\r\n }\r\n\r\n if (map.href !== null) {\r\n this.setMapClickEvent(map.map, map.href);\r\n }\r\n },\r\n setMapClickEvent: function (map, href) {\r\n google.maps.event.addListener(map, 'click', function (p) {\r\n window.location = href;\r\n });\r\n }\r\n};\r\n\r\nAU.maps.widget = {\r\n googleMaps: true,\r\n widgets: [],\r\n constants: {\r\n BUILDING: -1,\r\n DEPARTMENT: -1,\r\n OVERLAY: -1,\r\n markerWidth: 24,\r\n markerHeight: 33,\r\n overlayMarkerWidth: 24,\r\n overlayMarkerHeight: 33,\r\n centerLat: 56.168995,\r\n centerLng: 10.203113\r\n },\r\n options: {\r\n config: {\r\n container: '#universe-utility-map',\r\n mapContainer: 'au_map_widget',\r\n pin: true,\r\n image: '',\r\n defaultZoomLevel: 17,\r\n markerDrag: false,\r\n markerClick: false,\r\n clickPanTo: false,\r\n clickZoom: false,\r\n clickZoomLevel: 17\r\n }\r\n },\r\n data: {\r\n source: {\r\n data: \"//typo3.au.dk/maps/xmltojson.php\"\r\n },\r\n locations: []\r\n },\r\n loadMap: function (widget) {\r\n if (widget.mapContainer && this.googleMaps) {\r\n widget.map = AU.maps.create(widget.mapContainer, '100%', 190, widget.config.defaultZoomLevel, new google.maps.LatLng(56.169046, 10.203107), true, true, false, false);\r\n widget.loaded = true;\r\n google.maps.event.trigger(widget.map, 'resize');\r\n }\r\n },\r\n loadData: function (widget) {\r\n\r\n var dataFunc = function (data) {\r\n\r\n var w = AU.maps.widget;\r\n\r\n w.constants.BUILDING = data.constants[0].building;\r\n w.constants.DEPARTMENT = data.constants[0].department;\r\n w.constants.OVERLAY = data.constants[0].overlay;\r\n\r\n w.data.locations = data.locations;\r\n w.setAutoCompletes(widget);\r\n\r\n w.checkForSearchQuery(widget);\r\n };\r\n\r\n var ieVersion = AU.helpers.getInternetExplorerVersion();\r\n if (ieVersion > 6 && ieVersion < 10) {\r\n var xdr = window.XDomainRequest ? new XDomainRequest() : null;\r\n if (xdr !== null) {\r\n xdr.onload = function () {\r\n dataFunc(jQuery.parseJSON(xdr.responseText));\r\n };\r\n\r\n xdr.onprogress = function () {\r\n };\r\n\r\n xdr.open('get', AU.maps.widget.data.source.data);\r\n xdr.send();\r\n }\r\n\r\n } else {\r\n jQuery.getJSON(this.data.source.data, function (data) {\r\n dataFunc(data);\r\n });\r\n }\r\n\r\n },\r\n setAutoCompletes: function (widget) {\r\n\r\n var search = [];\r\n for (var i = 0; i < this.data.locations.length; i++) {\r\n var loc = this.data.locations[i];\r\n for (var n = 0; n < loc.names.length; n++) {\r\n search.push({\r\n id: loc.id,\r\n label: loc.names[n].name,\r\n value: loc.names[n].name,\r\n type: loc.type\r\n });\r\n }\r\n }\r\n\r\n // Lokationer\r\n var acLocOptions = {\r\n source: search,\r\n minLength: 3,\r\n autoFocus: true,\r\n select: function (event, ui) {\r\n\r\n var id = ui.item.id;\r\n var w = AU.maps.widget;\r\n if (ui.item.type === w.constants.BUILDING) {\r\n w.setBuildingMarker(widget, w.getBuilding(id), true, true, true);\r\n } else if (ui.item.type === w.constants.DEPARTMENT) {\r\n w.setDepartmentMarkers(widget, w.getDepartment(id));\r\n } else {\r\n w.setOverlayMarker(widget, w.getOverlay(id), true, true, true, true);\r\n }\r\n }\r\n };\r\n\r\n // Personsøgning\r\n var acPeopleOptions = {\r\n source: function (request, response) {\r\n var search = request.term;\r\n if (typeof String.prototype.trim === \"function\") {\r\n search = search.trim();\r\n }\r\n AU.helpers.getXML(AU.ipure.source.searchCrossSite + encodeURI(search), function (data) {\r\n response(AU.ipure.getPeople(data));\r\n });\r\n },\r\n minLength: 3,\r\n autoFocus: true,\r\n select: function (event, ui) {\r\n AU.helpers.getXML(AU.ipure.source.searchDetailsCrossSite + ui.item.url, function (data) {\r\n AU.maps.widget.setPersonMarker(widget, data);\r\n });\r\n }\r\n };\r\n\r\n jQuery('.au_maps_widget_acl', widget.container).autocomplete(acLocOptions);\r\n jQuery('.au_maps_widget_acp', widget.container).autocomplete(acPeopleOptions);\r\n\r\n },\r\n checkForSearchQuery: function (widget) {\r\n if (!widget.pin && AU.helpers.getQuerystring('q') !== \"\") {\r\n\r\n var getBuildingString = function (query) {\r\n\r\n var containsBuildingNumber = function (query) {\r\n var re = new RegExp('(\\\\d{4})', 'ig');\r\n return query.match(re);\r\n };\r\n\r\n var cbn = containsBuildingNumber(query);\r\n if (cbn !== null) {\r\n return cbn[0];\r\n }\r\n\r\n return \"\";\r\n\r\n };\r\n\r\n var query = decodeURI(AU.helpers.getQuerystring('q'));\r\n if (typeof String.prototype.trim === \"function\") {\r\n query = query.trim();\r\n }\r\n\r\n var bs = getBuildingString(query);\r\n if (bs !== \"\") {\r\n var bldg = this.getBuilding(bs);\r\n if (bldg !== null) {\r\n this.setBuildingMarker(widget, bldg, true, true, true);\r\n jQuery('.au_maps_widget_acl', widget.container).val((AU.pageLang === \"da\" ? 'Bygning ' : 'Building ') + bldg.id);\r\n }\r\n } else {\r\n var querySplit = query.split(\" \");\r\n if (querySplit.length > 1 || query.indexOf('+') > -1) {\r\n query = query.replace(/\\+/g, ' ');\r\n AU.helpers.getXML(AU.ipure.source.searchCrossSite + encodeURI(query), function (data) {\r\n var people = AU.ipure.getPeople(data);\r\n if (people.length === 1) {\r\n AU.helpers.getXML(AU.ipure.source.searchDetailsCrossSite + people[0].url, function (data) {\r\n AU.maps.widget.setPersonMarker(widget, data);\r\n jQuery('.au_maps_widget_acp', widget.container).val(query);\r\n });\r\n } else if (people.length > 1) {\r\n jQuery('.au_maps_widget_acp', widget.container).val(query).focus().autocomplete('search');\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n },\r\n clearMarkers: function (widget) {\r\n for (var i = 0; i < widget.markers.length; i++) {\r\n widget.markers[i].setMap(null);\r\n }\r\n widget.markers = [];\r\n },\r\n setBuildingMarker: function (widget, building, clearOld, centerMap, showContent) {\r\n\r\n if (AU.maps.widget.googleMaps) {\r\n if (clearOld) {\r\n this.clearMarkers(widget);\r\n }\r\n\r\n var point = new google.maps.LatLng(building.latitude, building.longitude);\r\n var icon = new google.maps.MarkerImage(widget.config.image, null, null, null, new google.maps.Size(this.constants.markerWidth, this.constants.markerHeight));\r\n var windowContent = '';\r\n\r\n var marker = AU.maps.marker.add(widget.map, point, icon, false, false, false, false, widget.config.defaultZoomLevel, AU.maps.infoWindow, windowContent, building.names[0].name);\r\n widget.markers.push(marker);\r\n\r\n if (centerMap) {\r\n widget.map.setCenter(point);\r\n }\r\n }\r\n\r\n widget.content.empty();\r\n if (showContent) {\r\n widget.content.append('' + (AU.pageLang === \"da\" ? 'Vis på bygningskortet.' : 'Show on the building map.') + '
';\r\n if (typeof buildingNumber === \"undefined\" && w.googleMaps) {\r\n AU.maps.geocodePersonAddress(widget.map, widget.config, icon, address, centerMap, iw, windowContent, function (marker, point, centerMap, infoWindow, windowContent) {\r\n widget.content.empty();\r\n widget.content.append(personHTML);\r\n widget.markers.push(marker);\r\n\r\n if (w.googleMaps) {\r\n if (centerMap) {\r\n widget.map.setCenter(point);\r\n } else {\r\n AU.maps.setBounds(widget.map, [widget.markers]);\r\n }\r\n }\r\n });\r\n } else {\r\n\r\n if (w.googleMaps) {\r\n var building = w.getBuilding(buildingNumber);\r\n w.setBuildingMarker(widget, building, true, centerMap, false);\r\n }\r\n widget.content.empty();\r\n widget.content.append(personHTML);\r\n }\r\n\r\n\r\n });\r\n },\r\n getBuilding: function (number) {\r\n var building = null;\r\n for (var i = 0; i < this.data.locations.length; i++) {\r\n if (this.data.locations[i].type === this.constants.BUILDING && this.data.locations[i].id === number.toString()) {\r\n building = this.data.locations[i];\r\n break;\r\n }\r\n }\r\n return building;\r\n },\r\n getDepartment: function (departmentId) {\r\n var department = null;\r\n for (var i = 0; i < this.data.locations.length; i++) {\r\n if (this.data.locations[i].type === this.constants.DEPARTMENT && this.data.locations[i].id === departmentId.toString()) {\r\n department = this.data.locations[i];\r\n break;\r\n }\r\n }\r\n return department;\r\n },\r\n getOverlay: function (id) {\r\n var place;\r\n for (var i = 0; i < this.data.locations.length; i++) {\r\n if (this.data.locations[i].type === this.constants.OVERLAY && this.data.locations[i].id === id.toString()) {\r\n place = this.data.locations[i];\r\n }\r\n }\r\n return place;\r\n },\r\n mergeOptions: function (widget) {\r\n if (!widget.hasOwnProperty('config')) {\r\n widget.config = {};\r\n }\r\n\r\n for (var conf in this.options.config) {\r\n if (!widget.config.hasOwnProperty(conf)) {\r\n widget.config[conf] = this.options.config[conf];\r\n }\r\n }\r\n },\r\n init: function () {\r\n if (typeof google === \"undefined\") {\r\n AU.maps.widget.googleMaps = false;\r\n }\r\n\r\n if (AU.maps.widget.googleMaps) {\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 }\r\n\r\n for (var i = 0; i < this.widgets.length; i++) {\r\n var wdgt = this.widgets[i];\r\n this.mergeOptions(wdgt);\r\n wdgt.container = jQuery(wdgt.config.container);\r\n wdgt.mapContainer = document.getElementById(wdgt.config.mapContainer);\r\n wdgt.content = jQuery('.au_maps_widget_content', wdgt.container);\r\n wdgt.markers = [];\r\n wdgt.loaded = false;\r\n\r\n if (!wdgt.config.pin) {\r\n this.loadMap(wdgt);\r\n this.loadData(wdgt);\r\n }\r\n\r\n }\r\n }\r\n};","AU.piechart = {\r\n options: {\r\n config: {\r\n container: '.pie-container',\r\n canvas: '#pie1',\r\n width: 250,\r\n height: 250,\r\n colors: ['#b9e5fb', '#6ecff6', '#00bdf2', '#00aeef', '#008bbf', '#006991', '#004563', '#37373a', '#4c4d4f', '#6d6e71', '#818285', '#9d9fa2', '#bcbdc0'],\r\n data: [{ value: 50, label: 'Data 1' }, { value: 50, label: 'Data 2' }]\r\n }\r\n },\r\n mergeOptions: function (pie) {\r\n if (!pie.hasOwnProperty('config')) {\r\n pie.config = {};\r\n }\r\n\r\n for (let conf in this.options.config) {\r\n if (!pie.config.hasOwnProperty(conf)) {\r\n pie.config[conf] = this.options.config[conf];\r\n }\r\n }\r\n\r\n if (!pie.hasOwnProperty('data')) {\r\n pie.data = {};\r\n }\r\n\r\n for (let d in this.options.data) {\r\n if (!pie.data.hasOwnProperty(d)) {\r\n pie.data[d] = this.options.data[d];\r\n }\r\n }\r\n },\r\n highlight: function (col, amt) {\r\n\r\n let usePound = false;\r\n\r\n if (col[0] === \"#\") {\r\n col = col.slice(1);\r\n usePound = true;\r\n }\r\n\r\n const num = parseInt(col, 16);\r\n let r = (num >> 16) + amt;\r\n\r\n if (r > 255) {\r\n r = 255;\r\n } else if (r < 0) {\r\n r = 0;\r\n }\r\n\r\n let b = ((num >> 8) & 0x00FF) + amt;\r\n\r\n if (b > 255) {\r\n b = 255;\r\n } else if (b < 0) {\r\n b = 0;\r\n }\r\n\r\n let g = (num & 0x0000FF) + amt;\r\n\r\n if (g > 255) {\r\n g = 255;\r\n } else if (g < 0) {\r\n g = 0;\r\n }\r\n\r\n return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16);\r\n },\r\n getData: function (pie) {\r\n let data = [];\r\n let colorIndex = 0;\r\n for (let i = 0; i < pie.config.data.length; i++) {\r\n const pd = pie.config.data[i];\r\n\r\n if (colorIndex === pie.config.colors.length - 1) {\r\n colorIndex = 0;\r\n }\r\n\r\n data.push({\r\n value: pd.value,\r\n label: pd.label,\r\n color: pie.config.colors[colorIndex],\r\n highlight: this.highlight(pie.config.colors[colorIndex], 10)\r\n });\r\n\r\n colorIndex++;\r\n }\r\n\r\n return data;\r\n },\r\n createLegend: function (pie, canvas) {\r\n const helpers = Chart.helpers;\r\n const legendHolder = document.createElement('div');\r\n legendHolder.innerHTML = pie.generateLegend();\r\n helpers.each(legendHolder.firstChild.childNodes, function (legendNode, index) {\r\n helpers.addEvent(legendNode, 'mouseover', function () {\r\n let activeSegment = pie.segments[index];\r\n activeSegment.save();\r\n activeSegment.fillColor = activeSegment.highlightColor;\r\n pie.showTooltip([activeSegment]);\r\n activeSegment.restore();\r\n });\r\n });\r\n helpers.addEvent(legendHolder.firstChild, 'mouseout', function () {\r\n pie.draw();\r\n });\r\n canvas.parentNode.parentNode.appendChild(legendHolder.firstChild);\r\n },\r\n pies: [],\r\n init: function () {\r\n for (let i = 0; i < this.pies.length; i++) {\r\n const pie = this.pies[i];\r\n if (!pie.loaded) {\r\n pie.id = i;\r\n this.mergeOptions(pie);\r\n const mountNode = document.querySelector(pie.config.container);\r\n const visible = mountNode && AU.helpers.isElementPartlyInViewport(mountNode) && getComputedStyle(mountNode)['visibility'] != 'hidden';\r\n if (visible) {\r\n $(pie.config.container).append('');\r\n pie.canvas = document.querySelector(pie.config.canvas);\r\n const chartPie = new Chart(pie.canvas.getContext('2d')).Pie(this.getData(pie), { tooltipTemplate: \"<%if (label){%><%=label.length > 15 ? (label.substring(0, 15) + '...') : label %> : <%}%><%= value %>%\", animation: true });\r\n this.createLegend(chartPie, pie.canvas);\r\n pie.loaded = true;\r\n }\r\n }\r\n }\r\n\r\n const pieLegend = $('.pie-legend');\r\n if (pieLegend !== null) {\r\n pieLegend.addClass('resetlist');\r\n }\r\n }\r\n};\r\n\r\nAU.addScrollFunction(function () {\r\n AU.piechart.init();\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};","$.ajaxSetup({\r\n cache: true\r\n});\r\nvar CludoSearch;\r\nAU.search = {\r\n init: function (searchUrl) {\r\n // Cludo\r\n var primaryDanish = typeof window.primaryDanish == 'undefined' ? true : window.primaryDanish;\r\n var baseUrlAppend = primaryDanish ? (AU.pageLang == 'da' ? '' : 'en/') : (AU.pageLang == 'da' ? 'da/' : '');\r\n var baseUrl = jQuery('base') == null ? location.host : (jQuery('base').attr('href') + baseUrlAppend);\r\n if (baseUrl.indexOf('http') === -1) {\r\n baseUrl = 'https:' + baseUrl;\r\n }\r\n var engineId = typeof window.cludoEngineId == 'undefined' || window.cludoEngineId === 0 ? (AU.pageLang == 'da' ? 2151 : 8956) : window.cludoEngineId;\r\n var filters = baseUrl.indexOf('www.au.dk') > -1 || (typeof window.cludoEngineId != 'undefined' && window.cludoEngineId > 0) ? {} : { 'DomainName': [baseUrl] };\r\n jQuery.getScript('//customer.cludo.com/scripts/bundles/search-script.min.js', function () {\r\n var cludoSettings = {\r\n customerId: 511,\r\n engineId,\r\n searchUrl,\r\n searchInputs: ['cludo-search-form', 'cludo-search-content-form', 'cludo-search-mobile-form'],\r\n initSearchBoxText: '',\r\n loading: \"