{"version":3,"sources":["../js/src/wsc/fitvids.js","../js/src/wsc/picturefill.js","../js/src/wsc/utilities.js","../js/src/wsc/wsc.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","fitvids","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"queryAll","el","selector","document","Array","prototype","slice","querySelectorAll","wrap","test","parentNode","className","widthAttr","parseInt","getAttribute","heightAttr","width","isNaN","clientWidth","height","clientHeight","aspect","removeAttribute","wrapper","createElement","insertBefore","style","paddingTop","appendChild","toSelector","input","isArray","join","styles","div","innerHTML","css","childNodes","isObject","Object","toString","selectors","opts","containers","getElementById","head","getElementsByTagName","customSelector","players","videoSelector","forEach","container","ua","navigator","userAgent","HTMLPictureElement","match","RegExp","$1","addEventListener","timer","dummySrc","fixRespimg","img","source","sizes","picture","nodeName","toUpperCase","cloneNode","firstElementChild","setTimeout","removeChild","_pfLastSize","offsetWidth","findPictureImgs","imgs","onResize","clearTimeout","mq","matchMedia","init","addListener","srcset","readyState","undefined","isSpace","c","detectTypeSupport","type","typeUri","image","Image","onerror","types","picturefill","onload","src","updateMetrics","isVwDirty","DPR","devicePixelRatio","cssCache","sizeLengthCache","pf","units","Math","max","innerWidth","docElem","innerHeight","vw","vh","evalId","em","getEmValue","rem","chooseLowRes","lowerValue","higherValue","dprValue","isCached","bonusFactor","tooMuch","bonus","meanDensity","cfg","algorithm","pow","sqrt","applyBestCandidate","srcSetCandidates","matchingSet","getSet","evaluated","setRes","applySetCandidate","ns","evaled","ascendingSort","b","res","setSrcToCur","set","candidate","sets","getCandidateForSrc","makeUrl","curSrc","curCan","setResolution","candidates","parseSet","url","getAllSourceElements","len","sources","push","media","parseSrcset","collectCharacters","regEx","chars","exec","substring","pos","parseDescriptors","w","d","h","desc","lastChar","value","intVal","floatVal","pError","descriptors","parseFloat","regexNonNegativeInteger","regexFloatingPoint","has1x","tokenize","regexLeadingSpaces","currentDescriptor","state","charAt","inputLength","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","replace","regexTrailingCommas","parseSizes","strValue","parseComponentValues","str","pushComponent","component","componentArray","pushComponentArray","listArray","chrctr","parenDepth","inComment","isValidNonNegativeSourceSizeValue","regexCssLengthWithUnits","regexCssCalc","unparsedSizesList","unparsedSizesListLength","unparsedSize","lastComponentValue","size","pop","matchesMedia","warn","eminpx","alwaysCheckWDescriptor","isSupportTestReady","noop","getImgAttr","setImgAttr","setAttribute","removeImgAttr","documentElement","srcAttr","srcsetAttr","supportAbort","curSrcProp","regWDesc","regSize","setOptions","picturefillCFG","baseStyle","fsCss","px","in","anchor","alreadyRun","on","obj","evt","fn","capture","attachEvent","memoize","cache","evalCSS","regLength","args","arguments","index","string","buildStr","toLowerCase","parsedLength","Function","sizesattr","cWidth","calcListLength","opt","elements","plen","options","nodeType","context","qsa","reevaluate","reselect","sel","selShort","setupRun","fillImg","teardownRun","console","message","implementation","hasFeature","Date","getTime","substr","supSrcset","supSizes","supPicture","image2","complete","width2","width1","setSize","href","matches","mMQ","apply","calcLength","sourceSizeValue","supportsType","parseSize","sourceSizeStr","cands","body","originalHTMLCSS","cssText","originalBodyCSS","sourceSizeListStr","uT","winningLength","j","bestCandidate","candidateSrc","abortCurSrc","imageData","dpr","cached","sort","setSrc","origWidth","parseSets","element","parent","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","pic","supported","parsed","extreme","isDomReady","regReady","run","timerId","fillImgs","debounce","func","wait","timeout","timestamp","later","last","lastClientWidth","_","name","shift","SubstanceWP","$","jQuery","timers","doAfterDelayDefault","doAfterDelay","callback","uniqueId","ms","get_random_string","readCookie","C","cookie","split","cookies","inView","winHeight","elePosition","offset","top","get_post_id","classes","attr","get_tripadvisor_id","random","isInViewport","distance","getBoundingClientRect","left","bottom","right","removeSubMenu","openSubMenus","classList","remove","Modernizr","csspositionsticky","stickyHeader","Stickyfill","add","searchTrigger","querySelector","siteHeader","searchField","toggle","activeElement","menuToggle","hasAttribute","subMenuTriggers","menuItem","touchevents","contains","preventDefault"],"mappings":"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","file":"wsc.js","sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.fitvids = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;ox

'\n\treturn div.childNodes[1]\n}\n\nfunction isObject (input) {\n\treturn Object.prototype.toString.call(input) === '[object Object]'\n}\n\n},{}]},{},[1])(1)\n});\n","/*! picturefill - v3.0.2 - 2016-02-12\n * https://scottjehl.github.io/picturefill/\n * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT\n */\n/*! Gecko-Picture - v1.0\n * https://github.com/scottjehl/picturefill/tree/3.0/src/plugins/gecko-picture\n * Firefox's early picture implementation (prior to FF41) is static and does\n * not react to viewport changes. This tiny module fixes this.\n */\n(function(window) {\n\t/*jshint eqnull:true */\n\tvar ua = navigator.userAgent;\n\n\tif ( window.HTMLPictureElement && ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 < 45) ) {\n\t\taddEventListener(\"resize\", (function() {\n\t\t\tvar timer;\n\n\t\t\tvar dummySrc = document.createElement(\"source\");\n\n\t\t\tvar fixRespimg = function(img) {\n\t\t\t\tvar source, sizes;\n\t\t\t\tvar picture = img.parentNode;\n\n\t\t\t\tif (picture.nodeName.toUpperCase() === \"PICTURE\") {\n\t\t\t\t\tsource = dummySrc.cloneNode();\n\n\t\t\t\t\tpicture.insertBefore(source, picture.firstElementChild);\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpicture.removeChild(source);\n\t\t\t\t\t});\n\t\t\t\t} else if (!img._pfLastSize || img.offsetWidth > img._pfLastSize) {\n\t\t\t\t\timg._pfLastSize = img.offsetWidth;\n\t\t\t\t\tsizes = img.sizes;\n\t\t\t\t\timg.sizes += \",100vw\";\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\timg.sizes = sizes;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar findPictureImgs = function() {\n\t\t\t\tvar i;\n\t\t\t\tvar imgs = document.querySelectorAll(\"picture > img, img[srcset][sizes]\");\n\t\t\t\tfor (i = 0; i < imgs.length; i++) {\n\t\t\t\t\tfixRespimg(imgs[i]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar onResize = function() {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(findPictureImgs, 99);\n\t\t\t};\n\t\t\tvar mq = window.matchMedia && matchMedia(\"(orientation: landscape)\");\n\t\t\tvar init = function() {\n\t\t\t\tonResize();\n\n\t\t\t\tif (mq && mq.addListener) {\n\t\t\t\t\tmq.addListener(onResize);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdummySrc.srcset = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n\t\t\tif (/^[c|i]|d$/.test(document.readyState || \"\")) {\n\t\t\t\tinit();\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t\t\t}\n\n\t\t\treturn onResize;\n\t\t})());\n\t}\n})(window);\n\n/*! Picturefill - v3.0.2\n * http://scottjehl.github.io/picturefill\n * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt;\n * License: MIT\n */\n\n(function( window, document, undefined ) {\n\t// Enable strict mode\n\t\"use strict\";\n\n\t// HTML shim|v it for old IE (IE9 will still need the HTML video tag workaround)\n\tdocument.createElement( \"picture\" );\n\n\tvar warn, eminpx, alwaysCheckWDescriptor, evalId;\n\t// local object for method references and testing exposure\n\tvar pf = {};\n\tvar isSupportTestReady = false;\n\tvar noop = function() {};\n\tvar image = document.createElement( \"img\" );\n\tvar getImgAttr = image.getAttribute;\n\tvar setImgAttr = image.setAttribute;\n\tvar removeImgAttr = image.removeAttribute;\n\tvar docElem = document.documentElement;\n\tvar types = {};\n\tvar cfg = {\n\t\t//resource selection:\n\t\talgorithm: \"\"\n\t};\n\tvar srcAttr = \"data-pfsrc\";\n\tvar srcsetAttr = srcAttr + \"set\";\n\t// ua sniffing is done for undetectable img loading features,\n\t// to do some non crucial perf optimizations\n\tvar ua = navigator.userAgent;\n\tvar supportAbort = (/rident/).test(ua) || ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 > 35 );\n\tvar curSrcProp = \"currentSrc\";\n\tvar regWDesc = /\\s+\\+?\\d+(e\\d+)?w/;\n\tvar regSize = /(\\([^)]+\\))?\\s*(.+)/;\n\tvar setOptions = window.picturefillCFG;\n\t/**\n\t * Shortcut property for https://w3c.github.io/webappsec/specs/mixedcontent/#restricts-mixed-content ( for easy overriding in tests )\n\t */\n\t// baseStyle also used by getEmValue (i.e.: width: 1em is important)\n\tvar baseStyle = \"position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)\";\n\tvar fsCss = \"font-size:100%!important;\";\n\tvar isVwDirty = true;\n\n\tvar cssCache = {};\n\tvar sizeLengthCache = {};\n\tvar DPR = window.devicePixelRatio;\n\tvar units = {\n\t\tpx: 1,\n\t\t\"in\": 96\n\t};\n\tvar anchor = document.createElement( \"a\" );\n\t/**\n\t * alreadyRun flag used for setOptions. is it true setOptions will reevaluate\n\t * @type {boolean}\n\t */\n\tvar alreadyRun = false;\n\n\t// Reusable, non-\"g\" Regexes\n\n\t// (Don't use \\s, to avoid matching non-breaking space.)\n\tvar regexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t regexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t regexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t regexTrailingCommas = /[,]+$/,\n\t regexNonNegativeInteger = /^\\d+$/,\n\n\t // ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t // Must include at least one digit.\n\t // According to spec tests any decimal point must be followed by a digit.\n\t // No leading plus sign is allowed.)\n\t // https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/;\n\n\tvar on = function(obj, evt, fn, capture) {\n\t\tif ( obj.addEventListener ) {\n\t\t\tobj.addEventListener(evt, fn, capture || false);\n\t\t} else if ( obj.attachEvent ) {\n\t\t\tobj.attachEvent( \"on\" + evt, fn);\n\t\t}\n\t};\n\n\t/**\n\t * simple memoize function:\n\t */\n\n\tvar memoize = function(fn) {\n\t\tvar cache = {};\n\t\treturn function(input) {\n\t\t\tif ( !(input in cache) ) {\n\t\t\t\tcache[ input ] = fn(input);\n\t\t\t}\n\t\t\treturn cache[ input ];\n\t\t};\n\t};\n\n\t// UTILITY FUNCTIONS\n\n\t// Manual is faster than RegEx\n\t// http://jsperf.com/whitespace-character/5\n\tfunction isSpace(c) {\n\t\treturn (c === \"\\u0020\" || // space\n\t\t c === \"\\u0009\" || // horizontal tab\n\t\t c === \"\\u000A\" || // new line\n\t\t c === \"\\u000C\" || // form feed\n\t\t c === \"\\u000D\"); // carriage return\n\t}\n\n\t/**\n\t * gets a mediaquery and returns a boolean or gets a css length and returns a number\n\t * @param css mediaqueries or css length\n\t * @returns {boolean|number}\n\t *\n\t * based on: https://gist.github.com/jonathantneal/db4f77009b155f083738\n\t */\n\tvar evalCSS = (function() {\n\n\t\tvar regLength = /^([\\d\\.]+)(em|vw|px)$/;\n\t\tvar replace = function() {\n\t\t\tvar args = arguments, index = 0, string = args[0];\n\t\t\twhile (++index in args) {\n\t\t\t\tstring = string.replace(args[index], args[++index]);\n\t\t\t}\n\t\t\treturn string;\n\t\t};\n\n\t\tvar buildStr = memoize(function(css) {\n\n\t\t\treturn \"return \" + replace((css || \"\").toLowerCase(),\n\t\t\t\t// interpret `and`\n\t\t\t\t/\\band\\b/g, \"&&\",\n\n\t\t\t\t// interpret `,`\n\t\t\t\t/,/g, \"||\",\n\n\t\t\t\t// interpret `min-` as >=\n\t\t\t\t/min-([a-z-\\s]+):/g, \"e.$1>=\",\n\n\t\t\t\t// interpret `max-` as <=\n\t\t\t\t/max-([a-z-\\s]+):/g, \"e.$1<=\",\n\n\t\t\t\t//calc value\n\t\t\t\t/calc([^)]+)/g, \"($1)\",\n\n\t\t\t\t// interpret css values\n\t\t\t\t/(\\d+[\\.]*[\\d]*)([a-z]+)/g, \"($1 * e.$2)\",\n\t\t\t\t//make eval less evil\n\t\t\t\t/^(?!(e.[a-z]|[0-9\\.&=|><\\+\\-\\*\\(\\)\\/])).*/ig, \"\"\n\t\t\t) + \";\";\n\t\t});\n\n\t\treturn function(css, length) {\n\t\t\tvar parsedLength;\n\t\t\tif (!(css in cssCache)) {\n\t\t\t\tcssCache[css] = false;\n\t\t\t\tif (length && (parsedLength = css.match( regLength ))) {\n\t\t\t\t\tcssCache[css] = parsedLength[ 1 ] * units[parsedLength[ 2 ]];\n\t\t\t\t} else {\n\t\t\t\t\t/*jshint evil:true */\n\t\t\t\t\ttry{\n\t\t\t\t\t\tcssCache[css] = new Function(\"e\", buildStr(css))(units);\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t\t/*jshint evil:false */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cssCache[css];\n\t\t};\n\t})();\n\n\tvar setResolution = function( candidate, sizesattr ) {\n\t\tif ( candidate.w ) { // h = means height: || descriptor.type === 'h' do not handle yet...\n\t\t\tcandidate.cWidth = pf.calcListLength( sizesattr || \"100vw\" );\n\t\t\tcandidate.res = candidate.w / candidate.cWidth ;\n\t\t} else {\n\t\t\tcandidate.res = candidate.d;\n\t\t}\n\t\treturn candidate;\n\t};\n\n\t/**\n\t *\n\t * @param opt\n\t */\n\tvar picturefill = function( opt ) {\n\n\t\tif (!isSupportTestReady) {return;}\n\n\t\tvar elements, i, plen;\n\n\t\tvar options = opt || {};\n\n\t\tif ( options.elements && options.elements.nodeType === 1 ) {\n\t\t\tif ( options.elements.nodeName.toUpperCase() === \"IMG\" ) {\n\t\t\t\toptions.elements = [ options.elements ];\n\t\t\t} else {\n\t\t\t\toptions.context = options.elements;\n\t\t\t\toptions.elements = null;\n\t\t\t}\n\t\t}\n\n\t\telements = options.elements || pf.qsa( (options.context || document), ( options.reevaluate || options.reselect ) ? pf.sel : pf.selShort );\n\n\t\tif ( (plen = elements.length) ) {\n\n\t\t\tpf.setupRun( options );\n\t\t\talreadyRun = true;\n\n\t\t\t// Loop through all elements\n\t\t\tfor ( i = 0; i < plen; i++ ) {\n\t\t\t\tpf.fillImg(elements[ i ], options);\n\t\t\t}\n\n\t\t\tpf.teardownRun( options );\n\t\t}\n\t};\n\n\t/**\n\t * outputs a warning for the developer\n\t * @param {message}\n\t * @type {Function}\n\t */\n\twarn = ( window.console && console.warn ) ?\n\t\tfunction( message ) {\n\t\t\tconsole.warn( message );\n\t\t} :\n\t\tnoop\n\t;\n\n\tif ( !(curSrcProp in image) ) {\n\t\tcurSrcProp = \"src\";\n\t}\n\n\t// Add support for standard mime types.\n\ttypes[ \"image/jpeg\" ] = true;\n\ttypes[ \"image/gif\" ] = true;\n\ttypes[ \"image/png\" ] = true;\n\n\tfunction detectTypeSupport( type, typeUri ) {\n\t\t// based on Modernizr's lossless img-webp test\n\t\t// note: asynchronous\n\t\tvar image = new window.Image();\n\t\timage.onerror = function() {\n\t\t\ttypes[ type ] = false;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.onload = function() {\n\t\t\ttypes[ type ] = image.width === 1;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.src = typeUri;\n\t\treturn \"pending\";\n\t}\n\n\t// test svg support\n\ttypes[ \"image/svg+xml\" ] = document.implementation.hasFeature( \"http://www.w3.org/TR/SVG11/feature#Image\", \"1.1\" );\n\n\t/**\n\t * updates the internal vW property with the current viewport width in px\n\t */\n\tfunction updateMetrics() {\n\n\t\tisVwDirty = false;\n\t\tDPR = window.devicePixelRatio;\n\t\tcssCache = {};\n\t\tsizeLengthCache = {};\n\n\t\tpf.DPR = DPR || 1;\n\n\t\tunits.width = Math.max(window.innerWidth || 0, docElem.clientWidth);\n\t\tunits.height = Math.max(window.innerHeight || 0, docElem.clientHeight);\n\n\t\tunits.vw = units.width / 100;\n\t\tunits.vh = units.height / 100;\n\n\t\tevalId = [ units.height, units.width, DPR ].join(\"-\");\n\n\t\tunits.em = pf.getEmValue();\n\t\tunits.rem = units.em;\n\t}\n\n\tfunction chooseLowRes( lowerValue, higherValue, dprValue, isCached ) {\n\t\tvar bonusFactor, tooMuch, bonus, meanDensity;\n\n\t\t//experimental\n\t\tif (cfg.algorithm === \"saveData\" ){\n\t\t\tif ( lowerValue > 2.7 ) {\n\t\t\t\tmeanDensity = dprValue + 1;\n\t\t\t} else {\n\t\t\t\ttooMuch = higherValue - dprValue;\n\t\t\t\tbonusFactor = Math.pow(lowerValue - 0.6, 1.5);\n\n\t\t\t\tbonus = tooMuch * bonusFactor;\n\n\t\t\t\tif (isCached) {\n\t\t\t\t\tbonus += 0.1 * bonusFactor;\n\t\t\t\t}\n\n\t\t\t\tmeanDensity = lowerValue + bonus;\n\t\t\t}\n\t\t} else {\n\t\t\tmeanDensity = (dprValue > 1) ?\n\t\t\t\tMath.sqrt(lowerValue * higherValue) :\n\t\t\t\tlowerValue;\n\t\t}\n\n\t\treturn meanDensity > dprValue;\n\t}\n\n\tfunction applyBestCandidate( img ) {\n\t\tvar srcSetCandidates;\n\t\tvar matchingSet = pf.getSet( img );\n\t\tvar evaluated = false;\n\t\tif ( matchingSet !== \"pending\" ) {\n\t\t\tevaluated = evalId;\n\t\t\tif ( matchingSet ) {\n\t\t\t\tsrcSetCandidates = pf.setRes( matchingSet );\n\t\t\t\tpf.applySetCandidate( srcSetCandidates, img );\n\t\t\t}\n\t\t}\n\t\timg[ pf.ns ].evaled = evaluated;\n\t}\n\n\tfunction ascendingSort( a, b ) {\n\t\treturn a.res - b.res;\n\t}\n\n\tfunction setSrcToCur( img, src, set ) {\n\t\tvar candidate;\n\t\tif ( !set && src ) {\n\t\t\tset = img[ pf.ns ].sets;\n\t\t\tset = set && set[set.length - 1];\n\t\t}\n\n\t\tcandidate = getCandidateForSrc(src, set);\n\n\t\tif ( candidate ) {\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\timg[ pf.ns ].curSrc = src;\n\t\t\timg[ pf.ns ].curCan = candidate;\n\n\t\t\tif ( !candidate.res ) {\n\t\t\t\tsetResolution( candidate, candidate.set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getCandidateForSrc( src, set ) {\n\t\tvar i, candidate, candidates;\n\t\tif ( src && set ) {\n\t\t\tcandidates = pf.parseSet( set );\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\tfor ( i = 0; i < candidates.length; i++ ) {\n\t\t\t\tif ( src === pf.makeUrl(candidates[ i ].url) ) {\n\t\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getAllSourceElements( picture, candidates ) {\n\t\tvar i, len, source, srcset;\n\n\t\t// SPEC mismatch intended for size and perf:\n\t\t// actually only source elements preceding the img should be used\n\t\t// also note: don't use qsa here, because IE8 sometimes doesn't like source as the key part in a selector\n\t\tvar sources = picture.getElementsByTagName( \"source\" );\n\n\t\tfor ( i = 0, len = sources.length; i < len; i++ ) {\n\t\t\tsource = sources[ i ];\n\t\t\tsource[ pf.ns ] = true;\n\t\t\tsrcset = source.getAttribute( \"srcset\" );\n\n\t\t\t// if source does not have a srcset attribute, skip\n\t\t\tif ( srcset ) {\n\t\t\t\tcandidates.push( {\n\t\t\t\t\tsrcset: srcset,\n\t\t\t\t\tmedia: source.getAttribute( \"media\" ),\n\t\t\t\t\ttype: source.getAttribute( \"type\" ),\n\t\t\t\t\tsizes: source.getAttribute( \"sizes\" )\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Srcset Parser\n\t * By Alex Bell | MIT License\n\t *\n\t * @returns Array [{url: _, d: _, w: _, h:_, set:_(????)}, ...]\n\t *\n\t * Based super duper closely on the reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n\t */\n\n\t// 1. Let input be the value passed to this algorithm.\n\t// (TO-DO : Explain what \"set\" argument is here. Maybe choose a more\n\t// descriptive & more searchable name. Since passing the \"set\" in really has\n\t// nothing to do with parsing proper, I would prefer this assignment eventually\n\t// go in an external fn.)\n\tfunction parseSrcset(input, set) {\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t match = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\t\t url,\n\t\t descriptors,\n\t\t currentDescriptor,\n\t\t state,\n\t\t c,\n\n\t\t // 2. Let position be a pointer into input, initially pointing at the start\n\t\t // of the string.\n\t\t pos = 0,\n\n\t\t // 3. Let candidates be an initially empty source set.\n\t\t candidates = [];\n\n\t\t/**\n\t\t* Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t* @return undefined\n\t\t*/\n\t\t// (Declared outside of the while loop so that it's only created once.\n\t\t// (This fn is defined before it is used, in order to pass JSHINT.\n\t\t// Unfortunately this breaks the sequencing of the spec comments. :/ )\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t// 10. Let width be absent.\n\t\t\t// 11. Let density be absent.\n\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t w, d, h, i,\n\t\t\t candidate = {},\n\t\t\t desc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tif (!h && !d && !w) {candidate.d = 1;}\n\t\t\t\tif (candidate.d === 1) {set.has1x = true;}\n\t\t\t\tcandidate.set = set;\n\n\t\t\t\tcandidates.push(candidate);\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t\t/**\n\t\t* Tokenizes descriptor properties prior to parsing\n\t\t* Returns undefined.\n\t\t* (Again, this fn is defined before it is used, in order to pass JSHINT.\n\t\t* Unfortunately this breaks the logical sequencing of the spec comments. :/ )\n\t\t*/\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t // Space character\n\t\t\t\t // If current descriptor is not empty, append current descriptor to\n\t\t\t\t // descriptors and let current descriptor be the empty string.\n\t\t\t\t // Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\t}\n\n\t/*\n\t * Sizes Parser\n\t *\n\t * By Alex Bell | MIT License\n\t *\n\t * Non-strict but accurate and lightweight JS Parser for the string value \n\t *\n\t * Reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-sizes-attribute\n\t *\n\t * Most comments are copied in directly from the spec\n\t * (except for comments in parens).\n\t *\n\t * Grammar is:\n\t * = # [ , ]? | \n\t * = \n\t * = \n\t * http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-sizes\n\t *\n\t * E.g. \"(max-width: 30em) 100vw, (max-width: 50em) 70vw, 100vw\"\n\t * or \"(min-width: 30em), calc(30vw - 15px)\" or just \"30vw\"\n\t *\n\t * Returns the first valid with a media condition that evaluates to true,\n\t * or \"100vw\" if all valid media conditions evaluate to false.\n\t *\n\t */\n\n\tfunction parseSizes(strValue) {\n\n\t\t// (Percentage CSS lengths are not allowed in this case, to avoid confusion:\n\t\t// https://html.spec.whatwg.org/multipage/embedded-content.html#valid-source-size-list\n\t\t// CSS allows a single optional plus or minus sign:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#numbers\n\t\t// CSS is ASCII case-insensitive:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#characters )\n\t\t// Spec allows exponential notation for type:\n\t\t// http://dev.w3.org/csswg/css-values/#numbers\n\t\tvar regexCssLengthWithUnits = /^(?:[+-]?[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i;\n\n\t\t// (This is a quick and lenient test. Because of optional unlimited-depth internal\n\t\t// grouping parens and strict spacing rules, this could get very complicated.)\n\t\tvar regexCssCalc = /^calc\\((?:[0-9a-z \\.\\+\\-\\*\\/\\(\\)]+)\\)$/i;\n\n\t\tvar i;\n\t\tvar unparsedSizesList;\n\t\tvar unparsedSizesListLength;\n\t\tvar unparsedSize;\n\t\tvar lastComponentValue;\n\t\tvar size;\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// (Toy CSS parser. The goals here are:\n\t\t// 1) expansive test coverage without the weight of a full CSS parser.\n\t\t// 2) Avoiding regex wherever convenient.\n\t\t// Quick tests: http://jsfiddle.net/gtntL4gr/3/\n\t\t// Returns an array of arrays.)\n\t\tfunction parseComponentValues(str) {\n\t\t\tvar chrctr;\n\t\t\tvar component = \"\";\n\t\t\tvar componentArray = [];\n\t\t\tvar listArray = [];\n\t\t\tvar parenDepth = 0;\n\t\t\tvar pos = 0;\n\t\t\tvar inComment = false;\n\n\t\t\tfunction pushComponent() {\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponentArray.push(component);\n\t\t\t\t\tcomponent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pushComponentArray() {\n\t\t\t\tif (componentArray[0]) {\n\t\t\t\t\tlistArray.push(componentArray);\n\t\t\t\t\tcomponentArray = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// (Loop forwards from the beginning of the string.)\n\t\t\twhile (true) {\n\t\t\t\tchrctr = str.charAt(pos);\n\n\t\t\t\tif (chrctr === \"\") { // ( End of string reached.)\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\treturn listArray;\n\t\t\t\t} else if (inComment) {\n\t\t\t\t\tif ((chrctr === \"*\") && (str[pos + 1] === \"/\")) { // (At end of a comment.)\n\t\t\t\t\t\tinComment = false;\n\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpos += 1; // (Skip all characters inside comments.)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (isSpace(chrctr)) {\n\t\t\t\t\t// (If previous character in loop was also a space, or if\n\t\t\t\t\t// at the beginning of the string, do not add space char to\n\t\t\t\t\t// component.)\n\t\t\t\t\tif ( (str.charAt(pos - 1) && isSpace( str.charAt(pos - 1) ) ) || !component ) {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (parenDepth === 0) {\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tpos +=1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// (Replace any space character with a plain space for legibility.)\n\t\t\t\t\t\tchrctr = \" \";\n\t\t\t\t\t}\n\t\t\t\t} else if (chrctr === \"(\") {\n\t\t\t\t\tparenDepth += 1;\n\t\t\t\t} else if (chrctr === \")\") {\n\t\t\t\t\tparenDepth -= 1;\n\t\t\t\t} else if (chrctr === \",\") {\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ( (chrctr === \"/\") && (str.charAt(pos + 1) === \"*\") ) {\n\t\t\t\t\tinComment = true;\n\t\t\t\t\tpos += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcomponent = component + chrctr;\n\t\t\t\tpos += 1;\n\t\t\t}\n\t\t}\n\n\t\tfunction isValidNonNegativeSourceSizeValue(s) {\n\t\t\tif (regexCssLengthWithUnits.test(s) && (parseFloat(s) >= 0)) {return true;}\n\t\t\tif (regexCssCalc.test(s)) {return true;}\n\t\t\t// ( http://www.w3.org/TR/CSS2/syndata.html#numbers says:\n\t\t\t// \"-0 is equivalent to 0 and is not a negative number.\" which means that\n\t\t\t// unitless zero and unitless negative zero must be accepted as special cases.)\n\t\t\tif ((s === \"0\") || (s === \"-0\") || (s === \"+0\")) {return true;}\n\t\t\treturn false;\n\t\t}\n\n\t\t// When asked to parse a sizes attribute from an element, parse a\n\t\t// comma-separated list of component values from the value of the element's\n\t\t// sizes attribute (or the empty string, if the attribute is absent), and let\n\t\t// unparsed sizes list be the result.\n\t\t// http://dev.w3.org/csswg/css-syntax/#parse-comma-separated-list-of-component-values\n\n\t\tunparsedSizesList = parseComponentValues(strValue);\n\t\tunparsedSizesListLength = unparsedSizesList.length;\n\n\t\t// For each unparsed size in unparsed sizes list:\n\t\tfor (i = 0; i < unparsedSizesListLength; i++) {\n\t\t\tunparsedSize = unparsedSizesList[i];\n\n\t\t\t// 1. Remove all consecutive s from the end of unparsed size.\n\t\t\t// ( parseComponentValues() already omits spaces outside of parens. )\n\n\t\t\t// If unparsed size is now empty, that is a parse error; continue to the next\n\t\t\t// iteration of this algorithm.\n\t\t\t// ( parseComponentValues() won't push an empty array. )\n\n\t\t\t// 2. If the last component value in unparsed size is a valid non-negative\n\t\t\t// , let size be its value and remove the component value\n\t\t\t// from unparsed size. Any CSS function other than the calc() function is\n\t\t\t// invalid. Otherwise, there is a parse error; continue to the next iteration\n\t\t\t// of this algorithm.\n\t\t\t// http://dev.w3.org/csswg/css-syntax/#parse-component-value\n\t\t\tlastComponentValue = unparsedSize[unparsedSize.length - 1];\n\n\t\t\tif (isValidNonNegativeSourceSizeValue(lastComponentValue)) {\n\t\t\t\tsize = lastComponentValue;\n\t\t\t\tunparsedSize.pop();\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 3. Remove all consecutive s from the end of unparsed\n\t\t\t// size. If unparsed size is now empty, return size and exit this algorithm.\n\t\t\t// If this was not the last item in unparsed sizes list, that is a parse error.\n\t\t\tif (unparsedSize.length === 0) {\n\t\t\t\treturn size;\n\t\t\t}\n\n\t\t\t// 4. Parse the remaining component values in unparsed size as a\n\t\t\t// . If it does not parse correctly, or it does parse\n\t\t\t// correctly but the evaluates to false, continue to the\n\t\t\t// next iteration of this algorithm.\n\t\t\t// (Parsing all possible compound media conditions in JS is heavy, complicated,\n\t\t\t// and the payoff is unclear. Is there ever an situation where the\n\t\t\t// media condition parses incorrectly but still somehow evaluates to true?\n\t\t\t// Can we just rely on the browser/polyfill to do it?)\n\t\t\tunparsedSize = unparsedSize.join(\" \");\n\t\t\tif (!(pf.matchesMedia( unparsedSize ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 5. Return size and exit this algorithm.\n\t\t\treturn size;\n\t\t}\n\n\t\t// If the above algorithm exhausts unparsed sizes list without returning a\n\t\t// size value, return 100vw.\n\t\treturn \"100vw\";\n\t}\n\n\t// namespace\n\tpf.ns = (\"pf\" + new Date().getTime()).substr(0, 9);\n\n\t// srcset support test\n\tpf.supSrcset = \"srcset\" in image;\n\tpf.supSizes = \"sizes\" in image;\n\tpf.supPicture = !!window.HTMLPictureElement;\n\n\t// UC browser does claim to support srcset and picture, but not sizes,\n\t// this extended test reveals the browser does support nothing\n\tif (pf.supSrcset && pf.supPicture && !pf.supSizes) {\n\t\t(function(image2) {\n\t\t\timage.srcset = \"data:,a\";\n\t\t\timage2.src = \"data:,a\";\n\t\t\tpf.supSrcset = image.complete === image2.complete;\n\t\t\tpf.supPicture = pf.supSrcset && pf.supPicture;\n\t\t})(document.createElement(\"img\"));\n\t}\n\n\t// Safari9 has basic support for sizes, but does't expose the `sizes` idl attribute\n\tif (pf.supSrcset && !pf.supSizes) {\n\n\t\t(function() {\n\t\t\tvar width2 = \"data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==\";\n\t\t\tvar width1 = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\tvar test = function() {\n\t\t\t\tvar width = img.width;\n\n\t\t\t\tif (width === 2) {\n\t\t\t\t\tpf.supSizes = true;\n\t\t\t\t}\n\n\t\t\t\talwaysCheckWDescriptor = pf.supSrcset && !pf.supSizes;\n\n\t\t\t\tisSupportTestReady = true;\n\t\t\t\t// force async\n\t\t\t\tsetTimeout(picturefill);\n\t\t\t};\n\n\t\t\timg.onload = test;\n\t\t\timg.onerror = test;\n\t\t\timg.setAttribute(\"sizes\", \"9px\");\n\n\t\t\timg.srcset = width1 + \" 1w,\" + width2 + \" 9w\";\n\t\t\timg.src = width1;\n\t\t})();\n\n\t} else {\n\t\tisSupportTestReady = true;\n\t}\n\n\t// using pf.qsa instead of dom traversing does scale much better,\n\t// especially on sites mixing responsive and non-responsive images\n\tpf.selShort = \"picture>img,img[srcset]\";\n\tpf.sel = pf.selShort;\n\tpf.cfg = cfg;\n\n\t/**\n\t * Shortcut property for `devicePixelRatio` ( for easy overriding in tests )\n\t */\n\tpf.DPR = (DPR || 1 );\n\tpf.u = units;\n\n\t// container of supported mime types that one might need to qualify before using\n\tpf.types = types;\n\n\tpf.setSize = noop;\n\n\t/**\n\t * Gets a string and returns the absolute URL\n\t * @param src\n\t * @returns {String} absolute URL\n\t */\n\n\tpf.makeUrl = memoize(function(src) {\n\t\tanchor.href = src;\n\t\treturn anchor.href;\n\t});\n\n\t/**\n\t * Gets a DOM element or document and a selctor and returns the found matches\n\t * Can be extended with jQuery/Sizzle for IE7 support\n\t * @param context\n\t * @param sel\n\t * @returns {NodeList|Array}\n\t */\n\tpf.qsa = function(context, sel) {\n\t\treturn ( \"querySelector\" in context ) ? context.querySelectorAll(sel) : [];\n\t};\n\n\t/**\n\t * Shortcut method for matchMedia ( for easy overriding in tests )\n\t * wether native or pf.mMQ is used will be decided lazy on first call\n\t * @returns {boolean}\n\t */\n\tpf.matchesMedia = function() {\n\t\tif ( window.matchMedia && (matchMedia( \"(min-width: 0.1em)\" ) || {}).matches ) {\n\t\t\tpf.matchesMedia = function( media ) {\n\t\t\t\treturn !media || ( matchMedia( media ).matches );\n\t\t\t};\n\t\t} else {\n\t\t\tpf.matchesMedia = pf.mMQ;\n\t\t}\n\n\t\treturn pf.matchesMedia.apply( this, arguments );\n\t};\n\n\t/**\n\t * A simplified matchMedia implementation for IE8 and IE9\n\t * handles only min-width/max-width with px or em values\n\t * @param media\n\t * @returns {boolean}\n\t */\n\tpf.mMQ = function( media ) {\n\t\treturn media ? evalCSS(media) : true;\n\t};\n\n\t/**\n\t * Returns the calculated length in css pixel from the given sourceSizeValue\n\t * http://dev.w3.org/csswg/css-values-3/#length-value\n\t * intended Spec mismatches:\n\t * * Does not check for invalid use of CSS functions\n\t * * Does handle a computed length of 0 the same as a negative and therefore invalid value\n\t * @param sourceSizeValue\n\t * @returns {Number}\n\t */\n\tpf.calcLength = function( sourceSizeValue ) {\n\n\t\tvar value = evalCSS(sourceSizeValue, true) || false;\n\t\tif (value < 0) {\n\t\t\tvalue = false;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\t/**\n\t * Takes a type string and checks if its supported\n\t */\n\n\tpf.supportsType = function( type ) {\n\t\treturn ( type ) ? types[ type ] : true;\n\t};\n\n\t/**\n\t * Parses a sourceSize into mediaCondition (media) and sourceSizeValue (length)\n\t * @param sourceSizeStr\n\t * @returns {*}\n\t */\n\tpf.parseSize = memoize(function( sourceSizeStr ) {\n\t\tvar match = ( sourceSizeStr || \"\" ).match(regSize);\n\t\treturn {\n\t\t\tmedia: match && match[1],\n\t\t\tlength: match && match[2]\n\t\t};\n\t});\n\n\tpf.parseSet = function( set ) {\n\t\tif ( !set.cands ) {\n\t\t\tset.cands = parseSrcset(set.srcset, set);\n\t\t}\n\t\treturn set.cands;\n\t};\n\n\t/**\n\t * returns 1em in css px for html/body default size\n\t * function taken from respondjs\n\t * @returns {*|number}\n\t */\n\tpf.getEmValue = function() {\n\t\tvar body;\n\t\tif ( !eminpx && (body = document.body) ) {\n\t\t\tvar div = document.createElement( \"div\" ),\n\t\t\t\toriginalHTMLCSS = docElem.style.cssText,\n\t\t\t\toriginalBodyCSS = body.style.cssText;\n\n\t\t\tdiv.style.cssText = baseStyle;\n\n\t\t\t// 1em in a media query is the value of the default font size of the browser\n\t\t\t// reset docElem and body to ensure the correct value is returned\n\t\t\tdocElem.style.cssText = fsCss;\n\t\t\tbody.style.cssText = fsCss;\n\n\t\t\tbody.appendChild( div );\n\t\t\teminpx = div.offsetWidth;\n\t\t\tbody.removeChild( div );\n\n\t\t\t//also update eminpx before returning\n\t\t\teminpx = parseFloat( eminpx, 10 );\n\n\t\t\t// restore the original values\n\t\t\tdocElem.style.cssText = originalHTMLCSS;\n\t\t\tbody.style.cssText = originalBodyCSS;\n\n\t\t}\n\t\treturn eminpx || 16;\n\t};\n\n\t/**\n\t * Takes a string of sizes and returns the width in pixels as a number\n\t */\n\tpf.calcListLength = function( sourceSizeListStr ) {\n\t\t// Split up source size list, ie ( max-width: 30em ) 100%, ( max-width: 50em ) 50%, 33%\n\t\t//\n\t\t// or (min-width:30em) calc(30% - 15px)\n\t\tif ( !(sourceSizeListStr in sizeLengthCache) || cfg.uT ) {\n\t\t\tvar winningLength = pf.calcLength( parseSizes( sourceSizeListStr ) );\n\n\t\t\tsizeLengthCache[ sourceSizeListStr ] = !winningLength ? units.width : winningLength;\n\t\t}\n\n\t\treturn sizeLengthCache[ sourceSizeListStr ];\n\t};\n\n\t/**\n\t * Takes a candidate object with a srcset property in the form of url/\n\t * ex. \"images/pic-medium.png 1x, images/pic-medium-2x.png 2x\" or\n\t * \"images/pic-medium.png 400w, images/pic-medium-2x.png 800w\" or\n\t * \"images/pic-small.png\"\n\t * Get an array of image candidates in the form of\n\t * {url: \"/foo/bar.png\", resolution: 1}\n\t * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value\n\t * If sizes is specified, res is calculated\n\t */\n\tpf.setRes = function( set ) {\n\t\tvar candidates;\n\t\tif ( set ) {\n\n\t\t\tcandidates = pf.parseSet( set );\n\n\t\t\tfor ( var i = 0, len = candidates.length; i < len; i++ ) {\n\t\t\t\tsetResolution( candidates[ i ], set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidates;\n\t};\n\n\tpf.setRes.res = setResolution;\n\n\tpf.applySetCandidate = function( candidates, img ) {\n\t\tif ( !candidates.length ) {return;}\n\t\tvar candidate,\n\t\t\ti,\n\t\t\tj,\n\t\t\tlength,\n\t\t\tbestCandidate,\n\t\t\tcurSrc,\n\t\t\tcurCan,\n\t\t\tcandidateSrc,\n\t\t\tabortCurSrc;\n\n\t\tvar imageData = img[ pf.ns ];\n\t\tvar dpr = pf.DPR;\n\n\t\tcurSrc = imageData.curSrc || img[curSrcProp];\n\n\t\tcurCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set);\n\n\t\t// if we have a current source, we might either become lazy or give this source some advantage\n\t\tif ( curCan && curCan.set === candidates[ 0 ].set ) {\n\n\t\t\t// if browser can abort image request and the image has a higher pixel density than needed\n\t\t\t// and this image isn't downloaded yet, we skip next part and try to save bandwidth\n\t\t\tabortCurSrc = (supportAbort && !img.complete && curCan.res - 0.1 > dpr);\n\n\t\t\tif ( !abortCurSrc ) {\n\t\t\t\tcurCan.cached = true;\n\n\t\t\t\t// if current candidate is \"best\", \"better\" or \"okay\",\n\t\t\t\t// set it to bestCandidate\n\t\t\t\tif ( curCan.res >= dpr ) {\n\t\t\t\t\tbestCandidate = curCan;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !bestCandidate ) {\n\n\t\t\tcandidates.sort( ascendingSort );\n\n\t\t\tlength = candidates.length;\n\t\t\tbestCandidate = candidates[ length - 1 ];\n\n\t\t\tfor ( i = 0; i < length; i++ ) {\n\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\tif ( candidate.res >= dpr ) {\n\t\t\t\t\tj = i - 1;\n\n\t\t\t\t\t// we have found the perfect candidate,\n\t\t\t\t\t// but let's improve this a little bit with some assumptions ;-)\n\t\t\t\t\tif (candidates[ j ] &&\n\t\t\t\t\t\t(abortCurSrc || curSrc !== pf.makeUrl( candidate.url )) &&\n\t\t\t\t\t\tchooseLowRes(candidates[ j ].res, candidate.res, dpr, candidates[ j ].cached)) {\n\n\t\t\t\t\t\tbestCandidate = candidates[ j ];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbestCandidate = candidate;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( bestCandidate ) {\n\n\t\t\tcandidateSrc = pf.makeUrl( bestCandidate.url );\n\n\t\t\timageData.curSrc = candidateSrc;\n\t\t\timageData.curCan = bestCandidate;\n\n\t\t\tif ( candidateSrc !== curSrc ) {\n\t\t\t\tpf.setSrc( img, bestCandidate );\n\t\t\t}\n\t\t\tpf.setSize( img );\n\t\t}\n\t};\n\n\tpf.setSrc = function( img, bestCandidate ) {\n\t\tvar origWidth;\n\t\timg.src = bestCandidate.url;\n\n\t\t// although this is a specific Safari issue, we don't want to take too much different code paths\n\t\tif ( bestCandidate.set.type === \"image/svg+xml\" ) {\n\t\t\torigWidth = img.style.width;\n\t\t\timg.style.width = (img.offsetWidth + 1) + \"px\";\n\n\t\t\t// next line only should trigger a repaint\n\t\t\t// if... is only done to trick dead code removal\n\t\t\tif ( img.offsetWidth + 1 ) {\n\t\t\t\timg.style.width = origWidth;\n\t\t\t}\n\t\t}\n\t};\n\n\tpf.getSet = function( img ) {\n\t\tvar i, set, supportsType;\n\t\tvar match = false;\n\t\tvar sets = img [ pf.ns ].sets;\n\n\t\tfor ( i = 0; i < sets.length && !match; i++ ) {\n\t\t\tset = sets[i];\n\n\t\t\tif ( !set.srcset || !pf.matchesMedia( set.media ) || !(supportsType = pf.supportsType( set.type )) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( supportsType === \"pending\" ) {\n\t\t\t\tset = supportsType;\n\t\t\t}\n\n\t\t\tmatch = set;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tpf.parseSets = function( element, parent, options ) {\n\t\tvar srcsetAttribute, imageSet, isWDescripor, srcsetParsed;\n\n\t\tvar hasPicture = parent && parent.nodeName.toUpperCase() === \"PICTURE\";\n\t\tvar imageData = element[ pf.ns ];\n\n\t\tif ( imageData.src === undefined || options.src ) {\n\t\t\timageData.src = getImgAttr.call( element, \"src\" );\n\t\t\tif ( imageData.src ) {\n\t\t\t\tsetImgAttr.call( element, srcAttr, imageData.src );\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcAttr );\n\t\t\t}\n\t\t}\n\n\t\tif ( imageData.srcset === undefined || options.srcset || !pf.supSrcset || element.srcset ) {\n\t\t\tsrcsetAttribute = getImgAttr.call( element, \"srcset\" );\n\t\t\timageData.srcset = srcsetAttribute;\n\t\t\tsrcsetParsed = true;\n\t\t}\n\n\t\timageData.sets = [];\n\n\t\tif ( hasPicture ) {\n\t\t\timageData.pic = true;\n\t\t\tgetAllSourceElements( parent, imageData.sets );\n\t\t}\n\n\t\tif ( imageData.srcset ) {\n\t\t\timageSet = {\n\t\t\t\tsrcset: imageData.srcset,\n\t\t\t\tsizes: getImgAttr.call( element, \"sizes\" )\n\t\t\t};\n\n\t\t\timageData.sets.push( imageSet );\n\n\t\t\tisWDescripor = (alwaysCheckWDescriptor || imageData.src) && regWDesc.test(imageData.srcset || \"\");\n\n\t\t\t// add normal src as candidate, if source has no w descriptor\n\t\t\tif ( !isWDescripor && imageData.src && !getCandidateForSrc(imageData.src, imageSet) && !imageSet.has1x ) {\n\t\t\t\timageSet.srcset += \", \" + imageData.src;\n\t\t\t\timageSet.cands.push({\n\t\t\t\t\turl: imageData.src,\n\t\t\t\t\td: 1,\n\t\t\t\t\tset: imageSet\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else if ( imageData.src ) {\n\t\t\timageData.sets.push( {\n\t\t\t\tsrcset: imageData.src,\n\t\t\t\tsizes: null\n\t\t\t} );\n\t\t}\n\n\t\timageData.curCan = null;\n\t\timageData.curSrc = undefined;\n\n\t\t// if img has picture or the srcset was removed or has a srcset and does not support srcset at all\n\t\t// or has a w descriptor (and does not support sizes) set support to false to evaluate\n\t\timageData.supported = !( hasPicture || ( imageSet && !pf.supSrcset ) || (isWDescripor && !pf.supSizes) );\n\n\t\tif ( srcsetParsed && pf.supSrcset && !imageData.supported ) {\n\t\t\tif ( srcsetAttribute ) {\n\t\t\t\tsetImgAttr.call( element, srcsetAttr, srcsetAttribute );\n\t\t\t\telement.srcset = \"\";\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcsetAttr );\n\t\t\t}\n\t\t}\n\n\t\tif (imageData.supported && !imageData.srcset && ((!imageData.src && element.src) || element.src !== pf.makeUrl(imageData.src))) {\n\t\t\tif (imageData.src === null) {\n\t\t\t\telement.removeAttribute(\"src\");\n\t\t\t} else {\n\t\t\t\telement.src = imageData.src;\n\t\t\t}\n\t\t}\n\n\t\timageData.parsed = true;\n\t};\n\n\tpf.fillImg = function(element, options) {\n\t\tvar imageData;\n\t\tvar extreme = options.reselect || options.reevaluate;\n\n\t\t// expando for caching data on the img\n\t\tif ( !element[ pf.ns ] ) {\n\t\t\telement[ pf.ns ] = {};\n\t\t}\n\n\t\timageData = element[ pf.ns ];\n\n\t\t// if the element has already been evaluated, skip it\n\t\t// unless `options.reevaluate` is set to true ( this, for example,\n\t\t// is set to true when running `picturefill` on `resize` ).\n\t\tif ( !extreme && imageData.evaled === evalId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !imageData.parsed || options.reevaluate ) {\n\t\t\tpf.parseSets( element, element.parentNode, options );\n\t\t}\n\n\t\tif ( !imageData.supported ) {\n\t\t\tapplyBestCandidate( element );\n\t\t} else {\n\t\t\timageData.evaled = evalId;\n\t\t}\n\t};\n\n\tpf.setupRun = function() {\n\t\tif ( !alreadyRun || isVwDirty || (DPR !== window.devicePixelRatio) ) {\n\t\t\tupdateMetrics();\n\t\t}\n\t};\n\n\t// If picture is supported, well, that's awesome.\n\tif ( pf.supPicture ) {\n\t\tpicturefill = noop;\n\t\tpf.fillImg = noop;\n\t} else {\n\n\t\t // Set up picture polyfill by polling the document\n\t\t(function() {\n\t\t\tvar isDomReady;\n\t\t\tvar regReady = window.attachEvent ? /d$|^c/ : /d$|^c|^i/;\n\n\t\t\tvar run = function() {\n\t\t\t\tvar readyState = document.readyState || \"\";\n\n\t\t\t\ttimerId = setTimeout(run, readyState === \"loading\" ? 200 : 999);\n\t\t\t\tif ( document.body ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t\tisDomReady = isDomReady || regReady.test(readyState);\n\t\t\t\t\tif ( isDomReady ) {\n\t\t\t\t\t\tclearTimeout( timerId );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar timerId = setTimeout(run, document.body ? 9 : 99);\n\n\t\t\t// Also attach picturefill on resize and readystatechange\n\t\t\t// http://modernjavascript.blogspot.com/2013/08/building-better-debounce.html\n\t\t\tvar debounce = function(func, wait) {\n\t\t\t\tvar timeout, timestamp;\n\t\t\t\tvar later = function() {\n\t\t\t\t\tvar last = (new Date()) - timestamp;\n\n\t\t\t\t\tif (last < wait) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\tfunc();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn function() {\n\t\t\t\t\ttimestamp = new Date();\n\n\t\t\t\t\tif (!timeout) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t\tvar lastClientWidth = docElem.clientHeight;\n\t\t\tvar onResize = function() {\n\t\t\t\tisVwDirty = Math.max(window.innerWidth || 0, docElem.clientWidth) !== units.width || docElem.clientHeight !== lastClientWidth;\n\t\t\t\tlastClientWidth = docElem.clientHeight;\n\t\t\t\tif ( isVwDirty ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ton( window, \"resize\", debounce(onResize, 99 ) );\n\t\t\ton( document, \"readystatechange\", run );\n\t\t})();\n\t}\n\n\tpf.picturefill = picturefill;\n\t//use this internally for easy monkey patching/performance testing\n\tpf.fillImgs = picturefill;\n\tpf.teardownRun = noop;\n\n\t/* expose methods for testing */\n\tpicturefill._ = pf;\n\n\twindow.picturefillCFG = {\n\t\tpf: pf,\n\t\tpush: function(args) {\n\t\t\tvar name = args.shift();\n\t\t\tif (typeof pf[name] === \"function\") {\n\t\t\t\tpf[name].apply(pf, args);\n\t\t\t} else {\n\t\t\t\tcfg[name] = args[0];\n\t\t\t\tif (alreadyRun) {\n\t\t\t\t\tpf.fillImgs( { reselect: true } );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\twhile (setOptions && setOptions.length) {\n\t\twindow.picturefillCFG.push(setOptions.shift());\n\t}\n\n\t/* expose picturefill */\n\twindow.picturefill = picturefill;\n\n\t/* expose picturefill */\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// CommonJS, just export\n\t\tmodule.exports = picturefill;\n\t} else if ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD support\n\t\tdefine( \"picturefill\", function() { return picturefill; } );\n\t}\n\n\t// IE8 evals this sync, so it must be the last thing we do\n\tif ( !pf.supPicture ) {\n\t\ttypes[ \"image/webp\" ] = detectTypeSupport(\"image/webp\", \"data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==\" );\n\t}\n\n} )( window, document );\n","/**\n* Wild Salmon Center: Utilities\n* http://wildsalmoncenter.org\n*\n* Copyright (c) 2015 Nate Bedortha @ Substance\n*/\n\n var SubstanceWP = new function()\n {\n\n \tvar self = this;\n \tvar $ = jQuery;\n\n \tthis.timers = {};\n \tthis.doAfterDelayDefault = 250; // milliseconds\n \tthis.doAfterDelay = function( callback, uniqueId, ms )\n \t{\n \t\tif ( ! uniqueId )\n \t\t\tuniqueId = self.get_random_string();\n \t\tif ( ! ms )\n \t\t\tms = self.doAfterDelayDefault;\n \t\tif ( self.timers[uniqueId] )\n \t\t\tclearTimeout( self.timers[uniqueId] );\n \t\tself.timers[uniqueId] = setTimeout( callback, ms );\n \t};\n\n \tthis.readCookie = function( name )\n \t{\n \t\tvar c = document.cookie.split('; '), cookies = {}, i, C;\n \t\tfor ( i = c.length - 1; i >= 0; i-- )\n \t\t{\n \t\t\tC = c[i].split('=');\n \t\t\tcookies[C[0]] = C[1];\n \t\t}\n \t\treturn cookies[name];\n \t};\n\n \tthis.inView = function( element )\n \t{\n \t\tvar winHeight = $(window).height();\n \t\tvar elePosition = element.offset().top;\n \t\treturn ( elePosition < winHeight );\n \t};\n\n \tthis.get_post_id = function()\n \t{\n \t\tvar classes = $('body').attr('class');\n \t\tvar matches = classes.match( /postid-(\\d+)/ );\n \t\treturn ( matches ) ? matches[1] : null ;\n \t};\n\n\n \tthis.get_tripadvisor_id = function()\n \t{\n \t\tvar classes = $('body').attr('class');\n \t\tvar matches = classes.match( /tripadvisorid-(\\d+)/ );\n \t\treturn ( matches ) ? matches[1] : null ;\n \t};\n\n \tthis.get_random_string = function( length )\n \t{\n \t\tif ( ! length ) length = 7;\n \t\treturn Math.random().toString(36).substring( length );\n \t};\n\n this.isInViewport = function( element ) {\n /**\n * var elem = document.querySelector('#some-element');\n * isInViewport(elem); // Boolean: returns true/false\n *\n */\n\n var distance = element.getBoundingClientRect();\n return (\n distance.top >= 0 &&\n distance.left >= 0 &&\n distance.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n distance.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n };\n\n }\n","/**\n* Wild Salmon Center\n* http://wildsalmoncenter.org\n*\n* Copyright (c) 2015 Nate Bedortha @ Substance\n*/\n\n ( function( window, undefined ) {\n 'use strict';\n\n document.addEventListener( 'touchstart', function() {}, false);\n\n /**\n * Picturefill\n */\n picturefill();\n\n /**\n * Polyfills\n */\n\n if ( Modernizr ) {\n\n // Position Sticky\n if ( !Modernizr.csspositionsticky ) {\n var stickyHeader = document.getElementById('masthead');\n\n Stickyfill.add( stickyHeader );\n }\n\n }\n\n\n /**\n * Search Trigger\n */\n var searchTrigger = document.querySelector( '.search-trigger' ),\n siteHeader = document.querySelector( '.site-header' ),\n searchField = document.querySelector( '.search-field' );\n\n if ( searchTrigger && siteHeader ) {\n\n searchTrigger.addEventListener( 'click', function() {\n\n // @TODO: add aria-expanded to searchTrigger\n\n siteHeader.classList.toggle( 'show-search' );\n siteHeader.classList.remove( 'show-navigation' );\n\n if ( searchField === document.activeElement ) {\n\n //searchField.blur();\n\n } else {\n\n //searchField.focus();\n\n }\n\n } );\n\n\n }\n\n /**\n * Hamburger Trigger\n */\n var menuToggle = document.querySelector( '.menu-toggle' );\n\n if ( menuToggle && siteHeader ) {\n\n menuToggle.addEventListener( 'click', function() {\n\n if ( menuToggle.hasAttribute( 'aria-expanded' ) ) {\n\n if ( menuToggle.getAttribute( 'aria-expanded' ) === 'true' ) {\n\n menuToggle.setAttribute( 'aria-expanded', 'false' );\n\n } else {\n menuToggle.setAttribute( 'aria-expanded', 'true' );\n }\n }\n\n siteHeader.classList.toggle( 'show-navigation' );\n siteHeader.classList.remove( 'show-search' );\n\n } );\n }\n\n /**\n * Sub Menu Trigger\n */\n var subMenuTriggers = document.querySelectorAll( '.menu-item .sub-menu-icon' );\n\n for ( var i = 0; i < subMenuTriggers.length; ++i ) {\n\n //console.log( 'menuItem: ', menuItem );\n //console.log( 'subMenuTrigger[i]: ', subMenuTrigger[i] );\n //console.log( 'subMenuIcon: ', subMenuIcon );\n\n subMenuTriggers[i].addEventListener( 'click', function( ) {\n var menuItem = this.parentNode,\n openSubMenus = document.querySelectorAll( '.menu-item.show-submenu' );\n\n menuItem.classList.toggle( 'show-submenu' );\n\n });\n\n }\n\n function removeSubMenu( openSubMenus ) {\n for ( var i = 0; i < openSubMenus.length; ++i ) {\n openSubMenus[i].classList.remove( 'show-submenu' );\n }\n }\n\n if ( Modernizr.touchevents ) {\n subMenuTriggers = document.querySelectorAll( '.menu-item-depth-0.has-submenu > a' );\n\n\n for ( var i = 0; i < subMenuTriggers.length; ++i ) {\n\n subMenuTriggers[i].addEventListener( 'click', function( e ) {\n\n if ( window.innerWidth > 1023 ) {\n var menuItem = this.parentNode,\n openSubMenus = document.querySelectorAll( '.menu-item-depth-0.has-submenu.show-submenu' );\n\n if ( menuItem.classList.contains( 'show-submenu') ) {\n menuItem.classList.remove( 'show-submenu');\n } else {\n e.preventDefault();\n\n removeSubMenu( openSubMenus );\n menuItem.classList.add( 'show-submenu');\n }\n }\n });\n }\n }\n\n /**\n * FitVids\n */\n\n fitvids();\n\n\n /**\n * Photo Credits\n *\n var photosWithCredits = document.querySelectorAll( '.singular .entry-content img[data-photo-credit], .hero img[data-photo-credit]' ),\n credits = {};\n\n for ( var i = 0; i < photosWithCredits.length; ++i ) {\n var creditEl = window.document.createElement( 'span' ),\n credit = photosWithCredits[i].getAttribute( 'data-photo-credit' );\n\n creditEl.classList.add( 'photo-credit' );\n creditEl.innerHTML = credit;\n\n photosWithCredits[i].parentNode.insertBefore( creditEl, photosWithCredits[i].nextSibling );\n\n }\n\n\n /**\n * Scroll\n */\n\n /*\n var stickHeader = function( ) {\n var contentContainer = document.getElementById( 'content' );\n var contentContainerBox = contentContainer.getBoundingClientRect();\n\n\n return (\n contentContainerBox.top >= 0 &&\n stickyHeader.classList.contains( 'not-sticky' ) &&\n distance.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n distance.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n\n };\n\n\n\n window.addEventListener( 'scroll', function() {\n\n\n if ( stickHeader() ) {\n console.log( 'in viewport!' );\n stickyHeader.classList.remove( 'not-sticky' );\n stickyHeader.classList.add( 'is-sticky' );\n } else {\n console.log( 'outta viewport!' );\n stickyHeader.classList.remove( 'is-sticky' );\n stickyHeader.classList.add( 'not-sticky' );\n }\n\n\n\n\n\n });\n\n */\n /**\n * Lazy Loading\n */\n\n /*\n jQuery( '.delayed' ).each( function( ) {\n\n //console.log( $(this).data( 'delayed-background-image' ) );\n\n if ( jQuery( this ).is('iframe') ) {\n\n jQuery(this).attr( 'src', jQuery(this).data( 'src' ) );\n\n } else {\n\n jQuery(this).css( 'background-image', 'url(' + jQuery(this).data( 'delayed-background-image' ) + ')' );\n\n }\n\n });\n\n*/\n\n\n } )( this );\n"]}