{"version":3,"sources":["app-basic.js","au-fallback.js","au.js","au-helpers.js","au-navigation.js","au-cookies.js","au-design.js","au-basic.js","au-responsive.js","au-defaults.js","au-maps.js","au-init.js"],"names":["pressed","url","location","href","pres","replaceall","s","x","y","length","found","indexOf","substring","multipressed","xx","urlPattern","StartValue","allow","OK","i","elements","type","selectedIndex","options","value","toLowerCase","window","alert","AU","pageLang","cdn","version","bss","ready","addReadyFunction","fn","push","console","log","error","load","addLoadFunction","resize","addResizeFunction","scroll","addScrollFunction","navigation","helpers","getUnicodeKey","e","unicode","keyCode","charCode","rewriteLink","text","trim","replace","getQuerystring","key","default_","regex","RegExp","qs","exec","getInternetExplorerVersion","rv","navigator","userAgent","ua","re","parseFloat","$1","isMobileDevice","test","getXML","source","callback","jQuery","ajax","dataType","success","data","isElementInViewport","element","rect","getBoundingClientRect","top","left","bottom","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementPartlyInViewport","offsetTop","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","pageYOffset","pageXOffset","trimText","label","amount","end","validateEmail","email","componentToHex","c","hex","toString","rgbToHex","r","g","b","this","getPageContent","retrieveSelector","insertSelector","urlAllowed","protocolAndHost","protocol","host","insertElement","accentMap","é","ä","ö","á","ü","normalizeAccents","term","ret","charAt","menu","setClick","on","headerMenu","parents","hasClass","removeClass","addClass","setUtility","databox","init","alphabox","setBreadcrumb","bc","crumbs","crumbCutOff","eq","after","toggleClass","addExtraMenuItem","topLevelMenuItems","each","topLevelMenuItem","topLevelSubMenu","prepend","attr","setTopBar","topBarLinks","topBarContent","parent","responsive","state","NAME","topBarTimeout","setTimeout","show","css","hide","clearTimeout","preventDefault","not","toggle","selectedUM","search","val","focus","frontpage","setTargetGroups","buttons","groups","toggleGroup","group","btn","button","cookies","set","c_name","exdays","path","exdate","Date","setDate","getDate","c_value","encodeURI","toUTCString","cookie","get","c_start","c_end","decodeURI","alertElement","noAlertPeriod","strings","header","paragraph","alertCookies","replaceCookieTexts","createElement","setAttribute","innerHTML","globalFooter","querySelector","insertAdjacentElement","style","display","allowCookies","initCookieScript","cookieScriptId","head","cookieScriptManipulationCode","cookieScriptVersion","insertBefore","firstElementChild","addEventListener","accept","duration","byGUI","undefined","design","setFocusFieldIds","setBuildingLinks","elementToSearchSelector","elementToSearch","mapUrl","buildingPhrase","html","onCollapseOpen","onCollapseClose","setCollapse","openEvent","createEvent","initEvent","closeEvent","collapsibles","me","domElement","unbind","dispatchEvent","d","target","openCollapsibleFromHash","hash","scrollIntoView","grayscale","src","supportsCanvas","getContext","imageData","px","gray","canvas","context","img","Image","drawImage","getImageData","putImageData","toDataURL","err","setBannerElementsReady","hover","find","stop","animate","opacity","setBannerElementsLoad","setHero","hero","scrollTop","parseInt","setMagnificPopup","lightbox","rels","Object","keys","index","magnificPopup","gallery","enabled","modal","newsImgs","setTopWarning","topWarning","class","topWarningTextDa","topWarningTextEn","basic","ipure","flowbox","boxes","piechart","social","news","feeds","stateHistory","modes","PHONE","ID","MAX","TABLET","DESKTOP","detectDevice","Foundation","MediaQuery","current","setMarkup","markupRenderFunctions","runMarkupFunctions","utilityLinks","sectionHeader","pageNav","titleBar","menuTitle","leftMenu","tablesScroll","append","wrap","before","table","wasPhone","states","is","unwrap","edutables","tables","scriptLoaded","loadExternal","dg","AUDiagramme","componentsUrl","getScript","DEFAULT_util_staffportal_da","config","container","alphabet","link","stacked","background","color","overlay","DEFAULT_util_staffportal_en","DEFAULT_util_department_da","DEFAULT_util_department_en","DEFAULT_util_staffservice_da","title","description","links","noResultsAlphabet","noResultsSearch","noResultsUri","placeHolder","mode","DEFAULT_util_staffservice_en","DEFAULT_util_phdportal_da","DEFAULT_util_phdportal_en","DEFAULT_util_student_da","linkColor","DEFAULT_util_student_en","DEFAULT_staff_staffservice_da","DEFAULT_staff_staffservice_en","GOOGLE_MAPS_API_KEY","maps","loadGoogleMapsScript","shouldLoadGoogleMapsScript","shouldLoadGoogleMapsScriptAsync","loadGoogleMapsScriptAsync","scriptUrl","script","onload","onerror","event","appendChild","googleMapsScriptLoaded","googleMapsScriptCallback","CustomEvent","create","zoomLevel","center","scrollWheel","draggable","clickable","streetView","pco","zco","svco","mapOptions","zoom","scrollwheel","streetViewControl","mapTypeControlOptions","mapTypeIds","google","MapTypeId","ROADMAP","HYBRID","MapTypeControlStyle","DROPDOWN_MENU","position","ControlPosition","RIGHT_TOP","mapTypeId","panControlOptions","zoomControlOptions","streetViewControlOptions","map","Map","isNaN","setBounds","markers","bounds","LatLngBounds","j","extend","fitBounds","marker","add","point","markerIcon","markerDraggable","markerClickable","markerPanTo","markerClickZoom","markerClickZoomLevel","infoWindow","windowContent","id","Marker","icon","addListener","open","setContent","panTo","getPosition","getZoom","setZoom","trigger","route","destinationFrom","destinationTo","directionsDisplay","directionsService","calc","from","to","travelMode","waypointLocations","waypoints","stopover","request","origin","destination","response","status","DirectionsStatus","getMap","setMap","setDirections","createDirectionObjects","rendererOptions","DirectionsRenderer","panel","setPanel","geocodePersonAddress","address","centerMap","func","geocoder","geocode","results","GeocoderStatus","LatLng","geometry","lat","lng","markerDrag","markerClick","clickPanTo","clickZoom","clickZoomLevel","getDistanceBetweenPoints","point1","point2","spherical","computeDistanceBetween","convertFromLatLng","coord","Math","round","convertToLatLng","getCurrentDate","date","month","getMonth","currentDate","getFullYear","getCurrentTime","hours","getHours","minutes","getMinutes","currentTime","sortSelect","$","selectedValue","sort","a","sortAlphaObj","name","single","image","_markerDrag","_markerClick","_clickPanTo","_clickZoom","_clickZoomLevel","defaultZoomLevel","_defaultZoomLevel","_scrollWheel","_draggable","_clickable","_streetView","centerLat","_centerLat","centerLng","_centerLng","mapWidth","mapHeight","mapDivs","firstMapLoaded","findFirstMap","firstMap","getElementById","loadMaps","dataFunc","locations","combinedPoints","l","names","latitude","longitude","points","name_en","switchmode","getJSON","DirectionsService","InfoWindow","Geocoder","divUsed","currentMap","k","m","mapContainer","setMapContent","span","option","selected","click","idSplit","split","switchMode","change","onchangeHybrid","setMapTypeId","clear","n","setCenter","setMapClickEvent","p","widget","googleMaps","widgets","constants","BUILDING","DEPARTMENT","OVERLAY","markerWidth","markerHeight","overlayMarkerWidth","overlayMarkerHeight","pin","loadMap","loaded","loadData","w","building","department","setAutoCompletes","checkForSearchQuery","ieVersion","xdr","XDomainRequest","parseJSON","responseText","onprogress","send","loc","acLocOptions","minLength","autoFocus","select","ui","item","setBuildingMarker","getBuilding","setDepartmentMarkers","getDepartment","setOverlayMarker","getOverlay","acPeopleOptions","String","prototype","searchCrossSite","getPeople","searchDetailsCrossSite","setPersonMarker","autocomplete","getBuildingString","query","containsBuildingNumber","match","cbn","bs","bldg","querySplit","people","clearMarkers","clearOld","showContent","MarkerImage","Size","content","empty","searchDetailsWrapper","departmentsdetails","addressNode","street","zip","city","buildingNode","buildings","place","groupid","groupname","getPersonDetails","personHTML","buildingNumber","officePhone","iw","number","departmentId","mergeOptions","hasOwnProperty","conf","wdgt","foundation","AUCDNPATH","classList","contains","langAttr","getAttribute","disableAddThisForOldNews","sharers","newsSharer","newsLists","cludoDanishPath","cludoEnglishPath","defaultTracking","cmForms","form","privacyEmail","findBtn","sz","async","getElementsByTagName","parentNode"],"mappings":"AAAA,YCMA,SAASA,SAAQC,GACbC,SAASC,KAAOF,EAGpB,QAASG,MAAKH,GACVC,SAASC,KAAOF,EAGpB,QAASI,YAAWC,EAAGC,EAAGC,GACtB,GAAID,EAAEE,OAAS,EAEX,IADA,GAAIC,GAAQJ,EAAEK,QAAQJ,GACfG,GAAS,GACZJ,EAAIA,EAAEM,UAAU,EAAGF,GAASF,EAAIF,EAAEM,UAAUF,EAAQH,EAAEE,OAAQH,EAAEG,QAChEC,EAAQJ,EAAEK,QAAQJ,EAAGG,EAAQF,EAAEC,OAGvC,OAAOH,GAGX,QAASO,cAAaC,EAAIC,EAAYC,GAIlC,IAAK,GAHDf,GAAMc,EACNE,EAAQD,EACRE,GAAK,EACAC,EAAI,EAAGA,EAAIL,EAAGM,SAASX,OAAQU,IACR,eAAxBL,EAAGM,SAASD,GAAGE,OACXH,IACAA,EAAMJ,EAAGM,SAASD,GAAGG,eAAiBL,GAE1ChB,EAAMI,WAAWJ,EAAK,KAAOkB,EAAI,GAAIL,EAAGM,SAASD,GAAGI,QAAQT,EAAGM,SAASD,GAAGG,eAAeE,OAC1FvB,EAAMI,WAAWJ,EAAK,KAAOkB,EAAI,GAAIL,EAAGM,SAASD,GAAGI,QAAQT,EAAGM,SAASD,GAAGG,eAAeE,OAGlGvB,GAAMA,EAAIwB,cACNP,EACAhB,SAASC,KAAOF,EAEhByB,OAAOC,MAAM,gCCpCrB,GAAIC,KACAC,SAAU,KACVC,IAAK,oBACLC,QAAS,eACTC,KAAK,EACLC,SACAC,iBAAkB,SAASC,GACL,kBAAPA,GAEHP,GAAGK,MAAMtB,QAAQwB,QACjBP,GAAGK,MAAMG,KAAKD,GAEdE,QAAQC,IAAI,oEAGhBD,QAAQE,MAAM,iDAGtBC,QACAC,gBAAiB,SAASN,GACJ,kBAAPA,GAEHP,GAAGY,KAAK7B,QAAQwB,QAChBP,GAAGY,KAAKJ,KAAKD,GAEbE,QAAQC,IAAI,mEAGhBD,QAAQE,MAAM,gDAGtBG,UACAC,kBAAmB,SAASR,GACN,kBAAPA,GAEHP,GAAGc,OAAO/B,QAAQwB,QAClBP,GAAGc,OAAON,KAAKD,GAEfE,QAAQC,IAAI,qEAGhBD,QAAQE,MAAM,kDAGtBK,UACAC,kBAAmB,SAASV,GACN,kBAAPA,GAEHP,GAAGgB,OAAOjC,QAAQwB,QAClBP,GAAGgB,OAAOR,KAAKD,GAEfE,QAAQC,IAAI,qEAGhBD,QAAQE,MAAM,kDAGtBO,cCzDJlB,IAAGmB,SACCC,cAAe,SAAUC,GACrB,GAAIC,GAAUD,EAAEE,QAAUF,EAAEE,QAAUF,EAAEG,QACxC,OAAOF,IAEXG,YAAa,SAAUC,GACnB,MAAOA,GAAKC,OAAO9B,cAAc+B,QAAQ,KAAM,KAAKA,QAAQ,KAAM,MAAMA,QAAQ,KAAM,MAAMA,QAAQ,KAAM,OAE9GC,eAAgB,SAAUC,EAAKC,GACtBA,IACDA,EAAW,IAGfD,EAAMA,EAAIF,QAAQ,OAAQ,OAAOA,QAAQ,OAAQ,MACjD,IAAII,GAAQ,GAAIC,QAAO,SAAWH,EAAM,aAEpCI,EAAKF,EAAMG,KAAKrC,OAAOxB,SAASC,KAEpC,OAAW,QAAP2D,EACOH,EAEAG,EAAG,IAGlBE,2BAA4B,WACxB,GAAIC,KACJ,IAAIC,UAAUC,UAAUxD,QAAQ,cAAiB,CAC7C,GAAIyD,GAAKF,UAAUC,UACfE,EAAK,GAAIR,QAAO,2BACA,QAAhBQ,EAAGN,KAAKK,KACRH,EAAKK,WAAWT,OAAOU,KAG/B,MAAON,IAEXO,eAAgB,WACZ,MAAQ,0CAA2CC,KAAKP,UAAUC,YAEtEO,OAAQ,SAAUC,EAAQC,GACtBC,OAAOC,MACHzD,KAAM,MACNpB,IAAK0E,EACLI,SAAU,MACVC,QAAS,SAAUC,GACS,kBAAbL,IACPA,EAASK,OAKzBC,oBAAqB,SAAUC,GAC3B,GAAgB,OAAZA,EACA,OAAO,CAGX,IAAIC,GAAOD,EAAQE,uBAEnB,OAAQD,GAAKE,KAAO,GAAKF,EAAKG,MAAQ,GAAKH,EAAKI,SAAW9D,OAAO+D,aAAeC,SAASC,gBAAgBC,eAAiBR,EAAKS,QAAUnE,OAAOoE,YAAcJ,SAASC,gBAAgBI,cAE5LC,0BAA2B,SAAUb,GAMjC,IALA,GAAIG,GAAMH,EAAQc,UACdV,EAAOJ,EAAQe,WACfC,EAAQhB,EAAQiB,YAChBC,EAASlB,EAAQmB,aAEdnB,EAAQoB,cACXpB,EAAUA,EAAQoB,aAClBjB,GAAOH,EAAQc,UACfV,GAAQJ,EAAQe,UAGpB,OACIZ,GAAO5D,OAAO8E,YAAc9E,OAAO+D,aACnCF,EAAQ7D,OAAO+E,YAAc/E,OAAOoE,YACnCR,EAAMe,EAAU3E,OAAO8E,aACvBjB,EAAOY,EAASzE,OAAO+E,aAGhCC,SAAU,SAAUC,EAAOC,EAAQC,GAC/B,MAAIF,GAAMlG,OAASmG,EACRD,EAAM/F,UAAU,EAAGgG,GAAUC,EAGjCF,GAEXG,cAAe,SAAUC,GACrB,GAAI1C,GAAK,2JACT,OAAOA,GAAGI,KAAKsC,IAEnBC,eAAgB,SAAUC,GACtB,GAAIC,GAAMD,EAAEE,SAAS,GACrB,OAAsB,KAAfD,EAAIzG,OAAe,IAAMyG,EAAMA,GAE1CE,SAAU,SAAUC,EAAGC,EAAGC,GACtB,MAAOC,MAAKR,eAAeK,GAAKG,KAAKR,eAAeM,GAAKE,KAAKR,eAAeO,IAEjFE,eAAgB,SAAUxH,EAAKyH,EAAkBC,EAAgB/C,GAC7D,GAAIgD,GAAa,SAAU3H,GACvB,GAAI4H,GAAkB3H,SAAS4H,SAAW,KAAO5H,SAAS6H,IAC1D,OAAwC,KAAjC9H,EAAIU,QAAQkH,IAGnBG,EAAgBnD,OAAO8C,EAC3B,SAAIC,EAAW3H,KACX+H,EAAcxF,KAAKvC,EAAM,IAAMyH,EAAkB,WACrB,kBAAb9C,IACPA,OAGD,IAKfqD,WACIC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KAETC,iBAAkB,SAAUC,EAAMP,GACzBA,IACDA,EAAYT,KAAKS,UAIrB,KAAK,GADDQ,GAAM,GACDtH,EAAI,EAAGA,EAAIqH,EAAK/H,OAAQU,IAC7BsH,GAAOR,EAAUO,EAAKE,OAAOvH,KAAOqH,EAAKE,OAAOvH,EAEpD,OAAOsH,KClIf7G,GAAGkB,WAAW6F,MACVC,SAAU,WACN/D,OAAO,oBAAoBgE,GAAG,QAAS,WACnC,GAAIC,GAAajE,OAAO2C,MAAMuB,QAAQ,eAClCD,GAAWE,SAAS,SACpBF,EAAWG,YAAY,QAClBrH,GAAGI,KACJ6C,OAAO,WAAWoE,YAAY,UAGlCH,EAAWI,SAAS,QACftH,GAAGI,KACJ6C,OAAO,WAAWqE,SAAS,YAK3CC,WAAY,WACRtE,OAAOa,UAAUmD,GAAG,mBAAoB,wBAAyB,WAC7DjH,GAAGwH,QAAQC,OACXzH,GAAG0H,SAASD,UAGpBE,cAAe,WACX,GAAIC,GAAK3E,OAAO,kBACZ4E,EAAS5E,OAAO,MAAO2E,GACvBE,EAAc,CACdD,GAAOhJ,OAASiJ,IAChBF,EAAGN,SAAS,YACZO,EAAOE,GAAG,GAAGC,MAAM,0JACnB/E,OAAO,mBAAmBgE,GAAG,QAAS,WAClCW,EAAGK,YAAY,gBAI3BC,iBAAkB,WACd,GAAIC,GAAoBlF,OAAO,0CAC/BkF,GAAkBC,KAAK,WACnB,GAAIC,GAAmBpF,OAAO,MAAO2C,MACjC0C,EAAkBrF,OAAO,aAAc2C,KAC3C0C,GAAgBC,QAAQ,+HAAiIF,EAAiBG,KAAK,QAAU,KAAOH,EAAiB3G,OAAS,gBAGlO+G,UAAW,WACP,GAAIC,GAAczF,OAAO,6HACrBiE,EAAajE,OAAO,eACxByF,GAAYN,KAAK,WACb,GAAIO,GAAgB1F,OAAO,mBAAoBA,OAAO2C,MAAMgD,SAC5D3F,QAAO2C,MAAMqB,GAAG,YAAa,WACO,SAA5BjH,GAAG6I,WAAWC,MAAMC,MAAoB/I,GAAGmB,QAAQyB,mBACnD5C,GAAGkB,WAAW8H,cAAgBC,WAAW,WACrCN,EAAcO,OAAOC,IAAI,QAASjC,EAAWiC,IAAI,WAClD,QAERlC,GAAG,WAAY,WACkB,SAA5BjH,GAAG6I,WAAWC,MAAMC,MAAoB/I,GAAGmB,QAAQyB,mBACnD+F,EAAcS,OACdC,aAAarJ,GAAGkB,WAAW8H,kBAEhC/B,GAAG,QAAS,SAAU5F,GACjBrB,GAAGmB,QAAQyB,mBACXvB,EAAEiI,iBACFrG,OAAO,oBAAoBsG,IAAIZ,GAAeS,OAC9CT,EAAca,SAASL,IAAI,QAASjC,EAAWiC,IAAI,eAK/DlG,OAAO,oBAAoBgE,GAAG,YAAa,WACP,SAA5BjH,GAAG6I,WAAWC,MAAMC,MAAoB/I,GAAGmB,QAAQyB,kBACnDK,OAAO2C,MAAMsD,SAElBjC,GAAG,WAAY,WACkB,SAA5BjH,GAAG6I,WAAWC,MAAMC,MAAoB/I,GAAGmB,QAAQyB,kBACnDK,OAAO2C,MAAMwD,SAIY,mBAAtBtJ,QAAO2J,YAAoD,MAAtB3J,OAAO2J,YACnDxG,OAAO,2BAA6BnD,OAAO2J,WAAa,GAAK,KAAKnC,SAAS,YAKvFtH,GAAGkB,WAAWwI,QACV1C,SAAU,WACN/D,OAAO,6DAA6DgE,GAAG,WAAY,WAC/EhE,OAAO,6DAA6D0G,IAAI,IACxE1G,OAAO,mBAAmBoE,YAAY,gBAG1CpE,OAAO,iBAAiBgE,GAAG,QAAS,WAChChE,OAAO,mBAAmBqE,SAAS,cACnCrE,OAAO,6DAA6D2G,YAKhF5J,GAAGkB,WAAW2I,WACVC,gBAAiB,WACb,GAAIC,GAAU9G,OAAO,0BACjB+G,EAAS/G,OAAO,6CAChBgH,EAAc,SAAU1K,GACxB,GAAI2K,GAAQF,EAAOjC,GAAGxI,EACtB2K,GAAMjC,YAAY,UAClB+B,EAAOT,IAAIW,GAAO7C,YAAY,UAElC0C,GAAQ3B,KAAK,SAAU7I,EAAG4K,GACtB,GAAIC,GAASnH,OAAOkH,EACpBC,GAAOnD,GAAG,QAAS,SAAU5F,GACzBA,EAAEiI,iBACFrG,OAAO2C,MAAMqC,YAAY,UACzB8B,EAAQR,IAAIa,GAAQ/C,YAAY,UAChC4C,EAAY1K,SCjH5BS,GAAGqK,SACCC,IAAK,SAAUC,EAAQ3K,EAAO4K,EAAQC,GACd,mBAATA,KACPA,EAAO,uBAGX,IAAIC,GAAS,GAAIC,KACjBD,GAAOE,QAAQF,EAAOG,UAAYL,EAClC,IAAIM,GAAUC,UAAUnL,IAAsB,OAAX4K,EAAmB,GAAK,aAAeE,EAAOM,cACjFlH,UAASmH,OAASV,EAAS,IAAMO,EAAUL,GAE/CS,IAAK,SAAUX,GACX,GAAIO,GAAUhH,SAASmH,OACnBE,EAAUL,EAAQ/L,QAAQ,IAAMwL,EAAS,IAI7C,IAHIY,SACAA,EAAUL,EAAQ/L,QAAQwL,EAAS,MAEnCY,OACAL,EAAU,SAET,CACDK,EAAUL,EAAQ/L,QAAQ,IAAKoM,GAAW,CAC1C,IAAIC,GAAQN,EAAQ/L,QAAQ,IAAKoM,EAC7BC,UACAA,EAAQN,EAAQjM,QAEpBiM,EAAUO,UAAUP,EAAQ9L,UAAUmM,EAASC,IAEnD,MAAON,IAEXQ,aAAc,KACdC,cAAe,IACfC,SACIC,OAAQ,GACRC,UAAW,GACXtB,OAAQ,IAEZ3C,KAAM,WACF,GAAI3H,OAAO6L,aAAc,CACrB,GAAIC,GAAqB,SAAUlK,GAC/B,MAAOA,GAAKE,QAAQ,MAAO5B,GAAGqK,QAAQmB,QAAQC,QAAQ7J,QAAQ,MAAO5B,GAAGqK,QAAQmB,QAAQE,WAAW9J,QAAQ,MAAO5B,GAAGqK,QAAQmB,QAAQpB,SAGrIkB,EAAexH,SAAS+H,cAAc,MAC1CP,GAAaQ,aAAa,KAAM,mBAChCR,EAAaS,UAAYH,EAAmB,4FAC5C,IAAII,GAAelI,SAASmI,cAAc,gBACtCD,KACAA,EAAaE,sBAAsB,WAAYZ,GAC/CA,EAAaa,MAAMC,QAAU,OAC7BxG,KAAK0F,aAAeA,EAGxB,IAAIe,GAAezG,KAAKsF,IAAI,gBACP,QAAjBmB,GACAzG,KAAK7F,UAIjBuM,iBAAkB,WACd,GAAqC,mBAA1BxM,QAAOyM,eAAgC,CAE9C,GAAIC,GAAO1I,SAAS0I,KAChBC,EAA+B3I,SAAS+H,cAAc,SAC1DY,GAA6BX,aAAa,MAAO,uDAA+F,mBAA/BhM,QAAO4M,oBAAsC5M,OAAO4M,oBAAsB,MAC3LD,EAA6BX,aAAa,UAAW,SACrDW,EAA6BX,aAAa,OAAQ,mBAClDU,EAAKG,aAAaF,EAA8BD,EAAKI,qBAG7D7M,MAAO,WACuB,OAAtB6F,KAAK0F,eACL1F,KAAK0F,aAAaa,MAAMC,QAAU,QAElCtI,SAASmI,cAAc,+BAA+BY,iBAAiB,QAAS,SAAUxL,GACtFA,EAAEiI,iBACFtJ,GAAGqK,QAAQyC,OAAO9M,GAAGqK,QAAQkB,eAAe,OAIxDuB,OAAQ,SAAUC,EAAUC,GACxB,GAAIvC,GAAOnM,SAAS6H,KAAKpH,QAAQ,YAAgBkO,OAAY,SAC7DrH,MAAK0E,IAAI,gBAAiB,OAAQyC,EAAUtC,GACxCuC,IACApH,KAAK0F,aAAaa,MAAMC,QAAU,UCpF9CpM,GAAGkN,QACCC,iBAAkB,WACdlK,OAAO,aAAamF,KAAK,SAAU7I,GAC1B0D,OAAO2C,MAAM4C,KAAK,OACnBvF,OAAO2C,MAAM4C,KAAK,KAAM,WAAajJ,MAIjD6N,iBAAkB,SAAUC,GACxB,GAAIC,GAAkBrK,OAAOoK,EAE7B,IAAIC,EAAgBzO,OAAS,EAAG,CAC5B,GAAI0O,GAAyB,OAAhBvN,GAAGC,SAAoB,oBAAsB,sBACtDuN,EAAiC,OAAhBxN,GAAGC,SAAoB,UAAY,WACpDwC,EAAK,GAAIR,QAAO,IAAMuL,EAAiB,aAAc,KACzDvK,QAAOmF,KAAKkF,EAAiB,WACzBrK,OAAO2C,MAAM6H,KAAKxK,OAAO2C,MAAM6H,OAAO7L,QAAQa,EAAI,YAAc8K,EAAS,sBAIrFG,kBACAC,mBACAC,YAAa,WAET,GAAIC,GAAY/J,SAASgK,YAAY,QACrCD,GAAUE,UAAU,oBAAoB,GAAM,EAE9C,IAAIC,GAAalK,SAASgK,YAAY,QACtCE,GAAWD,UAAU,qBAAqB,GAAM,EAEhD,IAAIE,GAAehL,OAAO,4BAC1BgL,GAAa7F,KAAK,WACd,GAAI8F,GAAKjL,OAAO2C,MACZuI,EAAaD,EAAGhD,IAAI,GACpBO,EAASxI,OAAO,gBAAiBiL,EAErCzC,GAAO2C,OAAO,SAASnH,GAAG,QAAS,WAC/BiH,EAAGjG,YAAY,gBACXiG,EAAG9G,SAAS,gBACZ+G,EAAWE,cAAcL,GAEzBG,EAAWE,cAAcR,IAIjC,IAAIS,GAAItO,GAAGkN,MACXiB,GAAWtB,iBAAiB,mBAAoB,SAAUxL,GACtD,IAAK,GAAI9B,GAAI,EAAGA,EAAI+O,EAAEZ,eAAe7O,OAAQU,IACN,kBAAxB+O,GAAEZ,eAAenO,IACxB+O,EAAEZ,eAAenO,GAAG8B,EAAEkN,UAG/B,GAGHJ,EAAWtB,iBAAiB,oBAAqB,SAAUxL,GACvD,IAAK,GAAI9B,GAAI,EAAGA,EAAI+O,EAAEX,gBAAgB9O,OAAQU,IACN,kBAAzB+O,GAAEX,gBAAgBpO,IACzB+O,EAAEX,gBAAgBpO,GAAG8B,EAAEkN,UAGhC,KAGP3I,KAAK4I,wBAAwBlQ,SAASmQ,MAEtCxL,OAAOnD,QAAQmH,GAAG,aAAc,WAC5BjH,GAAGkN,OAAOsB,wBAAwBlQ,SAASmQ,SAGnDD,wBAAyB,SAAUC,GACL,IAAtBA,EAAK1P,QAAQ,OACbkE,OAAOwL,EAAO,8BAAgCA,EAAO,iCAAmCA,EAAO,gCAAgCpH,YAAY,gBAC3IpE,OAAOwL,GAAMtH,QAAQ,mBAAmBE,YAAY,gBACpDvD,SAASmI,cAAcwC,GAAMC,mBAGrCC,UAAW,SAAUC,GACjB,IACI,GAAIC,KAAmB/K,SAAS+H,cAAc,UAAUiD,UACxD,IAAID,EAAgB,CAChB,GAEIE,GAAWC,EAAInQ,EAAeoQ,EAF9BC,EAASpL,SAAS+H,cAAc,UAChCsD,EAAUD,EAAOJ,WAAW,MACLvP,EAAI,EAC3B6P,EAAM,GAAIC,MAWd,KATAD,EAAIR,IAAMA,EACVM,EAAO3K,MAAQ6K,EAAI7K,MACnB2K,EAAOzK,OAAS2K,EAAI3K,OACpB0K,EAAQG,UAAUF,EAAK,EAAG,GAE1BL,EAAYI,EAAQI,aAAa,EAAG,EAAGL,EAAO3K,MAAO2K,EAAOzK,QAC5DuK,EAAKD,EAAU1L,KACfxE,EAASmQ,EAAGnQ,OAELU,EAAIV,EAAQU,GAAK,EACpB0P,EAAe,GAARD,EAAGzP,GAAuB,IAAZyP,EAAGzP,EAAI,GAAwB,IAAZyP,EAAGzP,EAAI,GAC/CyP,EAAGzP,GAAKyP,EAAGzP,EAAI,GAAKyP,EAAGzP,EAAI,GAAK0P,CAIpC,OADAE,GAAQK,aAAaT,EAAW,EAAG,GAC5BG,EAAOO,YAEd,MAAOb,GAEb,MAAMc,GAEJ,MADAjP,SAAQC,IAAIgP,GACLd,IAGfe,uBAAwB,WACpB1M,OAAO,eAAe2M,MAClB,WACI3M,OAAO2C,MAAMiK,KAAK,cAAcC,OAAOC,SAAUC,QAAS,GAAK,MAEnE,WACI/M,OAAO2C,MAAMiK,KAAK,cAAcC,OAAOC,SAAUC,QAAS,GAAK,QAI3EC,sBAAuB,WACnBhN,OAAO,kCAAkCmF,KAAK,WAC1C,GAAIR,GAAK3E,OAAO,oBAAqBA,OAAO2C,MAAMuB,QAAQ,aAC1DS,GAAGuB,IAAI,mBAAoB,QAAUnJ,GAAGkN,OAAOyB,UAAU/I,KAAKgJ,KAAO,QACtEmB,SAAUC,QAAS,GAAK,MAE/BE,QAAS,WACL,GAAIC,GAAOlN,OAAO,QACdkN,GAAKtR,OAAS,GACdoE,OAAOnD,QAAQkB,OAAO,WAClB,GAAIrC,GAAIsE,OAAO2C,MAAMwK,aAAenN,OAAO,QAAQmE,SAAS,YAAc,OAC1E+I,GAAKhH,IAAI,wBAAyBkH,SAAS1R,EAAI,IAAM,SAIjE2R,iBAAkB,WACd,GAAIC,GAAWtN,OAAO,8DAGlBuN,IACJD,GAASnI,KAAK,WACV,GAAI3C,GAAIxC,OAAO2C,MAAM4C,KAAK,MAC1BgI,GAAK/K,GAAK,IAGd+K,EAAOC,OAAOC,KAAKF,GACnBvN,OAAOmF,KAAKoI,EAAM,SAAUG,EAAO/Q,GAC/BqD,OAAO,UAAYrD,EAAQ,MAAMgR,eAC7BnR,KAAM,QACNoR,SACIC,SAAS,GAEbC,OAAO,KAIf,IAAIC,GAAW/N,OAAO,4EACtB+N,GAASJ,eACLnR,KAAM,QACNoR,SACIC,SAAS,GAEbC,OAAO,KAGfE,cAAe,WACPnR,OAAOoR,YACPjO,OAAO,QAAQsF,QAAQtF,OAAO,WAC1BkO,QAAS,aACT1D,KAAuB,MAAfzN,GAAGC,SAAmBH,OAAOsR,iBAAmBtR,OAAOuR,sBC/K/ErR,GAAGsR,OAAQ,EAEXtR,GAAGuR,OACDxO,WAKF/C,GAAGkN,OAAOoD,iBAAmB,aAI7BtQ,GAAGwH,SACDC,KAAM,cAKRzH,GAAGwR,SACD/J,KAAM,cAKRzH,GAAG0H,UACD+J,SACAhK,KAAM,cAKRzH,GAAG0R,UACDjK,KAAM,cAKRzH,GAAG2R,QACDlK,KAAM,cAKRzH,GAAG4R,MACDC,SACApK,KAAM,cCvCRzH,GAAG6I,YACCC,MAAO,KACPgJ,gBACAC,OACIC,OACIC,GAAI,EACJlJ,KAAM,QACNmJ,IAAK,KAETC,QACIF,GAAI,EACJlJ,KAAM,SACNmJ,IAAK,MAETE,SACIH,GAAI,EACJlJ,KAAM,YAGdsJ,aAAc,WAEV,GAAIvJ,GAAQ,KACRiJ,EAAQ/R,GAAG6I,WAAWkJ,KAEtBjJ,GADkC,UAAlCwJ,WAAWC,WAAWC,QACdT,EAAMC,MAEyB,WAAlCM,WAAWC,WAAWC,QACnBT,EAAMI,OAGNJ,EAAMK,QAGdtJ,IAAU9I,GAAG6I,WAAWC,QACxB9I,GAAG6I,WAAWC,MAAQA,EACtB9I,GAAG6I,WAAWiJ,aAAatR,KAAKsI,EAAMC,MACtCtI,QAAQC,IAAIoI,EAAMC,MAClB/I,GAAG6I,WAAW4J,cAGtBC,yBACAC,mBAAoB,WAChB,IAAK,GAAIpT,GAAI,EAAGA,EAAIqG,KAAK8M,sBAAsB7T,OAAQU,IACN,kBAAlCqG,MAAK8M,sBAAsBnT,IAClCqG,KAAK8M,sBAAsBnT,MAIvCkT,UAAW,WACP,GAAI3J,GAAQ9I,GAAG6I,WAAWC,MAEtB8J,EAAe3P,OAAO,kBACtBiE,EAAajE,OAAO,gBACpB4P,EAAgB5P,OAAO,yBAEvB6P,EAAU7P,OAAO,8BACjB8P,EAAW9P,OAAO,cAClB+P,EAAY/P,OAAO,eACnBgQ,EAAWhQ,OAAO,cAClBiQ,EAAejQ,OAAO,mCAE1B,IAAmB,UAAf6F,EAAMC,KAEN7B,EAAWiM,OAAOP,GACd3P,OAAO,QAAQmE,SAAS,aACxBF,EAAWc,MAAM8K,GACjBA,EAAQM,KAAK,wDAEbR,EAAaS,OAAOP,GAExBC,EAASM,OAAOL,GAChBF,EAAQxL,SAAS,sBAEjB4L,EAAa9K,KAAK,WACd,GAAIkL,GAAQrQ,OAAO2C,KACnB0N,GAAMF,KAAK,oDAGZ,CAEH,GAAIG,GAAW,WACX,GAAIC,GAASxT,GAAG6I,WAAWiJ,aAAajT,MACxC,OAAO2U,GAAS,GAA+C,UAA3CxT,GAAG6I,WAAWiJ,aAAa0B,EAAS,GAGxDD,OACAV,EAAcM,OAAOP,GACrBK,EAASE,OAAOL,GAChBA,EAAQO,OAAOL,IAInBE,EAAa9K,KAAK,WACd,GAAIkL,GAAQrQ,OAAO2C,KACf0N,GAAM1K,SAAS6K,GAAG,mCAClBH,EAAMI,WAKlB9N,KAAK+M,uBAIb3S,GAAG2T,WACCC,UACAC,cAAc,EACdC,aAAc,WACV,GAAMC,GAAK,GAAIC,aAAYhU,GAAGC,SAAUD,GAAG2T,UAAUC,OACrDG,GAAGtM,QAEPA,KAAM,WACF,GAAI7B,KAAKgO,OAAO/U,OAAS,EACrB,GAAK+G,KAAKiO,aAONjO,KAAKkO,mBAPe,CACpB,GAAMG,GAAgBjU,GAAGE,IAAM,8BAC/B+C,QAAOiR,UAAUD,EAAe,WAC5BjU,GAAG2T,UAAUG,eACb9T,GAAG2T,UAAUE,cAAe,OAShD7T,GAAGM,iBAAiB,WAChBN,GAAG6I,WAAWwJ,eACdrS,GAAG2T,UAAUlM,SAGjBzH,GAAGe,kBAAkB,WACjBf,GAAG6I,WAAWwJ,gBCzIlB,IAAM8B,8BACFC,QACIC,UAAW,4BACXC,SAAU,EACVvK,UACIrI,KAAM,cACN6S,KAAM,KAEN7S,KAAM,aACN6S,KAAM,KAEN7S,KAAM,yBACN6S,KAAM,KAEN7S,KAAM,iBACN6S,KAAM,KAEVC,SAAS,GAEb9K,QACIiH,MAAO,GAEX8D,YACIC,MAAO,UACPC,SAAS,GAEbtR,MACIN,OAAQ,0CAGV6R,6BACFR,QACIC,UAAW,4BACXC,SAAU,EACVvK,UACIrI,KAAM,cACN6S,KAAM,KAEN7S,KAAM,YACN6S,KAAM,KAEN7S,KAAM,cACN6S,KAAM,KAEVC,SAAS,GAEb9K,QACIiH,MAAO,GAEX8D,YACIC,MAAO,UACPC,SAAS,GAEbtR,MACIN,OAAQ,0CAKV8R,4BACFT,QACIC,UAAW,2BACXC,SAAU,EACVvK,UACIrI,KAAM,OACN6S,KAAM,sBAEN7S,KAAM,SACN6S,KAAM,wBAEN7S,KAAM,mBACN6S,KAAM,qBAEN7S,KAAM,qBACN6S,KAAM,sBAEN7S,KAAM,aACN6S,KAAM,qBAEVC,SAAS,GAEb9K,QACIiH,MAAO,GAEX8D,YACIE,SAAS,EACTD,MAAO,WAEXrR,MACIN,OAAQ,2CAGV+R,4BACFV,QACIC,UAAW,2BACXC,SAAU,EACVvK,UACIrI,KAAM,OACN6S,KAAM,0BAEN7S,KAAM,SACN6S,KAAM,4BAEN7S,KAAM,mBACN6S,KAAM,yBAEN7S,KAAM,qBACN6S,KAAM,0BAEN7S,KAAM,aACN6S,KAAM,yBAEVC,SAAS,GAEb9K,QACIiH,MAAO,GAEX8D,YACIE,SAAS,EACTD,MAAO,WAEXrR,MACIN,OAAQ,2CAKVgS,8BACFX,QACIC,UAAW,6BACXW,MAAO,iDACP3W,IAAK,4CACL4W,YAAa,8BACbC,QACIF,MAAO,KACP3W,IAAK,iDAEL2W,MAAO,KACP3W,IAAK,iDAEL2W,MAAO,UACP3W,IAAK,uDAEL2W,MAAO,YACP3W,IAAK,wDAEL2W,MAAO,gBACP3W,IAAK,4DAEL2W,MAAO,aACP3W,IAAK,mEAEL2W,MAAO,oBACP3W,IAAK,+DAEL2W,MAAO,iBACP3W,IAAK,6DAET8W,kBAAmB,gCACnBC,gBAAiB,0DACjBC,aAAc,wDAElB3L,QACI4L,YAAa,wBAEjBjS,MACIkS,KAAM,OACNxS,OAAQ,yDAGVyS,8BACFpB,QACIC,UAAW,6BACXW,MAAO,sCACP3W,IAAK,+CACL4W,YAAa,8BACbC,QACIF,MAAO,KACP3W,IAAK,oDAEL2W,MAAO,KACP3W,IAAK,oDAEL2W,MAAO,UACP3W,IAAK,0DAEL2W,MAAO,YACP3W,IAAK,2DAEL2W,MAAO,gBACP3W,IAAK,+DAEL2W,MAAO,eACP3W,IAAK,sEAEL2W,MAAO,oBACP3W,IAAK,mEAEL2W,MAAO,gBACP3W,IAAK,+DAET8W,kBAAmB,yCACnBC,gBAAiB,kEACjBC,aAAc,wEAElB3L,QACI4L,YAAa,0BAEjBjS,MACIkS,KAAM,OACNxS,OAAQ,yDAKV0S,2BACFrB,QACIC,UAAW,0BACXC,SAAU,EACVvK,UACIrI,KAAM,OACN6S,KAAM,2BAEN7S,KAAM,SACN6S,KAAM,8BAEN7S,KAAM,mBACN6S,KAAM,2BAEN7S,KAAM,qBACN6S,KAAM,4BAEN7S,KAAM,aACN6S,KAAM,2BAEVC,SAAS,GAEb9K,QACIiH,MAAO,GAEX8D,YACIE,SAAS,EACTD,MAAO,WAEXrR,MACIN,OAAQ,2CAGV2S,2BACFtB,QACIC,UAAW,0BACXC,SAAU,EACVvK,UACIrI,KAAM,OACN6S,KAAM,2BAEN7S,KAAM,SACN6S,KAAM,8BAEN7S,KAAM,mBACN6S,KAAM,2BAEN7S,KAAM,qBACN6S,KAAM,4BAEN7S,KAAM,aACN6S,KAAM,2BAEVC,SAAS,GAEb9K,QACIiH,MAAO,GAEX8D,YACIE,SAAS,EACTD,MAAO,WAEXrR,MACIN,OAAQ,2CAKV4S,yBACFvB,QACIC,UAAW,+BACXW,MAAO,iBACP3W,IAAK,0BACL6W,UAEJxL,QACI4L,YAAa,0BAEjBb,YACIC,MAAO,UACPkB,UAAW,WAEfvS,MACIkS,KAAM,OACNxS,OAAQ,yDAGV8S,yBACFzB,QACIC,UAAW,+BACXW,MAAO,gBACP3W,IAAK,8BACL6W,UAEJxL,QACI4L,YAAa,2BAEjBb,YACIC,MAAO,UACPkB,UAAW,WAEfvS,MACIkS,KAAM,OACNxS,OAAQ,yDAKV+S,+BACF1B,QACIC,UAAW,iBACXW,MAAO,iDACP3W,IAAK,4CACL4W,YAAa,8BACbC,QACIF,MAAO,KACP3W,IAAK,iDAEL2W,MAAO,KACP3W,IAAK,iDAEL2W,MAAO,UACP3W,IAAK,uDAEL2W,MAAO,YACP3W,IAAK,wDAEL2W,MAAO,gBACP3W,IAAK,4DAEL2W,MAAO,aACP3W,IAAK,mEAEL2W,MAAO,oBACP3W,IAAK,+DAEL2W,MAAO,iBACP3W,IAAK,6DAET8W,kBAAmB,gCACnBC,gBAAiB,0DACjBC,aAAc,wDAElB3L,QACI4L,YAAa,wBAEjBjS,MACIkS,KAAM,OACNxS,OAAQ,yDAGVgT,+BACF3B,QACIC,UAAW,iBACXW,MAAO,sCACP3W,IAAK,+CACL4W,YAAa,8BACbC,QACIF,MAAO,KACP3W,IAAK,oDAEL2W,MAAO,KACP3W,IAAK,oDAEL2W,MAAO,UACP3W,IAAK,0DAEL2W,MAAO,YACP3W,IAAK,2DAEL2W,MAAO,gBACP3W,IAAK,+DAEL2W,MAAO,eACP3W,IAAK,sEAEL2W,MAAO,oBACP3W,IAAK,mEAEL2W,MAAO,gBACP3W,IAAK,+DAET8W,kBAAmB,yCACnBC,gBAAiB,kEACjBC,aAAc,wEAElB3L,QACI4L,YAAa,0BAEjBjS,MACIkS,KAAM,OACNxS,OAAQ,yDCjZViT,oBAAsB,yCAE5BhW,IAAGiW,MACCC,qBAAsB,WAElB,GAAIC,GAAoE,mBAAhCrW,QAAOoW,sBAAuCpW,OAAOoW,qBACzFE,EAA8E,mBAArCtW,QAAOuW,2BAA4CvW,OAAOuW,yBAGvG,IAAIF,EAAJ,CACI1V,QAAQC,IAAI,0DAMhB,IAAI4V,GAAY,+CAAiDN,mBAG7DI,KACAE,GAAa,kBAGjBA,GAAa,4CAGb,IAAIC,GAASzS,SAAS+H,cAAc,SACpC0K,GAAO3H,IAAM0H,EAGbC,EAAOC,OAAS,WACZ/V,QAAQC,IAAI,iGAIhB6V,EAAOE,QAAU,SAAUC,GACvBjW,QAAQE,MAAM,oCAAqC+V,GACnDjW,QAAQE,MAAM,cAAe+V,EAAMnI,OAAOK,MAI9C9K,SAAS0I,KAAKmK,YAAYJ,KAG9BK,wBAAwB,EACxBC,yBAA0B,WACtB7W,GAAGiW,KAAKW,wBAAyB,EACjCnW,QAAQC,IAAI,+EAGZ,IAAMgW,GAAQ,GAAII,aAAY,8BAC9BhX,QAAOuO,cAAcqI,IAEzBK,OAAQ,SAAU1C,EAAW9P,EAAOE,EAAQuS,EAAWC,EAAQC,EAAaC,EAAWC,EAAWC,EAAYC,EAAKC,EAAKC,GAEpH,GAAIC,IACAC,KAAMV,EACNC,OAAQA,EACRU,aAAc3X,GAAGmB,QAAQyB,kBAAgD,SAA5B5C,GAAG6I,WAAWC,MAAMC,MAA2BmO,EAC5FC,UAAWA,EACXC,UAAWA,EACXQ,kBAAmBP,EACnBQ,uBACIC,YAAa,UAAWC,OAAO9B,KAAK+B,UAAUC,QAASF,OAAO9B,KAAK+B,UAAUE,QAC7E/L,MAAO4L,OAAO9B,KAAKkC,oBAAoBC,cACvCC,SAAUN,OAAO9B,KAAKqC,gBAAgBC,WAE1CC,UAAWT,OAAO9B,KAAK+B,UAAUC,QACjCQ,kBAAoBnB,EAAWA,KAC/BoB,mBAAqBnB,EAAWA,KAChCoB,yBAA2BnB,EAAYA,MAIvCoB,EAAM,GAAIb,QAAO9B,KAAK4C,IAAIxE,EAAWoD,EAMzC,OAHApD,GAAUlI,MAAM5H,MAASuU,MAAMvU,GAAwBA,EAAfA,EAAQ,KAChD8P,EAAUlI,MAAM1H,OAAUqU,MAAMrU,GAA0BA,EAAhBA,EAAS,KAE5CmU,GAEXG,UAAW,SAAUH,EAAKI,GAEtB,IAAK,GADDC,GAAS,GAAIlB,QAAO9B,KAAKiD,aACpB3Z,EAAI,EAAGA,EAAIyZ,EAAQna,OAAQU,IAChC,IAAK,GAAI4Z,GAAI,EAAGA,EAAIH,EAAQzZ,GAAGV,OAAQsa,IACnCF,EAAOG,OAAOJ,EAAQzZ,GAAG4Z,GAAGd,SAGpCO,GAAIS,UAAUJ,IAElBK,QACIC,IAAK,SAAUX,EAAKY,EAAOC,EAAYC,EAAiBC,EAAiBC,EAAaC,EAAiBC,EAAsBC,EAAYC,EAAehF,EAAOiF,GAC3J,GAAIX,GAAS,GAAIvB,QAAO9B,KAAKiE,QACzB7B,SAAUmB,EACVZ,IAAKA,EACLuB,KAAMV,EACNtC,UAAWuC,EACX1E,MAAOA,GAmCX,OAhCkB,mBAAPiF,IACPX,EAAOhP,IAAI,KAAM2P,GAIrBlC,OAAO9B,KAAKS,MAAM0D,YAAYd,EAAQ,QAAS,WACrB,6BAAlBU,IAEAD,EAAWM,KAAKzB,EAAKhT,MACrBmU,EAAWO,WAAWN,IAGtBL,IACIC,GACAhB,EAAI2B,MAAM3U,KAAK4U,gBAGdX,GAAmBjB,EAAI6B,UAAYX,EACpClB,EAAI8B,QAAQ9B,EAAI6B,WAEhB7B,EAAI8B,QAAQZ,MAMpBJ,GACA3B,OAAO9B,KAAKS,MAAM0D,YAAYd,EAAQ,UAAW,SAAUE,GACvDzB,OAAO9B,KAAKS,MAAMiE,QAAQ/B,EAAK,QAASY,KAIzCF,IAGfsB,OACIC,iBAAiB,EACjBC,eAAe,EACfC,kBAAmB,KACnBC,kBAAmB,KACnBC,KAAM,SAAUrC,EAAKsC,EAAMC,EAAIC,EAAYJ,EAAmBD,EAAmBM,GAC7E,GAAa,KAATH,EAAa,CACb,GAAII,KACJ,IAAiC,mBAAtBD,GACP,IAAK,GAAI9b,GAAI,EAAGA,EAAI8b,EAAkBxc,OAAQU,IAC1C+b,EAAU9a,MACNlC,SAAU+c,EAAkB9b,GAC5Bgc,UAAU,GAKtB,IAAIC,IACAC,OAAQP,EACRQ,YAAaP,EACbC,WAAYA,EACZE,UAAWA,EAGfN,GAAkBJ,MAAMY,EAAS,SAAUG,EAAUC,GAC7CA,IAAW7D,OAAO9B,KAAK4F,iBAAiBvc,IACL,OAA/Byb,EAAkBe,UAClBf,EAAkBgB,OAAOnD,GAE7BmC,EAAkBiB,cAAcL,IAEhC7b,OAAOC,MAAM6b,OAK7BK,uBAAwB,SAAUrD,EAAKvE,GACnC,GAAI6H,IACA/E,WAAW,GAGX4D,EAAoB,GAAIhD,QAAO9B,KAAKkG,mBAAmBD,GACvDE,EAAQ/H,CAKZ,OAHA0G,GAAkBgB,OAAOnD,GACzBmC,EAAkBsB,SAASD,GAEpBrB,IAGfuB,qBAAsB,SAAU1D,EAAKjZ,EAASwa,EAAMoC,EAASC,EAAWzC,EAAYC,EAAeyC,GAC/Fzc,GAAGiW,KAAKyG,SAASC,SACbJ,QAAWA,GACZ,SAAUK,EAAShB,GAClB,GAAIA,IAAW7D,OAAO9B,KAAK4G,eAAevd,GAAI,CAC1C,GAAIka,GAAQ,GAAIzB,QAAO9B,KAAK6G,OAAOF,EAAQ,GAAGG,SAASze,SAAS0e,MAAOJ,EAAQ,GAAGG,SAASze,SAAS2e,OAChG3D,EAAStZ,GAAGiW,KAAKqD,OAAOC,IAAIX,EAAKY,EAAOW,EAAMxa,EAAQud,WAAYvd,EAAQwd,YAAaxd,EAAQyd,WAAYzd,EAAQ0d,UAAW1d,EAAQ2d,eAAgBvD,EAAYC,EAAe,GAEjK,mBAATyC,IACPA,EAAKnD,EAAQE,EAAOgD,EAAWzC,EAAYC,OAO3D7Y,SACIoc,yBAA0B,SAAUC,EAAQC,GACxC,MAAO1F,QAAO9B,KAAK8G,SAASW,UAAUC,uBAAuBH,EAAQC,IAEzEG,kBAAmB,SAAUC,GACzB,MAAOC,MAAKC,MAAc,IAARF,IAEtBG,gBAAiB,SAAUH,GACvB,GAAIxY,EAUJ,OATqB,KAAjBwY,EAAMhf,SACNwG,EAAIwY,EAAM7e,UAAU,EAAG,GAAK,IAAM6e,EAAM7e,UAAU,IAEjC,IAAjB6e,EAAMhf,SACNwG,EAAIwY,EAAM7e,UAAU,EAAG,GAAK,IAAM6e,EAAM7e,UAAU,IAEjC,IAAjB6e,EAAMhf,SACNwG,EAAIwY,EAAM7e,UAAU,EAAG,GAAK,IAAM6e,EAAM7e,UAAU,IAE/CqG,GAEX4Y,eAAgB,WACZ,GAAI3P,GAAI,GAAI3D,MACRuT,EAAO5P,EAAEzD,UACTsT,EAAQ7P,EAAE8P,WAAa,EACvBC,GAAeH,EAAO,GAAM,IAAMA,EAAQA,GAAQ,KAAOC,EAAQ,GAAM,IAAMA,EAASA,GAAS,KAAO,GAAK7P,EAAEgQ,eAAetf,UAAU,EAC1I,OAAOqf,IAEXE,eAAgB,WACZ,GAAIjQ,GAAI,GAAI3D,MACR6T,EAAQlQ,EAAEmQ,WACVC,EAAUpQ,EAAEqQ,aACZC,GAAeJ,EAAQ,GAAM,IAAMA,EAASA,GAAS,KAAOE,EAAU,GAAM,IAAMA,EAAWA,EACjG,OAAOE,IAEXC,WAAY,SAAUtb,GAClBub,EAAEvb,GAAS6E,KAAK,WACZ,GAAI2W,GAAgBD,EAAElZ,MAAM+D,KAC5BmV,GAAElZ,MAAM6H,KAAKqR,EAAE,SAAUA,EAAElZ,OAAOoZ,KAAK,SAAUC,EAAGtZ,GAChD,MAAOsZ,GAAEvd,OAASiE,EAAEjE,KAAO,EAAIud,EAAEvd,KAAOiE,EAAEjE,QAAY,KAE1Dod,EAAElZ,MAAM+D,IAAIoV,MAGpBG,aAAc,SAAUD,EAAGtZ,GACvB,MAAsB,mBAAXsZ,GAAEE,MAA0C,mBAAXxZ,GAAEwZ,KACnCF,EAAEE,KAAOxZ,EAAEwZ,KAAO,KAEtB,IAGfpF,WAAY,KACZ2C,SAAU,KAKd,IAAIzG,QAEJjW,IAAGiW,KAAKmJ,QACJzf,SACI0f,MAAO,GACPnC,aAAapd,OAAOwf,aAAsBxf,OAAOwf,YACjDnC,aAAcrd,OAAOyf,cAAsBzf,OAAOyf,aAClDnC,aAAatd,OAAO0f,aAAsB1f,OAAO0f,YACjDnC,YAAYvd,OAAO2f,YAAqB3f,OAAO2f,WAC/CnC,eAAgBxd,OAAO4f,iBAAmB,GAC1CC,iBAAkB7f,OAAO8f,mBAAqB,GAC9C1I,cAAcpX,OAAO+f,cAAuB/f,OAAO+f,aACnD1I,WAAYrX,OAAOggB,YAAoBhgB,OAAOggB,WAC9C1I,WAAYtX,OAAOigB,YAAoBjgB,OAAOigB,WAC9C1I,aAAavX,OAAOkgB,aAAsBlgB,OAAOkgB,YACjDC,UAAWngB,OAAOogB,YAAc,KAChCC,UAAWrgB,OAAOsgB,YAAc,KAChCC,SAAU,QACVC,UAAW,KAEfrJ,OAAQ,KACRhB,KAAMnW,OAAOmW,KACbsK,WACAC,gBAAgB,EAChBC,aAAc,WACV,GACIC,GADAnhB,EAAI,CAER,GACImhB,GAAW5c,SAAS6c,eAAe,UAAkB,IAANphB,EAAU,GAAKA,IAC9DA,WACMmhB,GAAYnhB,GAAK,EAE3B,OAAOmhB,IAEXE,SAAU,WAEN,GAAI5gB,GAAGiW,KAAKmJ,OAAOnJ,KAAKpX,OAAS,EAC7BmB,GAAGiW,KAAKmJ,OAAO3X,WAEf,IAA2B,mBAAhB3H,QAAO2K,KAAsB,CAEpC,GAAIoW,GAAW,SAAUxd,GAIrB,IAAK,GADD8b,GAFA2B,EAAYzd,EAAKyd,UACjBC,KAEKC,EAAI,EAAGA,EAAIF,EAAUjiB,OAAQmiB,IAAK,CACvC7B,EAAO2B,EAAUE,GAAGC,MAAM,GAAG9B,IAC7B,IAAInC,GAAM8D,EAAUE,GAAGE,SACnBjE,EAAM6D,EAAUE,GAAGG,UACnB9iB,EAAMyiB,EAAUE,GAAG3iB,IACnBqD,EAAOof,EAAUE,GAAGtf,KAEpB0f,KACA5H,GACA0H,SAAUlE,EACVmE,UAAWlE,EACXjI,MAAOmK,EACPzd,KAAMA,EAEV0f,GAAO5gB,KAAKgZ,GACZuH,EAAevgB,KAAKgZ,GAEhBsF,EAAE,WAAWjgB,OAAS,GACtBmB,GAAGiW,KAAKmJ,OAAOnJ,KAAKzV,MAChB2e,KAAMA,EACNkC,QAASlC,EACT9K,UAAW,UACXgM,SAAUrgB,GAAGiW,KAAKmJ,OAAOzf,QAAQ0gB,SACjCC,UAAWtgB,GAAGiW,KAAKmJ,OAAOzf,QAAQ2gB,UAClC/hB,KAAMF,EACN+iB,OAAQA,EACRE,WAAY,WACZ1gB,MAAM,IAKdke,EAAE,YAAYjgB,OAAS,GACvBmB,GAAGiW,KAAKmJ,OAAOnJ,KAAKzV,MAChB2e,KAAMA,EACNkC,QAASlC,EACT9K,UAAW,WACXgM,SAAUrgB,GAAGiW,KAAKmJ,OAAOzf,QAAQ0gB,SACjCC,UAAWtgB,GAAGiW,KAAKmJ,OAAOzf,QAAQ2gB,UAClC/hB,KAAM,GACN6iB,OAAQL,EACRngB,MAAM,IAIdZ,GAAGiW,KAAKmJ,OAAO3X,OAGnBqX,GAAEyC,QAAQzhB,OAAO2K,KAAM,SAAUpH,GAC7Bwd,EAASxd,KAKrBrD,GAAGiW,KAAKmJ,OAAOoB,gBAAiB,GAEpC/Y,KAAM,WAEFzH,GAAGiW,KAAK2E,MAAMI,kBAAoB,GAAIjD,QAAO9B,KAAKuL,kBAClDxhB,GAAGiW,KAAK8D,WAAa,GAAIhC,QAAO9B,KAAKwL,WACrCzhB,GAAGiW,KAAKyG,SAAW,GAAI3E,QAAO9B,KAAKyL,QAGnC,KAAK,GADDC,IAAU,EACLpiB,EAAI,EAAGA,EAAIS,GAAGiW,KAAKmJ,OAAOnJ,KAAKpX,OAAQU,IAAK,CAEjD,GAAIqiB,GAAa5hB,GAAGiW,KAAKmJ,OAAOnJ,KAAK1W,EAErCqiB,GAAWhJ,IAAM,KACjBgJ,EAAW5I,UAGX,KAAK,GAAI6I,GAAI,EAAGA,EAAI7hB,GAAGiW,KAAKmJ,OAAOmB,QAAQ1hB,OAAQgjB,IAAK,CACpD,GAAI7hB,GAAGiW,KAAKmJ,OAAOmB,QAAQsB,KAAOD,EAAWvN,UAAW,CACpDsN,GAAU,CACV,OAEAA,GAAU,EAKlB,GAAKA,GAqBD,IAAK,GAAIG,GAAI,EAAGA,EAAI9hB,GAAGiW,KAAKmJ,OAAOnJ,KAAKpX,OAAQijB,IAC5C,GAAI9hB,GAAGiW,KAAKmJ,OAAOnJ,KAAK6L,GAAGzN,YAAcrU,GAAGiW,KAAKmJ,OAAOmB,QAAQsB,GAAI,CAChED,EAAWhJ,IAAM5Y,GAAGiW,KAAKmJ,OAAOnJ,KAAK6L,GAAGlJ,GACxC,YAxBE,CACV,GAAImJ,GAAejD,EAAE8C,EAAWvN,WAAWnJ,IAAI,GAC3CvL,EAAUK,GAAGiW,KAAKmJ,OAAOzf,OAE7BiiB,GAAWhJ,IAAM5Y,GAAGiW,KAAKc,OAAOgL,EAAcH,EAAWvB,SAAUuB,EAAWtB,UAAW3gB,EAAQggB,iBAAkB3f,GAAGiW,KAAKmJ,OAAOnI,OAAQtX,EAAQuX,YAAavX,EAAQwX,UAAWxX,EAAQyX,UAAWzX,EAAQ0X,YAC7MrX,GAAGiW,KAAKmJ,OAAOmB,QAAQ/f,KAAKR,GAAGiW,KAAKmJ,OAAOnJ,KAAK1W,GAAG8U,WAE/CuN,EAAWhhB,MACXgF,KAAKoc,cAAcJ,GAAY,GAGnC9C,EAAE8C,EAAWvN,WAAWrM,MAAM8W,EAAE,WAC5B3N,QAAS,wBAGwB,mBAA1ByQ,GAAWN,YAAwD,aAA1BM,EAAWN,YAC3DxC,EAAE8C,EAAWvN,UAAY,UAAUlB,OAAO2L,EAAE,eAapD,GAAqC,mBAA1B8C,GAAWN,WAA4B,CAC9C,GAA8B,UAA1BM,EAAWN,WAAwB,CAEnC,GAAIW,GAAOnD,EAAE,YACTpd,KAAQ,QAGR6S,EAAOuK,EAAE,SACT7E,GAAM,sBAAwB1a,EAC9BhB,KAAQ,IACRmD,KAAwB,OAAhB1B,GAAGC,SAAoB2hB,EAAWzC,KAAOyC,EAAWP,SAGhEY,GAAK9O,OAAOoB,GACZuK,EAAE8C,EAAWvN,UAAY,UAAUlB,OAAO8O,GAG9C,GAA8B,aAA1BL,EAAWN,WAA2B,CACtC,GAAIY,GAASpD,EAAE,cACXlf,MAASL,EACTmC,KAAwB,OAAhB1B,GAAGC,SAAoB2hB,EAAWzC,KAAOyC,EAAWP,SAGjC,oBAApBvhB,QAAOqiB,UAA6BP,EAAWzC,OAASrf,OAAOqiB,UAAYP,EAAWP,UAAYvhB,OAAOqiB,UAChHD,EAAO1Z,KAAK,WAAY,YAG5BsW,EAAE8C,EAAWvN,UAAY,iBAAiBlB,OAAO+O,KAK7DpD,EAAE,yBAAyBsD,MAAM,SAAU/gB,GAEvCA,EAAEiI,gBAEF,IAAI+Y,GAAUvD,EAAElZ,MAAM4C,KAAK,MAAM8Z,MAAM,sBACvC,IAAuB,IAAnBD,EAAQxjB,OAAc,CACtB,GAAIob,GAAKoI,EAAQ,EACjBriB,IAAGiW,KAAKmJ,OAAOmD,WAAWtI,GAC1B6E,EAAE9e,GAAGiW,KAAKmJ,OAAOnJ,KAAKgE,GAAI5F,UAAY,YAAYlL,IAAI,cAAe,UACrE2V,EAAElZ,MAAMuD,IAAI,cAAe,WAInC2V,EAAE1W,KAAK0W,EAAE,uBAAwB,WAK7B,GAJIA,EAAE,IAAKlZ,MAAM/G,OAAS,GACtBigB,EAAE,0CAA0CnE,QAAQ,SAGpDmE,EAAE,SAAUlZ,MAAM/G,OAAS,EAAG,CAC9B,GAAIob,GAAK6E,EAAE,yBAA0BlZ,MAAM+D,KAC3C3J,IAAGiW,KAAKmJ,OAAOmD,WAAWtI,MAIlC6E,EAAE,8BAA8B0D,OAAO,WACnC,GAAIvI,GAAK6E,EAAElZ,MAAM+D,KACjB3J,IAAGiW,KAAKmJ,OAAOmD,WAAWtI,MAGlCsI,WAAY,SAAUtI,GAClBrU,KAAKoc,cAAc/L,KAAKgE,IAAK,GACU,mBAA5BhE,MAAKgE,GAAIwI,iBACZxM,KAAKgE,GAAIwI,eACTxM,KAAKgE,GAAIrB,IAAI8J,aAAa3K,OAAO9B,KAAK+B,UAAUE,QAEhDjC,KAAKgE,GAAIrB,IAAI8J,aAAa,aAItCV,cAAe,SAAUpJ,EAAK+J,GAC1B,GAAIA,EACA,IAAK,GAAIpjB,GAAI,EAAGA,EAAIS,GAAGiW,KAAKmJ,OAAOnJ,KAAKpX,OAAQU,IAC5C,GAAIqZ,EAAIA,MAAQ5Y,GAAGiW,KAAKmJ,OAAOnJ,KAAK1W,GAAGqZ,IAAK,CACxC,IAAK,GAAIgK,GAAI,EAAGA,EAAI5iB,GAAGiW,KAAKmJ,OAAOnJ,KAAK1W,GAAGyZ,QAAQna,OAAQ+jB,IACvD5iB,GAAGiW,KAAKmJ,OAAOnJ,KAAK1W,GAAGyZ,QAAQ4J,GAAG7G,OAAO,KAE7C/b,IAAGiW,KAAKmJ,OAAOnJ,KAAK1W,GAAGyZ,WAKnC,GAAIJ,EAAIwI,OAAOviB,OAAS,EAAG,CAGvB,IAAK,GAFD2d,IAAY,EACZ7c,EAAUK,GAAGiW,KAAKmJ,OAAOzf,QACpBwZ,EAAI,EAAGA,EAAIP,EAAIwI,OAAOviB,OAAQsa,IAAK,CACxC,GAAInE,GAAS4D,EAAIwI,OAAOjI,GAAGnE,MAAa4D,EAAIwI,OAAOjI,GAAGnE,MAAnB,GAC/BtT,EAAQkX,EAAIwI,OAAOjI,GAAGzX,KAAmDkX,EAAIwI,OAAOjI,GAAGzX,KAAzD,cAAgBsT,EAAQ,gBACtDwE,EAAQ,GAAIzB,QAAO9B,KAAK6G,OAAOlE,EAAIwI,OAAOjI,GAAG+H,SAAUtI,EAAIwI,OAAOjI,GAAGgI,WACrE7H,EAAStZ,GAAGiW,KAAKqD,OAAOC,IAAIX,EAAIA,IAAKY,EAAO7Z,EAAQ0f,MAAO1f,EAAQud,WAAYvd,EAAQwd,YAAaxd,EAAQyd,WAAYzd,EAAQ0d,UAAW1d,EAAQ2d,eAAgBtd,GAAGiW,KAAK8D,WAAYrY,EAAMsT,EACjM4D,GAAII,QAAQxY,KAAK8Y,GACbkD,GACA5D,EAAIiK,UAAUrJ,GAGlBZ,EAAIwI,OAAOviB,OAAS,EACpBmB,GAAGiW,KAAK8C,UAAUH,EAAIA,KAAMA,EAAII,WAEhCJ,EAAIA,IAAIiK,UAAUjK,EAAII,QAAQ,GAAGX,UACjCO,EAAIA,IAAI8B,QAAQ1a,GAAGiW,KAAKmJ,OAAOzf,QAAQggB,mBAI9B,OAAb/G,EAAIra,MACJqH,KAAKkd,iBAAiBlK,EAAIA,IAAKA,EAAIra,OAG3CukB,iBAAkB,SAAUlK,EAAKra,GAC7BwZ,OAAO9B,KAAKS,MAAM0D,YAAYxB,EAAK,QAAS,SAAUmK,GAClDjjB,OAAOxB,SAAWC,MAK9ByB,GAAGiW,KAAK+M,QACJC,YAAY,EACZC,WACAC,WACIC,YACAC,cACAC,WACAC,YAAa;AACbC,aAAc,GACdC,mBAAoB,GACpBC,oBAAqB,GACrBzD,UAAW,UACXE,UAAW,WAEfxgB,SACIyU,QACIC,UAAW,wBACX0N,aAAc,gBACd4B,KAAK,EACLtE,MAAO,GACPM,iBAAkB,GAClBzC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,eAAgB,KAGxBja,MACIN,QACIM,KAAM,oCAEVyd,cAEJ8C,QAAS,SAAUZ,GACXA,EAAOjB,cAAgBnc,KAAKqd,aAC5BD,EAAOpK,IAAM5Y,GAAGiW,KAAKc,OAAOiM,EAAOjB,aAAc,OAAQ,IAAKiB,EAAO5O,OAAOuL,iBAAkB,GAAI5H,QAAO9B,KAAK6G,OAAO,UAAW,YAAY,GAAM,GAAM,GAAO,GAC/JkG,EAAOa,QAAS,EAChB9L,OAAO9B,KAAKS,MAAMiE,QAAQqI,EAAOpK,IAAK,YAG9CkL,SAAU,SAAUd,GAEhB,GAAInC,GAAW,SAAUxd,GAErB,GAAI0gB,GAAI/jB,GAAGiW,KAAK+M,MAEhBe,GAAEZ,UAAUC,SAAW/f,EAAK8f,UAAU,GAAGa,SACzCD,EAAEZ,UAAUE,WAAahgB,EAAK8f,UAAU,GAAGc,WAC3CF,EAAEZ,UAAUG,QAAUjgB,EAAK8f,UAAU,GAAGxO,QAExCoP,EAAE1gB,KAAKyd,UAAYzd,EAAKyd,UACxBiD,EAAEG,iBAAiBlB,GAEnBe,EAAEI,oBAAoBnB,IAGtBoB,EAAYpkB,GAAGmB,QAAQiB,4BAC3B,IAAIgiB,EAAY,GAAKA,EAAY,GAAI,CACjC,GAAIC,GAAMvkB,OAAOwkB,eAAiB,GAAIA,gBAAmB,IAC7C,QAARD,IACAA,EAAI7N,OAAS,WACTqK,EAAS5d,OAAOshB,UAAUF,EAAIG,gBAGlCH,EAAII,WAAa,aAGjBJ,EAAIhK,KAAK,MAAOra,GAAGiW,KAAK+M,OAAO3f,KAAKN,OAAOM,MAC3CghB,EAAIK,YAIRzhB,QAAOse,QAAQ3b,KAAKvC,KAAKN,OAAOM,KAAM,SAAUA,GAC5Cwd,EAASxd,MAKrB6gB,iBAAkB,SAAUlB,GAGxB,IAAK,GADDtZ,MACKnK,EAAI,EAAGA,EAAIqG,KAAKvC,KAAKyd,UAAUjiB,OAAQU,IAE5C,IAAK,GADDolB,GAAM/e,KAAKvC,KAAKyd,UAAUvhB,GACrBqjB,EAAI,EAAGA,EAAI+B,EAAI1D,MAAMpiB,OAAQ+jB,IAClClZ,EAAOlJ,MACHyZ,GAAI0K,EAAI1K,GACRlV,MAAO4f,EAAI1D,MAAM2B,GAAGzD,KACpBvf,MAAO+kB,EAAI1D,MAAM2B,GAAGzD,KACpB1f,KAAMklB,EAAIllB,MAMtB,IAAImlB,IACA7hB,OAAQ2G,EACRmb,UAAW,EACXC,WAAW,EACXC,OAAQ,SAAUrO,EAAOsO,GAErB,GAAI/K,GAAK+K,EAAGC,KAAKhL,GACb8J,EAAI/jB,GAAGiW,KAAK+M,MACZgC,GAAGC,KAAKxlB,OAASskB,EAAEZ,UAAUC,SAC7BW,EAAEmB,kBAAkBlC,EAAQe,EAAEoB,YAAYlL,IAAK,GAAM,GAAM,GACpD+K,EAAGC,KAAKxlB,OAASskB,EAAEZ,UAAUE,WACpCU,EAAEqB,qBAAqBpC,EAAQe,EAAEsB,cAAcpL,IAE/C8J,EAAEuB,iBAAiBtC,EAAQe,EAAEwB,WAAWtL,IAAK,GAAM,GAAM,GAAM,KAMvEuL,GACAziB,OAAQ,SAAUyY,EAASG,GACvB,GAAIjS,GAAS8R,EAAQ5U,IACgB,mBAA1B6e,QAAOC,UAAU/jB,OACxB+H,EAASA,EAAO/H,QAEpB3B,GAAGmB,QAAQ2B,OAAO9C,GAAGuR,MAAMxO,OAAO4iB,gBAAkB5a,UAAUrB,GAAS,SAAUrG,GAC7EsY,EAAS3b,GAAGuR,MAAMqU,UAAUviB,OAGpCwhB,UAAW,EACXC,WAAW,EACXC,OAAQ,SAAUrO,EAAOsO,GACrBhlB,GAAGmB,QAAQ2B,OAAO9C,GAAGuR,MAAMxO,OAAO8iB,uBAAyBb,EAAGC,KAAK5mB,IAAK,SAAUgF,GAC9ErD,GAAGiW,KAAK+M,OAAO8C,gBAAgB9C,EAAQ3f,MAKnDJ,QAAO,sBAAuB+f,EAAO3O,WAAW0R,aAAanB,GAC7D3hB,OAAO,sBAAuB+f,EAAO3O,WAAW0R,aAAaP,IAGjErB,oBAAqB,SAAUnB,GAC3B,IAAKA,EAAOW,KAA0C,KAAnC3jB,GAAGmB,QAAQU,eAAe,KAAa,CAEtD,GAAImkB,GAAoB,SAAUC,GAE9B,GAAIC,GAAyB,SAAUD,GACnC,GAAIxjB,GAAK,GAAIR,QAAO,WAAY,KAChC,OAAOgkB,GAAME,MAAM1jB,IAGnB2jB,EAAMF,EAAuBD,EACjC,OAAY,QAARG,EACOA,EAAI,GAGR,IAIPH,EAAQ5a,UAAUrL,GAAGmB,QAAQU,eAAe,KACX,mBAA1B4jB,QAAOC,UAAU/jB,OACxBskB,EAAQA,EAAMtkB,OAGlB,IAAI0kB,GAAKL,EAAkBC,EAC3B,IAAW,KAAPI,EAAW,CACX,GAAIC,GAAO1gB,KAAKuf,YAAYkB,EACf,QAATC,IACA1gB,KAAKsf,kBAAkBlC,EAAQsD,GAAM,GAAM,GAAM,GACjDrjB,OAAO,sBAAuB+f,EAAO3O,WAAW1K,KAAqB,OAAhB3J,GAAGC,SAAoB,WAAa,aAAeqmB,EAAKrM,SAE9G,CACH,GAAIsM,GAAaN,EAAM3D,MAAM,MACzBiE,EAAW1nB,OAAS,GAAKonB,EAAMlnB,QAAQ,WACvCknB,EAAQA,EAAMrkB,QAAQ,MAAO,KAC7B5B,GAAGmB,QAAQ2B,OAAO9C,GAAGuR,MAAMxO,OAAO4iB,gBAAkB5a,UAAUkb,GAAQ,SAAU5iB,GAC5E,GAAImjB,GAASxmB,GAAGuR,MAAMqU,UAAUviB,EACV,KAAlBmjB,EAAO3nB,OACPmB,GAAGmB,QAAQ2B,OAAO9C,GAAGuR,MAAMxO,OAAO8iB,uBAAyBW,EAAO,GAAGnoB,IAAK,SAAUgF,GAChFrD,GAAGiW,KAAK+M,OAAO8C,gBAAgB9C,EAAQ3f,GACvCJ,OAAO,sBAAuB+f,EAAO3O,WAAW1K,IAAIsc,KAEjDO,EAAO3nB,OAAS,GACvBoE,OAAO,sBAAuB+f,EAAO3O,WAAW1K,IAAIsc,GAAOrc,QAAQmc,aAAa,gBAWxGU,aAAc,SAAUzD,GACpB,IAAK,GAAIzjB,GAAI,EAAGA,EAAIyjB,EAAOhK,QAAQna,OAAQU,IACvCyjB,EAAOhK,QAAQzZ,GAAGwc,OAAO,KAE7BiH,GAAOhK,YAEXkM,kBAAmB,SAAUlC,EAAQgB,EAAU0C,EAAUlK,EAAWmK,GAEhE,GAAI3mB,GAAGiW,KAAK+M,OAAOC,WAAY,CACvByD,GACA9gB,KAAK6gB,aAAazD,EAGtB,IAAIxJ,GAAQ,GAAIzB,QAAO9B,KAAK6G,OAAOkH,EAAS9C,SAAU8C,EAAS7C,WAC3DhH,EAAO,GAAIpC,QAAO9B,KAAK2Q,YAAY5D,EAAO5O,OAAOiL,MAAO,KAAM,KAAM,KAAM,GAAItH,QAAO9B,KAAK4Q,KAAKjhB,KAAKud,UAAUI,YAAa3d,KAAKud,UAAUK,eAC1IxJ,EAAgB,4BAA8C,OAAhBha,GAAGC,SAAoB,OAAS,UAAY,MAAQ+jB,EAAS/J,GAAK,MAAwB,OAAhBja,GAAGC,SAAoB,kCAAoC,qCAAuC,WAE1NqZ,EAAStZ,GAAGiW,KAAKqD,OAAOC,IAAIyJ,EAAOpK,IAAKY,EAAOW,GAAM,GAAO,GAAO,GAAO,EAAO6I,EAAO5O,OAAOuL,iBAAkB3f,GAAGiW,KAAK8D,WAAYC,EAAegK,EAAS/C,MAAM,GAAG9B,KAC1K6D,GAAOhK,QAAQxY,KAAK8Y,GAEhBkD,GACAwG,EAAOpK,IAAIiK,UAAUrJ,GAI7BwJ,EAAO8D,QAAQC,QACXJ,GACA3D,EAAO8D,QAAQ3T,OAAO,gBAAkC,OAAhBnT,GAAGC,SAAoB,WAAa,aAAe+jB,EAAS/J,GAAK,eAAiB+J,EAASzH,QAAU,UAGrJ6I,qBAAsB,SAAUpC,EAAQiB,GACpCjkB,GAAGmB,QAAQ2B,OAAO9C,GAAGuR,MAAMxO,OAAOikB,qBAAuB/C,EAAWgD,mBAAoB,SAAU5jB,GAgB9F,IAAK,GAfDqjB,IAAW,EACXlK,GAAY,EAEZuH,EAAI/jB,GAAGiW,KAAK+M,OAEZkE,EAAcjkB,OAAOI,GAAMwM,KAAK,WAChCsX,EAASD,EAAY1e,KAAK,UAC1B4e,EAAMF,EAAY1e,KAAK,OACvB6e,EAAOH,EAAY1e,KAAK,QACxB+T,EAAU4K,EAAS,KAAOC,EAAM,IAAMC,EAEtCC,EAAerkB,OAAOI,GAAMwM,KAAK,YACjC0X,KAGKhoB,EAAI,EAAGA,EAAI+nB,EAAazoB,OAAQU,IAAK,CAC1C,GAAIykB,GAAWD,EAAEoB,YAAYliB,OAAOqkB,EAAa/nB,IAAIiJ,KAAK,UACzC,QAAbwb,GACAuD,EAAU/mB,KAAKwjB,GAKvB,GAAIuD,EAAU1oB,OAAS,EAAG,CACtB,IAAK,GAAIgjB,GAAI,EAAGA,EAAI0F,EAAU1oB,OAAQgjB,IAClCkC,EAAEmB,kBAAkBlC,EAAQuE,EAAU1F,GAAI6E,EAAUlK,GAAW,EAE/Dxc,IAAGiW,KAAK+M,OAAOC,YACfjjB,GAAGiW,KAAK8C,UAAUiK,EAAOpK,KAAMoK,EAAOhK,cAGtChZ,IAAGiW,KAAK+M,OAAOC,YAEfjjB,GAAGiW,KAAKyG,SAASC,SACbJ,QAAWA,GACZ,SAAUK,EAAShB,GAClB,GAAIA,IAAW7D,OAAO9B,KAAK4G,eAAevd,GAAI,CAC1C,GAAIka,GAAQ,GAAIzB,QAAO9B,KAAK6G,OAAOF,EAAQ,GAAGG,SAASze,SAAS0e,MAAOJ,EAAQ,GAAGG,SAASze,SAAS2e,OAChGtd,EAAUqjB,EAAO5O,OACjB+F,EAAO,GAAIpC,QAAO9B,KAAK2Q,YAAYjnB,EAAQ0f,MAAO,KAAM,KAAM,KAAM,GAAItH,QAAO9B,KAAK4Q,KAAK9C,EAAEZ,UAAUI,YAAaQ,EAAEZ,UAAUK,eAC9HlK,EAAStZ,GAAGiW,KAAKqD,OAAOC,IAAIyJ,EAAOpK,IAAKY,EAAOW,GAAM,GAAO,GAAO,GAAO,EAAOxa,EAAQggB,iBAAkB3f,GAAGiW,KAAK8D,WAAY,GAAI,GACvIiJ,GAAOhK,QAAQxY,KAAK8Y,GACpB0J,EAAOpK,IAAIiK,UAAUrJ,KAMrCwJ,GAAO8D,QAAQC,QACf/D,EAAO8D,QAAQ3T,OAAO,OAAS8Q,EAAWhD,MAAM,GAAG9B,KAAO,iCAAmD,OAAhBnf,GAAGC,SAAoB,OAAS,UAAY,MAAQgkB,EAAWhK,GAAK,MAAwB,OAAhBja,GAAGC,SAAoB,6CAA+C,oDAAsD,eAI7SqlB,iBAAkB,SAAUtC,EAAQwE,EAAOd,EAAUlK,GAEjD,GAAIxC,GAAgB,4BAA8C,OAAhBha,GAAGC,SAAoB,OAAS,UAAY,MAAQunB,EAAMC,QAAU,MAAwB,OAAhBznB,GAAGC,SAAoB,aAAeunB,EAAME,UAAY,kCAAoC,aAAeF,EAAME,UAAY,gCAAkC,UAE7R,IAAI1nB,GAAGiW,KAAK+M,OAAOC,WAAY,CACvByD,GACA9gB,KAAK6gB,aAAazD,EAGtB,IAEI7I,GAFAX,EAAQ,GAAIzB,QAAO9B,KAAK6G,OAAO0K,EAAMtG,SAAUsG,EAAMrG,UAIrDhH,GADAqN,EAAMrN,KAAKpb,QAAQ,gBACZ,GAAIgZ,QAAO9B,KAAK2Q,YAAYY,EAAMrN,KAAM,KAAM,KAAM,KAAM,GAAIpC,QAAO9B,KAAK4Q,KAAKjhB,KAAKud,UAAUM,mBAAoB7d,KAAKud,UAAUO,sBAEjI,GAAI3L,QAAO9B,KAAK2Q,YAAYY,EAAMrN,KAAM,KAAM,KAAM,KAAM,GAAIpC,QAAO9B,KAAK4Q,KAAKjhB,KAAKud,UAAUI,YAAa3d,KAAKud,UAAUK,cAGrI,IAAIlK,GAAStZ,GAAGiW,KAAKqD,OAAOC,IAAIyJ,EAAOpK,IAAKY,EAAOW,GAAM,GAAO,GAAO,GAAO,EAAO6I,EAAO5O,OAAOuL,iBAAkB3f,GAAGiW,KAAK8D,WAAYC,EAAe,GAAIwN,EAAMvN,GAClK+I,GAAOhK,QAAQxY,KAAK8Y,GAEhBkD,GACAwG,EAAOpK,IAAIiK,UAAUrJ,GAI7BwJ,EAAO8D,QAAQC,QACf/D,EAAO8D,QAAQ3T,OAAO,OAASqU,EAAMvG,MAAM,GAAG9B,KAAO,QAAUnF,IAEnE8L,gBAAiB,SAAU9C,EAAQ3f,GAC/BrD,GAAGiW,KAAK+M,OAAOyD,aAAazD,GAC5BhjB,GAAGuR,MAAMoW,iBAAiBtkB,EAAM,SAAUukB,EAAYC,EAAgB1iB,EAAO2iB,EAAavL,EAASC,GAE/F,GAAIuH,GAAI/jB,GAAGiW,KAAK+M,OACZ7I,EAAO4J,EAAEd,WAAa,GAAIlL,QAAO9B,KAAK2Q,YAAY5D,EAAO5O,OAAOiL,MAAO,KAAM,KAAM,KAAM,GAAItH,QAAO9B,KAAK4Q,KAAK9C,EAAEZ,UAAUI,YAAaQ,EAAEZ,UAAUK,eAAiB,KACpKuE,EAAKhE,EAAEd,WAAa,GAAIlL,QAAO9B,KAAKwL,WAAe,KACnDzH,EAAgB,4BAA8C,OAAhBha,GAAGC,SAAoB,OAAS,UAAY,MAAQkF,EAAQ,MAAwB,OAAhBnF,GAAGC,SAAoB,yBAA2B,6BAA+B,UACvM,IAA8B,mBAAnB4nB,IAAkC9D,EAAEd,WAC3CjjB,GAAGiW,KAAKqG,qBAAqB0G,EAAOpK,IAAKoK,EAAO5O,OAAQ+F,EAAMoC,EAASC,EAAWuL,EAAI/N,EAAe,SAAUV,EAAQE,EAAOgD,EAAWzC,EAAYC,GACjJgJ,EAAO8D,QAAQC,QACf/D,EAAO8D,QAAQ3T,OAAOyU,GACtB5E,EAAOhK,QAAQxY,KAAK8Y,GAEhByK,EAAEd,aACEzG,EACAwG,EAAOpK,IAAIiK,UAAUrJ,GAErBxZ,GAAGiW,KAAK8C,UAAUiK,EAAOpK,KAAMoK,EAAOhK,iBAI/C,CAEH,GAAI+K,EAAEd,WAAY,CACd,GAAIe,GAAWD,EAAEoB,YAAY0C,EAC7B9D,GAAEmB,kBAAkBlC,EAAQgB,GAAU,EAAMxH,GAAW,GAE3DwG,EAAO8D,QAAQC,QACf/D,EAAO8D,QAAQ3T,OAAOyU,OAMlCzC,YAAa,SAAU6C,GAEnB,IAAK,GADDhE,GAAW,KACNzkB,EAAI,EAAGA,EAAIqG,KAAKvC,KAAKyd,UAAUjiB,OAAQU,IAC5C,GAAIqG,KAAKvC,KAAKyd,UAAUvhB,GAAGE,OAASmG,KAAKud,UAAUC,UAAYxd,KAAKvC,KAAKyd,UAAUvhB,GAAG0a,KAAO+N,EAAOziB,WAAY,CAC5Gye,EAAWpe,KAAKvC,KAAKyd,UAAUvhB,EAC/B,OAGR,MAAOykB,IAEXqB,cAAe,SAAU4C,GAErB,IAAK,GADDhE,GAAa,KACR1kB,EAAI,EAAGA,EAAIqG,KAAKvC,KAAKyd,UAAUjiB,OAAQU,IAC5C,GAAIqG,KAAKvC,KAAKyd,UAAUvhB,GAAGE,OAASmG,KAAKud,UAAUE,YAAczd,KAAKvC,KAAKyd,UAAUvhB,GAAG0a,KAAOgO,EAAa1iB,WAAY,CACpH0e,EAAare,KAAKvC,KAAKyd,UAAUvhB,EACjC,OAGR,MAAO0kB,IAEXsB,WAAY,SAAUtL,GAElB,IAAK,GADDuN,GACKjoB,EAAI,EAAGA,EAAIqG,KAAKvC,KAAKyd,UAAUjiB,OAAQU,IACxCqG,KAAKvC,KAAKyd,UAAUvhB,GAAGE,OAASmG,KAAKud,UAAUG,SAAW1d,KAAKvC,KAAKyd,UAAUvhB,GAAG0a,KAAOA,EAAG1U,aAC3FiiB,EAAQ5hB,KAAKvC,KAAKyd,UAAUvhB,GAGpC,OAAOioB,IAEXU,aAAc,SAAUlF,GACfA,EAAOmF,eAAe,YACvBnF,EAAO5O,UAGX,KAAK,GAAIgU,KAAQxiB,MAAKjG,QAAQyU,OACrB4O,EAAO5O,OAAO+T,eAAeC,KAC9BpF,EAAO5O,OAAOgU,GAAQxiB,KAAKjG,QAAQyU,OAAOgU,KAItD3gB,KAAM,WACoB,mBAAXsQ,UACP/X,GAAGiW,KAAK+M,OAAOC,YAAa,GAG5BjjB,GAAGiW,KAAK+M,OAAOC,aAEfjjB,GAAGiW,KAAK2E,MAAMI,kBAAoB,GAAIjD,QAAO9B,KAAKuL,kBAClDxhB,GAAGiW,KAAK8D,WAAa,GAAIhC,QAAO9B,KAAKwL,WACrCzhB,GAAGiW,KAAKyG,SAAW,GAAI3E,QAAO9B,KAAKyL,SAIvC,KAAK,GAAIniB,GAAI,EAAGA,EAAIqG,KAAKsd,QAAQrkB,OAAQU,IAAK,CAC1C,GAAI8oB,GAAOziB,KAAKsd,QAAQ3jB,EACxBqG,MAAKsiB,aAAaG,GAClBA,EAAKhU,UAAYpR,OAAOolB,EAAKjU,OAAOC,WACpCgU,EAAKtG,aAAeje,SAAS6c,eAAe0H,EAAKjU,OAAO2N,cACxDsG,EAAKvB,QAAU7jB,OAAO,0BAA2BolB,EAAKhU,WACtDgU,EAAKrP,WACLqP,EAAKxE,QAAS,EAETwE,EAAKjU,OAAOuP,MACb/d,KAAKge,QAAQyE,GACbziB,KAAKke,SAASuE,OCp6B9B,WACIroB,GAAGiW,KAAKC,uBACRlW,GAAGqK,QAAQiC,mBAEXrJ,OAAOa,UAAUzD,MAAM,WAEnB4C,OAAOa,UAAUwkB,aAEbxoB,OAAOyoB,YACPvoB,GAAGE,IAAMJ,OAAOyoB,WAGpBvoB,GAAGI,IAAM0D,SAASmI,cAAc,QAAQuc,UAAUC,SAAS,aAG3D,IAAIC,GAAW5kB,SAASmI,cAAc,QAAQ0c,aAAa,OACnC,oBAAbD,IAA4BA,EAAS3pB,QAAQ,aACpDiB,GAAGC,SAAW,KACdD,GAAGuR,MAAMxO,OAAO8iB,uBAAyB,wCAG7C,IAAIjD,GAAI5iB,GAAGkB,UAEX0hB,GAAE7b,KAAKC,WACP4b,EAAE7b,KAAKQ,aACPqb,EAAE7b,KAAKY,gBACPib,EAAE7b,KAAKmB,mBACP0a,EAAE7b,KAAK0B,YACFzI,GAAGI,KACJwiB,EAAElZ,OAAO1C,WAEb4b,EAAE/Y,UAAUC,kBAEZ9J,GAAG0H,SAAS+J,MAAMjR,KAAqB,OAAhBR,GAAGC,SAAoB6V,8BAAgCC,+BAE9E/V,GAAGqK,QAAQmB,QAAQC,OAAyB,OAAhBzL,GAAGC,SAAoB,yFAA2F,kFAC9ID,GAAGqK,QAAQmB,QAAQE,UAA4B,OAAhB1L,GAAGC,SAAoB,ofAAsf,qgBAC5iBD,GAAGqK,QAAQmB,QAAQpB,OAAyB,OAAhBpK,GAAGC,SAAoB,kBAAoB,mBAEvED,GAAGqK,QAAQ5C,OACXzH,GAAGkN,OAAOC,mBACVnN,GAAGkN,OAAOyC,yBACV3P,GAAGkN,OAAOE,iBAAiB,cAC3BpN,GAAGkN,OAAOU,cACV5N,GAAGkN,OAAOgD,UACVlQ,GAAGkN,OAAOoD,mBACVtQ,GAAGkN,OAAO+D,eAEV,IAAIvS,GAAIsB,GAAG2R,MACP1O,QAAO,yCAAyCpE,OAAS,IACzDoE,OAAO,wBAAwBkG,IAAI,WAAY,YAC/CzK,EAAEkqB,2BACFlqB,EAAEmqB,QAAQroB,KAAK9B,EAAEoqB,aAGrBpqB,EAAE+I,OAEFzH,GAAGwH,QAAQC,OACXzH,GAAGwR,QAAQ/J,OACXzH,GAAG0H,SAASD,OACZzH,GAAG0R,SAASjK,OACZzH,GAAG4R,KAAKC,MAAQ/R,OAAOipB,UACvB/oB,GAAG4R,KAAKnK,OAEJ3H,OAAOkpB,iBAAmBlpB,OAAOmpB,mBAAuD,mBAA3BnpB,QAAOopB,iBAAmCppB,OAAOopB,kBAC9GlpB,GAAG0J,OAAOjC,KAAoB,MAAfzH,GAAGC,SAAmBH,OAAOkpB,gBAAkBlpB,OAAOmpB,iBAGzE,IAAIE,GAAUlmB,OAAO,cACrBkmB,GAAQ/gB,KAAK,SAAU7I,EAAG6pB,GACtB,GAAIC,GAAepmB,OAAO,iCAAkCmmB,EAChC,KAAxBC,EAAaxqB,SACboE,OAAOmmB,GAAMjW,OAAO,kGACpBlQ,OAAOmmB,GAAMjW,OAAO,sGAK5B,KAAK,GAAI5T,GAAI,EAAGA,EAAIS,GAAGK,MAAMxB,OAAQU,IACjC,GAA6B,kBAAjBS,IAAGK,MAAMd,GACjB,IAEIS,GAAGK,MAAMd,KACX,MAAO8B,GAELZ,QAAQE,MAAM,0DAA4DpB,EAAG8B,GAiBzF,GAAIioB,GAAUxlB,SAASmI,cAAc,sBACjCqd,IACAA,EAAQxd,aAAa,OAAwB,OAAhB9L,GAAGC,SAAoB,0BAA4B,6BAG3D,mBAAbD,IAAGsR,OAA0BtR,GAAGsR,OAA6C,mBAA3BxR,QAAOopB,kBAAmCppB,OAAOopB,kBAE3G,WACI,GAAIK,GAAKzlB,SAAS+H,cAAc,SAChC0d,GAAG9pB,KAAO,aACV8pB,EAAGC,OAAQ,EACXD,EAAGzd,aAAa,oBAAqB,YACrCyd,EAAGzd,aAAa,sBAAuB,eACvCyd,EAAG3a,IAAM,sDACT,IAAIlQ,GAAIoF,SAAS2lB,qBAAqB,UAAU,EAAI/qB,GAAEgrB,WAAW/c,aAAa4c,EAAI7qB,QAK9FuE,OAAOnD,QAAQmH,GAAG,OAAQ,WACtBjH,GAAGkN,OAAO+C,uBAEV,KAAK,GAAI1Q,GAAI,EAAGA,EAAIS,GAAGY,KAAK/B,OAAQU,IACJ,kBAAhBS,IAAGY,KAAKrB,IAChBS,GAAGY,KAAKrB,OAKpB0D,OAAOnD,QAAQmH,GAAG,SAAU,WACxB,IAAK,GAAI1H,GAAI,EAAGA,EAAIS,GAAGc,OAAOjC,OAAQU,IACJ,kBAAlBS,IAAGc,OAAOvB,IAClBS,GAAGc,OAAOvB,OAKtB0D,OAAOnD,QAAQmH,GAAG,SAAU,WACxB,IAAK,GAAI1H,GAAI,EAAGA,EAAIS,GAAGgB,OAAOnC,OAAQU,IACJ,kBAAlBS,IAAGgB,OAAOzB,IAClBS,GAAGgB,OAAOzB","file":"app-basic.js","sourcesContent":["'use strict';\n\n/**\r\n * @author TRH\r\n */\n\n/*** GLOBALT AU OBJEKT ***/\n\nvar AU = {\n pageLang: 'da', // Default sprog\n cdn: 'https://cdn.au.dk',\n version: '202204211100',\n bss: false,\n ready: [],\n addReadyFunction: function addReadyFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the ready array\n if (AU.ready.indexOf(fn) === -1) {\n AU.ready.push(fn);\n } else {\n console.log(\"Function already exists in AU.ready and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.ready.\");\n }\n },\n load: [],\n addLoadFunction: function addLoadFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the load array\n if (AU.load.indexOf(fn) === -1) {\n AU.load.push(fn);\n } else {\n console.log(\"Function already exists in AU.load and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.load.\");\n }\n },\n resize: [],\n addResizeFunction: function addResizeFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the resize array\n if (AU.resize.indexOf(fn) === -1) {\n AU.resize.push(fn);\n } else {\n console.log(\"Function already exists in AU.resize and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.resize.\");\n }\n },\n scroll: [],\n addScrollFunction: function addScrollFunction(fn) {\n if (typeof fn === 'function') {\n // Check if the function reference already exists in the scroll array\n if (AU.scroll.indexOf(fn) === -1) {\n AU.scroll.push(fn);\n } else {\n console.log(\"Function already exists in AU.scroll and will not be added again.\");\n }\n } else {\n console.error(\"Attempted to add a non-function to AU.scroll.\");\n }\n },\n navigation: {}\n};\n'use strict';\n\n/**\r\n * Titel: HELPERS\r\n * Beskrivelse: hjælpemetoder som kan anvendes på tværs af alle scripts\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\n\nAU.helpers = {\n getUnicodeKey: function getUnicodeKey(e) {\n var unicode = e.keyCode ? e.keyCode : e.charCode;\n return unicode;\n },\n rewriteLink: function rewriteLink(text) {\n return text.trim().toLowerCase().replace(/ /g, '_').replace(/æ/g, 'ae').replace(/ø/g, 'oe').replace(/å/g, 'aa');\n },\n getQuerystring: function getQuerystring(key, default_) {\n if (!default_) {\n default_ = '';\n }\n\n key = key.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n var regex = new RegExp(\"[\\\\?&]\" + key + \"=([^]*)\");\n\n var qs = regex.exec(window.location.href);\n\n if (qs === null) {\n return default_;\n } else {\n return qs[1];\n }\n },\n getInternetExplorerVersion: function getInternetExplorerVersion() {\n var rv = -1;\n if (navigator.userAgent.indexOf('Trident') > -1) {\n var ua = navigator.userAgent;\n var re = new RegExp(\"rv:([0-9]{1,}[.0-9]{0,})\");\n if (re.exec(ua) !== null) {\n rv = parseFloat(RegExp.$1);\n }\n }\n return rv;\n },\n isMobileDevice: function isMobileDevice() {\n return (/Mobile|iP(hone|od|ad)|Android|IEMobile/i.test(navigator.userAgent)\n );\n },\n getXML: function getXML(source, callback) {\n jQuery.ajax({\n type: 'GET',\n url: source,\n dataType: 'xml',\n success: function success(data) {\n if (typeof callback === 'function') {\n callback(data);\n }\n }\n });\n },\n isElementInViewport: function isElementInViewport(element) {\n if (element === null) {\n return false;\n }\n\n var rect = element.getBoundingClientRect();\n\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n },\n isElementPartlyInViewport: function isElementPartlyInViewport(element) {\n var top = element.offsetTop;\n var left = element.offsetLeft;\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n while (element.offsetParent) {\n element = element.offsetParent;\n top += element.offsetTop;\n left += element.offsetLeft;\n }\n\n return top < window.pageYOffset + window.innerHeight && left < window.pageXOffset + window.innerWidth && top + height > window.pageYOffset && left + width > window.pageXOffset;\n },\n trimText: function trimText(label, amount, end) {\n if (label.length > amount) {\n return label.substring(0, amount) + end;\n }\n\n return label;\n },\n validateEmail: function validateEmail(email) {\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(email);\n },\n componentToHex: function componentToHex(c) {\n var hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n },\n rgbToHex: function rgbToHex(r, g, b) {\n return this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n },\n getPageContent: function getPageContent(url, retrieveSelector, insertSelector, callback) {\n var urlAllowed = function urlAllowed(url) {\n var protocolAndHost = location.protocol + '//' + location.host;\n return url.indexOf(protocolAndHost) === 0;\n };\n\n var insertElement = jQuery(insertSelector);\n if (urlAllowed(url)) {\n insertElement.load(url + ' ' + retrieveSelector, function () {\n if (typeof callback === 'function') {\n callback();\n }\n });\n return true;\n } else {\n return false;\n }\n },\n accentMap: {\n 'é': 'e',\n 'ä': 'æ',\n 'ö': 'ø',\n 'á': 'a',\n 'ü': 'y'\n },\n normalizeAccents: function normalizeAccents(term, accentMap) {\n if (!accentMap) {\n accentMap = this.accentMap;\n }\n\n var ret = '';\n for (var i = 0; i < term.length; i++) {\n ret += accentMap[term.charAt(i)] || term.charAt(i);\n }\n return ret;\n }\n};\n'use strict';\n\n/**\r\n * Titel: NAVIGATION\r\n * Beskrivelse: initialisering af menuer, fade (som stadig bruges til news), brødkrummer m.m.\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\n\nAU.navigation.menu = {\n setClick: function setClick() {\n jQuery('button.menu-icon').on('click', function () {\n var headerMenu = jQuery(this).parents('.header-menu');\n if (headerMenu.hasClass('open')) {\n headerMenu.removeClass('open');\n if (!AU.bss) {\n jQuery('.search').removeClass('hide');\n }\n } else {\n headerMenu.addClass('open');\n if (!AU.bss) {\n jQuery('.search').addClass('hide');\n }\n }\n });\n },\n setUtility: function setUtility() {\n jQuery(document).on('show.zf.dropdown', 'header .dropdown-pane', function () {\n AU.databox.init();\n AU.alphabox.init();\n });\n },\n setBreadcrumb: function setBreadcrumb() {\n var bc = jQuery('#au_breadcrumb');\n var crumbs = jQuery('> a', bc);\n var crumbCutOff = 3;\n if (crumbs.length > crumbCutOff) {\n bc.addClass('collapse');\n crumbs.eq(0).after('
');\n jQuery('.bc-expand span').on('click', function () {\n bc.toggleClass('collapse');\n });\n }\n },\n addExtraMenuItem: function addExtraMenuItem() {\n // Fix til den mobile menu, hvor der indsættes et ekstra top-level menupunkt\n var topLevelMenuItems = jQuery('.top-bar > div > ul.menu li.has-submenu');\n topLevelMenuItems.each(function () {\n var topLevelMenuItem = jQuery('> a', this);\n var topLevelSubMenu = jQuery('ul.submenu', this);\n topLevelSubMenu.prepend('{1}
');\n var globalFooter = document.querySelector('footer.global');\n if (globalFooter) {\n globalFooter.insertAdjacentElement('afterend', alertElement);\n alertElement.style.display = 'none';\n this.alertElement = alertElement;\n }\n\n var allowCookies = this.get('allow_cookies');\n if (allowCookies === null) {\n this.alert();\n }\n }\n },\n initCookieScript: function initCookieScript() {\n if (typeof window.cookieScriptId !== 'undefined') {\n // Insert scripts and CSS for Pop Up\n var head = document.head;\n var cookieScriptManipulationCode = document.createElement('script');\n cookieScriptManipulationCode.setAttribute('src', '//cdn.au.dk/res/cookiescript/cookie-modal.min.js?a=' + (typeof window.cookieScriptVersion !== 'undefined' ? window.cookieScriptVersion : '1'));\n cookieScriptManipulationCode.setAttribute('charset', 'UTF-8');\n cookieScriptManipulationCode.setAttribute('type', 'text/javascript');\n head.insertBefore(cookieScriptManipulationCode, head.firstElementChild);\n }\n },\n alert: function alert() {\n if (this.alertElement !== null) {\n this.alertElement.style.display = 'block';\n\n document.querySelector('#au_cookiesalert_yes button').addEventListener('click', function (e) {\n e.preventDefault();\n AU.cookies.accept(AU.cookies.noAlertPeriod, true);\n });\n }\n },\n accept: function accept(duration, byGUI) {\n var path = location.host.indexOf('au.dk') > -1 ? undefined : ';path=/';\n this.set('allow_cookies', 'true', duration, path);\n if (byGUI) {\n this.alertElement.style.display = 'none';\n }\n }\n};\n'use strict';\n\n/**\r\n * Titel: DESIGN\r\n * Beskrivelse: metoder som udbedrer en række \"shortcomings\" i designet eller tilføjer ekstra features til elementer\r\n * Status: er en blanding af nyt og gammelt. ES5-syntax hele vejen igennem\r\n */\n\nAU.design = {\n setFocusFieldIds: function setFocusFieldIds() {\n jQuery('.au_focus').each(function (i) {\n if (!jQuery(this).attr('id')) {\n jQuery(this).attr('id', 'focusid_' + i);\n }\n });\n },\n setBuildingLinks: function setBuildingLinks(elementToSearchSelector) {\n var elementToSearch = jQuery(elementToSearchSelector);\n\n if (elementToSearch.length > 0) {\n var mapUrl = AU.pageLang === \"da\" ? '//www.au.dk/kort/' : '//www.au.dk/en/map/';\n var buildingPhrase = AU.pageLang === \"da\" ? 'bygning' : 'building';\n var re = new RegExp('(' + buildingPhrase + ' (\\\\d{4}))', 'ig');\n jQuery.each(elementToSearch, function () {\n jQuery(this).html(jQuery(this).html().replace(re, '$1'));\n });\n }\n },\n onCollapseOpen: [],\n onCollapseClose: [],\n setCollapse: function setCollapse() {\n\n var openEvent = document.createEvent('Event');\n openEvent.initEvent('collapsible-open', true, true);\n\n var closeEvent = document.createEvent('Event');\n closeEvent.initEvent('collapsible-close', true, true);\n\n var collapsibles = jQuery('.csc-frame.au_collapsible');\n collapsibles.each(function () {\n var me = jQuery(this);\n var domElement = me.get(0);\n var header = jQuery('> .csc-header', me);\n\n header.unbind('click').on('click', function () {\n me.toggleClass('au_collapsed');\n if (me.hasClass('au_collapsed')) {\n domElement.dispatchEvent(closeEvent);\n } else {\n domElement.dispatchEvent(openEvent);\n }\n });\n\n var d = AU.design;\n domElement.addEventListener('collapsible-open', function (e) {\n for (var i = 0; i < d.onCollapseOpen.length; i++) {\n if (typeof d.onCollapseOpen[i] === 'function') {\n d.onCollapseOpen[i](e.target);\n }\n }\n }, false);\n\n domElement.addEventListener('collapsible-close', function (e) {\n for (var i = 0; i < d.onCollapseClose.length; i++) {\n if (typeof d.onCollapseClose[i] === 'function') {\n d.onCollapseClose[i](e.target);\n }\n }\n }, false);\n });\n\n this.openCollapsibleFromHash(location.hash);\n\n jQuery(window).on('hashchange', function () {\n AU.design.openCollapsibleFromHash(location.hash);\n });\n },\n openCollapsibleFromHash: function openCollapsibleFromHash(hash) {\n if (hash.indexOf('c') === 1) {\n jQuery(hash + '.csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible').removeClass('au_collapsed');\n jQuery(hash).parents('.au_collapsible').removeClass('au_collapsed');\n document.querySelector(hash).scrollIntoView();\n }\n },\n grayscale: function grayscale(src) {\n try {\n var supportsCanvas = !!document.createElement('canvas').getContext;\n if (supportsCanvas) {\n var canvas = document.createElement('canvas'),\n context = canvas.getContext('2d'),\n imageData,\n px,\n length,\n i = 0,\n gray,\n img = new Image();\n\n img.src = src;\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0);\n\n imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n px = imageData.data;\n length = px.length;\n\n for (; i < length; i += 4) {\n gray = px[i] * 0.3 + px[i + 1] * 0.59 + px[i + 2] * 0.11;\n px[i] = px[i + 1] = px[i + 2] = gray;\n }\n\n context.putImageData(imageData, 0, 0);\n return canvas.toDataURL();\n } else {\n return src;\n }\n } catch (err) {\n console.log(err);\n return src;\n }\n },\n setBannerElementsReady: function setBannerElementsReady() {\n jQuery('.aubanner a').hover(function () {\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 1 }, 200);\n }, function () {\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 0 }, 500);\n });\n },\n setBannerElementsLoad: function setBannerElementsLoad() {\n jQuery('.aubanner:not(.aubanner-2) img').each(function () {\n // Fordi det er fuldstændig utænkeligt, at vi kan få fjernet Prototype fra pure.au.dk...\n var bc = jQuery('.aubanner-content', jQuery(this).parents('.aubanner'));\n bc.css('background-image', \"url('\" + AU.design.grayscale(this.src) + \"')\");\n }).animate({ opacity: 1 }, 500);\n },\n setHero: function setHero() {\n var hero = jQuery('.hero');\n if (hero.length > 0) {\n jQuery(window).scroll(function () {\n var x = jQuery(this).scrollTop() + (jQuery('body').hasClass('layout13') ? 0 : -200);\n hero.css('background-position-y', parseInt(x / 10) + 'px');\n });\n }\n },\n setMagnificPopup: function setMagnificPopup() {\n var lightbox = jQuery('.csc-textpic a[rel*=\"lightbox\"], .image a[rel*=\"lightbox\"]');\n\n // http://stackoverflow.com/questions/6900958/using-jquery-to-perform-a-function-on-elements-with-unique-rel-attribute\n var rels = {};\n lightbox.each(function () {\n var r = jQuery(this).attr('rel');\n rels[r] = 1;\n });\n\n rels = Object.keys(rels);\n jQuery.each(rels, function (index, value) {\n jQuery('a[rel=\"' + value + '\"]').magnificPopup({\n type: 'image',\n gallery: {\n enabled: true\n },\n modal: false\n });\n });\n\n var newsImgs = jQuery('.au_news-single-sub-images a, .au_news-single-img a, .news-set1-img1all a');\n newsImgs.magnificPopup({\n type: 'image',\n gallery: {\n enabled: true\n },\n modal: false\n });\n },\n setTopWarning: function setTopWarning() {\n if (window.topWarning) {\n jQuery('body').prepend(jQuery('', {\n 'class': 'ie-warning',\n 'html': AU.pageLang == 'da' ? window.topWarningTextDa : window.topWarningTextEn\n }));\n }\n }\n};\n\"use strict\";\n\nAU.basic = true;\n\nAU.ipure = {\n source: {}\n};\n\nAU.design.setMagnificPopup = function () {\n return;\n};\n\nAU.databox = {\n init: function init() {\n return;\n }\n};\n\nAU.flowbox = {\n init: function init() {\n return;\n }\n};\n\nAU.alphabox = {\n boxes: [],\n init: function init() {\n return;\n }\n};\n\nAU.piechart = {\n init: function init() {\n return;\n }\n};\n\nAU.social = {\n init: function init() {\n return;\n }\n};\n\nAU.news = {\n feeds: [],\n init: function init() {\n return;\n }\n};\n'use strict';\n\n/**\r\n * Titel: FALLBACK\r\n * Beskrivelse: består af den ældgamle 'pingAnalytics' til GA-tracking og nogle ukendte/LF-udviklede funktioner, der kan ske at være i brug rundt omkring...\r\n * Status: Do. Not. Touch.\r\n */\n\nfunction pressed(url) {\n location.href = url;\n}\n\nfunction pres(url) {\n location.href = url;\n}\n\nfunction replaceall(s, x, y) {\n if (x.length > 0) {\n var found = s.indexOf(x);\n while (found >= 0) {\n s = s.substring(0, found) + y + s.substring(found + x.length, s.length);\n found = s.indexOf(x, found + y.length);\n }\n }\n return s;\n}\n\nfunction multipressed(xx, urlPattern, StartValue) {\n var url = urlPattern;\n var allow = StartValue;\n var OK = true;\n for (var i = 0; i < xx.elements.length; i++) {\n if (xx.elements[i].type === 'select-one') {\n if (OK) {\n OK = xx.elements[i].selectedIndex >= allow;\n }\n url = replaceall(url, '$' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\n url = replaceall(url, '¤' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\n }\n }\n url = url.toLowerCase();\n if (OK) {\n location.href = url;\n } else {\n window.alert('Vælg en værdi i alle felter!');\n }\n}\n\n// En kommentar\n'use strict';\n\n/**\r\n * Titel: RESPONSIVE\r\n * Beskrivelse: indeholder efterhånden primært logik til omsættelse af tabeller til responsiv opførsel (lister), herunder studiediagrammerne. Derudover er der en lille smule logik til det nye design\r\n * Status: er kun i nogen grad omskrevet fra 2011/2015-udgaven\r\n */\n\nAU.responsive = {\n state: null,\n stateHistory: [],\n modes: {\n PHONE: {\n ID: 0,\n NAME: 'PHONE',\n MAX: 640\n },\n TABLET: {\n ID: 1,\n NAME: 'TABLET',\n MAX: 1024\n },\n DESKTOP: {\n ID: 2,\n NAME: 'DESKTOP'\n }\n },\n detectDevice: function detectDevice() {\n\n var state = null;\n var modes = AU.responsive.modes;\n if (Foundation.MediaQuery.current === 'small') {\n state = modes.PHONE;\n } else if (Foundation.MediaQuery.current === 'medium') {\n state = modes.TABLET;\n } else {\n state = modes.DESKTOP;\n }\n\n if (state !== AU.responsive.state) {\n AU.responsive.state = state;\n AU.responsive.stateHistory.push(state.NAME);\n console.log(state.NAME);\n AU.responsive.setMarkup();\n }\n },\n markupRenderFunctions: [],\n runMarkupFunctions: function runMarkupFunctions() {\n for (var i = 0; i < this.markupRenderFunctions.length; i++) {\n if (typeof this.markupRenderFunctions[i] === 'function') {\n this.markupRenderFunctions[i]();\n }\n }\n },\n setMarkup: function setMarkup() {\n var state = AU.responsive.state;\n\n var utilityLinks = jQuery('.utility-links');\n var headerMenu = jQuery('.header-menu');\n var sectionHeader = jQuery('.section-header .logo');\n\n var pageNav = jQuery('#au_section_nav_inner_list');\n var titleBar = jQuery('.title-bar');\n var menuTitle = jQuery('.menu-title');\n var leftMenu = jQuery('.left-menu');\n var tablesScroll = jQuery('table.au_responsive_table_scroll');\n\n if (state.NAME === 'PHONE') {\n\n headerMenu.append(utilityLinks);\n if (jQuery('body').hasClass('universe')) {\n headerMenu.after(pageNav);\n pageNav.wrap('');\n } else {\n utilityLinks.before(pageNav);\n }\n titleBar.before(menuTitle);\n pageNav.addClass('responsive-pagenav');\n\n tablesScroll.each(function () {\n var table = jQuery(this);\n table.wrap('');\n });\n } else {\n\n var wasPhone = function wasPhone() {\n var states = AU.responsive.stateHistory.length;\n return states > 1 ? AU.responsive.stateHistory[states - 2] === 'PHONE' : false;\n };\n\n if (wasPhone()) {\n sectionHeader.append(utilityLinks);\n leftMenu.append(pageNav);\n pageNav.before(menuTitle);\n }\n\n tablesScroll.each(function () {\n var table = jQuery(this);\n if (table.parent().is('div.responsive-table-container')) {\n table.unwrap();\n }\n });\n }\n\n this.runMarkupFunctions();\n }\n};\n\nAU.edutables = {\n tables: [],\n scriptLoaded: false,\n loadExternal: function loadExternal() {\n var dg = new AUDiagramme(AU.pageLang, AU.edutables.tables);\n dg.init();\n },\n init: function init() {\n if (this.tables.length > 0) {\n if (!this.scriptLoaded) {\n var componentsUrl = AU.cdn + '/components/umd/diagramme.js';\n jQuery.getScript(componentsUrl, function () {\n AU.edutables.loadExternal();\n AU.edutables.scriptLoaded = true;\n });\n } else {\n this.loadExternal();\n }\n }\n }\n};\n\nAU.addReadyFunction(function () {\n AU.responsive.detectDevice();\n AU.edutables.init();\n});\n\nAU.addResizeFunction(function () {\n AU.responsive.detectDevice();\n});\n'use strict';\n\n// Default søgeboks til medarbejderportaler til utility-box\nvar DEFAULT_util_staffportal_da = {\n config: {\n container: '#au_databox_staff_utility',\n alphabet: 0,\n buttons: [{\n text: 'Institutter',\n link: ''\n }, {\n text: 'Fakulteter',\n link: ''\n }, {\n text: 'Fællesadministrationen',\n link: ''\n }, {\n text: 'Øvrige enheder',\n link: ''\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n color: '#37a0cb',\n overlay: false\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/6'\n }\n};\nvar DEFAULT_util_staffportal_en = {\n config: {\n container: '#au_databox_staff_utility',\n alphabet: 0,\n buttons: [{\n text: 'Departments',\n link: ''\n }, {\n text: 'Faculties',\n link: ''\n }, {\n text: 'Other units',\n link: ''\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n color: '#37a0cb',\n overlay: false\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/7'\n }\n};\n\n// Default søgeboks til institutter til utility-box\nvar DEFAULT_util_department_da = {\n config: {\n container: '#au_databox_unit_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'http://arts.au.dk'\n }, {\n text: 'Health',\n link: 'http://health.au.dk'\n }, {\n text: 'Natural Sciences',\n link: 'http://nat.au.dk'\n }, {\n text: 'Technical Sciences',\n link: 'http://tech.au.dk'\n }, {\n text: 'Aarhus BSS',\n link: 'http://bss.au.dk'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/47'\n }\n};\nvar DEFAULT_util_department_en = {\n config: {\n container: '#au_databox_unit_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'http://arts.au.dk/en/'\n }, {\n text: 'Health',\n link: 'http://health.au.dk/en/'\n }, {\n text: 'Natural Sciences',\n link: 'http://nat.au.dk/en/'\n }, {\n text: 'Technical Sciences',\n link: 'http://tech.au.dk/en/'\n }, {\n text: 'Aarhus BSS',\n link: 'http://bss.au.dk/en/'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/52'\n }\n};\n\n// Default alphabox med medarbejderservice til utility-box\nvar DEFAULT_util_staffservice_da = {\n config: {\n container: '#au_alphabox_staff_utility',\n title: 'Find værktøjer, vejledninger og serviceydelser',\n url: 'http://medarbejdere.au.dk/administration/',\n description: 'Find flere informationer om',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/administration/it/'\n }, {\n title: 'Økonomi',\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\n }, {\n title: 'Bygninger',\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\n }, {\n title: 'Kommunikation',\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\n }, {\n title: 'Studieadm.',\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\n }, {\n title: 'Forskningspraksis',\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\n }, {\n title: 'Internationalt',\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\n }],\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks'\n },\n search: {\n placeHolder: 'Søg i værktøjer m.m.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\n }\n};\nvar DEFAULT_util_staffservice_en = {\n config: {\n container: '#au_alphabox_staff_utility',\n title: 'Find tools, guidelines and services',\n url: 'http://medarbejdere.au.dk/en/administration/',\n description: 'Find more information about',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/en/administration/it/'\n }, {\n title: 'Finance',\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\n }, {\n title: 'Buildings',\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\n }, {\n title: 'Communication',\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\n }, {\n title: 'Studies adm.',\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\n }, {\n title: 'Research Practice',\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\n }, {\n title: 'International',\n url: 'http://medarbejdere.au.dk/en/administration/international/'\n }],\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\n noResultsSearch: 'Your search did not return any results. Please try other words.',\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service'\n },\n search: {\n placeHolder: 'Search for tools, etc.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\n }\n};\n\n// Default søgeboks til ph.d.-portaler til utility-box\nvar DEFAULT_util_phdportal_da = {\n config: {\n container: '#au_databox_phd_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'https://phd.arts.au.dk'\n }, {\n text: 'Health',\n link: 'https://phd.health.au.dk/'\n }, {\n text: 'Natural Sciences',\n link: 'https://phd.nat.au.dk/'\n }, {\n text: 'Technical Sciences',\n link: 'https://phd.tech.au.dk/'\n }, {\n text: 'Aarhus BSS',\n link: 'https://bss.au.dk/phd/'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/50'\n }\n};\nvar DEFAULT_util_phdportal_en = {\n config: {\n container: '#au_databox_phd_utility',\n alphabet: 0,\n buttons: [{\n text: 'Arts',\n link: 'https://phd.arts.au.dk'\n }, {\n text: 'Health',\n link: 'https://phd.health.au.dk/'\n }, {\n text: 'Natural Sciences',\n link: 'https://phd.nat.au.dk/'\n }, {\n text: 'Technical Sciences',\n link: 'https://phd.tech.au.dk/'\n }, {\n text: 'Aarhus BSS',\n link: 'https://bss.au.dk/phd/'\n }],\n stacked: true\n },\n search: {\n index: 0\n },\n background: {\n overlay: false,\n color: '#003260'\n },\n data: {\n source: 'https://webtools.au.dk/Databox/Json/50'\n }\n};\n\n// Default alphabox med studieportaler til utility-box\nvar DEFAULT_util_student_da = {\n config: {\n container: '#au_alphabox_student_utility',\n title: 'Studieportaler',\n url: 'http://studerende.au.dk',\n links: []\n },\n search: {\n placeHolder: 'Søg efter studieportal'\n },\n background: {\n color: '#2a4a0f',\n linkColor: '#8bad3f'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/2?itemsOnly=true'\n }\n};\nvar DEFAULT_util_student_en = {\n config: {\n container: '#au_alphabox_student_utility',\n title: 'Study portals',\n url: 'http://studerende.au.dk/en/',\n links: []\n },\n search: {\n placeHolder: 'Search for Study portal'\n },\n background: {\n color: '#2a4a0f',\n linkColor: '#8bad3f'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/4?itemsOnly=true'\n }\n};\n\n// Default alphabox med medarbejderservice til medarbejdere.au.dk (forside m.m.)\nvar DEFAULT_staff_staffservice_da = {\n config: {\n container: '#au_alphabox_1',\n title: 'Find værktøjer, vejledninger og serviceydelser',\n url: 'http://medarbejdere.au.dk/administration/',\n description: 'Find flere informationer om',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/administration/it/'\n }, {\n title: 'Økonomi',\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\n }, {\n title: 'Bygninger',\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\n }, {\n title: 'Kommunikation',\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\n }, {\n title: 'Studieadm.',\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\n }, {\n title: 'Forskningspraksis',\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\n }, {\n title: 'Internationalt',\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\n }],\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks'\n },\n search: {\n placeHolder: 'Søg i værktøjer m.m.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\n }\n};\nvar DEFAULT_staff_staffservice_en = {\n config: {\n container: '#au_alphabox_1',\n title: 'Find tools, guidelines and services',\n url: 'http://medarbejdere.au.dk/en/administration/',\n description: 'Find more information about',\n links: [{\n title: 'HR',\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\n }, {\n title: 'IT',\n url: 'http://medarbejdere.au.dk/en/administration/it/'\n }, {\n title: 'Finance',\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\n }, {\n title: 'Buildings',\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\n }, {\n title: 'Communication',\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\n }, {\n title: 'Studies adm.',\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\n }, {\n title: 'Research Practice',\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\n }, {\n title: 'International',\n url: 'http://medarbejdere.au.dk/en/administration/international/'\n }],\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\n noResultsSearch: 'Your search did not return any results. Please try other words.',\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service'\n },\n search: {\n placeHolder: 'Search for tools, etc.'\n },\n data: {\n mode: 'json',\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\n }\n};\n'use strict';\n\n/**\r\n * Titel: MAPS\r\n * Beskrivelse: Google Maps-baseret kortløsning.\r\n * Status: er noget af det ældste kode, vi har kørende. Virker som sådan fint nok, men ved et større kortprojekt ville det være oplagt at få omskrevet\r\n */\n\nvar GOOGLE_MAPS_API_KEY = \"AIzaSyBP04DSgKVcqkYGO_Xb4GgqXHMzRO_2jzo\";\n\nAU.maps = {\n loadGoogleMapsScript: function loadGoogleMapsScript() {\n // Check if the global variable for loading Google Maps is defined, if not default to false\n var shouldLoadGoogleMapsScript = typeof window.loadGoogleMapsScript !== 'undefined' ? window.loadGoogleMapsScript : false;\n var shouldLoadGoogleMapsScriptAsync = typeof window.loadGoogleMapsScriptAsync !== 'undefined' ? window.loadGoogleMapsScriptAsync : true; // Default to true for async\n\n // Early return if we should not load the Google Maps script\n if (shouldLoadGoogleMapsScript) {\n console.log(\"Google Maps script will be loaded manually on this page\");\n } else {\n return;\n }\n\n // Construct the base URL with the API key\n var scriptUrl = 'https://maps.googleapis.com/maps/api/js?key=' + GOOGLE_MAPS_API_KEY;\n\n // Conditionally add the async loading parameter to the URL\n if (shouldLoadGoogleMapsScriptAsync) {\n scriptUrl += '&loading=async';\n }\n\n scriptUrl += '&callback=AU.maps.googleMapsScriptCallback';\n\n // Create a script element and set the constructed URL\n var script = document.createElement('script');\n script.src = scriptUrl;\n\n // Handle the script load success\n script.onload = function () {\n console.log(\"Google Maps script has been loaded successfully. Now waiting for the callback to initialize.\");\n };\n\n // Handle script load failure and capture details\n script.onerror = function (event) {\n console.error(\"Error loading Google Maps script:\", event);\n console.error(\"Script URL:\", event.target.src); // URL of the failed script\n };\n\n // Append the script to the document's head to initiate the load\n document.head.appendChild(script);\n },\n // If the Google maps script is loaded, we use this callback to dispatch an googleMapsScriptLoadedEvent event\n googleMapsScriptLoaded: false,\n googleMapsScriptCallback: function googleMapsScriptCallback() {\n AU.maps.googleMapsScriptLoaded = true;\n console.log(\"Google Maps script callback has been executed. Google Maps is ready for use.\");\n\n // Dispatch a custom event to notify that Google Maps is ready\n var event = new CustomEvent('googleMapsScriptLoadedEvent');\n window.dispatchEvent(event);\n },\n create: function create(container, width, height, zoomLevel, center, scrollWheel, draggable, clickable, streetView, pco, zco, svco) {\n\n var mapOptions = {\n zoom: zoomLevel,\n center: center,\n scrollwheel: AU.helpers.isMobileDevice() || AU.responsive.state.NAME == 'PHONE' ? false : scrollWheel,\n draggable: draggable,\n clickable: clickable,\n streetViewControl: streetView,\n mapTypeControlOptions: {\n mapTypeIds: ['default', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.HYBRID],\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,\n position: google.maps.ControlPosition.RIGHT_TOP\n },\n mapTypeId: google.maps.MapTypeId.ROADMAP,\n panControlOptions: !pco ? {} : pco,\n zoomControlOptions: !zco ? {} : zco,\n streetViewControlOptions: !svco ? {} : svco\n };\n\n // Opretter kort\n var map = new google.maps.Map(container, mapOptions);\n\n // Kortets størrelse sættes\n container.style.width = !isNaN(width) ? width + 'px' : width;\n container.style.height = !isNaN(height) ? height + 'px' : height;\n\n return map;\n },\n setBounds: function setBounds(map, markers) {\n var bounds = new google.maps.LatLngBounds();\n for (var i = 0; i < markers.length; i++) {\n for (var j = 0; j < markers[i].length; j++) {\n bounds.extend(markers[i][j].position);\n }\n }\n map.fitBounds(bounds);\n },\n marker: {\n add: function add(map, point, markerIcon, markerDraggable, markerClickable, markerPanTo, markerClickZoom, markerClickZoomLevel, infoWindow, windowContent, title, id) {\n var marker = new google.maps.Marker({\n position: point,\n map: map,\n icon: markerIcon,\n draggable: markerDraggable,\n title: title\n });\n\n if (typeof id !== 'undefined') {\n marker.set('id', id);\n }\n\n // Listeners tilføjes markør\n google.maps.event.addListener(marker, 'click', function () {\n if (windowContent !== '') {\n // Infowindow åbner ved klik\n infoWindow.open(map, this);\n infoWindow.setContent(windowContent);\n }\n\n if (markerClickable) {\n if (markerPanTo) {\n map.panTo(this.getPosition());\n }\n\n if (!markerClickZoom || map.getZoom() > markerClickZoomLevel) {\n map.setZoom(map.getZoom());\n } else {\n map.setZoom(markerClickZoomLevel);\n }\n }\n });\n\n // At flytte en markør betragtes som et klik på kortet (det giver tilsyneladende ingen problemer, skulle der ikke være defineret click-event på kortet)\n if (markerDraggable) {\n google.maps.event.addListener(marker, 'dragend', function (point) {\n google.maps.event.trigger(map, 'click', point);\n });\n }\n\n return marker;\n }\n },\n route: {\n destinationFrom: false,\n destinationTo: false,\n directionsDisplay: null,\n directionsService: null,\n calc: function calc(map, from, to, travelMode, directionsService, directionsDisplay, waypointLocations) {\n if (from !== '') {\n var waypoints = [];\n if (typeof waypointLocations !== 'undefined') {\n for (var i = 0; i < waypointLocations.length; i++) {\n waypoints.push({\n location: waypointLocations[i],\n stopover: false\n });\n }\n }\n\n var request = {\n origin: from,\n destination: to,\n travelMode: travelMode,\n waypoints: waypoints\n };\n\n directionsService.route(request, function (response, status) {\n if (status === google.maps.DirectionsStatus.OK) {\n if (directionsDisplay.getMap() === null) {\n directionsDisplay.setMap(map);\n }\n directionsDisplay.setDirections(response);\n } else {\n window.alert(status);\n }\n });\n }\n },\n createDirectionObjects: function createDirectionObjects(map, container) {\n var rendererOptions = {\n draggable: true\n };\n\n var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);\n var panel = container;\n\n directionsDisplay.setMap(map);\n directionsDisplay.setPanel(panel);\n\n return directionsDisplay;\n }\n },\n geocodePersonAddress: function geocodePersonAddress(map, options, icon, address, centerMap, infoWindow, windowContent, func) {\n AU.maps.geocoder.geocode({\n 'address': address\n }, function (results, status) {\n if (status === google.maps.GeocoderStatus.OK) {\n var point = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());\n var marker = AU.maps.marker.add(map, point, icon, options.markerDrag, options.markerClick, options.clickPanTo, options.clickZoom, options.clickZoomLevel, infoWindow, windowContent, '');\n\n if (typeof func === 'function') {\n func(marker, point, centerMap, infoWindow, windowContent);\n }\n }\n });\n },\n helpers: {\n getDistanceBetweenPoints: function getDistanceBetweenPoints(point1, point2) {\n return google.maps.geometry.spherical.computeDistanceBetween(point1, point2);\n },\n convertFromLatLng: function convertFromLatLng(coord) {\n return Math.round(coord * 1000000);\n },\n convertToLatLng: function convertToLatLng(coord) {\n var c;\n if (coord.length === 7) {\n c = coord.substring(0, 1) + '.' + coord.substring(1);\n }\n if (coord.length === 8) {\n c = coord.substring(0, 2) + '.' + coord.substring(2);\n }\n if (coord.length === 9) {\n c = coord.substring(0, 3) + '.' + coord.substring(3);\n }\n return c;\n },\n getCurrentDate: function getCurrentDate() {\n var d = new Date();\n var date = d.getDate();\n var month = d.getMonth() + 1;\n var currentDate = (date < 10 ? '0' + date : date) + '.' + (month < 10 ? '0' + month : month) + '.' + ('' + d.getFullYear()).substring(2);\n return currentDate;\n },\n getCurrentTime: function getCurrentTime() {\n var d = new Date();\n var hours = d.getHours();\n var minutes = d.getMinutes();\n var currentTime = (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes);\n return currentTime;\n },\n sortSelect: function sortSelect(element) {\n $(element).each(function () {\n var selectedValue = $(this).val();\n $(this).html($('option', $(this)).sort(function (a, b) {\n return a.text === b.text ? 0 : a.text < b.text ? -1 : 1;\n }));\n $(this).val(selectedValue);\n });\n },\n sortAlphaObj: function sortAlphaObj(a, b) {\n if (typeof a.name !== 'undefined' && typeof b.name !== 'undefined') {\n return a.name > b.name ? 1 : -1;\n }\n return 0;\n }\n },\n infoWindow: null,\n geocoder: null\n};\n\n// Slut på det generelle (\"biblioteket\") – nedenstående omhandler de små kort, som (primært) sidder på institutsiderne\n\nvar maps = [];\n\nAU.maps.single = {\n options: {\n image: '',\n markerDrag: !window._markerDrag ? false : window._markerDrag,\n markerClick: !window._markerClick ? true : window._markerClick,\n clickPanTo: !window._clickPanTo ? false : window._clickPanTo,\n clickZoom: !window._clickZoom ? false : window._clickZoom,\n clickZoomLevel: window._clickZoomLevel || 12,\n defaultZoomLevel: window._defaultZoomLevel || 16,\n scrollWheel: !window._scrollWheel ? false : window._scrollWheel,\n draggable: !window._draggable ? true : window._draggable,\n clickable: !window._clickable ? true : window._clickable,\n streetView: !window._streetView ? false : window._streetView,\n centerLat: window._centerLat || 56.20,\n centerLng: window._centerLng || 10.50,\n mapWidth: '99.5%',\n mapHeight: 275\n },\n center: null,\n maps: window.maps,\n mapDivs: [],\n firstMapLoaded: false,\n findFirstMap: function findFirstMap() {\n var i = 1;\n var firstMap;\n do {\n firstMap = document.getElementById('au_map' + (i === 1 ? '' : i));\n i++;\n } while (!firstMap && i <= 2);\n\n return firstMap;\n },\n loadMaps: function loadMaps() {\n // Enten populeres kortet med manuelle punkter (fra sourcen) eller også henter vi fra datakilde (iPure / XML)\n if (AU.maps.single.maps.length > 0) {\n AU.maps.single.init();\n } else {\n if (typeof window.path !== 'undefined') {\n\n var dataFunc = function dataFunc(data) {\n var locations = data.locations;\n var combinedPoints = [];\n var name;\n for (var l = 0; l < locations.length; l++) {\n name = locations[l].names[0].name;\n var lat = locations[l].latitude;\n var lng = locations[l].longitude;\n var url = locations[l].url;\n var text = locations[l].text;\n\n var points = [];\n var point = {\n latitude: lat,\n longitude: lng,\n title: name,\n text: text\n };\n points.push(point);\n combinedPoints.push(point);\n\n if ($('#au_map').length > 0) {\n AU.maps.single.maps.push({\n name: name,\n name_en: name,\n container: '#au_map',\n mapWidth: AU.maps.single.options.mapWidth,\n mapHeight: AU.maps.single.options.mapHeight,\n href: url,\n points: points,\n switchmode: 'dropdown',\n load: false\n });\n }\n }\n\n if ($('#au_map2').length > 0) {\n AU.maps.single.maps.push({\n name: name,\n name_en: name,\n container: '#au_map2',\n mapWidth: AU.maps.single.options.mapWidth,\n mapHeight: AU.maps.single.options.mapHeight,\n href: '',\n points: combinedPoints,\n load: true\n });\n }\n\n AU.maps.single.init();\n };\n\n $.getJSON(window.path, function (data) {\n dataFunc(data);\n });\n }\n }\n\n AU.maps.single.firstMapLoaded = true;\n },\n init: function init() {\n\n AU.maps.route.directionsService = new google.maps.DirectionsService();\n AU.maps.infoWindow = new google.maps.InfoWindow();\n AU.maps.geocoder = new google.maps.Geocoder();\n\n var divUsed = false;\n for (var i = 0; i < AU.maps.single.maps.length; i++) {\n\n var currentMap = AU.maps.single.maps[i];\n\n currentMap.map = null;\n currentMap.markers = [];\n\n // Finder ud af, om vi allerede har brugt den angivne div\n for (var k = 0; k < AU.maps.single.mapDivs.length; k++) {\n if (AU.maps.single.mapDivs[k] === currentMap.container) {\n divUsed = true;\n break;\n } else {\n divUsed = false;\n }\n }\n\n // Hvis vi ikke har brugt div'en, opretter vi kortet\n if (!divUsed) {\n var mapContainer = $(currentMap.container).get(0);\n var options = AU.maps.single.options;\n\n currentMap.map = AU.maps.create(mapContainer, currentMap.mapWidth, currentMap.mapHeight, options.defaultZoomLevel, AU.maps.single.center, options.scrollWheel, options.draggable, options.clickable, options.streetView);\n AU.maps.single.mapDivs.push(AU.maps.single.maps[i].container);\n\n if (currentMap.load) {\n this.setMapContent(currentMap, false);\n }\n\n $(currentMap.container).after($('', {\n 'class': 'au_maps_switchlink'\n }));\n\n if (typeof currentMap.switchmode !== 'undefined' && currentMap.switchmode === 'dropdown') {\n $(currentMap.container + ' + div').append($(''));\n }\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\n/**\r\n * Titel: INIT\r\n * Beskrivelse: entry point for initialisering af funktioner fra de øvrige scripts - vi bestræber os på kun at have én jQuery(document).ready i \"master scriptet\"\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\n\n(function () {\n AU.maps.loadGoogleMapsScript();\n AU.cookies.initCookieScript();\n\n jQuery(document).ready(function () {\n\n jQuery(document).foundation(); // Fordi det er fuldstændig utænkeligt, at vi kan få fjernet Prototype fra pure.au.dk...\n\n if (window.AUCDNPATH) {\n AU.cdn = window.AUCDNPATH;\n }\n\n AU.bss = document.querySelector('body').classList.contains('aarhus-bss');\n\n // Vi bruger lang attributten til at afgøre, hvilket sprog vi skal bruge\n var langAttr = document.querySelector('html').getAttribute('lang');\n if (typeof langAttr !== 'undefined' && langAttr.indexOf('da') === -1) {\n AU.pageLang = 'en';\n AU.ipure.source.searchDetailsCrossSite = '//ipure.nfit.au.dk/current/en_GB/lno/';\n }\n\n var n = AU.navigation;\n\n n.menu.setClick();\n n.menu.setUtility();\n n.menu.setBreadcrumb();\n n.menu.addExtraMenuItem();\n n.menu.setTopBar();\n if (!AU.bss) {\n n.search.setClick();\n }\n n.frontpage.setTargetGroups();\n\n AU.alphabox.boxes.push(AU.pageLang === 'da' ? DEFAULT_staff_staffservice_da : DEFAULT_staff_staffservice_en);\n\n AU.cookies.strings.header = AU.pageLang === 'da' ? 'Hvis du klikker videre på siden, accepterer du vores brug af cookies.' : 'By continuing to use this site you agree to our cookie policy.';\n AU.cookies.strings.paragraph = AU.pageLang === 'da' ? 'Aarhus Universitet bruger cookies til at udarbejde statistik og i forbindelse med annoncering og services fra sociale medier, som vi benytter. Klikker du videre på siden, accepterer du, at der sættes cookies til disse formål. Læs mere om cookies på au.dk, herunder hvordan du fravælger brugen af cookies.Læs mere.' : 'Aarhus University uses cookies to collect statistical data and in connection with advertising and services from social media that we use. By continuing to use this site, you agree to our use of cookies for these purposes. Read more about cookies on au.dk and how to block these.Read more.';\n AU.cookies.strings.button = AU.pageLang === 'da' ? 'Acceptér og luk' : 'Accept and close';\n\n AU.cookies.init();\n AU.design.setFocusFieldIds();\n AU.design.setBannerElementsReady();\n AU.design.setBuildingLinks('.address p');\n AU.design.setCollapse();\n AU.design.setHero();\n AU.design.setMagnificPopup();\n AU.design.setTopWarning();\n\n var s = AU.social;\n if (jQuery('.au_news-single-item .addthis_toolbox').length > 0) {\n jQuery('.au_news-single-item').css('position', 'relative');\n s.disableAddThisForOldNews();\n s.sharers.push(s.newsSharer);\n }\n\n s.init();\n\n AU.databox.init();\n AU.flowbox.init();\n AU.alphabox.init();\n AU.piechart.init();\n AU.news.feeds = window.newsLists;\n AU.news.init();\n\n if (window.cludoDanishPath && window.cludoEnglishPath && (typeof window.defaultTracking === 'undefined' || window.defaultTracking)) {\n AU.search.init(AU.pageLang == 'da' ? window.cludoDanishPath : window.cludoEnglishPath);\n }\n\n var cmForms = jQuery('.js-cm-form');\n cmForms.each(function (i, form) {\n var privacyEmail = jQuery('input[name=\"cm-privacy-email\"]', form);\n if (privacyEmail.length === 0) {\n jQuery(form).append('');\n jQuery(form).append('');\n }\n });\n\n // Alle funktioner, som er pushet til ready-objektet, løbes igennem\n for (var i = 0; i < AU.ready.length; i++) {\n if (typeof AU.ready[i] === 'function') {\n try {\n // Attempt to execute the function\n AU.ready[i]();\n } catch (e) {\n // Catch any error and log it, but don't stop execution\n console.error(\"Error in AU.ready function loop (au-init.js) at index: \" + i, e);\n }\n }\n }\n\n /*\r\n if (typeof findWidgetInit === 'function') {\r\n var dropdownWidgetLoaded = false;\r\n jQuery(document).on('show.zf.dropdown', function () {\r\n if (!dropdownWidgetLoaded) {\r\n findWidgetInit('header .find-container');\r\n dropdownWidgetLoaded = true;\r\n }\r\n });\r\n }\r\n */\n\n var findBtn = document.querySelector('header .find-button');\n if (findBtn) {\n findBtn.setAttribute('href', AU.pageLang === 'da' ? 'https://www.au.dk/kort/' : 'https://www.au.dk/en/map/');\n }\n\n if ((typeof AU.basic === 'undefined' || !AU.basic) && (typeof window.defaultTracking === 'undefined' || window.defaultTracking)) {\n // Siteimprove\n (function () {\n var sz = document.createElement('script');\n sz.type = 'text/plain';\n sz.async = true;\n sz.setAttribute('data-cookiescript', 'accepted');\n sz.setAttribute('data-cookiecategory', 'performance');\n sz.src = '//siteimproveanalytics.com/js/siteanalyze_4573657.js';\n var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(sz, s);\n })();\n }\n });\n\n jQuery(window).on('load', function () {\n AU.design.setBannerElementsLoad();\n\n for (var i = 0; i < AU.load.length; i++) {\n if (typeof AU.load[i] === 'function') {\n AU.load[i]();\n }\n }\n });\n\n jQuery(window).on('resize', function () {\n for (var i = 0; i < AU.resize.length; i++) {\n if (typeof AU.resize[i] === 'function') {\n AU.resize[i]();\n }\n }\n });\n\n jQuery(window).on('scroll', function () {\n for (var i = 0; i < AU.scroll.length; i++) {\n if (typeof AU.scroll[i] === 'function') {\n AU.scroll[i]();\n }\n }\n });\n})();","/**\r\n * Titel: FALLBACK\r\n * Beskrivelse: består af den ældgamle 'pingAnalytics' til GA-tracking og nogle ukendte/LF-udviklede funktioner, der kan ske at være i brug rundt omkring...\r\n * Status: Do. Not. Touch.\r\n */\r\n\r\nfunction pressed(url) {\r\n location.href = url;\r\n}\r\n\r\nfunction pres(url) {\r\n location.href = url;\r\n}\r\n\r\nfunction replaceall(s, x, y) {\r\n if (x.length > 0) {\r\n var found = s.indexOf(x);\r\n while (found >= 0) {\r\n s = s.substring(0, found) + y + s.substring(found + x.length, s.length);\r\n found = s.indexOf(x, found + y.length);\r\n }\r\n }\r\n return s;\r\n}\r\n\r\nfunction multipressed(xx, urlPattern, StartValue) {\r\n var url = urlPattern;\r\n var allow = StartValue;\r\n var OK = true;\r\n for (var i = 0; i < xx.elements.length; i++) {\r\n if (xx.elements[i].type === 'select-one') {\r\n if (OK) {\r\n OK = (xx.elements[i].selectedIndex >= allow);\r\n }\r\n url = replaceall(url, '$' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\r\n url = replaceall(url, '¤' + (i + 1), xx.elements[i].options[xx.elements[i].selectedIndex].value);\r\n }\r\n }\r\n url = url.toLowerCase();\r\n if (OK) {\r\n location.href = url;\r\n } else {\r\n window.alert('Vælg en værdi i alle felter!');\r\n }\r\n}\r\n\r\n// En kommentar","/**\r\n * @author TRH\r\n */\r\n\r\n/*** GLOBALT AU OBJEKT ***/\r\n\r\nvar AU = {\r\n pageLang: 'da', // Default sprog\r\n cdn: 'https://cdn.au.dk',\r\n version: '202204211100',\r\n bss: false,\r\n ready: [],\r\n addReadyFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the ready array\r\n if (AU.ready.indexOf(fn) === -1) {\r\n AU.ready.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.ready and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.ready.\");\r\n }\r\n },\r\n load: [],\r\n addLoadFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the load array\r\n if (AU.load.indexOf(fn) === -1) {\r\n AU.load.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.load and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.load.\");\r\n }\r\n },\r\n resize: [],\r\n addResizeFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the resize array\r\n if (AU.resize.indexOf(fn) === -1) {\r\n AU.resize.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.resize and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.resize.\");\r\n }\r\n },\r\n scroll: [],\r\n addScrollFunction: function(fn) {\r\n if (typeof fn === 'function') {\r\n // Check if the function reference already exists in the scroll array\r\n if (AU.scroll.indexOf(fn) === -1) {\r\n AU.scroll.push(fn);\r\n } else {\r\n console.log(\"Function already exists in AU.scroll and will not be added again.\");\r\n }\r\n } else {\r\n console.error(\"Attempted to add a non-function to AU.scroll.\");\r\n }\r\n },\r\n navigation: {}\r\n};","/**\r\n * Titel: HELPERS\r\n * Beskrivelse: hjælpemetoder som kan anvendes på tværs af alle scripts\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\r\n\r\nAU.helpers = {\r\n getUnicodeKey: function (e) {\r\n var unicode = e.keyCode ? e.keyCode : e.charCode;\r\n return unicode;\r\n },\r\n rewriteLink: function (text) {\r\n return text.trim().toLowerCase().replace(/ /g, '_').replace(/æ/g, 'ae').replace(/ø/g, 'oe').replace(/å/g, 'aa');\r\n },\r\n getQuerystring: function (key, default_) {\r\n if (!default_) {\r\n default_ = '';\r\n }\r\n\r\n key = key.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\r\n var regex = new RegExp(\"[\\\\?&]\" + key + \"=([^]*)\");\r\n\r\n var qs = regex.exec(window.location.href);\r\n\r\n if (qs === null) {\r\n return default_;\r\n } else {\r\n return qs[1];\r\n }\r\n },\r\n getInternetExplorerVersion: function () {\r\n var rv = -1;\r\n if (navigator.userAgent.indexOf('Trident') > -1) {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"rv:([0-9]{1,}[.0-9]{0,})\");\r\n if (re.exec(ua) !== null) {\r\n rv = parseFloat(RegExp.$1);\r\n }\r\n }\r\n return rv;\r\n },\r\n isMobileDevice: function () {\r\n return (/Mobile|iP(hone|od|ad)|Android|IEMobile/i).test(navigator.userAgent);\r\n },\r\n getXML: function (source, callback) {\r\n jQuery.ajax({\r\n type: 'GET',\r\n url: source,\r\n dataType: 'xml',\r\n success: function (data) {\r\n if (typeof callback === 'function') {\r\n callback(data);\r\n }\r\n }\r\n });\r\n },\r\n isElementInViewport: function (element) {\r\n if (element === null) {\r\n return false;\r\n }\r\n\r\n var rect = element.getBoundingClientRect();\r\n\r\n return (rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth));\r\n },\r\n isElementPartlyInViewport: function (element) {\r\n var top = element.offsetTop;\r\n var left = element.offsetLeft;\r\n var width = element.offsetWidth;\r\n var height = element.offsetHeight;\r\n\r\n while (element.offsetParent) {\r\n element = element.offsetParent;\r\n top += element.offsetTop;\r\n left += element.offsetLeft;\r\n }\r\n\r\n return (\r\n top < (window.pageYOffset + window.innerHeight) &&\r\n left < (window.pageXOffset + window.innerWidth) &&\r\n (top + height) > window.pageYOffset &&\r\n (left + width) > window.pageXOffset\r\n );\r\n },\r\n trimText: function (label, amount, end) {\r\n if (label.length > amount) {\r\n return label.substring(0, amount) + end;\r\n }\r\n\r\n return label;\r\n },\r\n validateEmail: function (email) {\r\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(email);\r\n },\r\n componentToHex: function (c) {\r\n var hex = c.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n },\r\n rgbToHex: function (r, g, b) {\r\n return this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\r\n },\r\n getPageContent: function (url, retrieveSelector, insertSelector, callback) {\r\n var urlAllowed = function (url) {\r\n var protocolAndHost = location.protocol + '//' + location.host;\r\n return url.indexOf(protocolAndHost) === 0;\r\n };\r\n\r\n var insertElement = jQuery(insertSelector);\r\n if (urlAllowed(url)) {\r\n insertElement.load(url + ' ' + retrieveSelector, function () {\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n accentMap: {\r\n 'é': 'e',\r\n 'ä': 'æ',\r\n 'ö': 'ø',\r\n 'á': 'a',\r\n 'ü': 'y'\r\n },\r\n normalizeAccents: function (term, accentMap) {\r\n if (!accentMap) {\r\n accentMap = this.accentMap;\r\n }\r\n\r\n var ret = '';\r\n for (var i = 0; i < term.length; i++) {\r\n ret += accentMap[term.charAt(i)] || term.charAt(i);\r\n }\r\n return ret;\r\n }\r\n};","/**\r\n * Titel: NAVIGATION\r\n * Beskrivelse: initialisering af menuer, fade (som stadig bruges til news), brødkrummer m.m.\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\r\n\r\nAU.navigation.menu = {\r\n setClick: function () {\r\n jQuery('button.menu-icon').on('click', function () {\r\n var headerMenu = jQuery(this).parents('.header-menu');\r\n if (headerMenu.hasClass('open')) {\r\n headerMenu.removeClass('open');\r\n if (!AU.bss) {\r\n jQuery('.search').removeClass('hide');\r\n }\r\n } else {\r\n headerMenu.addClass('open');\r\n if (!AU.bss) {\r\n jQuery('.search').addClass('hide');\r\n }\r\n }\r\n });\r\n },\r\n setUtility: function () {\r\n jQuery(document).on('show.zf.dropdown', 'header .dropdown-pane', function () {\r\n AU.databox.init();\r\n AU.alphabox.init();\r\n });\r\n },\r\n setBreadcrumb: function () {\r\n var bc = jQuery('#au_breadcrumb');\r\n var crumbs = jQuery('> a', bc);\r\n var crumbCutOff = 3;\r\n if (crumbs.length > crumbCutOff) {\r\n bc.addClass('collapse');\r\n crumbs.eq(0).after(' ');\r\n jQuery('.bc-expand span').on('click', function () {\r\n bc.toggleClass('collapse');\r\n });\r\n }\r\n },\r\n addExtraMenuItem: function () { // Fix til den mobile menu, hvor der indsættes et ekstra top-level menupunkt\r\n var topLevelMenuItems = jQuery('.top-bar > div > ul.menu li.has-submenu');\r\n topLevelMenuItems.each(function () {\r\n var topLevelMenuItem = jQuery('> a', this);\r\n var topLevelSubMenu = jQuery('ul.submenu', this);\r\n topLevelSubMenu.prepend('{1}
');\r\n var globalFooter = document.querySelector('footer.global');\r\n if (globalFooter) {\r\n globalFooter.insertAdjacentElement('afterend', alertElement);\r\n alertElement.style.display = 'none';\r\n this.alertElement = alertElement;\r\n }\r\n\r\n var allowCookies = this.get('allow_cookies');\r\n if (allowCookies === null) {\r\n this.alert();\r\n }\r\n }\r\n },\r\n initCookieScript: function () {\r\n if (typeof window.cookieScriptId !== 'undefined') {\r\n // Insert scripts and CSS for Pop Up\r\n var head = document.head;\r\n var cookieScriptManipulationCode = document.createElement('script');\r\n cookieScriptManipulationCode.setAttribute('src', '//cdn.au.dk/res/cookiescript/cookie-modal.min.js?a=' + (typeof window.cookieScriptVersion !== 'undefined' ? window.cookieScriptVersion : '1'));\r\n cookieScriptManipulationCode.setAttribute('charset', 'UTF-8');\r\n cookieScriptManipulationCode.setAttribute('type', 'text/javascript');\r\n head.insertBefore(cookieScriptManipulationCode, head.firstElementChild);\r\n }\r\n },\r\n alert: function () {\r\n if (this.alertElement !== null) {\r\n this.alertElement.style.display = 'block';\r\n\r\n document.querySelector('#au_cookiesalert_yes button').addEventListener('click', function (e) {\r\n e.preventDefault();\r\n AU.cookies.accept(AU.cookies.noAlertPeriod, true);\r\n });\r\n }\r\n },\r\n accept: function (duration, byGUI) {\r\n var path = location.host.indexOf('au.dk') > -1 ? undefined : ';path=/';\r\n this.set('allow_cookies', 'true', duration, path);\r\n if (byGUI) {\r\n this.alertElement.style.display = 'none';\r\n }\r\n }\r\n};","/**\r\n * Titel: DESIGN\r\n * Beskrivelse: metoder som udbedrer en række \"shortcomings\" i designet eller tilføjer ekstra features til elementer\r\n * Status: er en blanding af nyt og gammelt. ES5-syntax hele vejen igennem\r\n */\r\n\r\nAU.design = {\r\n setFocusFieldIds: function () {\r\n jQuery('.au_focus').each(function (i) {\r\n if (!jQuery(this).attr('id')) {\r\n jQuery(this).attr('id', 'focusid_' + i);\r\n }\r\n });\r\n },\r\n setBuildingLinks: function (elementToSearchSelector) {\r\n var elementToSearch = jQuery(elementToSearchSelector);\r\n\r\n if (elementToSearch.length > 0) {\r\n var mapUrl = AU.pageLang === \"da\" ? '//www.au.dk/kort/' : '//www.au.dk/en/map/';\r\n var buildingPhrase = AU.pageLang === \"da\" ? 'bygning' : 'building';\r\n var re = new RegExp('(' + buildingPhrase + ' (\\\\d{4}))', 'ig');\r\n jQuery.each(elementToSearch, function () {\r\n jQuery(this).html(jQuery(this).html().replace(re, '$1'));\r\n });\r\n }\r\n },\r\n onCollapseOpen: [],\r\n onCollapseClose: [],\r\n setCollapse: function () {\r\n\r\n var openEvent = document.createEvent('Event');\r\n openEvent.initEvent('collapsible-open', true, true);\r\n\r\n var closeEvent = document.createEvent('Event');\r\n closeEvent.initEvent('collapsible-close', true, true);\r\n\r\n var collapsibles = jQuery('.csc-frame.au_collapsible');\r\n collapsibles.each(function () {\r\n var me = jQuery(this);\r\n var domElement = me.get(0);\r\n var header = jQuery('> .csc-header', me);\r\n\r\n header.unbind('click').on('click', function () {\r\n me.toggleClass('au_collapsed');\r\n if (me.hasClass('au_collapsed')) {\r\n domElement.dispatchEvent(closeEvent);\r\n } else {\r\n domElement.dispatchEvent(openEvent);\r\n }\r\n });\r\n\r\n var d = AU.design;\r\n domElement.addEventListener('collapsible-open', function (e) {\r\n for (var i = 0; i < d.onCollapseOpen.length; i++) {\r\n if (typeof d.onCollapseOpen[i] === 'function') {\r\n d.onCollapseOpen[i](e.target);\r\n }\r\n }\r\n }, false);\r\n\r\n\r\n domElement.addEventListener('collapsible-close', function (e) {\r\n for (var i = 0; i < d.onCollapseClose.length; i++) {\r\n if (typeof d.onCollapseClose[i] === 'function') {\r\n d.onCollapseClose[i](e.target);\r\n }\r\n }\r\n }, false);\r\n });\r\n\r\n this.openCollapsibleFromHash(location.hash);\r\n\r\n jQuery(window).on('hashchange', function () {\r\n AU.design.openCollapsibleFromHash(location.hash);\r\n });\r\n },\r\n openCollapsibleFromHash: function (hash) {\r\n if (hash.indexOf('c') === 1) {\r\n jQuery(hash + '.csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible, ' + hash + ' > .csc-frame.au_collapsible').removeClass('au_collapsed');\r\n jQuery(hash).parents('.au_collapsible').removeClass('au_collapsed');\r\n document.querySelector(hash).scrollIntoView();\r\n }\r\n },\r\n grayscale: function (src) {\r\n try {\r\n var supportsCanvas = !!document.createElement('canvas').getContext;\r\n if (supportsCanvas) {\r\n var canvas = document.createElement('canvas'),\r\n context = canvas.getContext('2d'),\r\n imageData, px, length, i = 0, gray,\r\n img = new Image();\r\n\r\n img.src = src;\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n context.drawImage(img, 0, 0);\r\n\r\n imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n px = imageData.data;\r\n length = px.length;\r\n\r\n for (; i < length; i += 4) {\r\n gray = px[i] * 0.3 + px[i + 1] * 0.59 + px[i + 2] * 0.11;\r\n px[i] = px[i + 1] = px[i + 2] = gray;\r\n }\r\n\r\n context.putImageData(imageData, 0, 0);\r\n return canvas.toDataURL();\r\n } else {\r\n return src;\r\n }\r\n } catch(err) {\r\n console.log(err);\r\n return src;\r\n }\r\n },\r\n setBannerElementsReady: function () {\r\n jQuery('.aubanner a').hover(\r\n function () {\r\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 1 }, 200);\r\n },\r\n function () {\r\n jQuery(this).find('.gotcolors').stop().animate({ opacity: 0 }, 500);\r\n }\r\n );\r\n },\r\n setBannerElementsLoad: function () {\r\n jQuery('.aubanner:not(.aubanner-2) img').each(function () { // Fordi det er fuldstændig utænkeligt, at vi kan få fjernet Prototype fra pure.au.dk...\r\n var bc = jQuery('.aubanner-content', jQuery(this).parents('.aubanner'));\r\n bc.css('background-image', \"url('\" + AU.design.grayscale(this.src) + \"')\");\r\n }).animate({ opacity: 1 }, 500);\r\n },\r\n setHero: function () {\r\n var hero = jQuery('.hero');\r\n if (hero.length > 0) {\r\n jQuery(window).scroll(function () {\r\n var x = jQuery(this).scrollTop() + (jQuery('body').hasClass('layout13') ? 0 : -200);\r\n hero.css('background-position-y', parseInt(x / 10) + 'px');\r\n });\r\n }\r\n },\r\n setMagnificPopup: function () {\r\n var lightbox = jQuery('.csc-textpic a[rel*=\"lightbox\"], .image a[rel*=\"lightbox\"]');\r\n\r\n // http://stackoverflow.com/questions/6900958/using-jquery-to-perform-a-function-on-elements-with-unique-rel-attribute\r\n var rels = {};\r\n lightbox.each(function () {\r\n var r = jQuery(this).attr('rel');\r\n rels[r] = 1;\r\n });\r\n\r\n rels = Object.keys(rels);\r\n jQuery.each(rels, function (index, value) {\r\n jQuery('a[rel=\"' + value + '\"]').magnificPopup({\r\n type: 'image',\r\n gallery: {\r\n enabled: true\r\n },\r\n modal: false\r\n });\r\n });\r\n\r\n var newsImgs = jQuery('.au_news-single-sub-images a, .au_news-single-img a, .news-set1-img1all a');\r\n newsImgs.magnificPopup({\r\n type: 'image',\r\n gallery: {\r\n enabled: true\r\n },\r\n modal: false\r\n });\r\n },\r\n setTopWarning: function () {\r\n if (window.topWarning) {\r\n jQuery('body').prepend(jQuery('', {\r\n 'class': 'ie-warning',\r\n 'html': AU.pageLang == 'da' ? window.topWarningTextDa : window.topWarningTextEn\r\n }));\r\n }\r\n }\r\n};","AU.basic = true;\r\n\r\nAU.ipure = {\r\n source: {\r\n\r\n }\r\n};\r\n\r\nAU.design.setMagnificPopup = function () {\r\n return;\r\n};\r\n\r\nAU.databox = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.flowbox = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.alphabox = {\r\n boxes: [],\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.piechart = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.social = {\r\n init: function () {\r\n return;\r\n }\r\n};\r\n\r\nAU.news = {\r\n feeds: [],\r\n init: function () {\r\n return;\r\n }\r\n};","/**\r\n * Titel: RESPONSIVE\r\n * Beskrivelse: indeholder efterhånden primært logik til omsættelse af tabeller til responsiv opførsel (lister), herunder studiediagrammerne. Derudover er der en lille smule logik til det nye design\r\n * Status: er kun i nogen grad omskrevet fra 2011/2015-udgaven\r\n */\r\n\r\nAU.responsive = {\r\n state: null,\r\n stateHistory: [],\r\n modes: {\r\n PHONE: {\r\n ID: 0,\r\n NAME: 'PHONE',\r\n MAX: 640\r\n },\r\n TABLET: {\r\n ID: 1,\r\n NAME: 'TABLET',\r\n MAX: 1024\r\n },\r\n DESKTOP: {\r\n ID: 2,\r\n NAME: 'DESKTOP'\r\n }\r\n },\r\n detectDevice: function () {\r\n\r\n var state = null;\r\n var modes = AU.responsive.modes;\r\n if (Foundation.MediaQuery.current === 'small') {\r\n state = modes.PHONE;\r\n }\r\n else if (Foundation.MediaQuery.current === 'medium') {\r\n state = modes.TABLET;\r\n }\r\n else {\r\n state = modes.DESKTOP;\r\n }\r\n\r\n if (state !== AU.responsive.state) {\r\n AU.responsive.state = state;\r\n AU.responsive.stateHistory.push(state.NAME);\r\n console.log(state.NAME);\r\n AU.responsive.setMarkup();\r\n }\r\n },\r\n markupRenderFunctions: [],\r\n runMarkupFunctions: function () {\r\n for (var i = 0; i < this.markupRenderFunctions.length; i++) {\r\n if (typeof this.markupRenderFunctions[i] === 'function') {\r\n this.markupRenderFunctions[i]();\r\n }\r\n }\r\n },\r\n setMarkup: function () {\r\n var state = AU.responsive.state;\r\n\r\n var utilityLinks = jQuery('.utility-links');\r\n var headerMenu = jQuery('.header-menu');\r\n var sectionHeader = jQuery('.section-header .logo');\r\n\r\n var pageNav = jQuery('#au_section_nav_inner_list');\r\n var titleBar = jQuery('.title-bar');\r\n var menuTitle = jQuery('.menu-title');\r\n var leftMenu = jQuery('.left-menu');\r\n var tablesScroll = jQuery('table.au_responsive_table_scroll');\r\n\r\n if (state.NAME === 'PHONE') {\r\n\r\n headerMenu.append(utilityLinks);\r\n if (jQuery('body').hasClass('universe')) {\r\n headerMenu.after(pageNav);\r\n pageNav.wrap('');\r\n } else {\r\n utilityLinks.before(pageNav);\r\n }\r\n titleBar.before(menuTitle);\r\n pageNav.addClass('responsive-pagenav');\r\n\r\n tablesScroll.each(function () {\r\n var table = jQuery(this);\r\n table.wrap('');\r\n });\r\n\r\n } else {\r\n\r\n var wasPhone = function () {\r\n var states = AU.responsive.stateHistory.length;\r\n return states > 1 ? AU.responsive.stateHistory[states - 2] === 'PHONE' : false;\r\n };\r\n\r\n if (wasPhone()) {\r\n sectionHeader.append(utilityLinks);\r\n leftMenu.append(pageNav);\r\n pageNav.before(menuTitle);\r\n\r\n }\r\n\r\n tablesScroll.each(function () {\r\n var table = jQuery(this);\r\n if (table.parent().is('div.responsive-table-container')) {\r\n table.unwrap();\r\n }\r\n });\r\n }\r\n\r\n this.runMarkupFunctions();\r\n }\r\n};\r\n\r\nAU.edutables = {\r\n tables: [],\r\n scriptLoaded: false,\r\n loadExternal: function () {\r\n const dg = new AUDiagramme(AU.pageLang, AU.edutables.tables);\r\n dg.init();\r\n },\r\n init: function () {\r\n if (this.tables.length > 0) {\r\n if (!this.scriptLoaded) {\r\n const componentsUrl = AU.cdn + '/components/umd/diagramme.js';\r\n jQuery.getScript(componentsUrl, function () {\r\n AU.edutables.loadExternal();\r\n AU.edutables.scriptLoaded = true;\r\n });\r\n } else {\r\n this.loadExternal();\r\n }\r\n }\r\n }\r\n};\r\n\r\nAU.addReadyFunction(function () {\r\n AU.responsive.detectDevice();\r\n AU.edutables.init();\r\n});\r\n\r\nAU.addResizeFunction(function () {\r\n AU.responsive.detectDevice();\r\n});\r\n","// Default søgeboks til medarbejderportaler til utility-box\r\nconst DEFAULT_util_staffportal_da = {\r\n config: {\r\n container: '#au_databox_staff_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Institutter',\r\n link: ''\r\n }, {\r\n text: 'Fakulteter',\r\n link: ''\r\n }, {\r\n text: 'Fællesadministrationen',\r\n link: ''\r\n }, {\r\n text: 'Øvrige enheder',\r\n link: ''\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n color: '#37a0cb',\r\n overlay: false\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/6'\r\n }\r\n};\r\nconst DEFAULT_util_staffportal_en = {\r\n config: {\r\n container: '#au_databox_staff_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Departments',\r\n link: ''\r\n }, {\r\n text: 'Faculties',\r\n link: ''\r\n }, {\r\n text: 'Other units',\r\n link: ''\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n color: '#37a0cb',\r\n overlay: false\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/7'\r\n }\r\n};\r\n\r\n// Default søgeboks til institutter til utility-box\r\nconst DEFAULT_util_department_da = {\r\n config: {\r\n container: '#au_databox_unit_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'http://arts.au.dk'\r\n }, {\r\n text: 'Health',\r\n link: 'http://health.au.dk'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'http://nat.au.dk'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'http://tech.au.dk'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'http://bss.au.dk'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/47'\r\n }\r\n};\r\nconst DEFAULT_util_department_en = {\r\n config: {\r\n container: '#au_databox_unit_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'http://arts.au.dk/en/'\r\n }, {\r\n text: 'Health',\r\n link: 'http://health.au.dk/en/'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'http://nat.au.dk/en/'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'http://tech.au.dk/en/'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'http://bss.au.dk/en/'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/52'\r\n }\r\n};\r\n\r\n// Default alphabox med medarbejderservice til utility-box\r\nconst DEFAULT_util_staffservice_da = {\r\n config: {\r\n container: '#au_alphabox_staff_utility',\r\n title: 'Find værktøjer, vejledninger og serviceydelser',\r\n url: 'http://medarbejdere.au.dk/administration/',\r\n description: 'Find flere informationer om',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/administration/it/'\r\n }, {\r\n title: 'Økonomi',\r\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\r\n }, {\r\n title: 'Bygninger',\r\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\r\n }, {\r\n title: 'Kommunikation',\r\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\r\n }, {\r\n title: 'Studieadm.',\r\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\r\n }, {\r\n title: 'Forskningspraksis',\r\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\r\n }, {\r\n title: 'Internationalt',\r\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\r\n }],\r\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\r\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\r\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks',\r\n },\r\n search: {\r\n placeHolder: 'Søg i værktøjer m.m.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\r\n }\r\n};\r\nconst DEFAULT_util_staffservice_en = {\r\n config: {\r\n container: '#au_alphabox_staff_utility',\r\n title: 'Find tools, guidelines and services',\r\n url: 'http://medarbejdere.au.dk/en/administration/',\r\n description: 'Find more information about',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/en/administration/it/'\r\n }, {\r\n title: 'Finance',\r\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\r\n }, {\r\n title: 'Buildings',\r\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\r\n }, {\r\n title: 'Communication',\r\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\r\n }, {\r\n title: 'Studies adm.',\r\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\r\n }, {\r\n title: 'Research Practice',\r\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\r\n }, {\r\n title: 'International',\r\n url: 'http://medarbejdere.au.dk/en/administration/international/'\r\n }],\r\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\r\n noResultsSearch: 'Your search did not return any results. Please try other words.',\r\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service',\r\n },\r\n search: {\r\n placeHolder: 'Search for tools, etc.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\r\n }\r\n};\r\n\r\n// Default søgeboks til ph.d.-portaler til utility-box\r\nconst DEFAULT_util_phdportal_da = {\r\n config: {\r\n container: '#au_databox_phd_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'https://phd.arts.au.dk'\r\n }, {\r\n text: 'Health',\r\n link: 'https://phd.health.au.dk/'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'https://phd.nat.au.dk/'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'https://phd.tech.au.dk/'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'https://bss.au.dk/phd/'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/50'\r\n }\r\n};\r\nconst DEFAULT_util_phdportal_en = {\r\n config: {\r\n container: '#au_databox_phd_utility',\r\n alphabet: 0,\r\n buttons: [{\r\n text: 'Arts',\r\n link: 'https://phd.arts.au.dk'\r\n }, {\r\n text: 'Health',\r\n link: 'https://phd.health.au.dk/'\r\n }, {\r\n text: 'Natural Sciences',\r\n link: 'https://phd.nat.au.dk/'\r\n }, {\r\n text: 'Technical Sciences',\r\n link: 'https://phd.tech.au.dk/'\r\n }, {\r\n text: 'Aarhus BSS',\r\n link: 'https://bss.au.dk/phd/'\r\n }],\r\n stacked: true\r\n },\r\n search: {\r\n index: 0\r\n },\r\n background: {\r\n overlay: false,\r\n color: '#003260'\r\n },\r\n data: {\r\n source: 'https://webtools.au.dk/Databox/Json/50'\r\n }\r\n};\r\n\r\n// Default alphabox med studieportaler til utility-box\r\nconst DEFAULT_util_student_da = {\r\n config: {\r\n container: '#au_alphabox_student_utility',\r\n title: 'Studieportaler',\r\n url: 'http://studerende.au.dk',\r\n links: []\r\n },\r\n search: {\r\n placeHolder: 'Søg efter studieportal'\r\n },\r\n background: {\r\n color: '#2a4a0f',\r\n linkColor: '#8bad3f'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/2?itemsOnly=true'\r\n }\r\n};\r\nconst DEFAULT_util_student_en = {\r\n config: {\r\n container: '#au_alphabox_student_utility',\r\n title: 'Study portals',\r\n url: 'http://studerende.au.dk/en/',\r\n links: []\r\n },\r\n search: {\r\n placeHolder: 'Search for Study portal'\r\n },\r\n background: {\r\n color: '#2a4a0f',\r\n linkColor: '#8bad3f'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/4?itemsOnly=true'\r\n }\r\n};\r\n\r\n// Default alphabox med medarbejderservice til medarbejdere.au.dk (forside m.m.)\r\nconst DEFAULT_staff_staffservice_da = {\r\n config: {\r\n container: '#au_alphabox_1',\r\n title: 'Find værktøjer, vejledninger og serviceydelser',\r\n url: 'http://medarbejdere.au.dk/administration/',\r\n description: 'Find flere informationer om',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/administration/it/'\r\n }, {\r\n title: 'Økonomi',\r\n url: 'http://medarbejdere.au.dk/administration/oekonomi/'\r\n }, {\r\n title: 'Bygninger',\r\n url: 'http://medarbejdere.au.dk/administration/bygninger/'\r\n }, {\r\n title: 'Kommunikation',\r\n url: 'http://medarbejdere.au.dk/administration/kommunikation/'\r\n }, {\r\n title: 'Studieadm.',\r\n url: 'http://medarbejdere.au.dk/administration/studieadministration/'\r\n }, {\r\n title: 'Forskningspraksis',\r\n url: 'http://medarbejdere.au.dk/administration/forskning-talent/'\r\n }, {\r\n title: 'Internationalt',\r\n url: 'http://medarbejdere.au.dk/administration/internationalt/'\r\n }],\r\n noResultsAlphabet: 'Fandt du ikke, hvad du søgte?',\r\n noResultsSearch: 'Din søgning gav ingen resultater. Prøv nogle andre ord.',\r\n noResultsUri: 'https://medarbejdere.au.dk/administration/emneindeks',\r\n },\r\n search: {\r\n placeHolder: 'Søg i værktøjer m.m.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/8?itemsOnly=true'\r\n }\r\n};\r\nconst DEFAULT_staff_staffservice_en = {\r\n config: {\r\n container: '#au_alphabox_1',\r\n title: 'Find tools, guidelines and services',\r\n url: 'http://medarbejdere.au.dk/en/administration/',\r\n description: 'Find more information about',\r\n links: [{\r\n title: 'HR',\r\n url: 'http://medarbejdere.au.dk/en/administration/hr/'\r\n }, {\r\n title: 'IT',\r\n url: 'http://medarbejdere.au.dk/en/administration/it/'\r\n }, {\r\n title: 'Finance',\r\n url: 'http://medarbejdere.au.dk/en/administration/oekonomi/'\r\n }, {\r\n title: 'Buildings',\r\n url: 'http://medarbejdere.au.dk/en/administration/bygninger/'\r\n }, {\r\n title: 'Communication',\r\n url: 'http://medarbejdere.au.dk/en/administration/kommunikation/'\r\n }, {\r\n title: 'Studies adm.',\r\n url: 'http://medarbejdere.au.dk/en/administration/studieadministration/'\r\n }, {\r\n title: 'Research Practice',\r\n url: 'http://medarbejdere.au.dk/en/administration/researchandtalent/'\r\n }, {\r\n title: 'International',\r\n url: 'http://medarbejdere.au.dk/en/administration/international/'\r\n }],\r\n noResultsAlphabet: 'Didn\\'t find what you were looking for?',\r\n noResultsSearch: 'Your search did not return any results. Please try other words.',\r\n noResultsUri: 'https://medarbejdere.au.dk/en/administration/index-for-staff-service',\r\n },\r\n search: {\r\n placeHolder: 'Search for tools, etc.'\r\n },\r\n data: {\r\n mode: 'json',\r\n source: 'https://webtools.au.dk/Databox/Json/9?itemsOnly=true'\r\n }\r\n};","/**\r\n * Titel: MAPS\r\n * Beskrivelse: Google Maps-baseret kortløsning.\r\n * Status: er noget af det ældste kode, vi har kørende. Virker som sådan fint nok, men ved et større kortprojekt ville det være oplagt at få omskrevet\r\n */\r\n\r\nconst GOOGLE_MAPS_API_KEY = \"AIzaSyBP04DSgKVcqkYGO_Xb4GgqXHMzRO_2jzo\";\r\n\r\nAU.maps = {\r\n loadGoogleMapsScript: function () {\r\n // Check if the global variable for loading Google Maps is defined, if not default to false\r\n var shouldLoadGoogleMapsScript = typeof window.loadGoogleMapsScript !== 'undefined' ? window.loadGoogleMapsScript : false;\r\n var shouldLoadGoogleMapsScriptAsync = typeof window.loadGoogleMapsScriptAsync !== 'undefined' ? window.loadGoogleMapsScriptAsync : true; // Default to true for async\r\n\r\n // Early return if we should not load the Google Maps script\r\n if (shouldLoadGoogleMapsScript) {\r\n console.log(\"Google Maps script will be loaded manually on this page\");\r\n } else{\r\n return;\r\n }\r\n\r\n // Construct the base URL with the API key\r\n var scriptUrl = 'https://maps.googleapis.com/maps/api/js?key=' + GOOGLE_MAPS_API_KEY;\r\n\r\n // Conditionally add the async loading parameter to the URL\r\n if (shouldLoadGoogleMapsScriptAsync) {\r\n scriptUrl += '&loading=async';\r\n }\r\n\r\n scriptUrl += '&callback=AU.maps.googleMapsScriptCallback';\r\n\r\n // Create a script element and set the constructed URL\r\n var script = document.createElement('script');\r\n script.src = scriptUrl;\r\n\r\n // Handle the script load success\r\n script.onload = function () {\r\n console.log(\"Google Maps script has been loaded successfully. Now waiting for the callback to initialize.\");\r\n };\r\n\r\n // Handle script load failure and capture details\r\n script.onerror = function (event) {\r\n console.error(\"Error loading Google Maps script:\", event);\r\n console.error(\"Script URL:\", event.target.src); // URL of the failed script\r\n };\r\n\r\n // Append the script to the document's head to initiate the load\r\n document.head.appendChild(script);\r\n },\r\n // If the Google maps script is loaded, we use this callback to dispatch an googleMapsScriptLoadedEvent event\r\n googleMapsScriptLoaded: false,\r\n googleMapsScriptCallback: function () {\r\n AU.maps.googleMapsScriptLoaded = true;\r\n console.log(\"Google Maps script callback has been executed. Google Maps is ready for use.\");\r\n\r\n // Dispatch a custom event to notify that Google Maps is ready\r\n const event = new CustomEvent('googleMapsScriptLoadedEvent');\r\n window.dispatchEvent(event);\r\n },\r\n create: function (container, width, height, zoomLevel, center, scrollWheel, draggable, clickable, streetView, pco, zco, svco) {\r\n\r\n var mapOptions = {\r\n zoom: zoomLevel,\r\n center: center,\r\n scrollwheel: (AU.helpers.isMobileDevice() || AU.responsive.state.NAME == 'PHONE') ? false : scrollWheel,\r\n draggable: draggable,\r\n clickable: clickable,\r\n streetViewControl: streetView,\r\n mapTypeControlOptions: {\r\n mapTypeIds: ['default', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.HYBRID],\r\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,\r\n position: google.maps.ControlPosition.RIGHT_TOP\r\n },\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n panControlOptions: !pco ? {} : pco,\r\n zoomControlOptions: !zco ? {} : zco,\r\n streetViewControlOptions: !svco ? {} : svco\r\n };\r\n\r\n // Opretter kort\r\n var map = new google.maps.Map(container, mapOptions);\r\n\r\n // Kortets størrelse sættes\r\n container.style.width = !isNaN(width) ? width + 'px' : width;\r\n container.style.height = !isNaN(height) ? height + 'px' : height;\r\n\r\n return map;\r\n },\r\n setBounds: function (map, markers) {\r\n var bounds = new google.maps.LatLngBounds();\r\n for (var i = 0; i < markers.length; i++) {\r\n for (var j = 0; j < markers[i].length; j++) {\r\n bounds.extend(markers[i][j].position);\r\n }\r\n }\r\n map.fitBounds(bounds);\r\n },\r\n marker: {\r\n add: function (map, point, markerIcon, markerDraggable, markerClickable, markerPanTo, markerClickZoom, markerClickZoomLevel, infoWindow, windowContent, title, id) {\r\n var marker = new google.maps.Marker({\r\n position: point,\r\n map: map,\r\n icon: markerIcon,\r\n draggable: markerDraggable,\r\n title: title\r\n });\r\n\r\n if (typeof id !== 'undefined') {\r\n marker.set('id', id);\r\n }\r\n\r\n // Listeners tilføjes markør\r\n google.maps.event.addListener(marker, 'click', function () {\r\n if (windowContent !== '') {\r\n // Infowindow åbner ved klik\r\n infoWindow.open(map, this);\r\n infoWindow.setContent(windowContent);\r\n }\r\n\r\n if (markerClickable) {\r\n if (markerPanTo) {\r\n map.panTo(this.getPosition());\r\n }\r\n\r\n if (!markerClickZoom || map.getZoom() > markerClickZoomLevel) {\r\n map.setZoom(map.getZoom());\r\n } else {\r\n map.setZoom(markerClickZoomLevel);\r\n }\r\n }\r\n });\r\n\r\n // At flytte en markør betragtes som et klik på kortet (det giver tilsyneladende ingen problemer, skulle der ikke være defineret click-event på kortet)\r\n if (markerDraggable) {\r\n google.maps.event.addListener(marker, 'dragend', function (point) {\r\n google.maps.event.trigger(map, 'click', point);\r\n });\r\n }\r\n\r\n return marker;\r\n }\r\n },\r\n route: {\r\n destinationFrom: false,\r\n destinationTo: false,\r\n directionsDisplay: null,\r\n directionsService: null,\r\n calc: function (map, from, to, travelMode, directionsService, directionsDisplay, waypointLocations) {\r\n if (from !== '') {\r\n var waypoints = [];\r\n if (typeof waypointLocations !== 'undefined') {\r\n for (var i = 0; i < waypointLocations.length; i++) {\r\n waypoints.push({\r\n location: waypointLocations[i],\r\n stopover: false\r\n });\r\n }\r\n }\r\n\r\n var request = {\r\n origin: from,\r\n destination: to,\r\n travelMode: travelMode,\r\n waypoints: waypoints\r\n };\r\n\r\n directionsService.route(request, function (response, status) {\r\n if (status === google.maps.DirectionsStatus.OK) {\r\n if (directionsDisplay.getMap() === null) {\r\n directionsDisplay.setMap(map);\r\n }\r\n directionsDisplay.setDirections(response);\r\n } else {\r\n window.alert(status);\r\n }\r\n });\r\n }\r\n },\r\n createDirectionObjects: function (map, container) {\r\n var rendererOptions = {\r\n draggable: true\r\n };\r\n\r\n var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);\r\n var panel = container;\r\n\r\n directionsDisplay.setMap(map);\r\n directionsDisplay.setPanel(panel);\r\n\r\n return directionsDisplay;\r\n }\r\n },\r\n geocodePersonAddress: function (map, options, icon, address, centerMap, infoWindow, windowContent, func) {\r\n AU.maps.geocoder.geocode({\r\n 'address': address\r\n }, function (results, status) {\r\n if (status === google.maps.GeocoderStatus.OK) {\r\n var point = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());\r\n var marker = AU.maps.marker.add(map, point, icon, options.markerDrag, options.markerClick, options.clickPanTo, options.clickZoom, options.clickZoomLevel, infoWindow, windowContent, '');\r\n\r\n if (typeof func === 'function') {\r\n func(marker, point, centerMap, infoWindow, windowContent);\r\n }\r\n\r\n }\r\n });\r\n\r\n },\r\n helpers: {\r\n getDistanceBetweenPoints: function (point1, point2) {\r\n return google.maps.geometry.spherical.computeDistanceBetween(point1, point2);\r\n },\r\n convertFromLatLng: function (coord) {\r\n return Math.round(coord * 1000000);\r\n },\r\n convertToLatLng: function (coord) {\r\n var c;\r\n if (coord.length === 7) {\r\n c = coord.substring(0, 1) + '.' + coord.substring(1);\r\n }\r\n if (coord.length === 8) {\r\n c = coord.substring(0, 2) + '.' + coord.substring(2);\r\n }\r\n if (coord.length === 9) {\r\n c = coord.substring(0, 3) + '.' + coord.substring(3);\r\n }\r\n return c;\r\n },\r\n getCurrentDate: function () {\r\n var d = new Date();\r\n var date = d.getDate();\r\n var month = d.getMonth() + 1;\r\n var currentDate = (date < 10 ? ('0' + date) : date) + '.' + (month < 10 ? ('0' + month) : month) + '.' + ('' + d.getFullYear()).substring(2);\r\n return currentDate;\r\n },\r\n getCurrentTime: function () {\r\n var d = new Date();\r\n var hours = d.getHours();\r\n var minutes = d.getMinutes();\r\n var currentTime = (hours < 10 ? ('0' + hours) : hours) + ':' + (minutes < 10 ? ('0' + minutes) : minutes);\r\n return currentTime;\r\n },\r\n sortSelect: function (element) {\r\n $(element).each(function () {\r\n var selectedValue = $(this).val();\r\n $(this).html($('option', $(this)).sort(function (a, b) {\r\n return a.text === b.text ? 0 : a.text < b.text ? -1 : 1;\r\n }));\r\n $(this).val(selectedValue);\r\n });\r\n },\r\n sortAlphaObj: function (a, b) {\r\n if (typeof a.name !== 'undefined' && typeof b.name !== 'undefined') {\r\n return a.name > b.name ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n },\r\n infoWindow: null,\r\n geocoder: null\r\n};\r\n\r\n// Slut på det generelle (\"biblioteket\") – nedenstående omhandler de små kort, som (primært) sidder på institutsiderne\r\n\r\nvar maps = [];\r\n\r\nAU.maps.single = {\r\n options: {\r\n image: '',\r\n markerDrag: !window._markerDrag ? false : window._markerDrag,\r\n markerClick: !window._markerClick ? true : window._markerClick,\r\n clickPanTo: !window._clickPanTo ? false : window._clickPanTo,\r\n clickZoom: !window._clickZoom ? false : window._clickZoom,\r\n clickZoomLevel: window._clickZoomLevel || 12,\r\n defaultZoomLevel: window._defaultZoomLevel || 16,\r\n scrollWheel: !window._scrollWheel ? false : window._scrollWheel,\r\n draggable: !window._draggable ? true : window._draggable,\r\n clickable: !window._clickable ? true : window._clickable,\r\n streetView: !window._streetView ? false : window._streetView,\r\n centerLat: window._centerLat || 56.20,\r\n centerLng: window._centerLng || 10.50,\r\n mapWidth: '99.5%',\r\n mapHeight: 275\r\n },\r\n center: null,\r\n maps: window.maps,\r\n mapDivs: [],\r\n firstMapLoaded: false,\r\n findFirstMap: function () {\r\n var i = 1;\r\n var firstMap;\r\n do {\r\n firstMap = document.getElementById('au_map' + (i === 1 ? '' : i));\r\n i++;\r\n } while (!firstMap && i <= 2);\r\n\r\n return firstMap;\r\n },\r\n loadMaps: function () {\r\n // Enten populeres kortet med manuelle punkter (fra sourcen) eller også henter vi fra datakilde (iPure / XML)\r\n if (AU.maps.single.maps.length > 0) {\r\n AU.maps.single.init();\r\n } else {\r\n if (typeof window.path !== 'undefined') {\r\n\r\n var dataFunc = function (data) {\r\n var locations = data.locations;\r\n var combinedPoints = [];\r\n var name;\r\n for (var l = 0; l < locations.length; l++) {\r\n name = locations[l].names[0].name;\r\n var lat = locations[l].latitude;\r\n var lng = locations[l].longitude;\r\n var url = locations[l].url;\r\n var text = locations[l].text;\r\n\r\n var points = [];\r\n var point = {\r\n latitude: lat,\r\n longitude: lng,\r\n title: name,\r\n text: text\r\n };\r\n points.push(point);\r\n combinedPoints.push(point);\r\n\r\n if ($('#au_map').length > 0) {\r\n AU.maps.single.maps.push({\r\n name: name,\r\n name_en: name,\r\n container: '#au_map',\r\n mapWidth: AU.maps.single.options.mapWidth,\r\n mapHeight: AU.maps.single.options.mapHeight,\r\n href: url,\r\n points: points,\r\n switchmode: 'dropdown',\r\n load: false\r\n });\r\n }\r\n }\r\n\r\n if ($('#au_map2').length > 0) {\r\n AU.maps.single.maps.push({\r\n name: name,\r\n name_en: name,\r\n container: '#au_map2',\r\n mapWidth: AU.maps.single.options.mapWidth,\r\n mapHeight: AU.maps.single.options.mapHeight,\r\n href: '',\r\n points: combinedPoints,\r\n load: true\r\n });\r\n }\r\n\r\n AU.maps.single.init();\r\n };\r\n\r\n $.getJSON(window.path, function (data) {\r\n dataFunc(data);\r\n });\r\n }\r\n }\r\n\r\n AU.maps.single.firstMapLoaded = true;\r\n },\r\n init: function () {\r\n\r\n AU.maps.route.directionsService = new google.maps.DirectionsService();\r\n AU.maps.infoWindow = new google.maps.InfoWindow();\r\n AU.maps.geocoder = new google.maps.Geocoder();\r\n\r\n var divUsed = false;\r\n for (var i = 0; i < AU.maps.single.maps.length; i++) {\r\n\r\n var currentMap = AU.maps.single.maps[i];\r\n\r\n currentMap.map = null;\r\n currentMap.markers = [];\r\n\r\n // Finder ud af, om vi allerede har brugt den angivne div\r\n for (var k = 0; k < AU.maps.single.mapDivs.length; k++) {\r\n if (AU.maps.single.mapDivs[k] === currentMap.container) {\r\n divUsed = true;\r\n break;\r\n } else {\r\n divUsed = false;\r\n }\r\n }\r\n\r\n // Hvis vi ikke har brugt div'en, opretter vi kortet\r\n if (!divUsed) {\r\n var mapContainer = $(currentMap.container).get(0);\r\n var options = AU.maps.single.options;\r\n\r\n currentMap.map = AU.maps.create(mapContainer, currentMap.mapWidth, currentMap.mapHeight, options.defaultZoomLevel, AU.maps.single.center, options.scrollWheel, options.draggable, options.clickable, options.streetView);\r\n AU.maps.single.mapDivs.push(AU.maps.single.maps[i].container);\r\n\r\n if (currentMap.load) {\r\n this.setMapContent(currentMap, false);\r\n }\r\n\r\n $(currentMap.container).after($('', {\r\n 'class': 'au_maps_switchlink'\r\n }));\r\n\r\n if (typeof currentMap.switchmode !== 'undefined' && currentMap.switchmode === 'dropdown') {\r\n $(currentMap.container + ' + div').append($(''));\r\n }\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};","/**\r\n * Titel: INIT\r\n * Beskrivelse: entry point for initialisering af funktioner fra de øvrige scripts - vi bestræber os på kun at have én jQuery(document).ready i \"master scriptet\"\r\n * Status: er kun i mindre grad blevet modificeret fra 2011/2015-udgaven\r\n */\r\n\r\n(function () {\r\n AU.maps.loadGoogleMapsScript();\r\n AU.cookies.initCookieScript();\r\n\r\n jQuery(document).ready(function () {\r\n\r\n jQuery(document).foundation(); // Fordi det er fuldstændig utænkeligt, at vi kan få fjernet Prototype fra pure.au.dk...\r\n\r\n if (window.AUCDNPATH) {\r\n AU.cdn = window.AUCDNPATH;\r\n }\r\n\r\n AU.bss = document.querySelector('body').classList.contains('aarhus-bss');\r\n\r\n // Vi bruger lang attributten til at afgøre, hvilket sprog vi skal bruge\r\n var langAttr = document.querySelector('html').getAttribute('lang');\r\n if (typeof langAttr !== 'undefined' && langAttr.indexOf('da') === -1) {\r\n AU.pageLang = 'en';\r\n AU.ipure.source.searchDetailsCrossSite = '//ipure.nfit.au.dk/current/en_GB/lno/';\r\n }\r\n\r\n var n = AU.navigation;\r\n\r\n n.menu.setClick();\r\n n.menu.setUtility();\r\n n.menu.setBreadcrumb();\r\n n.menu.addExtraMenuItem();\r\n n.menu.setTopBar();\r\n if (!AU.bss) {\r\n n.search.setClick();\r\n }\r\n n.frontpage.setTargetGroups();\r\n\r\n AU.alphabox.boxes.push(AU.pageLang === 'da' ? DEFAULT_staff_staffservice_da : DEFAULT_staff_staffservice_en);\r\n\r\n AU.cookies.strings.header = AU.pageLang === 'da' ? 'Hvis du klikker videre på siden, accepterer du vores brug af cookies.' : 'By continuing to use this site you agree to our cookie policy.';\r\n AU.cookies.strings.paragraph = AU.pageLang === 'da' ? 'Aarhus Universitet bruger cookies til at udarbejde statistik og i forbindelse med annoncering og services fra sociale medier, som vi benytter. Klikker du videre på siden, accepterer du, at der sættes cookies til disse formål. Læs mere om cookies på au.dk, herunder hvordan du fravælger brugen af cookies.Læs mere.' : 'Aarhus University uses cookies to collect statistical data and in connection with advertising and services from social media that we use. By continuing to use this site, you agree to our use of cookies for these purposes. Read more about cookies on au.dk and how to block these.Read more.';\r\n AU.cookies.strings.button = AU.pageLang === 'da' ? 'Acceptér og luk' : 'Accept and close';\r\n\r\n AU.cookies.init();\r\n AU.design.setFocusFieldIds();\r\n AU.design.setBannerElementsReady();\r\n AU.design.setBuildingLinks('.address p');\r\n AU.design.setCollapse();\r\n AU.design.setHero();\r\n AU.design.setMagnificPopup();\r\n AU.design.setTopWarning();\r\n\r\n var s = AU.social;\r\n if (jQuery('.au_news-single-item .addthis_toolbox').length > 0) {\r\n jQuery('.au_news-single-item').css('position', 'relative');\r\n s.disableAddThisForOldNews();\r\n s.sharers.push(s.newsSharer);\r\n }\r\n\r\n s.init();\r\n\r\n AU.databox.init();\r\n AU.flowbox.init();\r\n AU.alphabox.init();\r\n AU.piechart.init();\r\n AU.news.feeds = window.newsLists;\r\n AU.news.init();\r\n\r\n if (window.cludoDanishPath && window.cludoEnglishPath && (typeof window.defaultTracking === 'undefined' || window.defaultTracking)) {\r\n AU.search.init(AU.pageLang == 'da' ? window.cludoDanishPath : window.cludoEnglishPath);\r\n }\r\n\r\n var cmForms = jQuery('.js-cm-form');\r\n cmForms.each(function (i, form) {\r\n var privacyEmail = jQuery('input[name=\"cm-privacy-email\"]', form);\r\n if (privacyEmail.length === 0) {\r\n jQuery(form).append('');\r\n jQuery(form).append('');\r\n }\r\n });\r\n\r\n // Alle funktioner, som er pushet til ready-objektet, løbes igennem\r\n for (var i = 0; i < AU.ready.length; i++) {\r\n if (typeof (AU.ready[i]) === 'function') {\r\n try {\r\n // Attempt to execute the function\r\n AU.ready[i]();\r\n } catch (e) {\r\n // Catch any error and log it, but don't stop execution\r\n console.error(\"Error in AU.ready function loop (au-init.js) at index: \" + i, e);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n if (typeof findWidgetInit === 'function') {\r\n var dropdownWidgetLoaded = false;\r\n jQuery(document).on('show.zf.dropdown', function () {\r\n if (!dropdownWidgetLoaded) {\r\n findWidgetInit('header .find-container');\r\n dropdownWidgetLoaded = true;\r\n }\r\n });\r\n }\r\n */\r\n\r\n var findBtn = document.querySelector('header .find-button');\r\n if (findBtn) {\r\n findBtn.setAttribute('href', AU.pageLang === 'da' ? 'https://www.au.dk/kort/' : 'https://www.au.dk/en/map/');\r\n }\r\n\r\n if ((typeof AU.basic === 'undefined' || !AU.basic) && (typeof window.defaultTracking === 'undefined' || window.defaultTracking)) {\r\n // Siteimprove\r\n (function () {\r\n var sz = document.createElement('script'); \r\n sz.type = 'text/plain'; \r\n sz.async = true;\r\n sz.setAttribute('data-cookiescript', 'accepted');\r\n sz.setAttribute('data-cookiecategory', 'performance');\r\n sz.src = '//siteimproveanalytics.com/js/siteanalyze_4573657.js';\r\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sz, s);\r\n })();\r\n }\r\n });\r\n\r\n jQuery(window).on('load', function () {\r\n AU.design.setBannerElementsLoad();\r\n\r\n for (var i = 0; i < AU.load.length; i++) {\r\n if (typeof (AU.load[i]) === 'function') {\r\n AU.load[i]();\r\n }\r\n }\r\n });\r\n\r\n jQuery(window).on('resize', function () {\r\n for (var i = 0; i < AU.resize.length; i++) {\r\n if (typeof (AU.resize[i]) === 'function') {\r\n AU.resize[i]();\r\n }\r\n }\r\n });\r\n\r\n jQuery(window).on('scroll', function () {\r\n for (var i = 0; i < AU.scroll.length; i++) {\r\n if (typeof (AU.scroll[i]) === 'function') {\r\n AU.scroll[i]();\r\n }\r\n }\r\n });\r\n})();\r\n"]}