{"version":3,"sources":["components.novicell.js","components.novicell.cookieinfo.js","geoxml3.js","components.novicell.map.js","components.novicell.embeds.js","components.novicell.debouncer.js","components.novicell.lazyload.js","components.novicell.responsiveLazyload.js","components.dnDepartments.socialMedia.facebook.js","components.dnDepartments.navigation.js","components.dnDepartments.shareLinks.js","components.dnDepartments.overlay.js","components.dnDepartments.responsiveImages.js","components.dnDepartments.pageHeaderImage.js","components.dnDepartments.imageSlider.js","components.dnDepartments.stickyMenu.js","master.js"],"names":["cl","d","console","log","getCookie","cname","name","ca","document","cookie","split","i","length","c","charAt","substring","indexOf","setCookie","cvalue","exdays","Date","setTime","getTime","expires","toUTCString","path","MultiGeometry","multiGeometryOptions","createPolyline","polylineOptions","mg","polyline","google","maps","Polyline","event","addListener","evt","trigger","this","setValues","polylines","paths","push","getBoundsZoomLevel","bounds","mapElementWidth","mapElementHeight","latRad","lat","sin","Math","PI","radX2","max","min","zoom","mapPx","worldPx","fraction","floor","LN2","WORLD_DIM","height","width","ZOOM_MAX","ne","getNorthEast","sw","getSouthWest","latFraction","lngDiff","lng","lngFraction","latZoom","lngZoom","isScrolledIntoView","el","elemTop","getBoundingClientRect","top","elemBottom","bottom","window","innerHeight","error","info","debug","warn","trace","dir","dirxml","group","groupEnd","time","timeEnd","assert","profile","novicell","$","projectName","prepend","cookieInfo","init","self","$body","$cookieInfo","$cookieClose","$cookieOpen","setTimeout","addClass","click","showCookie","hideCookie","removeClass","embed","lastRefreshWidth","refreshWidth","loadEmbeds","callback","each","find","hasClass","has","attr","closest","lazyEmbed","parent","onResize","innerWidth","figure","ratio","src","$embed","data","backofficeEmbeds","remove","updateQueryStringParameter","uri","key","value","re","RegExp","separator","match","replace","fn","visible","partial","$t","$w","viewTop","scrollTop","viewBottom","_top","offset","_bottom","compareTop","compareBottom","jQuery","deBouncer","cf","of","interval","debounce","func","threshold","execAsap","timeout","delayed","apply","obj","args","arguments","clearTimeout","bind","lazyload","content","html","is","append","target","get","image","appear","simple","simpleLazyloadElems","querySelectorAll","l","elem","setAttribute","getAttribute","prototype","MVCObject","changed","set","setMap","map","getMap","String","trim","geoXML3","instances","parser","options","fetchDoc","url","doc","resFunc","responseXML","render","ZipFile","JSIO","guessFileType","test","baseUrl","contentType","FileType","Binary","XML","Unknown","isCompressed","baseDir","fetchZIP","internals","defileURL","fetchXML","processStyleUrl","node","styleUrlStr","nodeValue","getElementsByTagName","styleUrl","processStyle","thisNode","styleID","style","clone","defaultStyle","styles","styleNodes","balloon","bgColor","textColor","text","displayMode","icon","scale","parseFloat","hotSpot","x","y","xunits","yunits","href","cleanURL","kmzMetaData","dataUrl","dim","parseInt","getElementsByTagNameNS","gxNS","w","h","img","Image","onload","th","line","color","colorMode","poly","outline","getBooleanValue","fill","cloneNode","temp","constructor","processStyleMap","pairs","Object","pr","pairKey","pairStyle","pairStyleUrl","pairStyleBaseUrl","pairStyleID","parserOptions","processStyles","processStyleID","processPlacemarkCoords","tag","coordListA","coordNodes","coordinates","j","coords","pathLength","coordList","k","isNaN","alt","call","parserName","docs","docsByUrl","infoWindow","singleInfoWindow","InfoWindow","parseKmlString","kmlString","docSet","remaining","parseOnly","afterParse","thisDoc","xmlParse","parse","urls","redirectUrl","location","pathname","reload","redirect","hideDocument","markers","close","setVisible","ggroundoverlays","setOpacity","gpolylines","gpolygons","showDocument","percentOpacity_","failedParse","failed","parseError","errorCode","err","msg","linePos","reason","srcText","documentElement","nodeName","childNodes","placemarks","groundoverlays","networkLinks","nodes","rUrl","indexOfObjWithItem","thisResXML","nodeCount","createMarker","active","placemark","marker","polygonNodes","placemarkNodes","pm","description","join","styleBaseUrl","visibility","balloonVisibility","suppressInfoWindows","id","inlineStyles","vars","display","address","Snippet","geDirections","val","directions","extDataNodes","dataNodes","dn","dName","GeometryNodes","Geometry","gn","parentNode","GeometryPN","Point","latlng","LatLng","Polygon","outerBoundaryIs","innerBoundaryIs","pg","LineString","TrackNodes","Track","pmParseFn","LatLngBounds","extend","pointCreateFunc","found","getPosition","equals","polyCreateFunc","createPolygon","lineCreateFunc","createLineString","union","splice","groundOverlay","overlay","groundNodes","gnUrl","latLonBox","north","east","south","west","colorNode","opacity","getOpacity","createOverlay","overlayBounds","overlays","url_","networkLink","docPath","linkNodes","link","refreshMode","refreshInterval","viewRefreshMode","viewRefreshTime","viewFormat","setInterval","isEmpty","fitBounds","kmlColor","kmlIn","aa","substr","bb","gg","rr","randomColor","col","v","round","random","toString","complete","markerBacklog","p","whGuess","rnd","abs","aX","aY","scaled","iW","iH","iconAnchor","iconSize","Size","iconScale","iconOrigin","size","origin","anchor","scaledSize","stdRegEx","shadowSize","shadowPoint","shadow","markerOptions","combineOptions","position","title","zIndex","flat","Marker","createInfoWindow","ProjectedOverlay","overlayOptions","percentOpacity","pt","kmlStrokeColor","polyOptions","strokeColor","strokeWeight","strokeOpacity","pathsLength","polygonPart","kmlFillColor","polygonOptions","fillColor","fillOpacity","polygon","gObj","bStyle","suppressDirections","toUrlValue","encodeURIComponent","iwText","txt","n","classTxt","styleArr","styleProp","infoWindowOptions","pixelOffset","e","transparency","alert","overrides","prop","hasOwnProperty","defaults","result","undefined","fetchers","str","ActiveXObject","loadXML","DOMParser","parseFromString","createElement","isParseError","parsedDocument","errorneousParse","parsererrorNS","namespaceURI","timeoutHandler","xhrFetcher","pop","XMLHttpRequest","fetcher","AXOs","open","overrideMimeType","onreadystatechange","readyState","xhrtimeout","status","xml","ownerElement","responseText","linepos","send","IEversion","rv","navigator","appName","ua","userAgent","exec","$1","zip","KML","KMLCount","entries","kmlProcessing","timer","extractLeft","timerCalls","extractCb","entry","entryContent","mdUrl","ext","lastIndexOf","toLowerCase","mime","base64Encode","internalSrc","kmlExtractCb","extract","defVal","retStr","nodeType","callee","nodeContents","namespace","tagname","root","ownerDocument","attributes","prefix","baseName","selectNodes","getProperty","setProperty","toAbsURL","s","f","protocol","host","internalPath","dehostURL","Array","hasObject","hasItemInObj","item","fromIndex","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","keyString","output","responsiveLazyloadImage","first","contructImage","scroll","heightRatio","focalPoint","mode","filter","quality","$image","newImageSrc","nextQuerySign","isLoaded","onscroll","getElementById","script","type","body","appendChild","initialize","mapElement","city","dataset","mapCity","mapOptions","disableDefaultUI","draggable","scrollwheel","center","streetViewControl","mapTypeControl","Map","kmlParser","addDomListener","getCenter","setCenter","dnDepartments","socialMedia","facebook","fbAsyncInit","FB","xfbml","version","pageplugin","js","fjs","insertBefore","Event","subscribe","response","fadeOut","fadeIn","parseHTML","navigation","toggleMobileNavigation","navigationDepartment","on","destroy","backdrop","subToggle","siblings","toggleClass","moveNavigationElements","siteHeader","siteHeaderInner","topLinks","siteCta","mobileNavigation","mobileCtaContainer","appendTo","insertAfter","shareLinks","popover","next","responsiveImages","loadResponsiveImages","forEach","insertAdjacentHTML","offsetWidth","wMax","wMin","wRnd","ceil","fixedAspect","className","pageHeaderImage","loadPageHeaderImage","pageHeader","outerWidth","outerHeight","css","imageSlider","setupOwl","owl","$next","$prev","owlCarousel","onResized","itemElement","items","lazyLoad","loop","nav","dots","navText","onTranslated","index","count","preventDefault","stickyMenu","stickIt","orgElementPos","orgElementTop","orgElement","coordsOrgElement","leftOrgElement","left","widthOrgElement","show","hide","scrollIntervalID","svg4everybody","smartresize","load","resize"],"mappings":"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","file":"master.min.js","sourcesContent":["/*!\r\n *\r\n * Novicell JavaScript Library v0.5\r\n * http://www.novicell.dk\r\n *\r\n * Copyright Novicell\r\n *\r\n*/\r\n\r\n// Prevent console errors in IE\r\nif (typeof (console) === 'undefined') {\r\n var console = {}\r\n console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function () { };\r\n}\r\n// Shorthand for console.log\r\nfunction cl(d) {\r\n return console.log(d);\r\n}\r\n\r\n// Init the novicell js lib\r\n\r\nvar novicell = novicell || {};\r\n\r\n$(function () {\r\n if (typeof projectName !== 'undefined') {\r\n $('body').prepend('
Hi there. Remember to rename the \"projectName\" object in master.js file :)
');\r\n }\r\n});","var novicell = novicell || {};\r\n\r\n// Init on document ready\r\n$(function () {\r\n novicell.cookieInfo.init();\r\n});\r\n\r\nnovicell.cookieInfo = new function(){\r\n var self = this;\r\n var $body = $('body');\r\n\r\n this.init = function() {\r\n var $cookieInfo = $('#cookie-info');\r\n var $cookieClose = $('#cookie-info-close');\r\n var $cookieOpen = $('#cookie-info-open');\r\n\r\n if ($cookieInfo.length) {\r\n // If we have displayed it once, set cookie for one year\r\n if (getCookie(\"cookieAccept\") == \"displayed\") {\r\n setCookie(\"cookieAccept\", \"accepted\", 365);\r\n }\r\n\r\n // Check if the cookie info has been displayed, if not set session cookie\r\n if (getCookie(\"cookieAccept\") == \"\") {\r\n setCookie(\"cookieAccept\", \"displayed\");\r\n\r\n setTimeout(function() {\r\n $body.addClass('cookie-info-show');\r\n }, 1000);\r\n }\r\n\r\n // Button eventlisteners\r\n $cookieOpen.click(function() {\r\n self.showCookie();\r\n });\r\n\r\n $cookieClose.click(function() {\r\n self.hideCookie();\r\n setCookie(\"cookieAccept\", \"accepted\", 365);\r\n });\r\n }\r\n\r\n };\r\n\r\n // Functions for opening an closing the cookie-info\r\n this.showCookie = function(){\r\n $body.addClass('cookie-info-show');\r\n };\r\n this.hideCookie = function(){\r\n $body.removeClass('cookie-info-show');\r\n };\r\n\r\n};\r\n\r\n/* Cookie helper functions\r\n*******************************/\r\n\r\n// Get cookie\r\nfunction getCookie(cname) {\r\n var name = cname + \"=\";\r\n var ca = document.cookie.split(';');\r\n for(var i=0; iAll top-level objects and functions are declared under a namespace of geoXML3.\r\n * The core object is geoXML3.parser; typically, you'll instantiate a one parser\r\n * per map.

\r\n *\r\n * @class Main XML parser.\r\n * @param {geoXML3.parserOptions} options\r\n */\r\ngeoXML3.parser = function (options) {\r\n // Inherit from Google MVC Object to include event handling \r\n google.maps.MVCObject.call(this);\r\n\r\n // Private variables\r\n var parserOptions = new geoXML3.parserOptions(options);\r\n var docs = []; // Individual KML documents\r\n var docsByUrl = {}; // Same docs as an hash by cleanURL\r\n var kmzMetaData = {}; // Extra files from KMZ data\r\n var styles = {}; // Global list of styles\r\n var lastPlacemark;\r\n var parserName;\r\n if (!parserOptions.infoWindow && parserOptions.singleInfoWindow)\r\n parserOptions.infoWindow = new google.maps.InfoWindow();\r\n\r\n var parseKmlString = function (kmlString, docSet) {\r\n // Internal values for the set of documents as a whole\r\n var internals = {\r\n parser: this,\r\n docSet: docSet || [],\r\n remaining: 1,\r\n parseOnly: !(parserOptions.afterParse || parserOptions.processStyles)\r\n };\r\n thisDoc = new Object();\r\n thisDoc.internals = internals;\r\n internals.docSet.push(thisDoc);\r\n render(geoXML3.xmlParse(kmlString), thisDoc);\r\n }\r\n\r\n var parse = function (urls, redirectUrl, docSet) {\r\n // Process one or more KML documents\r\n if (!parserName) {\r\n parserName = 'geoXML3.instances[' + (geoXML3.instances.push(this) - 1) + ']';\r\n }\r\n\r\n if (typeof urls === 'string') {\r\n // Single KML document\r\n urls = [urls];\r\n }\r\n\r\n // Internal values for the set of documents as a whole\r\n var internals = {\r\n parser: this,\r\n docSet: docSet || [],\r\n remaining: urls.length,\r\n parseOnly: !(parserOptions.afterParse || parserOptions.processStyles)\r\n };\r\n var thisDoc, j;\r\n for (var i = 0; i < urls.length; i++) {\r\n var baseUrl = cleanURL(defileURL(location.pathname), urls[i]);\r\n if (docsByUrl[baseUrl]) {\r\n // Reloading an existing document\r\n thisDoc = docsByUrl[baseUrl];\r\n thisDoc.reload = true;\r\n }\r\n else {\r\n thisDoc = new Object();\r\n thisDoc.baseUrl = baseUrl;\r\n internals.docSet.push(thisDoc);\r\n }\r\n thisDoc.url = urls[i];\r\n thisDoc.internals = internals;\r\n thisDoc.redirect = redirectUrl;\r\n fetchDoc(thisDoc.url, thisDoc);\r\n }\r\n };\r\n\r\n function fetchDoc(url, doc, resFunc) {\r\n resFunc = resFunc || function (responseXML) { render(responseXML, doc); };\r\n\r\n if (typeof ZipFile === 'function' && typeof JSIO === 'object' && typeof JSIO.guessFileType === 'function') { // KMZ support requires these modules loaded\r\n // if url is a data URI scheme, do not guess type based on extension.\r\n if (/^data:[^,]*(kmz)/.test(doc.baseUrl)) {\r\n contentType = JSIO.FileType.Binary;\r\n } else if (/^data:[^,]*(kml|xml)/.test(doc.baseUrl)) {\r\n contentType = JSIO.FileType.XML;\r\n } else if (/^data:/.test(doc.baseUrl)) {\r\n contentType = JSIO.FileType.Unknown;\r\n } else {\r\n contentType = JSIO.guessFileType(doc.baseUrl);\r\n }\r\n if (contentType == JSIO.FileType.Binary || contentType == JSIO.FileType.Unknown) {\r\n doc.isCompressed = true;\r\n doc.baseDir = doc.baseUrl + '/';\r\n geoXML3.fetchZIP(url, resFunc, doc.internals.parser);\r\n return;\r\n }\r\n }\r\n doc.isCompressed = false;\r\n doc.baseDir = defileURL(doc.baseUrl);\r\n geoXML3.fetchXML(url, resFunc);\r\n }\r\n\r\n var hideDocument = function (doc) {\r\n if (!doc) doc = docs[0];\r\n // Hide the map objects associated with a document\r\n var i;\r\n if (!!doc.markers) {\r\n for (i = 0; i < doc.markers.length; i++) {\r\n if (!!doc.markers[i].infoWindow) doc.markers[i].infoWindow.close();\r\n doc.markers[i].setVisible(false);\r\n }\r\n }\r\n if (!!doc.ggroundoverlays) {\r\n for (i = 0; i < doc.ggroundoverlays.length; i++) {\r\n doc.ggroundoverlays[i].setOpacity(0);\r\n }\r\n }\r\n if (!!doc.gpolylines) {\r\n for (i = 0; i < doc.gpolylines.length; i++) {\r\n if (!!doc.gpolylines[i].infoWindow) doc.gpolylines[i].infoWindow.close();\r\n doc.gpolylines[i].setMap(null);\r\n }\r\n }\r\n if (!!doc.gpolygons) {\r\n for (i = 0; i < doc.gpolygons.length; i++) {\r\n if (!!doc.gpolygons[i].infoWindow) doc.gpolygons[i].infoWindow.close();\r\n doc.gpolygons[i].setMap(null);\r\n }\r\n }\r\n };\r\n\r\n var showDocument = function (doc) {\r\n if (!doc) doc = docs[0];\r\n // Show the map objects associated with a document\r\n var i;\r\n if (!!doc.markers) {\r\n for (i = 0; i < doc.markers.length; i++) {\r\n doc.markers[i].setVisible(true);\r\n }\r\n }\r\n if (!!doc.ggroundoverlays) {\r\n for (i = 0; i < doc.ggroundoverlays.length; i++) {\r\n doc.ggroundoverlays[i].setOpacity(doc.ggroundoverlays[i].percentOpacity_);\r\n }\r\n }\r\n if (!!doc.gpolylines) {\r\n for (i = 0; i < doc.gpolylines.length; i++) {\r\n doc.gpolylines[i].setMap(parserOptions.map);\r\n }\r\n }\r\n if (!!doc.gpolygons) {\r\n for (i = 0; i < doc.gpolygons.length; i++) {\r\n doc.gpolygons[i].setMap(parserOptions.map);\r\n }\r\n }\r\n };\r\n\r\n var defaultStyle = {\r\n balloon: {\r\n bgColor: 'ffffffff',\r\n textColor: 'ff000000',\r\n text: \"

$[name]

\\n
$[description]
\\n
$[geDirections]
\",\r\n displayMode: 'default'\r\n },\r\n icon: {\r\n scale: 1.0,\r\n dim: {\r\n x: 0,\r\n y: 0,\r\n w: -1,\r\n h: -1\r\n },\r\n hotSpot: {\r\n x: 0.5,\r\n y: 0.5,\r\n xunits: 'fraction',\r\n yunits: 'fraction'\r\n }\r\n },\r\n line: {\r\n color: 'ffffffff', // white (KML default)\r\n colorMode: 'normal',\r\n width: 1.0\r\n },\r\n poly: {\r\n color: 'ffffffff', // white (KML default)\r\n colorMode: 'normal',\r\n fill: true,\r\n outline: true\r\n }\r\n };\r\n\r\n var kmlNS = 'http://www.opengis.net/kml/2.2';\r\n var gxNS = 'http://www.google.com/kml/ext/2.2';\r\n var nodeValue = geoXML3.nodeValue;\r\n var getBooleanValue = geoXML3.getBooleanValue;\r\n var getElementsByTagNameNS = geoXML3.getElementsByTagNameNS;\r\n var getElementsByTagName = geoXML3.getElementsByTagName;\r\n\r\n function processStyleUrl(node) {\r\n var styleUrlStr = nodeValue(getElementsByTagName(node, 'styleUrl')[0]);\r\n if (!!styleUrlStr && styleUrlStr.indexOf('#') != -1)\r\n var styleUrl = styleUrlStr.split('#');\r\n else var styleUrl = [\"\", \"\"];\r\n return styleUrl;\r\n }\r\n\r\n function processStyle(thisNode, baseUrl, styleID, baseDir) {\r\n var style = (baseUrl === '{inline}') ? clone(defaultStyle) : (styles[baseUrl][styleID] = styles[baseUrl][styleID] || clone(defaultStyle));\r\n\r\n var styleNodes = getElementsByTagName(thisNode, 'BalloonStyle');\r\n if (!!styleNodes && styleNodes.length > 0) {\r\n style.balloon.bgColor = nodeValue(getElementsByTagName(styleNodes[0], 'bgColor')[0], style.balloon.bgColor);\r\n style.balloon.textColor = nodeValue(getElementsByTagName(styleNodes[0], 'textColor')[0], style.balloon.textColor);\r\n style.balloon.text = nodeValue(getElementsByTagName(styleNodes[0], 'text')[0], style.balloon.text);\r\n style.balloon.displayMode = nodeValue(getElementsByTagName(styleNodes[0], 'displayMode')[0], style.balloon.displayMode);\r\n }\r\n\r\n // style.list = (unsupported; doesn't make sense in Google Maps)\r\n\r\n var styleNodes = getElementsByTagName(thisNode, 'IconStyle');\r\n if (!!styleNodes && styleNodes.length > 0) {\r\n var icon = style.icon;\r\n\r\n icon.scale = parseFloat(nodeValue(getElementsByTagName(styleNodes[0], 'scale')[0], icon.scale));\r\n // style.icon.heading = (unsupported; not supported in API)\r\n // style.icon.color = (unsupported; not supported in API)\r\n // style.icon.colorMode = (unsupported; not supported in API)\r\n\r\n styleNodes = getElementsByTagName(styleNodes[0], 'hotSpot');\r\n if (!!styleNodes && styleNodes.length > 0) {\r\n icon.hotSpot = {\r\n x: styleNodes[0].getAttribute('x'),\r\n y: styleNodes[0].getAttribute('y'),\r\n xunits: styleNodes[0].getAttribute('xunits'),\r\n yunits: styleNodes[0].getAttribute('yunits')\r\n };\r\n }\r\n\r\n styleNodes = getElementsByTagName(thisNode, 'Icon');\r\n if (!!styleNodes && styleNodes.length > 0) {\r\n icon.href = nodeValue(getElementsByTagName(styleNodes[0], 'href')[0]);\r\n icon.url = cleanURL(baseDir, icon.href);\r\n // Detect images buried in KMZ files (and use a base64 encoded URL)\r\n if (kmzMetaData[icon.url]) icon.url = kmzMetaData[icon.url].dataUrl;\r\n\r\n // Support for icon palettes and exact size dimensions\r\n icon.dim = {\r\n x: parseInt(nodeValue(getElementsByTagNameNS(styleNodes[0], gxNS, 'x')[0], icon.dim.x)),\r\n y: parseInt(nodeValue(getElementsByTagNameNS(styleNodes[0], gxNS, 'y')[0], icon.dim.y)),\r\n w: parseInt(nodeValue(getElementsByTagNameNS(styleNodes[0], gxNS, 'w')[0], icon.dim.w)),\r\n h: parseInt(nodeValue(getElementsByTagNameNS(styleNodes[0], gxNS, 'h')[0], icon.dim.h))\r\n };\r\n\r\n // certain occasions where we need the pixel size of the image (like the default settings...)\r\n // (NOTE: Scale is applied to entire image, not just the section of the icon palette. So,\r\n // if we need scaling, we'll need the img dimensions no matter what.)\r\n if (true /* (icon.dim.w < 0 || icon.dim.h < 0) && (icon.xunits != 'pixels' || icon.yunits == 'fraction') || icon.scale != 1.0 */) {\r\n // (hopefully, this will load by the time we need it...)\r\n icon.img = new Image();\r\n icon.img.onload = function () {\r\n if (icon.dim.w < 0 || icon.dim.h < 0) {\r\n icon.dim.w = this.width;\r\n icon.dim.h = this.height;\r\n } else {\r\n icon.dim.th = this.height;\r\n }\r\n };\r\n icon.img.src = icon.url;\r\n\r\n // sometimes the file is already cached and it never calls onLoad\r\n if (icon.img.width > 0) {\r\n if (icon.dim.w < 0 || icon.dim.h < 0) {\r\n icon.dim.w = icon.img.width;\r\n icon.dim.h = icon.img.height;\r\n } else {\r\n icon.dim.th = icon.img.height;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // style.label = (unsupported; may be possible but not with API)\r\n\r\n styleNodes = getElementsByTagName(thisNode, 'LineStyle');\r\n if (!!styleNodes && styleNodes.length > 0) {\r\n style.line.color = nodeValue(getElementsByTagName(styleNodes[0], 'color')[0], style.line.color);\r\n style.line.colorMode = nodeValue(getElementsByTagName(styleNodes[0], 'colorMode')[0], style.line.colorMode);\r\n style.line.width = nodeValue(getElementsByTagName(styleNodes[0], 'width')[0], style.line.width);\r\n // style.line.outerColor = (unsupported; not supported in API)\r\n // style.line.outerWidth = (unsupported; not supported in API)\r\n // style.line.physicalWidth = (unsupported; unneccesary in Google Maps)\r\n // style.line.labelVisibility = (unsupported; possible to implement)\r\n }\r\n\r\n styleNodes = getElementsByTagName(thisNode, 'PolyStyle');\r\n if (!!styleNodes && styleNodes.length > 0) {\r\n style.poly.color = nodeValue(getElementsByTagName(styleNodes[0], 'color')[0], style.poly.color);\r\n style.poly.colorMode = nodeValue(getElementsByTagName(styleNodes[0], 'colorMode')[0], style.poly.colorMode);\r\n style.poly.outline = getBooleanValue(getElementsByTagName(styleNodes[0], 'outline')[0], style.poly.outline);\r\n style.poly.fill = getBooleanValue(getElementsByTagName(styleNodes[0], 'fill')[0], style.poly.fill);\r\n }\r\n return style;\r\n }\r\n\r\n // from http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object\r\n // http://keithdevens.com/weblog/archive/2007/Jun/07/javascript.clone\r\n function clone(obj) {\r\n if (obj == null || typeof (obj) != 'object') return obj;\r\n if (obj.cloneNode) return obj.cloneNode(true);\r\n var temp = new obj.constructor();\r\n for (var key in obj) temp[key] = clone(obj[key]);\r\n return temp;\r\n }\r\n\r\n function processStyleMap(thisNode, baseUrl, styleID, baseDir) {\r\n var pairs = getElementsByTagName(thisNode, 'Pair');\r\n var map = new Object();\r\n\r\n // add each key to the map\r\n for (var pr = 0; pr < pairs.length; pr++) {\r\n var pairKey = nodeValue(getElementsByTagName(pairs[pr], 'key')[0]);\r\n var pairStyle = nodeValue(getElementsByTagName(pairs[pr], 'Style')[0]);\r\n var pairStyleUrl = processStyleUrl(pairs[pr]);\r\n var pairStyleBaseUrl = pairStyleUrl[0] ? cleanURL(baseDir, pairStyleUrl[0]) : baseUrl;\r\n var pairStyleID = pairStyleUrl[1];\r\n\r\n if (!!pairStyle) {\r\n map[pairKey] = processStyle(pairStyle, pairStyleBaseUrl, pairStyleID);\r\n } else if (!!pairStyleID && !!styles[pairStyleBaseUrl][pairStyleID]) {\r\n map[pairKey] = clone(styles[pairStyleBaseUrl][pairStyleID]);\r\n }\r\n }\r\n if (!!map[\"normal\"]) {\r\n styles[baseUrl][styleID] = clone(map[\"normal\"]);\r\n } else {\r\n styles[baseUrl][styleID] = clone(defaultStyle);\r\n }\r\n if (!!map[\"highlight\"] && !!parserOptions.processStyles) {\r\n processStyleID(map[\"highlight\"]);\r\n }\r\n styles[baseUrl][styleID].map = clone(map);\r\n }\r\n\r\n function processPlacemarkCoords(node, tag) {\r\n var parent = getElementsByTagName(node, tag);\r\n var coordListA = [];\r\n for (var i = 0; i < parent.length; i++) {\r\n var coordNodes = getElementsByTagName(parent[i], 'coordinates');\r\n if (!coordNodes) {\r\n if (coordListA.length > 0) {\r\n break;\r\n } else {\r\n return [{ coordinates: [] }];\r\n }\r\n }\r\n\r\n for (var j = 0; j < coordNodes.length; j++) {\r\n var coords = nodeValue(coordNodes[j]).trim();\r\n coords = coords.replace(/,\\s+/g, ',');\r\n var path = coords.split(/\\s+/g);\r\n var pathLength = path.length;\r\n var coordList = [];\r\n for (var k = 0; k < pathLength; k++) {\r\n coords = path[k].split(',');\r\n if (!isNaN(coords[0]) && !isNaN(coords[1])) {\r\n coordList.push({\r\n lat: parseFloat(coords[1]),\r\n lng: parseFloat(coords[0]),\r\n alt: parseFloat(coords[2])\r\n });\r\n }\r\n }\r\n coordListA.push({ coordinates: coordList });\r\n }\r\n }\r\n return coordListA;\r\n }\r\n\r\n var render = function (responseXML, doc) {\r\n // Callback for retrieving a KML document: parse the KML and display it on the map\r\n if (!responseXML || responseXML == \"failed parse\") {\r\n // Error retrieving the data\r\n geoXML3.log('Unable to retrieve ' + doc.url);\r\n if (parserOptions.failedParse) parserOptions.failedParse(doc);\r\n doc.failed = true;\r\n return;\r\n } else if (responseXML.parseError && responseXML.parseError.errorCode != 0) {\r\n // IE parse error\r\n var err = responseXML.parseError;\r\n var msg = 'Parse error in line ' + err.line + ', col ' + err.linePos + ' (error code: ' + err.errorCode + \")\\n\" +\r\n \"\\nError Reason: \" + err.reason +\r\n 'Error Line: ' + err.srcText;\r\n\r\n geoXML3.log('Unable to retrieve ' + doc.url + ': ' + msg);\r\n if (parserOptions.failedParse) parserOptions.failedParse(doc);\r\n doc.failed = true;\r\n return;\r\n } else if (responseXML.documentElement && responseXML.documentElement.nodeName == 'parsererror') {\r\n // Firefox parse error\r\n geoXML3.log('Unable to retrieve ' + doc.url + ': ' + responseXML.documentElement.childNodes[0].nodeValue);\r\n if (parserOptions.failedParse) parserOptions.failedParse(doc);\r\n doc.failed = true;\r\n return;\r\n } else if (!doc) {\r\n throw 'geoXML3 internal error: render called with null document';\r\n } else { //no errors\r\n var i;\r\n doc.placemarks = [];\r\n doc.groundoverlays = [];\r\n doc.ggroundoverlays = [];\r\n doc.networkLinks = [];\r\n doc.gpolygons = [];\r\n doc.gpolylines = [];\r\n\r\n // Check for dependent KML files\r\n var nodes = getElementsByTagName(responseXML, 'styleUrl');\r\n var docSet = doc.internals.docSet;\r\n\r\n for (var i = 0; i < nodes.length; i++) {\r\n var url = nodeValue(nodes[i]).split('#')[0];\r\n if (!url) continue; // #id (inside doc)\r\n var rUrl = cleanURL(doc.baseDir, url);\r\n if (rUrl === doc.baseUrl) continue; // self\r\n if (docsByUrl[rUrl]) continue; // already loaded\r\n\r\n var thisDoc;\r\n var j = docSet.indexOfObjWithItem('baseUrl', rUrl);\r\n if (j != -1) {\r\n // Already listed to be loaded, but probably in the wrong order.\r\n // Load it right away to immediately resolve dependency.\r\n thisDoc = docSet[j];\r\n if (thisDoc.failed) continue; // failed to load last time; don't retry it again\r\n }\r\n else {\r\n // Not listed at all; add it in\r\n thisDoc = new Object();\r\n thisDoc.url = rUrl; // url can't be trusted inside KMZ files, since it may .. outside of the archive\r\n thisDoc.baseUrl = rUrl;\r\n thisDoc.internals = doc.internals;\r\n\r\n doc.internals.docSet.push(thisDoc);\r\n doc.internals.remaining++;\r\n }\r\n\r\n // render dependent KML first then re-run renderer\r\n fetchDoc(rUrl, thisDoc, function (thisResXML) {\r\n render(thisResXML, thisDoc);\r\n render(responseXML, doc);\r\n });\r\n\r\n // to prevent cross-dependency issues, just load the one\r\n // file first and re-check the rest later\r\n return;\r\n }\r\n\r\n // Parse styles\r\n doc.styles = styles[doc.baseUrl] = styles[doc.baseUrl] || {};\r\n var styleID, styleNodes;\r\n nodes = getElementsByTagName(responseXML, 'Style');\r\n nodeCount = nodes.length;\r\n for (i = 0; i < nodeCount; i++) {\r\n thisNode = nodes[i];\r\n var styleID = thisNode.getAttribute('id');\r\n if (!!styleID) processStyle(thisNode, doc.baseUrl, styleID, doc.baseDir);\r\n }\r\n // Parse StyleMap nodes\r\n nodes = getElementsByTagName(responseXML, 'StyleMap');\r\n for (i = 0; i < nodes.length; i++) {\r\n thisNode = nodes[i];\r\n var styleID = thisNode.getAttribute('id');\r\n if (!!styleID) processStyleMap(thisNode, doc.baseUrl, styleID, doc.baseDir);\r\n }\r\n\r\n if (!!parserOptions.processStyles || !parserOptions.createMarker) {\r\n // Convert parsed styles into GMaps equivalents\r\n processStyles(doc);\r\n }\r\n\r\n // Parse placemarks\r\n if (!!doc.reload && !!doc.markers) {\r\n for (i = 0; i < doc.markers.length; i++) {\r\n doc.markers[i].active = false;\r\n }\r\n }\r\n var placemark, node, coords, path, marker, poly;\r\n var pathLength, marker, polygonNodes, coordList;\r\n var placemarkNodes = getElementsByTagName(responseXML, 'Placemark');\r\n for (pm = 0; pm < placemarkNodes.length; pm++) {\r\n // Init the placemark object\r\n node = placemarkNodes[pm];\r\n var styleUrl = processStyleUrl(node);\r\n placemark = {\r\n name: nodeValue(getElementsByTagName(node, 'name')[0]),\r\n description: nodeValue(getElementsByTagName(node, 'description')[0]),\r\n styleUrl: styleUrl.join('#'),\r\n styleBaseUrl: styleUrl[0] ? cleanURL(doc.baseDir, styleUrl[0]) : doc.baseUrl,\r\n styleID: styleUrl[1],\r\n visibility: getBooleanValue(getElementsByTagName(node, 'visibility')[0], true),\r\n balloonVisibility: getBooleanValue(getElementsByTagNameNS(node, gxNS, 'balloonVisibility')[0], !parserOptions.suppressInfoWindows),\r\n id: node.getAttribute('id')\r\n };\r\n placemark.style = (styles[placemark.styleBaseUrl] && styles[placemark.styleBaseUrl][placemark.styleID]) || clone(defaultStyle);\r\n // inline style overrides shared style\r\n var inlineStyles = getElementsByTagName(node, 'Style');\r\n if (inlineStyles && (inlineStyles.length > 0)) {\r\n var style = processStyle(node, '{inline}', '{inline}');\r\n processStyleID(style);\r\n if (style) placemark.style = style;\r\n }\r\n\r\n if (/^https?:\\/\\//.test(placemark.description)) {\r\n placemark.description = ['', placemark.description, ''].join('');\r\n }\r\n\r\n // record list of variables for substitution\r\n placemark.vars = {\r\n display: {\r\n name: 'Name',\r\n description: 'Description',\r\n address: 'Street Address',\r\n id: 'ID',\r\n Snippet: 'Snippet',\r\n geDirections: 'Directions'\r\n },\r\n val: {\r\n name: placemark.name || '',\r\n description: placemark.description || '',\r\n address: nodeValue(getElementsByTagName(node, 'address')[0], ''),\r\n id: node.getAttribute('id') || '',\r\n Snippet: nodeValue(getElementsByTagName(node, 'Snippet')[0], '')\r\n },\r\n directions: [\r\n 'f=d',\r\n 'source=GeoXML3'\r\n ]\r\n };\r\n\r\n // add extended data to variables\r\n var extDataNodes = getElementsByTagName(node, 'ExtendedData');\r\n if (!!extDataNodes && extDataNodes.length > 0) {\r\n var dataNodes = getElementsByTagName(extDataNodes[0], 'Data');\r\n for (var d = 0; d < dataNodes.length; d++) {\r\n var dn = dataNodes[d];\r\n var name = dn.getAttribute('name');\r\n if (!name) continue;\r\n var dName = nodeValue(getElementsByTagName(dn, 'displayName')[0], name);\r\n var val = nodeValue(getElementsByTagName(dn, 'value')[0]);\r\n\r\n placemark.vars.val[name] = val;\r\n placemark.vars.display[name] = dName;\r\n }\r\n }\r\n\r\n // process MultiGeometry\r\n var GeometryNodes = getElementsByTagName(node, 'coordinates');\r\n var Geometry = null;\r\n if (!!GeometryNodes && (GeometryNodes.length > 0)) {\r\n for (var gn = 0; gn < GeometryNodes.length; gn++) {\r\n if (GeometryNodes[gn].parentNode &&\r\n GeometryNodes[gn].parentNode.nodeName) {\r\n var GeometryPN = GeometryNodes[gn].parentNode;\r\n Geometry = GeometryPN.nodeName;\r\n\r\n // Extract the coordinates\r\n // What sort of placemark?\r\n switch (Geometry) {\r\n case \"Point\":\r\n placemark.Point = processPlacemarkCoords(node, \"Point\")[0];\r\n placemark.latlng = new google.maps.LatLng(placemark.Point.coordinates[0].lat, placemark.Point.coordinates[0].lng);\r\n pathLength = 1;\r\n break;\r\n case \"LinearRing\":\r\n // Polygon/line\r\n polygonNodes = getElementsByTagName(node, 'Polygon');\r\n // Polygon\r\n if (!placemark.Polygon)\r\n placemark.Polygon = [{\r\n outerBoundaryIs: { coordinates: [] },\r\n innerBoundaryIs: [{ coordinates: [] }]\r\n }];\r\n for (var pg = 0; pg < polygonNodes.length; pg++) {\r\n placemark.Polygon[pg] = {\r\n outerBoundaryIs: { coordinates: [] },\r\n innerBoundaryIs: [{ coordinates: [] }]\r\n }\r\n placemark.Polygon[pg].outerBoundaryIs = processPlacemarkCoords(polygonNodes[pg], \"outerBoundaryIs\");\r\n placemark.Polygon[pg].innerBoundaryIs = processPlacemarkCoords(polygonNodes[pg], \"innerBoundaryIs\");\r\n }\r\n coordList = placemark.Polygon[0].outerBoundaryIs;\r\n break;\r\n\r\n case \"LineString\":\r\n pathLength = 0;\r\n placemark.LineString = processPlacemarkCoords(node, \"LineString\");\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // parse MultiTrack/Track\r\n var TrackNodes = getElementsByTagNameNS(node, gxNS, \"Track\");\r\n var coordListA = [];\r\n if (TrackNodes.length > 0) {\r\n for (var i = 0; i < TrackNodes.length; i++) {\r\n var coordNodes = getElementsByTagNameNS(TrackNodes[i], gxNS, \"coord\");\r\n var coordList = [];\r\n for (var j = 0; j < coordNodes.length; j++) {\r\n var coords = geoXML3.nodeValue(coordNodes[j]).trim();\r\n coords = coords.split(/\\s+/g);\r\n if (!isNaN(coords[0]) && !isNaN(coords[1])) {\r\n coordList.push({\r\n lat: parseFloat(coords[1]),\r\n lng: parseFloat(coords[0]),\r\n alt: parseFloat(coords[2])\r\n });\r\n }\r\n }\r\n coordListA.push({ coordinates: coordList });\r\n }\r\n placemark.Track = coordListA;\r\n }\r\n\r\n // call the custom placemark parse function if it is defined\r\n if (!!parserOptions.pmParseFn) parserOptions.pmParseFn(node, placemark);\r\n doc.placemarks.push(placemark);\r\n\r\n // single marker\r\n if (placemark.Point) {\r\n if (!!google.maps) {\r\n doc.bounds = doc.bounds || new google.maps.LatLngBounds();\r\n doc.bounds.extend(placemark.latlng);\r\n }\r\n\r\n // Potential user-defined marker handler\r\n var pointCreateFunc = parserOptions.createMarker || createMarker;\r\n var found = false;\r\n if (!parserOptions.createMarker) {\r\n // Check to see if this marker was created on a previous load of this document\r\n if (!!doc) {\r\n doc.markers = doc.markers || [];\r\n if (doc.reload) {\r\n for (var j = 0; j < doc.markers.length; j++) {\r\n if ((doc.markers[j].id == placemark.id) ||\r\n // if no id, check position\r\n (!doc.markers[j].id &&\r\n (doc.markers[j].getPosition().equals(placemark.latlng)))) {\r\n found = doc.markers[j].active = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!found) {\r\n // Call the marker creator\r\n var marker = pointCreateFunc(placemark, doc);\r\n if (marker) {\r\n marker.active = placemark.visibility;\r\n marker.id = placemark.id;\r\n }\r\n }\r\n }\r\n // polygon/line\r\n var poly, line;\r\n if (!!doc) {\r\n if (placemark.Polygon) doc.gpolygons = doc.gpolygons || [];\r\n if (placemark.LineString) doc.gpolylines = doc.gpolylines || [];\r\n if (placemark.Track) doc.gpolylines = doc.gpolylines || [];\r\n }\r\n\r\n var polyCreateFunc = parserOptions.createPolygon || createPolygon;\r\n var lineCreateFunc = parserOptions.createLineString || createPolyline;\r\n if (placemark.Polygon) {\r\n poly = polyCreateFunc(placemark, doc);\r\n if (poly) poly.active = placemark.visibility;\r\n }\r\n if (placemark.LineString) {\r\n line = lineCreateFunc(placemark, doc);\r\n if (line) line.active = placemark.visibility;\r\n }\r\n if (placemark.Track) { // gx:Track polyline\r\n line = lineCreateFunc(placemark, doc);\r\n if (line) line.active = placemark.visibility;\r\n }\r\n if (!!google.maps) {\r\n doc.bounds = doc.bounds || new google.maps.LatLngBounds();\r\n if (poly) doc.bounds.union(poly.bounds);\r\n if (line) doc.bounds.union(line.bounds);\r\n }\r\n\r\n } // placemark loop\r\n\r\n if (!!doc.reload && !!doc.markers) {\r\n for (i = doc.markers.length - 1; i >= 0 ; i--) {\r\n if (!doc.markers[i].active) {\r\n if (!!doc.markers[i].infoWindow) {\r\n doc.markers[i].infoWindow.close();\r\n }\r\n doc.markers[i].setMap(null);\r\n doc.markers.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // Parse ground overlays\r\n if (!!doc.reload && !!doc.groundoverlays) {\r\n for (i = 0; i < doc.groundoverlays.length; i++) {\r\n doc.groundoverlays[i].active = false;\r\n }\r\n }\r\n\r\n if (!!doc) {\r\n doc.groundoverlays = doc.groundoverlays || [];\r\n }\r\n // doc.groundoverlays =[];\r\n var groundOverlay, color, transparency, overlay;\r\n var groundNodes = getElementsByTagName(responseXML, 'GroundOverlay');\r\n for (i = 0; i < groundNodes.length; i++) {\r\n node = groundNodes[i];\r\n\r\n // Detect images buried in KMZ files (and use a base64 encoded URL)\r\n var gnUrl = cleanURL(doc.baseDir, nodeValue(getElementsByTagName(node, 'href')[0]));\r\n if (kmzMetaData[gnUrl]) gnUrl = kmzMetaData[gnUrl].dataUrl;\r\n\r\n // Init the ground overlay object\r\n groundOverlay = {\r\n name: nodeValue(getElementsByTagName(node, 'name')[0]),\r\n description: nodeValue(getElementsByTagName(node, 'description')[0]),\r\n icon: { href: gnUrl },\r\n latLonBox: {\r\n north: parseFloat(nodeValue(getElementsByTagName(node, 'north')[0])),\r\n east: parseFloat(nodeValue(getElementsByTagName(node, 'east')[0])),\r\n south: parseFloat(nodeValue(getElementsByTagName(node, 'south')[0])),\r\n west: parseFloat(nodeValue(getElementsByTagName(node, 'west')[0]))\r\n }\r\n };\r\n if (!!google.maps) {\r\n doc.bounds = doc.bounds || new google.maps.LatLngBounds();\r\n doc.bounds.union(new google.maps.LatLngBounds(\r\n new google.maps.LatLng(groundOverlay.latLonBox.south, groundOverlay.latLonBox.west),\r\n new google.maps.LatLng(groundOverlay.latLonBox.north, groundOverlay.latLonBox.east)\r\n ));\r\n }\r\n\r\n // Opacity is encoded in the color node\r\n var colorNode = getElementsByTagName(node, 'color');\r\n if (colorNode && colorNode.length > 0) {\r\n groundOverlay.opacity = geoXML3.getOpacity(nodeValue(colorNode[0]));\r\n } else {\r\n groundOverlay.opacity = 1.0; // KML default\r\n }\r\n\r\n doc.groundoverlays.push(groundOverlay);\r\n if (!!parserOptions.createOverlay) {\r\n // User-defined overlay handler\r\n parserOptions.createOverlay(groundOverlay, doc);\r\n } else {\r\n // Check to see if this overlay was created on a previous load of this document\r\n var found = false;\r\n if (!!doc) {\r\n doc.groundoverlays = doc.groundoverlays || [];\r\n if (doc.reload) {\r\n overlayBounds = new google.maps.LatLngBounds(\r\n new google.maps.LatLng(groundOverlay.latLonBox.south, groundOverlay.latLonBox.west),\r\n new google.maps.LatLng(groundOverlay.latLonBox.north, groundOverlay.latLonBox.east)\r\n );\r\n var overlays = doc.groundoverlays;\r\n for (i = overlays.length; i--;) {\r\n if ((overlays[i].bounds().equals(overlayBounds)) &&\r\n (overlays.url_ === groundOverlay.icon.href)) {\r\n found = overlays[i].active = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!found) {\r\n // Call the built-in overlay creator\r\n overlay = createOverlay(groundOverlay, doc);\r\n overlay.active = true;\r\n }\r\n }\r\n if (!!doc.reload && !!doc.groundoverlays && !!doc.groundoverlays.length) {\r\n var overlays = doc.groundoverlays;\r\n for (i = overlays.length; i--;) {\r\n if (!overlays[i].active) {\r\n overlays[i].remove();\r\n overlays.splice(i, 1);\r\n }\r\n }\r\n doc.groundoverlays = overlays;\r\n }\r\n }\r\n\r\n // Parse network links\r\n var networkLink;\r\n var docPath = document.location.pathname.split('/');\r\n docPath = docPath.splice(0, docPath.length - 1).join('/');\r\n var linkNodes = getElementsByTagName(responseXML, 'NetworkLink');\r\n for (i = 0; i < linkNodes.length; i++) {\r\n node = linkNodes[i];\r\n\r\n // Init the network link object\r\n networkLink = {\r\n name: nodeValue(getElementsByTagName(node, 'name')[0]),\r\n link: {\r\n href: nodeValue(getElementsByTagName(node, 'href')[0]),\r\n refreshMode: nodeValue(getElementsByTagName(node, 'refreshMode')[0])\r\n }\r\n };\r\n\r\n // Establish the specific refresh mode\r\n if (!networkLink.link.refreshMode) {\r\n networkLink.link.refreshMode = 'onChange';\r\n }\r\n if (networkLink.link.refreshMode === 'onInterval') {\r\n networkLink.link.refreshInterval = parseFloat(nodeValue(getElementsByTagName(node, 'refreshInterval')[0]));\r\n if (isNaN(networkLink.link.refreshInterval)) {\r\n networkLink.link.refreshInterval = 0;\r\n }\r\n } else if (networkLink.link.refreshMode === 'onChange') {\r\n networkLink.link.viewRefreshMode = nodeValue(getElementsByTagName(node, 'viewRefreshMode')[0]);\r\n if (!networkLink.link.viewRefreshMode) {\r\n networkLink.link.viewRefreshMode = 'never';\r\n }\r\n if (networkLink.link.viewRefreshMode === 'onStop') {\r\n networkLink.link.viewRefreshTime = nodeValue(getElementsByTagName(node, 'refreshMode')[0]);\r\n networkLink.link.viewFormat = nodeValue(getElementsByTagName(node, 'refreshMode')[0]);\r\n if (!networkLink.link.viewFormat) {\r\n networkLink.link.viewFormat = 'BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]';\r\n }\r\n }\r\n }\r\n\r\n if (!/^[\\/|http]/.test(networkLink.link.href)) {\r\n // Fully-qualify the HREF\r\n networkLink.link.href = docPath + '/' + networkLink.link.href;\r\n }\r\n\r\n // Apply the link\r\n if ((networkLink.link.refreshMode === 'onInterval') &&\r\n (networkLink.link.refreshInterval > 0)) {\r\n // Reload at regular intervals\r\n setInterval(parserName + '.parse(\"' + networkLink.link.href + '\")',\r\n 1000 * networkLink.link.refreshInterval);\r\n } else if (networkLink.link.refreshMode === 'onChange') {\r\n if (networkLink.link.viewRefreshMode === 'never') {\r\n // Load the link just once\r\n doc.internals.parser.parse(networkLink.link.href, doc.internals.docSet);\r\n } else if (networkLink.link.viewRefreshMode === 'onStop') {\r\n // Reload when the map view changes\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!!doc.bounds) {\r\n doc.internals.bounds = doc.internals.bounds || new google.maps.LatLngBounds();\r\n doc.internals.bounds.union(doc.bounds);\r\n }\r\n if (!!doc.markers || !!doc.groundoverlays || !!doc.gpolylines || !!doc.gpolygons) {\r\n doc.internals.parseOnly = false;\r\n }\r\n\r\n if (!doc.internals.parseOnly) {\r\n // geoXML3 is not being used only as a real-time parser, so keep the processed documents around\r\n if (doc.baseUrl) { // handle case from parseKmlString (no doc.baseUrl)\r\n if (!docsByUrl[doc.baseUrl]) {\r\n docs.push(doc);\r\n docsByUrl[doc.baseUrl] = doc;\r\n } else {\r\n // internal replacement, which keeps the same memory ref loc in docs and docsByUrl\r\n for (var i in docsByUrl[doc.baseUrl]) {\r\n docsByUrl[doc.baseUrl][i] = doc[i];\r\n }\r\n }\r\n }\r\n }\r\n\r\n doc.internals.remaining--;\r\n if (doc.internals.remaining === 0) {\r\n // We're done processing this set of KML documents\r\n // Options that get invoked after parsing completes\r\n if (parserOptions.zoom && !!doc.internals.bounds &&\r\n !doc.internals.bounds.isEmpty() && !!parserOptions.map) {\r\n parserOptions.map.fitBounds(doc.internals.bounds);\r\n }\r\n if (parserOptions.afterParse) {\r\n parserOptions.afterParse(doc.internals.docSet);\r\n }\r\n google.maps.event.trigger(doc.internals.parser, 'parsed');\r\n }\r\n };\r\n\r\n var kmlColor = function (kmlIn, colorMode) {\r\n var kmlColor = {};\r\n kmlIn = kmlIn || 'ffffffff'; // white (KML 2.2 default)\r\n\r\n var aa = kmlIn.substr(0, 2);\r\n var bb = kmlIn.substr(2, 2);\r\n var gg = kmlIn.substr(4, 2);\r\n var rr = kmlIn.substr(6, 2);\r\n\r\n kmlColor.opacity = parseInt(aa, 16) / 256;\r\n kmlColor.color = (colorMode === 'random') ? randomColor(rr, gg, bb) : '#' + rr + gg + bb;\r\n return kmlColor;\r\n };\r\n\r\n // Implemented per KML 2.2 specs\r\n var randomColor = function (rr, gg, bb) {\r\n var col = { rr: rr, gg: gg, bb: bb };\r\n for (var k in col) {\r\n var v = col[k];\r\n if (v == null) v = 'ff';\r\n\r\n // RGB values are limiters for random numbers (ie: 7f would be a random value between 0 and 7f)\r\n v = Math.round(Math.random() * parseInt(rr, 16)).toString(16);\r\n if (v.length === 1) v = '0' + v;\r\n col[k] = v;\r\n }\r\n\r\n return '#' + col.rr + col.gg + col.bb;\r\n };\r\n\r\n var processStyleID = function (style) {\r\n var icon = style.icon;\r\n if (!icon || !icon.href) return;\r\n\r\n if (icon.img && !icon.img.complete && (icon.dim.w < 0) && (icon.dim.h < 0)) {\r\n // we're still waiting on the image loading (probably because we've been blocking since the declaration)\r\n // so, let's queue this function on the onload stack\r\n icon.markerBacklog = [];\r\n icon.img.onload = function () {\r\n if (icon.dim.w < 0 || icon.dim.h < 0) {\r\n icon.dim.w = this.width;\r\n icon.dim.h = this.height;\r\n } else {\r\n icon.dim.th = this.height;\r\n }\r\n processStyleID(style);\r\n\r\n // we will undoubtedly get some createMarker queuing, so set this up in advance\r\n for (var i = 0; i < icon.markerBacklog.length; i++) {\r\n var p = icon.markerBacklog[i][0];\r\n var d = icon.markerBacklog[i][1];\r\n createMarker(p, d);\r\n if (p.marker) p.marker.active = true;\r\n }\r\n delete icon.markerBacklog;\r\n };\r\n return;\r\n }\r\n else { //if (icon.dim.w < 0 || icon.dim.h < 0) {\r\n if (icon.img && icon.img.complete) {\r\n // sometimes the file is already cached and it never calls onLoad\r\n if (icon.dim.w < 0 || icon.dim.h < 0) {\r\n icon.dim.w = icon.img.width;\r\n icon.dim.h = icon.img.height;\r\n } else {\r\n icon.dim.th = icon.img.height;\r\n }\r\n }\r\n else {\r\n // settle for a default of 32x32\r\n icon.dim.whGuess = true;\r\n icon.dim.w = 32;\r\n icon.dim.h = 32;\r\n icon.dim.th = 32;\r\n }\r\n }\r\n\r\n // pre-scaled variables\r\n var rnd = Math.round;\r\n var y = icon.dim.y;\r\n if (typeof icon.dim.th !== 'undefined' && icon.dim.th != icon.dim.h) { // palette - reverse kml y for maps\r\n y = Math.abs(y - (icon.dim.th - icon.dim.h));\r\n }\r\n\r\n var scaled = {\r\n x: icon.dim.x * icon.scale,\r\n y: y * icon.scale,\r\n w: icon.dim.w * icon.scale,\r\n h: icon.dim.h * icon.scale,\r\n aX: icon.hotSpot.x * icon.scale,\r\n aY: icon.hotSpot.y * icon.scale,\r\n iW: (icon.img ? icon.img.width : icon.dim.w) * icon.scale,\r\n iH: (icon.img ? icon.img.height : icon.dim.h) * icon.scale\r\n };\r\n\r\n // Figure out the anchor spot\r\n // Origins, anchor positions and coordinates of the marker increase in the X direction to the right and in\r\n // the Y direction down.\r\n var aX, aY;\r\n switch (icon.hotSpot.xunits) {\r\n case 'fraction': aX = rnd(scaled.aX * icon.dim.w); break;\r\n case 'insetPixels': aX = rnd(icon.dim.w * icon.scale - scaled.aX); break;\r\n default: aX = rnd(scaled.aX); break; // already pixels\r\n }\r\n aY = scaled.h - rnd(((icon.hotSpot.yunits === 'fraction') ? icon.dim.h : 1) * scaled.aY); // insetPixels Y = pixels Y\r\n var iconAnchor = new google.maps.Point(aX, aY);\r\n\r\n // Sizes\r\n // (NOTE: Scale is applied to entire image, not just the section of the icon palette.)\r\n var iconSize = icon.dim.whGuess ? null : new google.maps.Size(rnd(scaled.w), rnd(scaled.h));\r\n var iconScale = icon.scale == 1.0 ? null :\r\n icon.dim.whGuess ? new google.maps.Size(rnd(scaled.w), rnd(scaled.h))\r\n : new google.maps.Size(rnd(scaled.iW), rnd(scaled.iH));\r\n var iconOrigin = new google.maps.Point(rnd(scaled.x), rnd(scaled.y));\r\n\r\n // Detect images buried in KMZ files (and use a base64 encoded URL)\r\n if (kmzMetaData[icon.url]) icon.url = kmzMetaData[icon.url].dataUrl;\r\n\r\n // Init the style object with the KML icon\r\n icon.marker = {\r\n url: icon.url, // url\r\n size: iconSize, // size\r\n origin: iconOrigin, // origin\r\n anchor: iconAnchor, // anchor\r\n scaledSize: iconScale // scaledSize\r\n };\r\n\r\n // Look for a predictable shadow\r\n var stdRegEx = /\\/(red|blue|green|yellow|lightblue|purple|pink|orange)(-dot)?\\.png/;\r\n var shadowSize = new google.maps.Size(59, 32);\r\n var shadowPoint = new google.maps.Point(16, 32);\r\n if (stdRegEx.test(icon.href)) {\r\n // A standard GMap-style marker icon\r\n icon.shadow = {\r\n url: 'http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png', // url\r\n size: shadowSize, // size\r\n origin: null, // origin\r\n anchor: shadowPoint, // anchor\r\n scaledSize: shadowSize // scaledSize\r\n };\r\n } else if (icon.href.indexOf('-pushpin.png') > -1) {\r\n // Pushpin marker icon\r\n icon.shadow = {\r\n url: 'http://maps.google.com/mapfiles/ms/micons/pushpin_shadow.png', // url\r\n size: shadowSize, // size\r\n origin: null, // origin\r\n anchor: shadowPoint, // anchor\r\n scaledSize: shadowSize // scaledSize\r\n };\r\n } /* else {\r\n // Other MyMaps KML standard icon\r\n icon.shadow = new google.maps.MarkerImage(\r\n icon.href.replace('.png', '.shadow.png'), // url\r\n shadowSize, // size\r\n null, // origin\r\n anchorPoint, // anchor\r\n shadowSize // scaledSize\r\n );\r\n } */\r\n }\r\n\r\n var processStyles = function (doc) {\r\n for (var styleID in doc.styles) {\r\n processStyleID(doc.styles[styleID]);\r\n }\r\n };\r\n\r\n var createMarker = function (placemark, doc) {\r\n // create a Marker to the map from a placemark KML object\r\n var icon = placemark.style.icon;\r\n\r\n if (!icon.marker && icon.img) {\r\n // yay, single point of failure is holding up multiple markers...\r\n icon.markerBacklog = icon.markerBacklog || [];\r\n icon.markerBacklog.push([placemark, doc]);\r\n return;\r\n }\r\n\r\n // Load basic marker properties\r\n var markerOptions = geoXML3.combineOptions(parserOptions.markerOptions, {\r\n map: parserOptions.map,\r\n position: new google.maps.LatLng(placemark.Point.coordinates[0].lat, placemark.Point.coordinates[0].lng),\r\n title: placemark.name,\r\n zIndex: Math.round(placemark.Point.coordinates[0].lat * -100000) << 5,\r\n icon: icon.marker,\r\n shadow: icon.shadow,\r\n flat: !icon.shadow,\r\n visible: placemark.visibility\r\n });\r\n\r\n // Create the marker on the map\r\n var marker = new google.maps.Marker(markerOptions);\r\n if (!!doc) doc.markers.push(marker);\r\n\r\n // Set up and create the infowindow if it is not suppressed\r\n createInfoWindow(placemark, doc, marker);\r\n placemark.marker = marker;\r\n return marker;\r\n };\r\n\r\n var createOverlay = function (groundOverlay, doc) {\r\n // Add a ProjectedOverlay to the map from a groundOverlay KML object\r\n\r\n if (!window.ProjectedOverlay) {\r\n throw 'geoXML3 error: ProjectedOverlay not found while rendering GroundOverlay from KML';\r\n }\r\n\r\n var bounds = new google.maps.LatLngBounds(\r\n new google.maps.LatLng(groundOverlay.latLonBox.south, groundOverlay.latLonBox.west),\r\n new google.maps.LatLng(groundOverlay.latLonBox.north, groundOverlay.latLonBox.east)\r\n );\r\n var overlayOptions = geoXML3.combineOptions(parserOptions.overlayOptions, { percentOpacity: groundOverlay.opacity * 100 });\r\n var overlay = new ProjectedOverlay(parserOptions.map, groundOverlay.icon.href, bounds, overlayOptions);\r\n\r\n if (!!doc) {\r\n doc.ggroundoverlays = doc.ggroundoverlays || [];\r\n doc.ggroundoverlays.push(overlay);\r\n }\r\n\r\n return overlay;\r\n };\r\n\r\n // Create Polyline\r\n var createPolyline = function (placemark, doc) {\r\n var paths = [];\r\n var bounds = new google.maps.LatLngBounds();\r\n if (placemark.LineString) {\r\n for (var j = 0; j < placemark.LineString.length; j++) {\r\n var path = [];\r\n var coords = placemark.LineString[j].coordinates;\r\n for (var i = 0; i < coords.length; i++) {\r\n var pt = new google.maps.LatLng(coords[i].lat, coords[i].lng);\r\n path.push(pt);\r\n bounds.extend(pt);\r\n }\r\n paths.push(path);\r\n }\r\n } else if (placemark.Track) {\r\n for (var j = 0; j < placemark.Track.length; j++) {\r\n var path = [];\r\n var coords = placemark.Track[j].coordinates;\r\n for (var i = 0; i < coords.length; i++) {\r\n var pt = new google.maps.LatLng(coords[i].lat, coords[i].lng);\r\n path.push(pt);\r\n bounds.extend(pt);\r\n }\r\n paths.push(path);\r\n }\r\n }\r\n // point to open the infowindow if triggered\r\n var point = paths[0][Math.floor(path.length / 2)];\r\n // Load basic polyline properties\r\n var kmlStrokeColor = kmlColor(placemark.style.line.color, placemark.style.line.colorMode);\r\n var polyOptions = geoXML3.combineOptions(parserOptions.polylineOptions, {\r\n map: parserOptions.map,\r\n path: path,\r\n strokeColor: kmlStrokeColor.color,\r\n strokeWeight: placemark.style.line.width,\r\n strokeOpacity: kmlStrokeColor.opacity,\r\n title: placemark.name,\r\n visible: placemark.visibility\r\n });\r\n if (paths.length > 1) {\r\n polyOptions.paths = paths;\r\n var p = new MultiGeometry(polyOptions);\r\n } else {\r\n polyOptions.path = paths[0];\r\n var p = new google.maps.Polyline(polyOptions);\r\n }\r\n p.bounds = bounds;\r\n\r\n // setup and create the infoWindow if it is not suppressed\r\n createInfoWindow(placemark, doc, p);\r\n if (!!doc) doc.gpolylines.push(p);\r\n placemark.polyline = p;\r\n return p;\r\n }\r\n\r\n // Create Polygon\r\n var createPolygon = function (placemark, doc) {\r\n var bounds = new google.maps.LatLngBounds();\r\n var pathsLength = 0;\r\n var paths = [];\r\n for (var polygonPart = 0; polygonPart < placemark.Polygon.length; polygonPart++) {\r\n for (var j = 0; j < placemark.Polygon[polygonPart].outerBoundaryIs.length; j++) {\r\n var coords = placemark.Polygon[polygonPart].outerBoundaryIs[j].coordinates;\r\n var path = [];\r\n for (var i = 0; i < coords.length; i++) {\r\n var pt = new google.maps.LatLng(coords[i].lat, coords[i].lng);\r\n path.push(pt);\r\n bounds.extend(pt);\r\n }\r\n paths.push(path);\r\n pathsLength += path.length;\r\n }\r\n for (var j = 0; j < placemark.Polygon[polygonPart].innerBoundaryIs.length; j++) {\r\n var coords = placemark.Polygon[polygonPart].innerBoundaryIs[j].coordinates;\r\n var path = [];\r\n for (var i = 0; i < coords.length; i++) {\r\n var pt = new google.maps.LatLng(coords[i].lat, coords[i].lng);\r\n path.push(pt);\r\n bounds.extend(pt);\r\n }\r\n paths.push(path);\r\n pathsLength += path.length;\r\n }\r\n }\r\n\r\n // Load basic polygon properties\r\n var kmlStrokeColor = kmlColor(placemark.style.line.color, placemark.style.line.colorMode);\r\n var kmlFillColor = kmlColor(placemark.style.poly.color, placemark.style.poly.colorMode);\r\n if (!placemark.style.poly.fill) kmlFillColor.opacity = 0.0;\r\n var strokeWeight = placemark.style.line.width;\r\n if (!placemark.style.poly.outline) {\r\n strokeWeight = 0;\r\n kmlStrokeColor.opacity = 0.0;\r\n }\r\n var polyOptions = geoXML3.combineOptions(parserOptions.polygonOptions, {\r\n map: parserOptions.map,\r\n paths: paths,\r\n title: placemark.name,\r\n strokeColor: kmlStrokeColor.color,\r\n strokeWeight: strokeWeight,\r\n strokeOpacity: kmlStrokeColor.opacity,\r\n fillColor: kmlFillColor.color,\r\n fillOpacity: kmlFillColor.opacity,\r\n visible: placemark.visibility\r\n });\r\n var p = new google.maps.Polygon(polyOptions);\r\n p.bounds = bounds;\r\n\r\n createInfoWindow(placemark, doc, p);\r\n\r\n if (!!doc) doc.gpolygons.push(p);\r\n placemark.polygon = p;\r\n return p;\r\n }\r\n\r\n var createInfoWindow = function (placemark, doc, gObj) {\r\n var bStyle = placemark.style.balloon;\r\n var vars = placemark.vars;\r\n\r\n if (!placemark.balloonVisibility || bStyle.displayMode === 'hide') return;\r\n\r\n // define geDirections \r\n if (placemark.latlng &&\r\n (!parserOptions.suppressDirections || !parserOptions.suppressDirections)) {\r\n vars.directions.push('sll=' + placemark.latlng.toUrlValue());\r\n\r\n var url = 'http://maps.google.com/maps?' + vars.directions.join('&');\r\n var address = encodeURIComponent(vars.val.address || placemark.latlng.toUrlValue()).replace(/\\%20/g, '+');\r\n\r\n vars.val.geDirections = 'To Here - From Here';\r\n }\r\n else vars.val.geDirections = '';\r\n\r\n // add in the variables\r\n var iwText = bStyle.text.replace(/\\$\\[(\\w+(\\/displayName)?)\\]/g, function (txt, n, dn) { return dn ? vars.display[n] : vars.val[n]; });\r\n var classTxt = 'geoxml3_infowindow geoxml3_style_' + placemark.styleID;\r\n\r\n // color styles\r\n var styleArr = [];\r\n if (bStyle.bgColor != 'ffffffff') styleArr.push('background: ' + kmlColor(bStyle.bgColor).color + ';');\r\n if (bStyle.textColor != 'ff000000') styleArr.push('color: ' + kmlColor(bStyle.textColor).color + ';');\r\n var styleProp = styleArr.length ? ' style=\"' + styleArr.join(' ') + '\"' : '';\r\n\r\n var infoWindowOptions = geoXML3.combineOptions(parserOptions.infoWindowOptions, {\r\n content: '
' + iwText + '
',\r\n pixelOffset: new google.maps.Size(0, 2)\r\n });\r\n\r\n gObj.infoWindow = parserOptions.infoWindow || new google.maps.InfoWindow(infoWindowOptions);\r\n gObj.infoWindowOptions = infoWindowOptions;\r\n\r\n // Info Window-opening event handler\r\n google.maps.event.addListener(gObj, 'click', function (e) {\r\n //window.location.href = redirectUrl;\r\n });\r\n }\r\n\r\n return {\r\n // Expose some properties and methods\r\n\r\n options: parserOptions,\r\n docs: docs,\r\n docsByUrl: docsByUrl,\r\n kmzMetaData: kmzMetaData,\r\n\r\n parse: parse,\r\n render: render,\r\n parseKmlString: parseKmlString,\r\n hideDocument: hideDocument,\r\n showDocument: showDocument,\r\n processStyles: processStyles,\r\n createMarker: createMarker,\r\n createOverlay: createOverlay,\r\n createPolyline: createPolyline,\r\n createPolygon: createPolygon\r\n };\r\n};\r\n// End of KML Parser\r\n\r\n// Helper objects and functions\r\ngeoXML3.getOpacity = function (kmlColor) {\r\n // Extract opacity encoded in a KML color value. Returns a number between 0 and 1.\r\n if (!!kmlColor &&\r\n (kmlColor !== '') &&\r\n (kmlColor.length == 8)) {\r\n var transparency = parseInt(kmlColor.substr(0, 2), 16);\r\n return transparency / 255;\r\n } else {\r\n return 1;\r\n }\r\n};\r\n\r\n// Log a message to the debugging console, if one exists\r\ngeoXML3.log = function (msg) {\r\n if (!!window.console) {\r\n console.log(msg);\r\n } else { alert(\"log:\" + msg); }\r\n};\r\n\r\n/**\r\n * Creates a new parserOptions object.\r\n * @class GeoXML3 parser options.\r\n * @param {Object} overrides Any options you want to declare outside of the defaults should be included here.\r\n * @property {google.maps.Map} map The API map on which geo objects should be rendered.\r\n * @property {google.maps.MarkerOptions} markerOptions If the parser is adding Markers to the map itself, any options specified here will be applied to them.\r\n * @property {google.maps.InfoWindowOptions} infoWindowOptions If the parser is adding Markers to the map itself, any options specified here will be applied to their attached InfoWindows.\r\n * @property {ProjectedOverlay.options} overlayOptions If the parser is adding ProjectedOverlays to the map itself, any options specified here will be applied to them.\r\n */\r\ngeoXML3.parserOptions = function (overrides) {\r\n this.map = null,\r\n /** If true, the parser will automatically move the map to a best-fit of the geodata after parsing of a KML document completes.\r\n * @type Boolean\r\n * @default true\r\n */\r\n this.zoom = true,\r\n /**#@+ @type Boolean\r\n * @default false */\r\n /** If true, only a single Marker created by the parser will be able to have its InfoWindow open at once (simulating the behavior of GMaps API v2). */\r\n this.singleInfoWindow = false,\r\n /** If true, suppresses the rendering of info windows. */\r\n this.suppressInfoWindows = false,\r\n /**\r\n * Control whether to process styles now or later.\r\n *\r\n *

By default, the parser only processes KML <Style> elements into their GMaps equivalents\r\n * if it will be creating its own Markers (the createMarker option is null). Setting this option\r\n * to true will force such processing to happen anyway, useful if you're going to be calling parser.createMarker\r\n * yourself later. OTOH, leaving this option false removes runtime dependency on the GMaps API, enabling\r\n * the use of geoXML3 as a standalone KML parser.

\r\n */\r\n this.processStyles = false,\r\n /**#@-*/\r\n this.markerOptions = {},\r\n this.infoWindowOptions = {},\r\n this.overlayOptions = {},\r\n\r\n /**#@+ @event */\r\n /** This function will be called when parsing of a KML document is complete.\r\n * @param {geoXML3.parser#docs} doc Parsed KML data. */\r\n this.afterParse = null,\r\n /** This function will be called when parsing of a KML document is complete.\r\n * @param {geoXML3.parser#docs} doc Parsed KML data. */\r\n this.failedParse = null,\r\n /**\r\n * If supplied, this function will be called once for each marker in the KML document, instead of the parser adding its own Marker to the map.\r\n * @param {geoXML3.parser.render#placemark} placemark Placemark object.\r\n * @param {geoXML3.parser#docs} doc Parsed KML data.\r\n */\r\n this.createMarker = null,\r\n /**\r\n * If supplied, this function will be called once for each in the KML document, instead of the parser adding its own ProjectedOverlay to the map.\r\n * @param {geoXML3.parser.render#groundOverlay} groundOverlay GroundOverlay object.\r\n * @param {geoXML3.parser#docs} doc Parsed KML data.\r\n */\r\n this.createOverlay = null;\r\n /**#@-*/\r\n\r\n if (overrides) {\r\n for (var prop in overrides) {\r\n if (overrides.hasOwnProperty(prop)) this[prop] = overrides[prop];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Combine two options objects: a set of default values and a set of override values.\r\n *\r\n * @deprecated This has been replaced with {@link geoXML3.parserOptions#combineOptions}.\r\n * @param {geoXML3.parserOptions|Object} overrides Override values.\r\n * @param {geoXML3.parserOptions|Object} defaults Default values.\r\n * @return {geoXML3.parserOptions} Combined result.\r\n */\r\ngeoXML3.combineOptions = function (overrides, defaults) {\r\n var result = {};\r\n if (!!overrides) {\r\n for (var prop in overrides) {\r\n if (overrides.hasOwnProperty(prop)) result[prop] = overrides[prop];\r\n }\r\n }\r\n if (!!defaults) {\r\n for (prop in defaults) {\r\n if (defaults.hasOwnProperty(prop) && result[prop] === undefined) result[prop] = defaults[prop];\r\n }\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Combine two options objects: a set of default values and a set of override values.\r\n *\r\n * @function\r\n * @param {geoXML3.parserOptions|Object} overrides Override values.\r\n * @param {geoXML3.parserOptions|Object} defaults Default values.\r\n * @return {geoXML3.parserOptions} Combined result.\r\n */\r\ngeoXML3.parserOptions.prototype.combineOptions = geoXML3.combineOptions;\r\n\r\n// Retrieve an XML document from url and pass it to callback as a DOM document\r\ngeoXML3.fetchers = [];\r\n\r\n/**\r\n * Parses a XML string.\r\n *\r\n *

Parses the given XML string and returns the parsed document in a\r\n * DOM data structure. This function will return an empty DOM node if\r\n * XML parsing is not supported in this browser.

\r\n *\r\n * @param {String} str XML string.\r\n * @return {Element|Document} DOM.\r\n */\r\ngeoXML3.xmlParse = function (str) {\r\n if ((typeof ActiveXObject != 'undefined') || (\"ActiveXObject\" in window)) {\r\n var doc = new ActiveXObject('Microsoft.XMLDOM');\r\n doc.loadXML(str);\r\n return doc;\r\n }\r\n\r\n if (typeof DOMParser != 'undefined') {\r\n return (new DOMParser()).parseFromString(str, 'text/xml');\r\n }\r\n\r\n return document.createElement('div', null);\r\n}\r\n\r\n/**\r\n * Checks for XML parse error.\r\n *\r\n * @param {xmlDOM} XML DOM.\r\n * @return boolean.\r\n */\r\n// from http://stackoverflow.com/questions/11563554/how-do-i-detect-xml-parsing-errors-when-using-javascripts-domparser-in-a-cross\r\ngeoXML3.isParseError = function (parsedDocument) {\r\n if ((typeof ActiveXObject != 'undefined') || (\"ActiveXObject\" in window))\r\n return false;\r\n // parser and parsererrorNS could be cached on startup for efficiency\r\n var p = new DOMParser(),\r\n errorneousParse = p.parseFromString('<', 'text/xml'),\r\n parsererrorNS = errorneousParse.getElementsByTagName(\"parsererror\")[0].namespaceURI;\r\n\r\n if (parsererrorNS === 'http://www.w3.org/1999/xhtml') {\r\n // In PhantomJS the parseerror element doesn't seem to have a special namespace, so we are just guessing here :(\r\n return parsedDocument.getElementsByTagName(\"parsererror\").length > 0;\r\n }\r\n\r\n return parsedDocument.getElementsByTagNameNS(parsererrorNS, 'parsererror').length > 0;\r\n};\r\n\r\n/**\r\n * Fetches a XML document.\r\n *\r\n *

Fetches/parses the given XML URL and passes the parsed document (in a\r\n * DOM data structure) to the given callback. Documents are downloaded\r\n * and parsed asynchronously.

\r\n *\r\n * @param {String} url URL of XML document. Must be uncompressed XML only.\r\n * @param {Function(Document)} callback Function to call when the document is processed.\r\n */\r\ngeoXML3.fetchXML = function (url, callback) {\r\n function timeoutHandler() { callback(); };\r\n\r\n var xhrFetcher = new Object();\r\n if (!!geoXML3.fetchers.length) xhrFetcher = geoXML3.fetchers.pop();\r\n else if (!!window.XMLHttpRequest) xhrFetcher.fetcher = new window.XMLHttpRequest(); // Most browsers\r\n else if (!!window.ActiveXObject) { // Some IE\r\n // the many versions of IE's XML fetchers\r\n var AXOs = [\r\n 'MSXML2.XMLHTTP.6.0',\r\n 'MSXML2.XMLHTTP.5.0',\r\n 'MSXML2.XMLHTTP.4.0',\r\n 'MSXML2.XMLHTTP.3.0',\r\n 'MSXML2.XMLHTTP',\r\n 'Microsoft.XMLHTTP',\r\n 'MSXML.XMLHTTP'\r\n ];\r\n for (var i = 0; i < AXOs.length; i++) {\r\n try { xhrFetcher.fetcher = new ActiveXObject(AXOs[i]); break; }\r\n catch (e) { continue; }\r\n }\r\n if (!xhrFetcher.fetcher) {\r\n geoXML3.log('Unable to create XHR object');\r\n callback(null);\r\n return null;\r\n }\r\n }\r\n\r\n xhrFetcher.fetcher.open('GET', url, true);\r\n if (!!xhrFetcher.fetcher.overrideMimeType) xhrFetcher.fetcher.overrideMimeType('text/xml');\r\n xhrFetcher.fetcher.onreadystatechange = function () {\r\n if (xhrFetcher.fetcher.readyState === 4) {\r\n // Retrieval complete\r\n if (!!xhrFetcher.xhrtimeout) clearTimeout(xhrFetcher.xhrtimeout);\r\n if (xhrFetcher.fetcher.status >= 400) {\r\n geoXML3.log('HTTP error ' + xhrFetcher.fetcher.status + ' retrieving ' + url);\r\n callback();\r\n }\r\n // Returned successfully\r\n else {\r\n if (xhrFetcher.fetcher.responseXML) {\r\n // Sometimes IE will get the data, but won't bother loading it as an XML doc\r\n var xml = xhrFetcher.fetcher.responseXML;\r\n if (xml && !xml.documentElement && !xml.ownerElement) {\r\n xml.loadXML(xhrFetcher.fetcher.responseText);\r\n }\r\n } else {// handle valid xml sent with wrong MIME type \r\n xml = geoXML3.xmlParse(xhrFetcher.fetcher.responseText);\r\n }\r\n // handle parse errors\r\n if (xml.parseError && (xml.parseError.errorCode != 0)) {\r\n geoXML3.log(\"XML parse error \" + xml.parseError.errorCode + \", \" + xml.parseError.reason + \"\\nLine:\" + xml.parseError.line + \", Position:\" + xml.parseError.linepos + \", srcText:\" + xml.parseError.srcText);\r\n xml = \"failed parse\"\r\n } else if (geoXML3.isParseError(xml)) {\r\n geoXML3.log(\"XML parse error\");\r\n xml = \"failed parse\"\r\n }\r\n callback(xml);\r\n }\r\n // We're done with this fetcher object\r\n geoXML3.fetchers.push(xhrFetcher);\r\n }\r\n };\r\n\r\n xhrFetcher.xhrtimeout = setTimeout(timeoutHandler, 60000);\r\n xhrFetcher.fetcher.send(null);\r\n return null;\r\n};\r\n\r\nvar IEversion = function () {\r\n // http://msdn.microsoft.com/workshop/author/dhtml/overview/browserdetection.asp\r\n // Returns the version of Internet Explorer or a -1\r\n // (indicating the use of another browser).\r\n var rv = -1; // Return value assumes failure\r\n if (navigator.appName == 'Microsoft Internet Explorer') {\r\n var ua = navigator.userAgent;\r\n var re = new RegExp(\"MSIE ([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\r\n/**\r\n * Fetches a KMZ document.\r\n *\r\n *

Fetches/parses the given ZIP URL, parses each image file, and passes\r\n * the parsed KML document to the given callback. Documents are downloaded\r\n * and parsed asynchronously, though the KML file is always passed after the\r\n * images have been processed, in case the callback requires the image data.

\r\n *\r\n * @requires ZipFile.complete.js\r\n * @param {String} url URL of KMZ document. Must be a valid KMZ/ZIP archive.\r\n * @param {Function(Document)} callback Function to call when the document is processed.\r\n * @param {geoXML3.parser} parser A geoXML3.parser object. This is used to populate the KMZ image data.\r\n * @author Brendan Byrd\r\n * @see http://code.google.com/apis/kml/documentation/kmzarchives.html\r\n */\r\ngeoXML3.fetchZIP = function (url, callback, parser) {\r\n // Just need a single 'new' declaration with a really long function...\r\n var zipFile = new ZipFile(url, function (zip) {\r\n // Retrieval complete\r\n\r\n // Check for ERRORs in zip.status\r\n for (var i = 0; i < zip.status.length; i++) {\r\n var msg = zip.status[i];\r\n if (msg.indexOf(\"ERROR\") == 0) {\r\n geoXML3.log('HTTP/ZIP error retrieving ' + url + ': ' + msg);\r\n callback();\r\n return;\r\n }\r\n else if (msg.indexOf(\"EXCEPTION\") == 0) {\r\n geoXML3.log('HTTP/ZIP exception retrieving ' + url + ': ' + msg);\r\n callback();\r\n return;\r\n } else if (msg.indexOf(\"WARNING\") == 0) { // non-fatal, but still might be useful\r\n geoXML3.log('HTTP/ZIP warning retrieving ' + url + ': ' + msg);\r\n } else if (msg.indexOf(\"INFO\") == 0) { // non-fatal, but still might be useful\r\n geoXML3.log('HTTP/ZIP info retrieving ' + url + ': ' + msg);\r\n }\r\n }\r\n\r\n // Make sure KMZ structure is according to spec (with a single KML file in the root dir)\r\n var KMLCount = 0;\r\n var KML;\r\n for (var i = 0; i < zip.entries.length; i++) {\r\n var name = zip.entries[i].name;\r\n if (!/\\.kml$/.test(name)) continue;\r\n\r\n KMLCount++;\r\n if (KMLCount == 1) KML = i;\r\n else {\r\n geoXML3.log('KMZ warning retrieving ' + url + ': found extra KML \"' + name + '\" in KMZ; discarding...');\r\n }\r\n }\r\n\r\n // Returned successfully, but still needs extracting\r\n var baseUrl = cleanURL(defileURL(url), url) + '/';\r\n var kmlProcessing = { // this is an object just so it gets passed properly\r\n timer: null,\r\n extractLeft: 0,\r\n timerCalls: 0\r\n };\r\n var extractCb = function (entry, entryContent) {\r\n var mdUrl = cleanURL(baseUrl, entry.name);\r\n var ext = entry.name.substring(entry.name.lastIndexOf(\".\") + 1).toLowerCase();\r\n kmlProcessing.extractLeft--;\r\n\r\n if ((typeof entryContent.description == \"string\") && (entryContent.name == \"Error\")) {\r\n geoXML3.log('KMZ error extracting ' + mdUrl + ': ' + entryContent.description);\r\n callback();\r\n return;\r\n }\r\n\r\n // MIME types that can be used in KML\r\n var mime;\r\n if (ext === 'jpg') ext = 'jpeg';\r\n if (/^(gif|jpeg|png)$/.test(ext)) mime = 'image/' + ext;\r\n else if (ext === 'mp3') mime = 'audio/mpeg';\r\n else if (ext === 'm4a') mime = 'audio/mp4';\r\n else if (ext === 'm4a') mime = 'audio/MP4-LATM';\r\n else mime = 'application/octet-stream';\r\n\r\n parser.kmzMetaData[mdUrl] = {};\r\n parser.kmzMetaData[mdUrl].entry = entry;\r\n // data:image/gif;base64,R0lGODlhEAAOALMA...\r\n parser.kmzMetaData[mdUrl].dataUrl = 'data:' + mime + ';base64,' + base64Encode(entryContent);\r\n // IE cannot handle GET requests beyond 2071 characters, even if it's an inline image\r\n if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)) {\r\n if (((IEversion() < 8.0) &&\r\n (parser.kmzMetaData[mdUrl].dataUrl.length > 2071)) ||\r\n ((IEversion < 9.0) &&\r\n (parser.kmzMetaData[mdUrl].dataUrl.length > 32767))) {\r\n parser.kmzMetaData[mdUrl].dataUrl =\r\n // this is a simple IE icon; to hint at the problem...\r\n 'data:image/gif;base64,R0lGODlhDwAQAOMPADBPvSpQ1Dpoyz1p6FhwvU2A6ECP63CM04CWxYCk+V6x+UK++Jao3rvC3fj7+v///yH5BAEKAA8ALAAAAAAPABAAAASC8Mk5mwCAUMlWwcLRHEelLA' +\r\n 'oGDMgzSsiyGCAhCETDPMh5XQCBwYBrNBIKWmg0MCQHj8MJU5IoroYCY6AAAgrDIbbQDGIK6DR5UPhlNo0JAlSUNAiDgH7eNAxEDWAKCQM2AAFheVxYAA0AIkFOJ1gBcQQaUQKKA5w7LpcEBwkJaKMUEQA7';\r\n }\r\n }\r\n parser.kmzMetaData[internalSrc(entry.name)] = parser.kmzMetaData[mdUrl];\r\n\r\n };\r\n var kmlExtractCb = function (entry, entryContent) {\r\n if ((typeof entryContent.description == \"string\") && (entryContent.name == \"Error\")) {\r\n geoXML3.log('KMZ error extracting ' + entry.name + ': ' + entryContent.description);\r\n callback();\r\n return;\r\n }\r\n\r\n // check to see if the KML is the last file extracted\r\n clearTimeout(kmlProcessing.timer);\r\n if (kmlProcessing.extractLeft <= 1) {\r\n kmlProcessing.extractLeft--;\r\n callback(geoXML3.xmlParse(entryContent));\r\n return;\r\n }\r\n else {\r\n // KML file isn't last yet; it may need to use those files, so wait a bit (100ms)\r\n kmlProcessing.timerCalls++;\r\n if (kmlProcessing.timerCalls < 100) {\r\n kmlProcessing.timer = setTimeout(function () { kmlExtractCb(entry, entryContent); }, 100);\r\n }\r\n else {\r\n geoXML3.log('KMZ warning extracting ' + url + ': entire ZIP has not been extracted after 10 seconds; running through KML, anyway...');\r\n kmlProcessing.extractLeft--;\r\n callback(geoXML3.xmlParse(entryContent));\r\n }\r\n }\r\n return;\r\n };\r\n for (var i = 0; i < zip.entries.length; i++) {\r\n var entry = zip.entries[i];\r\n var ext = entry.name.substring(entry.name.lastIndexOf(\".\") + 1).toLowerCase();\r\n if (!/^(gif|jpe?g|png|kml)$/.test(ext)) continue; // not going to bother to extract files we don't support\r\n if (ext === \"kml\" && i != KML) continue; // extra KMLs get discarded\r\n if (!parser && ext != \"kml\") continue; // cannot store images without a parser object\r\n\r\n // extract asynchronously\r\n kmlProcessing.extractLeft++;\r\n if (ext === \"kml\") entry.extract(kmlExtractCb);\r\n else entry.extract(extractCb);\r\n }\r\n }); //,3 for most verbose logging\r\n\r\n};\r\n\r\n/**\r\n * Extract the text value of a DOM node, with leading and trailing whitespace trimmed.\r\n *\r\n * @param {Element} node XML node/element.\r\n * @param {Any} delVal Default value if the node doesn't exist.\r\n * @return {String|Null}\r\n */\r\ngeoXML3.nodeValue = function (node, defVal) {\r\n var retStr = \"\";\r\n if (!node) {\r\n return (typeof defVal === 'undefined' || defVal === null) ? null : defVal;\r\n }\r\n if (node.nodeType == 3 || node.nodeType == 4 || node.nodeType == 2) {\r\n retStr += node.nodeValue;\r\n } else if (node.nodeType == 1 || node.nodeType == 9 || node.nodeType == 11) {\r\n for (var i = 0; i < node.childNodes.length; ++i) {\r\n retStr += arguments.callee(node.childNodes[i]);\r\n }\r\n }\r\n return retStr;\r\n};\r\n\r\n/**\r\n * Loosely translate various values of a DOM node to a boolean.\r\n *\r\n * @param {Element} node XML node/element.\r\n * @param {Boolean} delVal Default value if the node doesn't exist.\r\n * @return {Boolean|Null}\r\n */\r\ngeoXML3.getBooleanValue = function (node, defVal) {\r\n var nodeContents = geoXML3.nodeValue(node);\r\n if (nodeContents === null) return defVal || false;\r\n nodeContents = parseInt(nodeContents);\r\n if (isNaN(nodeContents)) return true;\r\n if (nodeContents == 0) return false;\r\n else return true;\r\n}\r\n\r\n/**\r\n * Browser-normalized version of getElementsByTagNameNS.\r\n *\r\n *

Required because IE8 doesn't define it.

\r\n *\r\n * @param {Element|Document} node DOM object.\r\n * @param {String} namespace Full namespace URL to search against.\r\n * @param {String} tagname XML local tag name.\r\n * @return {Array of Elements}\r\n * @author Brendan Byrd\r\n */\r\ngeoXML3.getElementsByTagNameNS = function (node, namespace, tagname) {\r\n if (node && typeof node.getElementsByTagNameNS != 'undefined') return node.getElementsByTagNameNS(namespace, tagname);\r\n if (!node) return [];\r\n\r\n var root = node.documentElement || node.ownerDocument && node.ownerDocument.documentElement;\r\n if (!root || !root.attributes) return [];\r\n\r\n // search for namespace prefix\r\n for (var i = 0; i < root.attributes.length; i++) {\r\n var attr = root.attributes[i];\r\n if (attr.prefix === 'xmlns' && attr.nodeValue === namespace) return node.getElementsByTagName(attr.baseName + ':' + tagname);\r\n else if (attr.nodeName === 'xmlns' && attr.nodeValue === namespace) {\r\n // default namespace\r\n if (typeof node.selectNodes != 'undefined') {\r\n // Newer IEs have the SelectionNamespace property that can be used with selectNodes\r\n if (!root.ownerDocument.getProperty('SelectionNamespaces'))\r\n root.ownerDocument.setProperty('SelectionNamespaces', \"xmlns:defaultNS='\" + namespace + \"'\");\r\n return node.selectNodes('.//defaultNS:' + tagname);\r\n }\r\n else {\r\n // Otherwise, you can still try to tack on the 'xmlns' attribute to root\r\n root.setAttribute('xmlns:defaultNS', namespace);\r\n return node.getElementsByTagName('defaultNS:' + tagname);\r\n }\r\n }\r\n }\r\n return geoXML3.getElementsByTagName(node, tagname); // try the unqualified version\r\n};\r\n\r\n/**\r\n * Browser-normalized version of getElementsByTagName.\r\n *\r\n *

Required because MSXML 6.0 will treat this function as a NS-qualified function,\r\n * despite the missing NS parameter.

\r\n *\r\n * @param {Element|Document} node DOM object.\r\n * @param {String} tagname XML local tag name.\r\n * @return {Array of Elements}\r\n * @author Brendan Byrd\r\n */\r\ngeoXML3.getElementsByTagName = function (node, tagname) {\r\n if (node && typeof node.getElementsByTagNameNS != 'undefined') return node.getElementsByTagName(tagname); // if it has both functions, it should be accurate\r\n // if (node && typeof node.selectNodes != 'undefined') return node.selectNodes(\".//*[local-name()='\" + tagname + \"']\");\r\n return node.getElementsByTagName(tagname); // hope for the best...\r\n}\r\n\r\n/**\r\n * Turn a directory + relative URL into an absolute one.\r\n *\r\n * @private\r\n * @param {String} d Base directory.\r\n * @param {String} s Relative URL.\r\n * @return {String} Absolute URL.\r\n * @author Brendan Byrd\r\n */\r\nvar toAbsURL = function (d, s) {\r\n var p, f, i;\r\n var h = location.protocol + \"://\" + location.host;\r\n\r\n if (!s.length) return '';\r\n if (/^\\w+:/.test(s)) return s;\r\n if (s.indexOf('/') == 0) return h + s;\r\n\r\n p = d.replace(/\\/[^\\/]*$/, '');\r\n f = s.match(/\\.\\.\\//g);\r\n if (f) {\r\n s = s.substring(f.length * 3);\r\n for (i = f.length; i--;) { p = p.substring(0, p.lastIndexOf('/')); }\r\n }\r\n\r\n return h + p + '/' + s;\r\n}\r\n\r\nvar internalSrc = function (src) {\r\n //this gets the full url\r\n var url = document.location.href;\r\n //this removes everything after the last slash in the path\r\n url = url.substring(0, url.lastIndexOf(\"/\") + 1);\r\n var internalPath = url + src;\r\n return internalPath;\r\n}\r\n\r\n/**\r\n * Remove current host from URL\r\n *\r\n * @private\r\n * @param {String} s Absolute or relative URL.\r\n * @return {String} Root-based relative URL.\r\n * @author Brendan Byrd\r\n */\r\nvar dehostURL = function (s) {\r\n var h = location.protocol + \"://\" + location.host;\r\n h = h.replace(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)])/g, '\\\\$1'); // quotemeta\r\n return s.replace(new RegExp('^' + h, 'i'), '');\r\n}\r\n\r\n/**\r\n * Removes all query strings, #IDs, '../' references, and\r\n * hosts from a URL.\r\n *\r\n * @private\r\n * @param {String} d Base directory.\r\n * @param {String} s Absolute or relative URL.\r\n * @return {String} Root-based relative URL.\r\n * @author Brendan Byrd\r\n */\r\nvar cleanURL = function (d, s) { return dehostURL(toAbsURL(d ? d.split('#')[0].split('?')[0] : defileURL(location.pathname), s ? s.split('#')[0].split('?')[0] : '')); }\r\n/**\r\n * Remove filename from URL\r\n *\r\n * @private\r\n * @param {String} s Relative URL.\r\n * @return {String} Base directory.\r\n * @author Brendan Byrd\r\n */\r\nvar defileURL = function (s) { return s ? s.substr(0, s.lastIndexOf('/') + 1) : '/'; }\r\n\r\n\r\n// Some extra Array subs for ease of use\r\n// http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array\r\nArray.prototype.hasObject = (\r\n !Array.indexOf ? function (obj) {\r\n var l = this.length + 1;\r\n while (l--) {\r\n if (this[l - 1] === obj) return true;\r\n }\r\n return false;\r\n } : function (obj) {\r\n return (this.indexOf(obj) !== -1);\r\n }\r\n);\r\nArray.prototype.hasItemInObj = function (name, item) {\r\n var l = this.length + 1;\r\n while (l--) {\r\n if (this[l - 1][name] === item) return true;\r\n }\r\n return false;\r\n};\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (obj, fromIndex) {\r\n if (fromIndex == null) {\r\n fromIndex = 0;\r\n } else if (fromIndex < 0) {\r\n fromIndex = Math.max(0, this.length + fromIndex);\r\n }\r\n for (var i = fromIndex, j = this.length; i < j; i++) {\r\n if (this[i] === obj) return i;\r\n }\r\n return -1;\r\n };\r\n}\r\nArray.prototype.indexOfObjWithItem = function (name, item, fromIndex) {\r\n if (fromIndex == null) {\r\n fromIndex = 0;\r\n } else if (fromIndex < 0) {\r\n fromIndex = Math.max(0, this.length + fromIndex);\r\n }\r\n for (var i = fromIndex, j = this.length; i < j; i++) {\r\n if (this[i][name] === item) return i;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Borrowed from jquery.base64.js, with some \"Array as input\" corrections\r\n *\r\n * @private\r\n * @param {Array of charCodes} input An array of byte ASCII codes (0-255).\r\n * @return {String} A base64-encoded string.\r\n * @author Brendan Byrd\r\n */\r\nvar base64Encode = function (input) {\r\n var keyString = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n var output = \"\";\r\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\r\n var i = 0;\r\n while (i < input.length) {\r\n chr1 = input[i++];\r\n chr2 = input[i++];\r\n chr3 = input[i++];\r\n enc1 = chr1 >> 2;\r\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n enc4 = chr3 & 63;\r\n\r\n if (chr2 == undefined) enc3 = enc4 = 64;\r\n else if (chr3 == undefined) enc4 = 64;\r\n\r\n output = output + keyString.charAt(enc1) + keyString.charAt(enc2) + keyString.charAt(enc3) + keyString.charAt(enc4);\r\n }\r\n return output;\r\n};\r\n","/**\r\n * @desc Load google maps\r\n * html example:
\r\n * js example: if(document.getElementById('map-canvas').length){ loadScript(); }\r\n * @author Danni Larsen - DLA, Martin Haun - MHA\r\n * @requires: It also requires something to get the LAT, LNG and ZOOMLEVEL, and append it to the map-canvas element, as data-attibutes (umbraco 7: https://our.umbraco.org/projects/backoffice-extensions/angulargooglemaps) - remember to set a height for the map-canvas element!\r\n*/\r\n\r\n\r\n// Async load the GMaps API\r\nvar novicell = novicell || {};\r\n\r\nnovicell.map = new function () {\r\n var isLoaded = false;\r\n\r\n this.init = function () {\r\n document.onscroll = function () {\r\n if (!isLoaded && isScrolledIntoView(document.getElementById('js-site-footer-map'))) {\r\n isLoaded = true;\r\n var script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyBmL2NKoyJPNSV8yllyapSCXgPcH-mXoio&v=3.exp&callback=initialize';\r\n document.body.appendChild(script);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nvar initialize = function () {\r\n // Get map element from HTML\r\n var mapElement = document.getElementById('js-site-footer-map');\r\n\r\n // Get city\r\n var city = mapElement.dataset.mapCity;\r\n\r\n // Set cordinates of the map\r\n var coordinates = new google.maps.LatLng(56.0337687, 10.2457146);\r\n\r\n // Set map options\r\n var mapOptions = {\r\n zoom: 10,\r\n disableDefaultUI: false,\r\n draggable: false,\r\n scrollwheel: false,\r\n center: coordinates,\r\n streetViewControl: false,\r\n mapTypeControl: false\r\n };\r\n\r\n // Set the google maps element\r\n var map = new google.maps.Map(mapElement, mapOptions);\r\n\r\n // Setup KML\r\n var kmlParser = new geoXML3.parser({ map: map, suppressInfoWindows: true });\r\n kmlParser.parse('/KmlFiles/' + city.toLowerCase() + '.kml');\r\n\r\n // Recalculate center on resize\r\n google.maps.event.addDomListener(window, \"resize\", function () {\r\n var center = map.getCenter();\r\n google.maps.event.trigger(map, \"resize\");\r\n map.setCenter(center);\r\n });\r\n}\r\n\r\nfunction getBoundsZoomLevel(bounds, mapElementWidth, mapElementHeight) {\r\n var WORLD_DIM = { height: 256, width: 256 };\r\n var ZOOM_MAX = 21;\r\n\r\n function latRad(lat) {\r\n var sin = Math.sin(lat * Math.PI / 180);\r\n var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;\r\n return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;\r\n }\r\n\r\n function zoom(mapPx, worldPx, fraction) {\r\n return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);\r\n }\r\n\r\n var ne = bounds.getNorthEast();\r\n var sw = bounds.getSouthWest();\r\n\r\n var latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI;\r\n\r\n var lngDiff = ne.lng() - sw.lng();\r\n var lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;\r\n\r\n var latZoom = zoom(mapElementHeight, WORLD_DIM.height, latFraction);\r\n var lngZoom = zoom(mapElementWidth, WORLD_DIM.width, lngFraction);\r\n\r\n return Math.min(latZoom, lngZoom, ZOOM_MAX);\r\n}\r\n\r\n// Loads element as soon as it hit the viewport\r\nfunction isScrolledIntoView(el) {\r\n var elemTop = el.getBoundingClientRect().top;\r\n var elemBottom = el.getBoundingClientRect().bottom;\r\n\r\n return (elemBottom >= 0) && (elemTop <= window.innerHeight);\r\n}","/**\r\n * @desc new load embedded media script, it lazyloads embedded media\r\n * html example\r\n * js init example: novicell.embed.loadEmbeds();\r\n * @author Tommy Pedersen - TPE\r\n * @return generates preplay image\r\n * @requires jquery@1.11.3\r\n * @note: Just beautiful!\r\n*/\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.embed = novicell.embed || function () {\r\n var self = this;\r\n var lastRefreshWidth = 0;\r\n var refreshWidth = 50;\r\n\r\n this.loadEmbeds = function (callback) {\r\n $(\".nc-grid-embedmedia\").each(function () {\r\n if (!$(this).find(\".embed-media-item\").hasClass(\"loaded\")) {\r\n // if ($(this).visible(true) || $(this).data(\"load\") === \"always\") {\r\n if ($(this).has(\".embed-preview-image\").length) {\r\n $(this).find(\".embed-preview-image\").click(function () {\r\n $(this).attr(\"style\", \"display: none!important\");\r\n $(this).closest(\".nc-grid-embedmedia\").find(\"i\").attr(\"style\", \"display: none!important\");\r\n self.lazyEmbed($(this).parent().find(\".embed-media-item\"));\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n });\r\n } else {\r\n self.lazyEmbed($(this).find(\".embed-media-item\"));\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n }\r\n // }\r\n }\r\n });\r\n }\r\n\r\n this.onResize = function (callback) {\r\n if (window.innerWidth > lastRefreshWidth + refreshWidth || window.innerWidth < lastRefreshWidth - refreshWidth) {\r\n $('.nc-grid-embedmedia').each(function () {\r\n if (!$(this).has(\".embed-preview-image\").length) {\r\n self.lazyEmbed($(this).find(\".embed-media-item\"));\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n }\r\n });\r\n lastRefreshWidth = window.innerWidth;\r\n }\r\n }\r\n\r\n this.lazyEmbed = function (figure) {\r\n figure.attr(\"style\", \"display: block!important\");\r\n figure.addClass('loaded');\r\n var $embed = figure.find(\".embed\");\r\n var ratio, src, width;\r\n width = figure.width() != 0 ? figure.width() : $(figure).parent().width();\r\n ratio = $embed.data(\"ratio\");\r\n src = $embed.data(\"src\");\r\n $embed.attr(\"src\", src);\r\n $embed.attr(\"width\", width);\r\n $embed.attr(\"height\", width * ratio);\r\n }\r\n\r\n this.backofficeEmbeds = function (callback) {\r\n $(\".nc-grid-embedmedia\").each(function () {\r\n $(this).find(\".embed-preview-image\").remove();\r\n self.lazyEmbed($(this).find(\".embed-media-item\"));\r\n $(this).find(\".embed\").attr(\"src\", self.updateQueryStringParameter($(this).find(\".embed\").data(\"src\"), \"autoplay\", \"false\"))\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n this.updateQueryStringParameter = function (uri, key, value) {\r\n var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\r\n var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\r\n if (uri.match(re)) {\r\n return uri.replace(re, '$1' + key + \"=\" + value + '$2');\r\n }\r\n else {\r\n return uri + separator + key + \"=\" + value;\r\n }\r\n }\r\n\r\n // public functions:\r\n return {\r\n loadEmbeds: loadEmbeds,\r\n backofficeEmbeds: backofficeEmbeds,\r\n onResize: onResize\r\n };\r\n}();\r\n\r\n(function ($) {\r\n\r\n /**\r\n * Copyright 2012, Digital Fusion\r\n * Licensed under the MIT license.\r\n * http://teamdf.com/jquery-plugins/license/\r\n *\r\n * @author Sam Sehnert\r\n * @desc A small plugin that checks whether elements are within\r\n * the user visible viewport of a web browser.\r\n * only accounts for vertical position, not horizontal.\r\n */\r\n\r\n $.fn.visible = function (partial) {\r\n\r\n var $t = $(this),\r\n $w = $(window),\r\n viewTop = $w.scrollTop(),\r\n viewBottom = viewTop + $w.height(),\r\n _top = $t.offset().top,\r\n _bottom = _top + $t.height(),\r\n compareTop = partial === true ? _bottom : _top,\r\n compareBottom = partial === true ? _top : _bottom;\r\n\r\n return ((compareBottom <= viewBottom) && (compareTop >= viewTop));\r\n\r\n };\r\n\r\n})(jQuery);","/**\r\n * @desc Debouncing wrapper script\r\n * Credit: http://www.hnldesign.nl/work/code/debouncing-events-with-jquery/\r\n * examples:\r\n * $(window).smartresize(function(e){\r\n * // do stuff as soon as the user stops resizing his browser for longer than 100ms\r\n * })\r\n *\r\n * $(window).smartscroll(function(e){\r\n * // do stuff as soon as the user stops scrolling for longer than 100ms\r\n * })\r\n *\r\n * $(window).smartmousemove(function(e){\r\n * // do stuff as soon as the user stops moving his mouse for longer than 100ms\r\n * })\r\n * @author Danni Larsen - DLA\r\n * @param e - the event\r\n * @requires jquery\r\n*/\r\n\r\nvar deBouncer = function ($, cf, of, interval) {\r\n // deBouncer by hnldesign.nl\r\n // based on code by Paul Irish and the original debouncing function from John Hann\r\n // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/\r\n var debounce = function (func, threshold, execAsap) {\r\n var timeout;\r\n return function debounced() {\r\n var obj = this, args = arguments;\r\n function delayed() {\r\n if (!execAsap)\r\n func.apply(obj, args);\r\n timeout = null;\r\n }\r\n if (timeout)\r\n clearTimeout(timeout);\r\n else if (execAsap)\r\n func.apply(obj, args);\r\n timeout = setTimeout(delayed, threshold || interval);\r\n };\r\n };\r\n jQuery.fn[cf] = function (fn) { return fn ? this.bind(of, debounce(fn)) : this.trigger(cf); };\r\n};\r\n\r\n\r\n//register debouncing functions\r\n//deBouncer(jQuery,'new eventname', 'original eventname', timeout);\r\n//Note: keep the jQuery namespace in mind, don't overwrite existing functions!\r\n\r\ndeBouncer(jQuery, 'smartresize', 'resize', 150);\r\ndeBouncer(jQuery, 'smartscroll', 'scroll', 250);\r\n// deBouncer(jQuery,'smartmousemove', 'mousemove', 250);","var novicell = novicell || {};\r\n\r\n/* Novicell LazyloadContent\r\n* Original author: Adam Peter Nielsen\r\n* Load content only when visible via AJAX. Great for widgets that are only visible on some devices\r\n* ------\r\n* Dependencies: \r\n* Usage: novicell.lazyload.content(OPTIONAL-CALLBACK-FUNCTION);\r\n* HTML example:
\r\n* Optional: force lazyload via this attribute: data-load=\"always\"\r\n*/\r\n\r\nnovicell.lazyload = novicell.lazyload || function () {\r\n// var self = this;\r\n\r\n function content(callback) {\r\n\t\t$('.lazyload').each(function () {\r\n\t\t\tif ($(this).html() == '' && $(this).is(':visible') || $(this).data(\"load\") == \"always\") {\r\n\t\t\t\tif ($(this).attr('data-src').length > 4) {\r\n\t\t\t\t\t$(this).append($('
').addClass('loading'));\r\n\t\t\t\t\tvar path = $(this).data('src');\r\n\t\t\t\t\tvar target = $(this);\r\n\t\t\t\t\t$.get(path, function (data) {\r\n\t\t\t\t\t\ttarget.html(data);\r\n\t\t\t\t\t\tif(typeof callback == 'function'){\r\n\t\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t/* Novicell LazyloadImage\r\n\t* Original author: Lars Hesselberg\r\n\t* Load images when element appears. Great for speeding up long pages with many images.\r\n\t* ------\r\n\t* Dependencies: jQuery.appear https://github.com/morr/jquery.appear\r\n\t* Usage: novicell.lazyload.image(OPTIONAL-CALLBACK-FUNCTION);\r\n\t* HTML example: \r\n\t*/\r\n\r\n function image(callback) {\r\n\t\t$('.lazyloadimage').each(function () {\r\n\t\t\t$(this).appear(function () {\r\n\t\t\t\tvar path = $(this).data('src');\r\n\t\t\t\t$(this).attr('src', path);\r\n\t\t\t\tif(typeof callback == 'function'){\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\t\r\n }\r\n\r\n function simple() {\r\n var simpleLazyloadElems = document.querySelectorAll('.simple-lazyload');\r\n\r\n for (var i = 0, l = simpleLazyloadElems.length; i < l; i++) {\r\n var elem = simpleLazyloadElems[i];\r\n elem.setAttribute(\"src\", elem.getAttribute(\"data-src\"));\r\n }\r\n }\r\n // public functions:\r\n return {\r\n content: content,\r\n image: image,\r\n simple: simple\r\n};\r\n\r\n}();\r\n\r\n\r\n\r\n","/**\r\n * @desc new responsive lazyload image script, servering the image depending on parent-wrapper width and aspect-ratio parameter\r\n * html example \"Random\r\n * js init example: novicell.responsiveLazyloadImage.image();\r\n * js resize example: novicell.responsiveLazyloadImage.onResize();\r\n * js scroll example:\r\n * if($('.responsiveLazyload').length > 0)\r\n * novicell.responsiveLazyloadImage.image();\r\n * @author Tommy Pedersen - TPE\r\n * @return generates img and removes noscript image\r\n * @requires jquery@1.11.3\r\n * @note: Just beautiful!\r\n*/\r\n\r\nvar novicell = novicell || {};\r\n\r\nnovicell.responsiveLazyloadImage = novicell.responsiveLazyloadImage || function () {\r\n var self = this;\r\n var lastRefreshWidth = 0;\r\n var refreshWidth = 50;\r\n\r\n this.image = function (callback) {\r\n $('.responsiveLazyload').each(function () {\r\n if ($(this).parent().visible(true) || $(this).data(\"load\") === \"always\") {\r\n if ($(this).first()) {\r\n var figure = $(this).parent();\r\n self.contructImage(figure);\r\n lastRefreshWidth = window.innerWidth;\r\n figure.addClass('lazyResizeReload');\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.onResize = function (callback) {\r\n if (window.innerWidth > lastRefreshWidth + refreshWidth || window.innerWidth < lastRefreshWidth - refreshWidth) {\r\n $('.lazyResizeReload').each(function () {\r\n self.contructImage($(this));\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n });\r\n lastRefreshWidth = window.innerWidth;\r\n }\r\n }\r\n\r\n this.scroll = function(callback) {\r\n $('.responsiveLazyload').each(function() {\r\n if ($(this).parent().visible(true) || $(this).data(\"load\") === \"always\") {\r\n if ($(this).first()) {\r\n var figure = $(this).parent();\r\n $(this).remove();\r\n self.contructImage(figure);\r\n lastRefreshWidth = window.innerWidth;\r\n figure.addClass('lazyResizeReload');\r\n if (typeof callback == 'function') {\r\n callback();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.contructImage = function (figure) {\r\n var $image = new Image();\r\n\r\n //data variables and images settings\r\n var width, heightRatio, focalPoint, mode, filter, quality;\r\n width = figure.width() != 0 ? figure.width() : $(figure).parent().width();\r\n height = figure.height() != 0 ? figure.height() : $(figure).parent().height();\r\n heightRatio = figure.data('height-ratio');\r\n focalPoint = figure.data('focalpoint');\r\n mode = figure.data('mode');\r\n filter = figure.data('filter');\r\n quality = figure.data('quality') || 80;\r\n\r\n var newImageSrc = figure.data('src');\r\n newImageSrc += mode ? self.nextQuerySign(newImageSrc) + \"width=\" + width : \"\";\r\n newImageSrc += mode ? self.nextQuerySign(newImageSrc) + \"height=\" + height : \"\";\r\n newImageSrc += focalPoint ? self.nextQuerySign(newImageSrc) + \"center=\" + focalPoint : \"\";\r\n newImageSrc += mode ? self.nextQuerySign(newImageSrc) + \"mode=\" + mode : \"\";\r\n newImageSrc += filter ? self.nextQuerySign(newImageSrc) + \"filter=\" + filter : \"\";\r\n newImageSrc += self.nextQuerySign(newImageSrc) + \"quality=\" + quality;\r\n\r\n $image.src = newImageSrc;\r\n figure.find('img').remove();\r\n figure.prepend($image);\r\n $image = figure.find('img');\r\n\r\n $image.attr('class', figure.data('class'));\r\n $image.attr('alt', figure.data('alt'));\r\n $image.attr('title', figure.data('title'));\r\n $image.attr('property', 'contentUrl');\r\n }\r\n\r\n this.nextQuerySign = function (url) {\r\n return url.indexOf(\"?\") > -1 ? \"&\" : \"?\";\r\n };\r\n\r\n // public functions:\r\n return {\r\n image: image,\r\n onResize: onResize,\r\n scroll: scroll\r\n };\r\n}();\r\n\r\n(function ($) {\r\n\r\n /**\r\n * Copyright 2012, Digital Fusion\r\n * Licensed under the MIT license.\r\n * http://teamdf.com/jquery-plugins/license/\r\n *\r\n * @author Sam Sehnert\r\n * @desc A small plugin that checks whether elements are within\r\n * the user visible viewport of a web browser.\r\n * only accounts for vertical position, not horizontal.\r\n */\r\n\r\n $.fn.visible = function (partial) {\r\n\r\n var $t = $(this),\r\n $w = $(window),\r\n viewTop = $w.scrollTop(),\r\n viewBottom = viewTop + $w.height(),\r\n _top = $t.offset().top,\r\n _bottom = _top + $t.height(),\r\n compareTop = partial === true ? _bottom : _top,\r\n compareBottom = partial === true ? _top : _bottom;\r\n\r\n return ((compareBottom <= viewBottom) && (compareTop >= viewTop));\r\n\r\n };\r\n\r\n})(jQuery);","/**\r\n * Component: Facebook page plugin\r\n * Handle the facebook page plugin, and the spinner show/hide\r\n */\r\n\r\n\r\nvar dnDepartments = dnDepartments || {};\r\ndnDepartments.socialMedia = dnDepartments.socialMedia || {};\r\n\r\ndnDepartments.socialMedia.facebook = dnDepartments.socialMedia.facebook || function () {\r\n\r\n this.init = function() {\r\n window.fbAsyncInit = function() {\r\n FB.init({\r\n xfbml : true,\r\n version : 'v2.5'\r\n });\r\n\r\n // Load Novicell local scripts here, after FB has initiated.\r\n pageplugin();\r\n };\r\n\r\n (function(d, s, id){\r\n var js, fjs = d.getElementsByTagName(s)[0];\r\n if (d.getElementById(id)) {return;}\r\n js = d.createElement(s); js.id = id;\r\n js.src = \"//connect.facebook.net/en_US/sdk.js\";\r\n fjs.parentNode.insertBefore(js, fjs);\r\n }(document, 'script', 'facebook-jssdk'));\r\n };\r\n\r\n this.pageplugin = function() {\r\n if ($('#js-facebook-page-plugin').length > 0) {\r\n FB.Event.subscribe('xfbml.render', function(response) {\r\n $('#js-facebook-page-plugin .spinner').fadeOut('slow', function(){\r\n $('#js-facebook-page-plugin .fb-page').fadeIn();\r\n \r\n $('.fb-page').find('span').prepend($.parseHTML(''));\r\n });\r\n });\r\n }\r\n };\r\n\r\n return {\r\n init:init\r\n };\r\n}();\r\n","/**\r\n * Component: Navigation\r\n */\r\n\r\n\r\nvar dnDepartments = dnDepartments || {};\r\n\r\ndnDepartments.navigation = dnDepartments.navigation || function () {\r\n\r\n\tthis.init = function() {\r\n\t\ttoggleMobileNavigation();\r\n\t\tnavigationDepartment();\r\n\t};\r\n\r\n\tthis.toggleMobileNavigation = function(){\r\n\t\tif ($('#js-mobile-navigation').length > 0) {\r\n\t\t\t$('#js-mobile-navigation-trigger, #js-mobile-navigation__close-button').on('click', function(){\r\n\t\t\t\tif (!$('#js-mobile-navigation').hasClass('js-active')) {\r\n\t\t\t\t\t$('#js-mobile-navigation').addClass('js-active');\r\n\t\t\t\t\tdnDepartments.overlay.backdrop();\r\n\t\t\t\t\t$('body').addClass('mobile-nav-open');\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$('#js-mobile-navigation').removeClass('js-active');\r\n\t\t\t\t\tdnDepartments.overlay.destroy();\r\n\t\t\t\t\t$('body').removeClass('mobile-nav-open');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tthis.navigationDepartment = function(){\r\n\t\tif( $('#js-navigation-department').length) {\r\n\t\t\tvar \tsubToggle = $('.js-sub-toggle');\r\n\r\n\t\t\tsubToggle.on('click', function(e){\r\n\t\t\t\t$(this).siblings('ul').toggleClass('open');\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Function to move navigation elements based on window width\r\n\t */\r\n\tthis.moveNavigationElements = function() {\r\n\t\tif ($('#js-mobile-navigation').length > 0) {\r\n\r\n\t\t\tvar siteHeader = $('#js-site-header'),\r\n\t\t\t\tsiteHeaderInner = $('.site-header__inner', siteHeader),\r\n\t\t\t\ttopLinks = $('#js-top-links'),\r\n\t\t\t\tnavigationDepartment = $('#js-navigation-department'),\r\n\t\t\t\tsiteCta = $('#js-site-cta'),\r\n\t\t\t\tmobileNavigation = $('#js-mobile-navigation'),\r\n\t\t\t\tmobileNavigationInner = $('#js-mobile-navigation__inner'),\r\n\t\t\t\tmobileCloseButton = $('#js-mobile-navigation__close-button'),\r\n\t\t\t\tmobileCtaContainer = $('#js-mobile-navigation__cta');\r\n\r\n\t\t\tsetTimeout(function() {\r\n\t\t\t\tif (window.innerWidth < 992) {\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t * Move elements to mobile view\r\n\t\t\t\t\t */\r\n\t\t\t\t\t// Site CTA\r\n\t\t\t\t\tsiteCta.appendTo(mobileCtaContainer);\r\n\r\n\t\t\t\t\t// Top links\r\n\t\t\t\t\ttopLinks.insertBefore(mobileCtaContainer);\r\n\r\n\t\t\t\t\t// Navigation branch\r\n\t\t\t\t\tnavigationDepartment.insertBefore(mobileCtaContainer);\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t * Move elements to mobile view\r\n\t\t\t\t\t */\r\n\t\t\t\t\t// Top links\r\n\t\t\t\t\ttopLinks.insertBefore(siteHeaderInner);\r\n\r\n\t\t\t\t\t// Site CTA\r\n\t\t\t\t\tsiteCta.insertBefore($('.site-search', siteHeaderInner));\r\n\r\n\t\t\t\t\t// Navigation Branch\r\n\t\t\t\t\tnavigationDepartment.insertAfter(mobileNavigation);\r\n\t\t\t\t}\r\n\t\t\t}, 300);\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\tinit : init,\r\n\t\tmoveNavigationElements : moveNavigationElements,\r\n\t\tnavigationDepartment : navigationDepartment\r\n\t};\r\n}();\r\n","/**\r\n * Component: Share Links\r\n */\r\n\r\n\r\n var dnDepartments = dnDepartments || {};\r\n\r\n dnDepartments.shareLinks = dnDepartments.shareLinks || function () {\r\n\r\n\tthis.trigger = function() {\r\n\t\tif ($('.js-popover-button').length) {\r\n\r\n\t\t\t$('.js-popover-button').click(function(e) {\r\n\t\t\t\tvar popover = $(this).next('.js-popover');\r\n\t\t\t\tpopover.toggleClass('nc-grid-share-links__popover--active');\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\ttrigger : trigger\r\n\t};\r\n}();","/**\r\n * Component: Overlay\r\n * Both overlay and backdrop\r\n */\r\n\r\n\r\nvar dnDepartments = dnDepartments || {};\r\n\r\ndnDepartments.overlay = dnDepartments.overlay || function () {\r\n\r\n this.backdrop = function() {\r\n if ($('#js-overlay-backdrop').length !== 1) {\r\n // Fade in overlay effect\r\n $('body').append('
');\r\n $('#js-overlay-backdrop').height($('body').height());\r\n\r\n $('#js-overlay-backdrop').on('click', function(){\r\n destroy();\r\n });\r\n }\r\n };\r\n\r\n this.destroy = function() {\r\n if ($('#js-overlay-backdrop').length === 1) {\r\n\r\n // Remove all js-active elements\r\n $('.js-active').removeClass('js-active');\r\n\r\n // FIX LATER\r\n if ($('body').hasClass('mobile-nav-open')) {\r\n $('body').removeClass('mobile-nav-open');\r\n }\r\n\r\n $('#js-overlay-backdrop').remove();\r\n }\r\n };\r\n\r\n return {\r\n backdrop : backdrop,\r\n destroy : destroy\r\n };\r\n}();\r\n","/**\r\n * Component: Responsive image realtime re-sizing\r\n */\r\n\r\nvar dnDepartments = dnDepartments || {};\r\n\r\ndnDepartments.responsiveImages = dnDepartments.responsiveImages || function () {\r\n\r\n /**\r\n * Init function for the image component.\r\n */\r\n this.init = function () {\r\n loadResponsiveImages();\r\n };\r\n\r\n /**\r\n * Load responsive images based on container sizes.\r\n */\r\n this.loadResponsiveImages = function () {\r\n // Call for each element thats responsive\r\n [].forEach.call(document.querySelectorAll('.js-img-resp'), function(el) {\r\n // Get src\r\n var src = el.getAttribute('data-img-src');\r\n if (src.length > 0) {\r\n // Check if we should resize\r\n if (el.getAttribute('data-img-noresize') == null) {\r\n if (el.getAttribute('data-img-fixedheight') != null) {\r\n var h = el.getAttribute('data-img-fixedheight');\r\n // Inject image in proper size\r\n el.insertAdjacentHTML('afterbegin', '');\r\n } else {\r\n // Get width\r\n var w = el.offsetWidth;\r\n var wMax = el.getAttribute('data-img-maxwidth');\r\n var wMin = el.getAttribute('data-img-minwidth');\r\n if (wMax != null) {\r\n w = Math.min(w, wMax);\r\n }\r\n if (wMin != null) {\r\n w = Math.max(w, wMin);\r\n }\r\n // Round width\r\n var wRnd = Math.ceil(w / 50) * 50;\r\n\r\n var fixedAspect = el.getAttribute('data-img-aspect');\r\n if (fixedAspect != null) {\r\n // Inject image in proper size\r\n el.insertAdjacentHTML('afterbegin', '');\r\n } else {\r\n // Check if we should match height\r\n if (el.getAttribute('data-img-matchheight') != null) {\r\n // Inject image in proper size\r\n el.insertAdjacentHTML('afterbegin', '');\r\n } else {\r\n // Inject image in proper size\r\n el.insertAdjacentHTML('afterbegin', '');\r\n }\r\n }\r\n }\r\n } else {\r\n // Inject image in original size\r\n el.insertAdjacentHTML('afterbegin', '');\r\n }\r\n\r\n el.className.replace(/\\js-img-resp\\b/, '');\r\n } else {\r\n console.log('Image without src', el);\r\n }\r\n });\r\n }\r\n\r\n // Public functions\r\n return {\r\n init: init\r\n };\r\n}();\r\n","/**\r\n * Component: Page Header image loader\r\n */\r\n\r\nvar dnDepartments = dnDepartments || {};\r\n\r\ndnDepartments.pageHeaderImage = dnDepartments.pageHeaderImage || function () {\r\n this.init = function() {\r\n loadPageHeaderImage();\r\n }\r\n\r\n this.loadPageHeaderImage = function() {\r\n var pageHeader = $('#js-page-header-image');\r\n\r\n if (pageHeader.length !== 0) {\r\n var width = pageHeader.outerWidth();\r\n var height = pageHeader.outerHeight();\r\n\r\n var src = pageHeader.data('src');\r\n var focalPoint = pageHeader.data('focalpoint');\r\n var mode = pageHeader.data('mode');\r\n var quality = pageHeader.data('quality');\r\n\r\n src = src + '?width=' + width + '&height=' + height + \"&mode=\" + mode + '¢er=' + focalPoint + '&quality=' + quality;\r\n pageHeader.css('background-image', 'url(' + src + ')');\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n}();","/**\r\n * Component: Image Slider\r\n */\r\n\r\nvar dnDepartments = dnDepartments || {};\r\n\r\ndnDepartments.imageSlider = dnDepartments.imageSlider || function () {\r\n\tthis.init = function () {\r\n\t\tsetupOwl();\r\n\t\t//zoom();\r\n\t};\r\n\r\n\tthis.setupOwl = function () {\r\n\t\t$.each($('.nc-grid-imageslider__inner'), function(){\r\n\t\t\tvar owl = $(this);\r\n\t\t\tvar $next = owl.next('.nc-grid-imageslider__nav').find(\".js-owl-next\");\r\n\t\t\tvar $prev = owl.next('.nc-grid-imageslider__nav').find(\".js-owl-prev\");\r\n\r\n\t\t\tif(owl.length){\r\n\r\n\t\t\t\towl.owlCarousel({\r\n\t\t\t\t \tonResized : novicell.responsiveLazyloadImage.onResize(),\r\n\t\t\t\t\titemElement: \"figure\",\r\n\t\t\t\t\titems:1,\r\n\t\t\t\t\tlazyLoad:true,\r\n\t\t\t\t\tloop:false,\r\n\t\t\t\t\tnav:false,\r\n\t\t\t\t\tdots: false,\r\n\t\t\t\t\tnavText: [\"forrige\",\"næste\"],\r\n\r\n\t\t\t\t\t// Disable arrow first or last slide\r\n\t\t\t\t\tonTranslated: function(i){\r\n\t\t\t\t\t\tif(i.item.index == 0){\r\n\t\t\t\t\t\t\t$prev.addClass('disabled');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$prev.removeClass('disabled');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(i.item.index == i.item.count - 1){\r\n\t\t\t\t\t\t\t$next.addClass('disabled');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$next.removeClass('disabled');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Set custom next/prev click events for \"logged in slider\"\r\n\t\t\t\t$next.click(function(e){\r\n\t\t\t\t e.preventDefault();\r\n\t\t\t\t owl.trigger('next.owl.carousel');\r\n\t\t\t\t})\r\n\t\t\t\t$prev.click(function(e){\r\n\t\t\t\t e.preventDefault();\r\n\t\t\t\t owl.trigger('prev.owl.carousel');\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Not used for now\r\n\t/*this.zoom = function () {\r\n\t\t// js-imageslider-zoom\r\n\t\t$('#js-imageslider-zoom').on('click', function () {\r\n\t\t\tvar image = $('.nc-grid-imageslider__inner .owl-item.active img')[0].getAttribute('data-img-src');\r\n\r\n\t\t\tvar html = '
' +\r\n\t\t\t\t'\"\"/' +\r\n\t\t\t\t'
';\r\n\r\n\t\t\t$(this).\r\n\t\t});\r\n\t}*/\r\n\r\n\treturn {\r\n\t\tinit: init\r\n\t}\r\n}();","/**\r\n * Component: Image Slider\r\n */\r\n\r\nvar dnDepartments = dnDepartments || {};\r\n\r\ndnDepartments.stickyMenu = dnDepartments.stickyMenu || function () {\r\n\tthis.init = function () {\r\n\r\n\t\tif($(window).width() > 992) {\r\n\t\t\t// Create a clone of the menu, right next to original.\r\n\t\t\t$('.navigation-department').addClass('original').clone().insertAfter('.navigation-department').addClass('cloned').removeClass('original').hide();\r\n\r\n\t\t\tscrollIntervalID = setInterval(stickIt, 10);\r\n\t\t}\r\n\t};\r\n\t\r\n\tfunction stickIt() {\r\n\t\tvar orgElementPos = $('.original').offset();\r\n\t\torgElementTop = orgElementPos.top; \r\n\r\n\t\tif ($(window).scrollTop() >= (orgElementTop)) {\r\n\t\t\t// scrolled past the original position; now only show the cloned, sticky element.\r\n\r\n\t\t\t// Cloned element should always have same left position and width as original element. \r\n\t\t\torgElement = $('.original');\r\n\t\t\tcoordsOrgElement = orgElement.offset();\r\n\t\t\tleftOrgElement = coordsOrgElement.left; \r\n\t\t\twidthOrgElement = orgElement.css('width');\r\n\t\t\t$('.cloned').css('left',leftOrgElement+'px').css('top',0).css('width',widthOrgElement).show();\r\n\t\t\t$('.original').css('visibility','hidden');\r\n\t\t} else {\r\n\t\t\t// not scrolled past the menu; only show the original menu.\r\n\t\t\t$('.cloned').hide();\r\n\t\t\t$('.original').css('visibility','visible');\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init\r\n\t}\r\n}();","/*\r\n * Novicell master\r\n * Author: APN modified by DLA\r\n * Use this file to call functions in other files, on document ready, window.resize etc.\r\n * ------\r\n * Dependencies: jquery, novicell.js, other files with awesome functions.\r\n * Usage: $(function () {\r\n * LokalDN.slider.heroSlider($('.owl-carousel'));\r\n * }); // Document ready end\r\n */\r\n\r\nvar novicell = novicell || {};\r\nvar dnDepartments = dnDepartments || {};\r\n\r\n// Document ready\r\n$(function () {\r\n // Third party\r\n svg4everybody(); // Fix SVG spritemap in IE/Edge\r\n\r\n // Novicell scripts\r\n //novicell.responsive.init();\r\n novicell.responsiveLazyloadImage.image();\r\n novicell.embed.loadEmbeds();\r\n\r\n // localDN scripts\r\n dnDepartments.navigation.init();\r\n //dnDepartments.responsiveImages.init();\r\n dnDepartments.pageHeaderImage.init();\r\n dnDepartments.imageSlider.init();\r\n dnDepartments.stickyMenu.init();\r\n\r\n // Sharelinks\r\n dnDepartments.shareLinks.trigger();\r\n\r\n novicell.map.init();\r\n\r\n}); // Document ready end\r\n\r\n// Window resize\r\n$(window).smartresize(function (e) {\r\n // call functions here\r\n novicell.responsiveLazyloadImage.onResize();\r\n novicell.embed.onResize();\r\n dnDepartments.navigation.moveNavigationElements();\r\n}); // Window resize\r\n\r\n\r\n$(window).load(function () {\r\n dnDepartments.socialMedia.facebook.init();\r\n});\r\n\r\n$(window).resize(function () {\r\n}).resize();\r\n\r\n$(window).scroll(function () {\r\n novicell.responsiveLazyloadImage.scroll();\r\n});"]}