{"version":3,"sources":["VPAIDFLASHClient.js","utilityFunctions.js","http.js","urlUtils.js","ads/vpaid/VPAIDAdUnitWrapper.js","ads/vpaid/VPAIDFlashTech.js","ads/vpaid/VPAIDHTML5Tech.js","ads/vpaid/VPAIDIntegrator.js","ads/vast/client/Ad.js","ads/vast/client/Creative.js","ads/vast/client/Inline.js","ads/vast/client/Linear.js","ads/vast/client/MediaFile.js","ads/vast/client/TrackingEvent.js","ads/vast/client/VASTClient.js","ads/vast/client/VASTError.js","ads/vast/client/VASTIntegrator.js","ads/vast/client/VASTTracker.js","ads/vast/client/VideoClicks.js","ads/vast/client/Wrapper.js","pollyfill.js","VPAIDHTML5Client.js","async.js","videojs.ads.global.MODIFIED.js","dom.js","xml.js","ads/videojs.vast.js","ads/components/ads-label.js","ads/components/black-poster.js","ads/vast/client/VASTResponse.js","ads/vast/client/vastUtil.js"],"names":["window","document","vjs","undefined","noop","isNull","o","isDefined","isObject","obj","isFunction","str","isNumber","num","isArray","array","Object","prototype","toString","call","isString","isEmptyString","length","isNotEmptyString","arrayLikeObjToArray","args","Array","slice","forEach","iterator","context","key","hasOwnProperty","isPrimitive","extend","arg","i","k","arguments","capitalize","s","charAt","toUpperCase","decapitalize","toLowerCase","transformArray","transformer","transformedArray","item","index","transformedItem","push","toFixedDigits","digits","formattedNum","parseInt","isNaN","NaN","throttle","callback","delay","previousCall","Date","getTime","time","apply","this","echoFn","val","isISO8601","value","iso8086Regex","test","trim","isIDevice","_UA","HttpRequestError","message","HttpRequest","createXhr","XMLHttpRequest","urlParts","url","href","msie","urlParsingNode","setAttribute","protocol","replace","host","search","hash","hostname","port","pathname","VPAIDAdUnitWrapper","vpaidAdUnit","opts","sanityCheck","adUnit","checkVPAIDInterface","VASTError","defaultOpts","responseTimeout","options","_adUnit","VPAIDFlashTech","mediaFile","src","containerEl","vpaidFlashClient","VPAIDHTML5Tech","INVALID_MEDIA_FILE","videoEl","vpaidHTMLClient","VPAIDIntegrator","player","settings","createVPAIDContainerEl","createElement","dom","addClass","el","insertBefore","controlBar","VIEW_MODE","NORMAL","FULLSCREEN","THUMBNAIL","VPAID_VERSION","full","major","minor","resizeAd","dimension","getDimension","MODE","isFullscreen","width","height","logError","error","console","log","Ad","adJTree","id","attr","sequence","inLine","InLine","wrapper","Wrapper","Creative","creativeJTree","adId","apiFramework","linear","Linear","inlineJTree","parseSurveys","inlineSurveys","survey","keyValue","uri","type","adTitle","xml","adSystem","impressions","vastUtil","parseImpressions","impression","creatives","parseCreatives","description","advertiser","surveys","pricing","extensions","linearJTree","parseTrackingEvents","trackingEvents","duration","trackings","trackingData","TrackingEvent","parseMediaFiles","mediaFilesJxonTree","mediaFiles","mfData","MediaFile","parseDuration","tracking","skipoffset","parseOffset","videoClicks","VideoClicks","adParameters","decode","mediaFileJTree","delivery","codec","bitrate","minBitrate","maxBitrate","scalable","maintainAspectRatio","trackingJTree","name","offset","VASTClient","defaultOptions","WRAPPER_LIMIT","errorURLMacros","code","VASTIntegrator","VASTTracker","assetURI","vastResponse","VASTResponse","response","progress","quartiles","firstQuartile","Math","round","midpoint","thirdQuartile","videoClickJTree","parseClickTrackings","clickTrackings","clickTrackingData","clickThrough","clickTracking","customClicks","customClick","wrapperJTree","VASTAdTagURI","vASTAdTagURI","followAdditionalWrappers","allowMultipleAds","fallbackOnNoAd","e","t","n","r","u","a","require","f","Error","l","exports",1,"module","_classCallCheck","instance","Constructor","TypeError","defineProperty","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","IVPAIDAdUnit","viewMode","desiredBitrate","soundVolume",2,"_inherits","subClass","superClass","create","constructor","__proto__","_get","_x15","_x16","_x17","_again","object","property","receiver","desc","parent","getter","Function","getOwnPropertyDescriptor","get","getPrototypeOf","ALL_VPAID_METHODS","getOwnPropertyNames","filter","indexOf","VPAIDAdUnit","_IVPAIDAdUnit","flash","_destroyed","_flash","_this","methodName","removeCallbackByMethodName","EVENTS","event","offEvent","eventName","on","off","playerVPAIDVersion","callFlashMethod","creativeData","environmentVars","setSize","getWidth","getHeight","volume","./IVPAIDAdUnit",3,"$throwIfDestroyed","$loadPendedAdUnit","_loadLater","loadAdUnit","setStaticProperty","propertyName","VPAIDFLASHClient","JSFlashBridge","callbackTimeout","isPositiveInt","createElementWithID","uniqueVPAID","unique","FLASH_VERSION","vpaidParentEl","onError","setTimeout","swfConfig","data","params","wmode","salign","align","allowScriptAccess","scale","allowFullScreen","quality","vpaidOptions","debug","timeout","hasExternalDependencies","_vpaidParentEl","_flashID","movie","FlashVars","VPAID_FLASH_HANDLER","isSupported","swfobject","createSWF","handler","err","_destroyAdUnit","destroy","_adUnitLoad","removeCallback","_destroy","adURL","_this2","isReady","getFlashID","getFlashURL","hasFlashPlayerVersion","./VPAIDAdUnit","./jsFlashBridge","./utils",4,"stringEndsWith","SingleValueRegistry","MultipleValuesRegistry","registry","ERROR","flashURL","flashID","loadHandShake","_el","_flashURL","_width","_height","_handlers","_callbacks","_uniqueMethodIdentifier","_ready","_handShakeHandler","addInstance","add","remove","removeByKey","removeAll","callbackID","concat","_trigger","removeByValue","suffix","filterKeys","result","trigger","newWidth","newHeight","offAll","removeAllCallbacks","removeInstanceByID","parentElement","removeChild","callID","getInstanceByID","_handShake","_callCallback","./jsFlashBridgeRegistry","./registry",5,"instances","JSFlashBridgeRegistry",6,"_registries","keys","splice","old","findByValue","map","_this3","_this4",7,"prefix","count","timer","onSuccess","onTimeout","clearTimeout","nEl","innerHTML","appendChild","newVal","oldVal","parseFloat","isFinite","string","endsWith","String","searchString","position","subjectString","lastIndex","parseNum","creative","video","addStaticToInterface","Interface","METHODS","GETTERS","SETTERS","handshakeVersion","VPAIDVersion","initAd","startAd","stopAd","skipAd","pauseAd","resumeAd","expandAd","collapseAd","subscribe","unsubscribe","getAdLinear","getAdWidth","getAdHeight","getAdExpanded","getAdSkippableState","getAdRemainingTime","getAdDuration","getAdVolume","getAdCompanions","getAdIcons","setAdVolume","VPAID1_METHODS","method","every","VPAIDCreative","iframe","_isValid","_creative","_videoEl","_iframe","_subscribers","Subscriber","$addEventsSubscribers","FILTERED_EVENTS","$trigger","bind","$clickThruHook","AD_CLICK","playerHandles","callOrTriggerEvent","subscribers","utils","isValidVPAIDAd","ignores","ariaty","pop","slot","videoSlot","validate","unsubscribeAll","./subscriber","VPAIDHTML5Client","templateConfig","_id","_frameContainer","createElementInEl","_vpaidOptions","_templateConfig","template","defaultTemplate","extraOptions","$removeEl","$adDestroyed","$removeAdElements","$unloadPreviousAdUnit","$destroyAdUnit","$destroyLoadListener","_onLoad","removeEventListener","clearCallbackTimeout","AD_STOPPED","isDestroyed","onLoad","origin","location","JSON","parse","getID","createAd","_frame","contentWindow","getVPAIDAd","adEl","querySelector","frame","createIframeWithContent","iframeURL_JS","iframeID","addEventListener","unloadAdUnit","subscriber","isValid","func","timeouts","tagName","createIframe","setIframeContent","simpleTemplate","style","left","top","stringify","RegExp","iframeEl","content","iframeDoc","write","toExtend","fromSource","navigator","userAgent","async","setImmediate","fn","tasks","makeCallback","next","waterfall","wrapIterator","when","condition","isAllowed","unshift","events","ii","register","attachEvent","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","clearImmediate","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","cancelContentPlay","ads","cancelPlayTimeout","paused","pause","one","play","getPlayerSnapshot","track","tech","tracks","remoteTextTracks","suppressedTracks","snapshot","ended","currentSrc","currentTime","currentType","nativePoster","poster","getAttribute","mode","removeClass","element","className","classes","split","newClasses","join","restorePlayerSnapshot","trackSnapshot","srcChanged","attempts","restoreTracks","resume","updateEnded","tryToResume","readyState","seekable","videojs","warn","load","removeNativePoster","removeAttribute","defaults","prerollTimeout","postrollTimeout","adFramework","fsmHandler","videoEvents","Html5","Events","returnTrue","triggerEvent","isImmediatePropagationStopped","cancelBubble","isPropagationStopped","state","originalEvent","redispatch","hasStarted","startLinearAdMode","endLinearAdMode","fsm","content-set","adscanceled","adsready","adserror","ads-ready","preroll?","enter","leave","adstart","adtimeout","ads-ready?","ad-playback","triggerevent","adend","content-resuming","_fireEndedTimeout","contentupdate","playing","postroll?","content-playback","contentended","contentSrc","checkSrc","oldValue","newValue","plugin","isVisible","getComputedStyle","visibility","isHidden","display","isShown","hide","__prev_style_display_","show","hasClass","cssClass","len","classList","contains","detachEvent","dispatchEvent","fireEvent","eventType","isDescendant","child","node","parentNode","getTextContent","textContent","text","prependChild","firstChild","isDomElement","Element","click","once","handlerWrap","rect","getBoundingClientRect","offsetWidth","offsetHeight","run","setHeaders","xhr","headers","setRequestHeader","requestError","timeoutId","open","withCredentials","onload","statusText","status","responseText","getAllResponseHeaders","onerror","onabort","send","abort","processResponse","headersString","isSuccess","http","documentMode","strToXMLDoc","stringContainingXMLSource","parseString","parsedDocument","parser","DOMParser","parseFromString","isParseError","errorneousParse","parsererrorNS","getElementsByTagName","namespaceURI","getElementsByTagNameNS","xmlDocument","ActiveXObject","loadXML","parseText","sValue","JXONTree","oXMLParent","documentElement","hasChildNodes","oNode","sProp","vContent","sCollectedTxt","nItem","childNodes","nodeType","nodeValue","nodeName","hasAttributes","oAttrib","nAttrib","attributes","toJXONTree","xmlString","xmlDoc","xmlObj","encode","iPhone","isFirstPlay","saveVolumeSnapshot","muted","restoreVolumeSnapshot","playAdHandler","markVastAsFinished","canPlayPrerollAd","iosPrerollCancelTimeout","initAds","clearAdCancelTimeout","adCancelTimeoutId","adsCanceled","addSpinnerIcon","removeSpinnerIcon","trackAdError","adCancelTimeout","volumeSnapshot","adsEnabled","cancelAds","playPrerollAd","getVastResponse","playAd","finishPlayingAd","vast","getVASTResponse","adAdsLabel","adFinished","addChild","removeAdsLabel","preventManualProgress","adTimeupdateHandler","progressDelta","abs","previousTime","PROGRESS_THRESHOLD","skipad_attempts","adIntegrator","isVPAID","playAdAlways","autoResize","origPlay","isEnabled","enable","disable","AdsLabel","Component","init","that","currentTimeComp","getChild","createEl","BlackPoster","posterImg","canSubscribeToEvents","canUnsubscribeFromEvents","VPAIDInterfaceMethods","adUnitAsyncCall","cb","wrapCallback","shift","evtName","waitForEvent","responseListener","version","adUnitData","getterName","supports","objectEl","container","INVALID_DOM_CONTAINER_EL","MISSING_CALLBACK","PREFIX","INVALID_DOM_VIDEO_EL","techs","removeAdUnit","_trackError","_findSupportedTech","_loadAdUnit","_playAdUnit","_finishPlaying","findSupportedTech","mediafile","VPAIDTech","vpaidMediaFiles","vjsTechEl","_handshake","_initAd","_setupEvents","_addSkipButton","_linkPlayerControls","_startAd","isSupportedVersion","majorNum","parts","adUnitSrc","tracker","trackSkip","trackImpressions","trackStart","trackFirstQuartile","trackMidpoint","trackThirdQuartile","trackComplete","generateClickThroughURL","clickThroughMacro","variables","ASSETURI","CONTENTPLAYHEAD","parseURLMacro","clickThruUrl","trackClick","trackAcceptInvitation","trackAcceptInvitationLinear","trackClose","trackCloseLinear","trackPause","trackCollapse","trackErrorWithCode","trackResume","lastVolume","currentVolume","trackMute","trackUnmute","updateViewSize","updateViewSizeThrottled","updateSkipButtonState","isSkippable","addSkipButton","removeSkipButton","skipButton","createSkipButton","onclick","Event","stopPropagation","linkVolumeControl","updateAdUnitVolume","vol","updatePlayerVolume","linkFullScreenControl","ERRORCODE","buildVASTResponse","adsChain","_buildVASTResponse","_getAd","_sendVASTResponse","requestVASTXml","_requestVASTXml","buildAd","adXML","getValidAd","possibleAds","previousAds","getAd","adChain","adTree","ad","_buildAd","getNextAd","_buildVastTree","xmlStr","vastTree","vastVersion","adJxonTree","addErrorUrlMacros","validateAd","addAdsToResponse","addAd","validateResponse","progressEvents","hasLinear","_selectAdSource","_createVASTTracker","_addClickThrough","_playSelectedAd","source","playerWidth","sort","b","deltaA","deltaB","selectSource","adMediaFile","unbindEvents","trackFullscreenChange","trackProgress","trackVolumeChange","trackFullscreen","trackExitFullscreen","currentTimeInMs","previouslyMuted","addSkipButtonToPlayer","skipOffset","updateSkipButton","timeLeft","ceil","skipOffsetInSec","createClickThroughBlocker","blocker","updateBlockerURL","formatProgress","removeBlocker","updateBlocker","handlePlayerError","_linearAdded","appendToArray","items","_addInLine","_addWrapper","_addErrorTrackUrl","errorURL","_addImpressions","_addClickTrackings","_addCustomClicks","_addTrackingEvents","eventsMap","trackingEvent","_addTitle","title","_addDuration","_addVideoClicks","_addMediaFiles","_addSkipoffset","_addAdParameters","_addLinear","trackURLs","urls","trackEvent","trackOnce","getEventUris","uris","newProgress","addTrackEvent","canBeAdded","addQuartileEvents","quartileTime","ONCE","addProgressEvent","progressEvent","trackEvents","ALWAYS","errorcode","URLMacros","sources","parseURLMacros","trackImgs","img","Image","parsedURLs","random","URLMacro","_parseURLMacro","durationStr","parseHoursToMs","hourStr","parseMinToMs","minStr","parseSecToMs","secStr","match","durationInMs","durationRegex","creativesJTree","creativesData","hours","minutes","seconds","milliseconds","floor","isPercentage","percentageRegex","calculatePercentage","percentStr","calcPercent","quantity","percent"],"mappings":"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","file":"videojs-vast-vpaid.min.js","sourcesContent":["(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;o 0 ? newVal : oldVal;\n}\n\nvar endsWith = (function () {\n if (String.prototype.endsWith) return String.prototype.endsWith;\n return function endsWith(searchString, position) {\n var subjectString = this.toString();\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n})();\n\nfunction stringEndsWith(string, search) {\n return endsWith.call(string, search);\n}\n\n},{}]},{},[3])\n\n\n//# sourceMappingURL=VPAIDFLASHClient.js.map","/*jshint unused:false */\n\"use strict\";\n\nvar NODE_TYPE_ELEMENT = 1;\n\nfunction noop(){ }\n\nfunction isNull(o) {\n return o === null;\n}\n\nfunction isDefined(o){\n return o !== undefined;\n}\n\nfunction isUndefined(o){\n return o === undefined;\n}\n\nfunction isObject(obj) {\n return typeof obj === 'object';\n}\n\nfunction isFunction(str){\n return typeof str === 'function';\n}\n\nfunction isNumber(num){\n return typeof num === 'number';\n}\n\nfunction isWindow(obj) {\n return isObject(obj) && obj.window === obj;\n}\n\nfunction isArray(array){\n return Object.prototype.toString.call( array ) === '[object Array]';\n}\n\nfunction isArrayLike(obj) {\n if (obj === null || isWindow(obj) || isFunction(obj) || isUndefined(obj)) {\n return false;\n }\n\n var length = obj.length;\n\n if (obj.nodeType === NODE_TYPE_ELEMENT && length) {\n return true;\n }\n\n return isString(obj) || isArray(obj) || length === 0 ||\n typeof length === 'number' && length > 0 && (length - 1) in obj;\n}\n\nfunction isString(str){\n return typeof str === 'string';\n}\n\nfunction isEmptyString(str) {\n return isString(str) && str.length === 0;\n}\n\nfunction isNotEmptyString(str) {\n return isString(str) && str.length !== 0;\n}\n\nfunction arrayLikeObjToArray(args) {\n return Array.prototype.slice.call(args);\n}\n\nfunction forEach(obj, iterator, context) {\n var key, length;\n if (obj) {\n if (isFunction(obj)) {\n for (key in obj) {\n // Need to check if hasOwnProperty exists,\n // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function\n if (key !== 'prototype' && key !== 'length' && key !== 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {\n iterator.call(context, obj[key], key, obj);\n }\n }\n } else if (isArray(obj)) {\n var isPrimitive = typeof obj !== 'object';\n for (key = 0, length = obj.length; key < length; key++) {\n if (isPrimitive || key in obj) {\n iterator.call(context, obj[key], key, obj);\n }\n }\n } else if (obj.forEach && obj.forEach !== forEach) {\n obj.forEach(iterator, context, obj);\n } else {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n iterator.call(context, obj[key], key, obj);\n }\n }\n }\n }\n return obj;\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator) {\n separator = separator || '_';\n return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n}\n\nfunction isValidEmail(email){\n if(!isString(email)){\n return false;\n }\n var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i;\n return EMAIL_REGEXP.test(email.trim());\n}\n\nfunction extend (obj) {\n var arg, i, k;\n for (i = 1; i < arguments.length; i++) {\n arg = arguments[i];\n for (k in arg) {\n if (arg.hasOwnProperty(k)) {\n if(isObject(obj[k]) && !isNull(obj[k]) && isObject(arg[k])){\n obj[k] = extend({}, obj[k], arg[k]);\n }else {\n obj[k] = arg[k];\n }\n }\n }\n }\n return obj;\n}\n\nfunction capitalize(s){\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction decapitalize(s) {\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n\n/**\n * This method works the same way array.prototype.map works but if the transformer returns undefine, then\n * it won't be added to the transformed Array.\n */\nfunction transformArray(array, transformer) {\n var transformedArray = [];\n\n array.forEach(function(item, index){\n var transformedItem = transformer(item, index);\n if(isDefined(transformedItem)) {\n transformedArray.push(transformedItem);\n }\n });\n\n return transformedArray;\n}\n\nfunction toFixedDigits(num, digits) {\n var formattedNum = num + '';\n digits = isNumber(digits) ? digits : 0;\n num = isNumber(num) ? num : parseInt(num);\n if(isNumber(num) && !isNaN(num)){\n formattedNum = num + '';\n while(formattedNum.length < digits) {\n formattedNum = '0' + formattedNum;\n }\n return formattedNum;\n }\n return NaN + '';\n}\n\nfunction throttle(callback, delay) {\n var previousCall = new Date().getTime() - (delay + 1);\n return function() {\n var time = new Date().getTime();\n if ((time - previousCall) >= delay) {\n previousCall = time;\n callback.apply(this, arguments);\n }\n };\n}\n\nfunction debounce (callback, wait) {\n var timeoutId;\n\n return function (){\n if(timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(function(){\n callback.apply(this, arguments);\n timeoutId = undefined;\n }, wait);\n };\n}\n\n// a function designed to blow up the stack in a naive way\n// but it is ok for videoJs children components\nfunction treeSearch(root, getChildren, found){\n var children = getChildren(root);\n for (var i = 0; i < children.length; i++){\n if (found(children[i])) {\n return children[i];\n }\n else {\n var el = treeSearch(children[i], getChildren, found);\n if (el){\n return el;\n }\n }\n }\n}\n\nfunction echoFn(val) {\n return function () {\n return val;\n };\n}\n\n//Note: Supported formats come from http://www.w3.org/TR/NOTE-datetime\n// and the iso8601 regex comes from http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/\nfunction isISO8601(value) {\n if(isNumber(value)){\n value = value + ''; //we make sure that we are working with strings\n }\n\n if(!isString(value)){\n return false;\n }\n\n /*jslint maxlen: 500 */\n var iso8086Regex = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n return iso8086Regex.test(value.trim());\n}\n\nvar _UA = navigator.userAgent;\nfunction isIDevice() {\n return /iP(hone|ad)/.test(_UA);\n}","\"use strict\";\n\nfunction HttpRequestError(message) {\n this.message = 'HttpRequest Error: ' + (message || '');\n}\nHttpRequestError.prototype = new Error();\nHttpRequestError.prototype.name = \"HttpRequest Error\";\n\nfunction HttpRequest(createXhr) {\n if (!isFunction(createXhr)) {\n throw new HttpRequestError('Missing XMLHttpRequest factory method');\n }\n\n this.createXhr = createXhr;\n}\n\nHttpRequest.prototype.run = function (method, url, callback, options) {\n sanityCheck(url, callback, options);\n var timeout, timeoutId;\n var xhr = this.createXhr();\n options = options || {};\n timeout = isNumber(options.timeout)? options.timeout : 0;\n\n xhr.open(method, urlParts(url).href, true);\n\n if (options.headers) {\n setHeaders(xhr, options.headers);\n }\n\n if (options.withCredentials) {\n xhr.withCredentials = true;\n }\n\n xhr.onload = function () {\n var statusText, response, status;\n\n if(isDefined(timeoutId)){\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n statusText = xhr.statusText || '';\n\n // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n response = ('response' in xhr) ? xhr.response : xhr.responseText;\n\n // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n status = xhr.status === 1223 ? 204 : xhr.status;\n\n callback(\n status,\n response,\n xhr.getAllResponseHeaders(),\n statusText);\n };\n\n xhr.onerror = requestError;\n xhr.onabort = requestError;\n\n xhr.send();\n\n if(timeout > 0){\n timeoutId = setTimeout(function () {\n xhr && xhr.abort();\n }, timeout);\n }\n\n function sanityCheck(url, callback, options) {\n if (!isString(url) || isEmptyString(url)) {\n throw new HttpRequestError(\"Invalid url '\" + url + \"'\");\n }\n\n if (!isFunction(callback)) {\n throw new HttpRequestError(\"Invalid handler '\" + callback + \"' for the http request\");\n }\n\n if (isDefined(options) && !isObject(options)) {\n throw new HttpRequestError(\"Invalid options map '\" + options + \"'\");\n }\n }\n\n function setHeaders(xhr, headers) {\n forEach(headers, function (value, key) {\n if (isDefined(value)) {\n xhr.setRequestHeader(key, value);\n }\n });\n }\n\n function requestError() {\n callback(-1, null, null, '');\n }\n};\n\nHttpRequest.prototype.get = function (url, callback, options) {\n this.run('GET', url, processResponse, options);\n\n function processResponse(status, response, headersString, statusText) {\n if (isSuccess(status)) {\n callback(null, response, status, headersString, statusText);\n } else {\n callback(new HttpRequestError(statusText), response, status, headersString, statusText);\n }\n }\n\n function isSuccess(status) {\n return 200 <= status && status < 300;\n }\n};\n\nfunction createXhr() {\n return new window.XMLHttpRequest();\n}\n\nvar http = new HttpRequest(createXhr);\n","'use strict';\n\n/**\n * documentMode is an IE-only property\n * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx\n */\nvar msie = document.documentMode;\n\n/**\n *\n * IMPORTANT NOTE: This function comes from angularJs and was originally called urlResolve\n * you can take a look at the original code here https://github.com/angular/angular.js/blob/master/src/ng/urlUtils.js\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL. Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL. This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers. However, the parsed components will not be set if the URL assigned did not specify\n * them. (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.) We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one\n * uses the inner HTML approach to assign the URL as part of an HTML snippet -\n * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL.\n * Unfortunately, setting img[src] to something like \"javascript:foo\" on IE throws an exception.\n * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that\n * method and IE < 8 is unsupported.\n *\n * References:\n * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n * http://url.spec.whatwg.org/#urlutils\n * https://github.com/angular/angular.js/pull/2902\n * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @kind function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n * | member name | Description |\n * |---------------|----------------|\n * | href | A normalized version of the provided URL if it was not an absolute URL |\n * | protocol | The protocol including the trailing colon |\n * | host | The host and port (if the port is non-default) of the normalizedUrl |\n * | search | The search params, minus the question mark |\n * | hash | The hash string, minus the hash symbol\n * | hostname | The hostname\n * | port | The port, without \":\"\n * | pathname | The pathname, beginning with \"/\"\n *\n */\n\nvar urlParsingNode = document.createElement(\"a\");\n\nfunction urlParts(url) {\n var href = url;\n\n if (msie) {\n // Normalize before parse. Refer Implementation Notes on why this is\n // done in two steps on IE.\n urlParsingNode.setAttribute(\"href\", href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: isNotEmptyString(urlParsingNode.port)? urlParsingNode.port: 80,\n pathname: (urlParsingNode.pathname.charAt(0) === '/')\n ? urlParsingNode.pathname\n : '/' + urlParsingNode.pathname\n };\n}\n\n\n/**\n * This function accepts a query string (search part of a url) and returns a dictionary with\n * the different key value pairs\n * @param {string} qs queryString\n */\nfunction queryStringToObj(qs, cond) {\n var pairs, qsObj;\n\n cond = isFunction(cond)? cond : function() {\n return true;\n };\n\n qs = qs.trim().replace(/^\\?/, '');\n pairs = qs.split('&');\n qsObj = {};\n\n forEach(pairs, function (pair) {\n var keyValue, key, value;\n if (pair !== '') {\n keyValue = pair.split('=');\n key = keyValue[0];\n value = keyValue[1];\n if(cond(key, value)){\n qsObj[key] = value;\n }\n }\n });\n\n return qsObj;\n}\n\n/**\n * This function accepts an object and serializes it into a query string without the leading '?'\n * @param obj\n * @returns {string}\n */\nfunction objToQueryString(obj) {\n var pairs = [];\n forEach(obj, function (value, key) {\n pairs.push(key + '=' + value);\n });\n return pairs.join('&');\n}\n\n","function VPAIDAdUnitWrapper(vpaidAdUnit, opts) {\n if (!(this instanceof VPAIDAdUnitWrapper)) {\n return new VPAIDAdUnitWrapper(vpaidAdUnit);\n }\n sanityCheck(vpaidAdUnit, opts);\n var defaultOpts = {\n responseTimeout: 5000\n };\n\n this.options = extend({}, defaultOpts, opts || {});\n this._adUnit = vpaidAdUnit;\n\n /*** Local Functions ***/\n function sanityCheck(adUnit, opts) {\n if (!adUnit || !VPAIDAdUnitWrapper.checkVPAIDInterface(adUnit)) {\n throw new VASTError('on VPAIDAdUnitWrapper, the passed VPAID adUnit does not fully implement the VPAID interface');\n }\n\n if (opts && !isObject(opts)) {\n throw new VASTError(\"on VPAIDAdUnitWrapper, expected options hash but got '\" + opts + \"'\");\n }\n }\n}\n\nVPAIDAdUnitWrapper.checkVPAIDInterface = function checkVPAIDInterface(VPAIDAdUnit) {\n //NOTE: skipAd is not part of the method list because it only appears in VPAID 2.0 and we support VPAID 1.0\n var VPAIDInterfaceMethods = [\n 'handshakeVersion', 'initAd', 'startAd', 'stopAd', 'resizeAd', 'pauseAd', 'expandAd', 'collapseAd'\n ];\n\n for (var i = 0, len = VPAIDInterfaceMethods.length; i < len; i++) {\n if (!VPAIDAdUnit || !isFunction(VPAIDAdUnit[VPAIDInterfaceMethods[i]])) {\n return false;\n }\n }\n\n\n return canSubscribeToEvents(VPAIDAdUnit) && canUnsubscribeFromEvents(VPAIDAdUnit);\n\n /*** Local Functions ***/\n\n function canSubscribeToEvents(adUnit) {\n return isFunction(adUnit.subscribe) || isFunction(adUnit.addEventListener) || isFunction(adUnit.on);\n }\n\n function canUnsubscribeFromEvents(adUnit) {\n return isFunction(adUnit.unsubscribe) || isFunction(adUnit.removeEventListener) || isFunction(adUnit.off);\n\n }\n};\n\nVPAIDAdUnitWrapper.prototype.adUnitAsyncCall = function () {\n var args = arrayLikeObjToArray(arguments);\n var method = args.shift();\n var cb = args.pop();\n var timeoutId;\n\n sanityCheck(method, cb, this._adUnit);\n args.push(wrapCallback());\n\n this._adUnit[method].apply(this._adUnit, args);\n timeoutId = setTimeout(function () {\n timeoutId = null;\n cb(new VASTError(\"on VPAIDAdUnitWrapper, timeout while waiting for a response on call '\" + method + \"'\"));\n cb = noop;\n }, this.options.responseTimeout);\n\n /*** Local functions ***/\n function sanityCheck(method, cb, adUnit) {\n if (!isString(method) || !isFunction(adUnit[method])) {\n throw new VASTError(\"on VPAIDAdUnitWrapper.adUnitAsyncCall, invalid method name\");\n }\n\n if (!isFunction(cb)) {\n throw new VASTError(\"on VPAIDAdUnitWrapper.adUnitAsyncCall, missing callback\");\n }\n }\n\n function wrapCallback() {\n return function () {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n cb.apply(this, arguments);\n };\n }\n};\n\nVPAIDAdUnitWrapper.prototype.on = function (evtName, handler) {\n var addEventListener = this._adUnit.addEventListener || this._adUnit.subscribe || this._adUnit.on;\n addEventListener.call(this._adUnit, evtName, handler);\n};\n\nVPAIDAdUnitWrapper.prototype.off = function (evtName, handler) {\n var removeEventListener = this._adUnit.removeEventListener || this._adUnit.unsubscribe || this._adUnit.off;\n removeEventListener.call(this._adUnit, evtName, handler);\n};\n\nVPAIDAdUnitWrapper.prototype.waitForEvent = function (evtName, cb, context) {\n var timeoutId;\n sanityCheck(evtName, cb);\n context = context || null;\n\n this.on(evtName, responseListener);\n\n timeoutId = setTimeout(function () {\n cb(new VASTError(\"on VPAIDAdUnitWrapper.waitForEvent, timeout while waiting for event '\" + evtName + \"'\"));\n timeoutId = null;\n cb = noop;\n }, this.options.responseTimeout);\n\n /*** Local functions ***/\n function sanityCheck(evtName, cb) {\n if (!isString(evtName)) {\n throw new VASTError(\"on VPAIDAdUnitWrapper.waitForEvent, missing evt name\");\n }\n\n if (!isFunction(cb)) {\n throw new VASTError(\"on VPAIDAdUnitWrapper.waitForEvent, missing callback\");\n }\n }\n\n function responseListener() {\n var args = arrayLikeObjToArray(arguments);\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n args.unshift(null);\n cb.apply(context, args);\n }\n};\n\n// VPAID METHODS\nVPAIDAdUnitWrapper.prototype.handshakeVersion = function (version, cb) {\n this.adUnitAsyncCall('handshakeVersion', version, cb);\n};\n\n/* jshint maxparams:6 */\nVPAIDAdUnitWrapper.prototype.initAd = function (width, height, viewMode, desiredBitrate, adUnitData, cb) {\n this.waitForEvent('AdLoaded', cb);\n this._adUnit.initAd(width, height, viewMode, desiredBitrate, adUnitData);\n};\n\nVPAIDAdUnitWrapper.prototype.resizeAd = function (width, height, viewMode, cb) {\n // NOTE: AdSizeChange event is only supported on VPAID 2.0 so for the moment we are not going to use it\n // and will assume that everything is fine after the async call\n this.adUnitAsyncCall('resizeAd', width, height, viewMode, cb);\n};\n\nVPAIDAdUnitWrapper.prototype.startAd = function (cb) {\n this.waitForEvent('AdStarted', cb);\n this._adUnit.startAd();\n};\n\nVPAIDAdUnitWrapper.prototype.stopAd = function (cb) {\n this.waitForEvent('AdStopped', cb);\n this._adUnit.stopAd();\n};\n\nVPAIDAdUnitWrapper.prototype.pauseAd = function (cb) {\n this.waitForEvent('AdPaused', cb);\n this._adUnit.pauseAd();\n};\n\nVPAIDAdUnitWrapper.prototype.resumeAd = function (cb) {\n this.waitForEvent('AdPlaying', cb);\n this._adUnit.resumeAd();\n};\n\nVPAIDAdUnitWrapper.prototype.expandAd = function (cb) {\n this.waitForEvent('AdExpandedChange', cb);\n this._adUnit.expandAd();\n};\n\nVPAIDAdUnitWrapper.prototype.collapseAd = function (cb) {\n this.waitForEvent('AdExpandedChange', cb);\n this._adUnit.collapseAd();\n};\n\nVPAIDAdUnitWrapper.prototype.skipAd = function (cb) {\n this.waitForEvent('AdSkipped', cb);\n this._adUnit.skipAd();\n};\n\n//VPAID property getters\n[\n 'adLinear',\n 'adWidth',\n 'adHeight',\n 'adExpanded',\n 'adSkippableState',\n 'adRemainingTime',\n 'adDuration',\n 'adVolume',\n 'adCompanions',\n 'adIcons'\n].forEach(function (property) {\n var getterName = 'get' + capitalize(property);\n\n VPAIDAdUnitWrapper.prototype[getterName] = function (cb) {\n this.adUnitAsyncCall(getterName, cb);\n };\n});\n\n//VPAID property setters\nVPAIDAdUnitWrapper.prototype.setAdVolume = function(volume, cb){\n this.adUnitAsyncCall('setAdVolume',volume, cb);\n};\n","function VPAIDFlashTech(mediaFile) {\n if (!(this instanceof VPAIDFlashTech)) {\n return new VPAIDFlashTech(mediaFile);\n }\n sanityCheck(mediaFile);\n this.mediaFile = mediaFile;\n this.containerEl = null;\n this.vpaidFlashClient = null;\n\n /*** local functions ***/\n function sanityCheck(mediaFile) {\n if (!mediaFile || !isString(mediaFile.src)) {\n throw new VASTError('on VPAIDFlashTech, invalid MediaFile');\n }\n }\n}\n\nVPAIDFlashTech.supports = function (type) {\n return type === 'application/x-shockwave-flash';\n};\n\nVPAIDFlashTech.prototype.loadAdUnit = function loadFlashCreative(containerEl, objectEl, callback) {\n var that = this;\n sanityCheck(containerEl, callback);\n\n this.containerEl = containerEl;\n this.vpaidFlashClient = new VPAIDFLASHClient(containerEl, function (error) {\n if (error) {\n return callback(error);\n }\n\n that.vpaidFlashClient.loadAdUnit(that.mediaFile.src, callback);\n });\n\n /*** Local Functions ***/\n function sanityCheck(container, cb) {\n\n if (!dom.isDomElement(container)) {\n throw new VASTError('on VPAIDFlashTech.loadAdUnit, invalid dom container element');\n }\n\n if (!isFunction(cb)) {\n throw new VASTError('on VPAIDFlashTech.loadAdUnit, missing valid callback');\n }\n }\n};\n\nVPAIDFlashTech.prototype.unloadAdUnit = function () {\n if (this.vpaidFlashClient) {\n try{\n this.vpaidFlashClient.destroy();\n } catch(e){\n if(console && isFunction(console.log)){\n console.log('VAST ERROR: trying to unload the VPAID adunit');\n }\n }\n this.vpaidFlashClient = null;\n }\n\n if (this.containerEl) {\n dom.remove(this.containerEl);\n this.containerEl = null;\n }\n};\n","function VPAIDHTML5Tech(mediaFile) {\n\n if(!(this instanceof VPAIDHTML5Tech)) {\n return new VPAIDHTML5Tech(mediaFile);\n }\n\n sanityCheck(mediaFile);\n\n this.containerEl = null;\n this.videoEl = null;\n this.vpaidHTMLClient = null;\n\n this.mediaFile = mediaFile;\n\n function sanityCheck(mediaFile) {\n if (!mediaFile || !isString(mediaFile.src)) {\n throw new VASTError(VPAIDHTML5Tech.INVALID_MEDIA_FILE);\n }\n }\n}\n\nVPAIDHTML5Tech.supports = function (type) {\n return type === 'application/javascript';\n};\n\nVPAIDHTML5Tech.prototype.loadAdUnit = function loadAdUnit(containerEl, videoEl, callback) {\n sanityCheck(containerEl, videoEl, callback);\n\n this.containerEl = containerEl;\n this.videoEl = videoEl;\n this.vpaidHTMLClient = new VPAIDHTML5Client(containerEl, videoEl, {});\n this.vpaidHTMLClient.loadAdUnit(this.mediaFile.src, callback);\n\n function sanityCheck(container, video, cb) {\n if (!dom.isDomElement(container)) {\n throw new VASTError(VPAIDHTML5Tech.INVALID_DOM_CONTAINER_EL);\n }\n\n if (!dom.isDomElement(video) || video.tagName.toLowerCase() !== 'video') {\n throw new VASTError(VPAIDHTML5Tech.INVALID_DOM_CONTAINER_EL);\n }\n\n if (!isFunction(cb)) {\n throw new VASTError(VPAIDHTML5Tech.MISSING_CALLBACK);\n }\n }\n};\n\nVPAIDHTML5Tech.prototype.unloadAdUnit = function unloadAdUnit() {\n if (this.vpaidHTMLClient) {\n try {\n this.vpaidHTMLClient.destroy();\n } catch(e) {\n if (console && isFunction(console.log)) {\n console.log('VAST ERROR: trying to unload the VPAID adunit');\n }\n }\n\n this.vpaidHTMLClient = null;\n }\n\n if (this.containerEl) {\n dom.remove(this.containerEl);\n this.containerEl = null;\n }\n};\n\nvar PREFIX = 'on VPAIDHTML5Tech';\nVPAIDHTML5Tech.INVALID_MEDIA_FILE = PREFIX + ', invalid MediaFile';\nVPAIDHTML5Tech.INVALID_DOM_CONTAINER_EL = PREFIX + ', invalid container HtmlElement';\nVPAIDHTML5Tech.INVALID_DOM_VIDEO_EL = PREFIX + ', invalid HTMLVideoElement';\nVPAIDHTML5Tech.MISSING_CALLBACK = PREFIX + ', missing valid callback';\n\n","function VPAIDIntegrator(player, settings) {\n if (!(this instanceof VPAIDIntegrator)) {\n return new VPAIDIntegrator(player);\n }\n\n this.VIEW_MODE = {\n NORMAL: 'normal',\n FULLSCREEN: \"fullscreen\",\n THUMBNAIL: \"thumbnail\"\n };\n this.player = player;\n this.containerEl = createVPAIDContainerEl(player);\n this.options = {\n responseTimeout: 2000,\n VPAID_VERSION: {\n full: '2.0',\n major: 2,\n minor: 0\n }\n };\n this.settings = settings;\n\n /*** Local functions ***/\n\n function createVPAIDContainerEl() {\n var containerEl = document.createElement('div');\n dom.addClass(containerEl, 'VPAID-container');\n player.el().insertBefore(containerEl, player.controlBar.el());\n return containerEl;\n\n }\n}\n\n//List of supported VPAID technologies\nVPAIDIntegrator.techs = [\n VPAIDFlashTech,\n VPAIDHTML5Tech\n];\n\nVPAIDIntegrator.prototype.playAd = function playVPaidAd(vastResponse, callback) {\n var that = this;\n var tech;\n var player = this.player;\n\n callback = callback || noop;\n if (!(vastResponse instanceof VASTResponse)) {\n return callback(new VASTError('on VASTIntegrator.playAd, missing required VASTResponse'));\n }\n\n player.one('adserror', function () {\n removeAdUnit();\n });\n\n tech = this._findSupportedTech(vastResponse);\n dom.addClass(player.el(), 'vjs-vpaid-ad');\n\n if (tech) {\n async.waterfall([\n function (next) {\n next(null, tech, vastResponse);\n },\n this._loadAdUnit.bind(this),\n this._playAdUnit.bind(this),\n this._finishPlaying.bind(this)\n\n ], function (error, adUnit, vastResponse) {\n removeAdUnit(error);\n\n callback(error, vastResponse);\n });\n } else {\n callback(new VASTError('on VPAIDIntegrator.playAd, could not find a supported mediaFile'));\n }\n /*** Local functions ***/\n function removeAdUnit(error) {\n if (error) {\n that._trackError(vastResponse);\n player.trigger('vast.aderror');\n }\n\n tech.unloadAdUnit();\n dom.removeClass(player.el(), 'vjs-vpaid-ad');\n player.trigger('VPAID.adended');\n }\n};\n\nVPAIDIntegrator.prototype._findSupportedTech = function (vastResponse) {\n if (!(vastResponse instanceof VASTResponse)) {\n return null;\n }\n\n var vpaidMediaFiles = vastResponse.mediaFiles.filter(vastUtil.isVPAID);\n var i, len, mediaFile, VPAIDTech;\n\n for (i = 0, len = vpaidMediaFiles.length; i < len; i += 1) {\n mediaFile = vpaidMediaFiles[i];\n VPAIDTech = findSupportedTech(mediaFile);\n if (VPAIDTech) {\n return new VPAIDTech(mediaFile);\n }\n }\n\n return null;\n\n /*** Local functions ***/\n\n function findSupportedTech(mediafile) {\n var type = mediafile.type;\n var i, len, VPAIDTech;\n\n for (i = 0, len = VPAIDIntegrator.techs.length; i < len; i += 1) {\n VPAIDTech = VPAIDIntegrator.techs[i];\n if (VPAIDTech.supports(type)) {\n return VPAIDTech;\n }\n }\n return null;\n }\n};\n\nVPAIDIntegrator.prototype._loadAdUnit = function (tech, vastResponse, next) {\n var vjsTechEl = this.player.el().querySelector('.vjs-tech');\n tech.loadAdUnit(this.containerEl, vjsTechEl, function (error, adUnit) {\n try {\n next(error, new VPAIDAdUnitWrapper(adUnit, {src: tech.mediaFile.src}), vastResponse);\n } catch (e) {\n next(e, adUnit, vastResponse);\n }\n });\n};\n\nVPAIDIntegrator.prototype._playAdUnit = function (adUnit, vastResponse, callback) {\n async.waterfall([\n function (next) {\n next(null, adUnit, vastResponse);\n },\n this._handshake.bind(this),\n this._initAd.bind(this),\n this._setupEvents.bind(this),\n this._addSkipButton.bind(this),\n this._linkPlayerControls.bind(this),\n this._startAd.bind(this)\n ], callback);\n};\n\nVPAIDIntegrator.prototype._handshake = function handshake(adUnit, vastResponse, next) {\n adUnit.handshakeVersion('2.0', function (error, version) {\n if (error) {\n return next(error, adUnit, vastResponse);\n }\n\n if (version && isSupportedVersion(version)) {\n return next(null, adUnit, vastResponse);\n }\n\n return next(new VASTError('on VPAIDIntegrator._handshake, unsupported version \"' + version + '\"'), adUnit, vastResponse);\n });\n\n function isSupportedVersion(version) {\n var majorNum = major(version);\n return majorNum >= 1 && majorNum <= 2;\n }\n\n function major(version) {\n var parts = version.split('.');\n return parseInt(parts[0], 10);\n }\n};\n\nVPAIDIntegrator.prototype._initAd = function (adUnit, vastResponse, next) {\n var dimension = dom.getDimension(this.player.el());\n adUnit.initAd(dimension.width, dimension.height, this.VIEW_MODE.NORMAL, -1, vastResponse.adParameters || '', function (error) {\n next(error, adUnit, vastResponse);\n });\n};\n\nVPAIDIntegrator.prototype._setupEvents = function (adUnit, vastResponse, next) {\n var adUnitSrc = adUnit.options.src;\n var tracker = new VASTTracker(adUnitSrc, vastResponse);\n var player = this.player;\n\n adUnit.on('AdSkipped', function () {\n tracker.trackSkip();\n });\n\n adUnit.on('AdImpression', function () {\n tracker.trackImpressions();\n });\n\n adUnit.on('AdVideoStart', function () {\n tracker.trackStart();\n });\n\n adUnit.on('AdVideoFirstQuartile', function () {\n tracker.trackFirstQuartile();\n });\n\n adUnit.on('AdVideoMidpoint', function () {\n tracker.trackMidpoint();\n });\n\n adUnit.on('AdVideoThirdQuartile', function () {\n tracker.trackThirdQuartile();\n });\n\n adUnit.on('AdVideoComplete', function () {\n tracker.trackComplete();\n });\n\n adUnit.on('AdClickThru', function (data) {\n var url= data.url;\n var playerHandles = data.playerHandles;\n var clickThruUrl = isNotEmptyString(url) ? url : generateClickThroughURL(vastResponse.clickThrough);\n\n tracker.trackClick();\n if (playerHandles && clickThruUrl) {\n window.open(clickThruUrl, '_blank');\n }\n\n function generateClickThroughURL(clickThroughMacro) {\n var variables = {\n ASSETURI: adUnit.options.src,\n CONTENTPLAYHEAD: 0 //In VPAID there is no method to know the current time from the adUnit\n };\n\n return clickThroughMacro ? vastUtil.parseURLMacro(clickThroughMacro, variables) : null;\n }\n });\n\n adUnit.on('AdUserAcceptInvitation', function () {\n tracker.trackAcceptInvitation();\n tracker.trackAcceptInvitationLinear();\n });\n\n adUnit.on('AdUserClose', function () {\n tracker.trackClose();\n tracker.trackCloseLinear();\n });\n\n adUnit.on('AdPaused', function () {\n tracker.trackPause();\n });\n\n adUnit.on('AdUserMinimize', function () {\n tracker.trackCollapse();\n });\n\n adUnit.on('AdError', function () {\n //NOTE: we track errors code 901, as noted in VAST 3.0\n tracker.trackErrorWithCode(901);\n });\n\n adUnit.on('AdPlaying', function () {\n //NOTE: we track errors code 901, as noted in VAST 3.0\n tracker.trackResume();\n });\n\n adUnit.on('AdVolumeChange', function () {\n var lastVolume = player.volume();\n adUnit.getAdVolume(function (error, currentVolume) {\n if (currentVolume === 0 && lastVolume > 0) {\n tracker.trackMute();\n }\n\n if (currentVolume > 0 && lastVolume === 0) {\n tracker.trackUnmute();\n }\n\n player.volume(currentVolume);\n });\n });\n\n var updateViewSize = resizeAd.bind(this, player, adUnit, this.VIEW_MODE);\n\n if (this.settings.autoResize) {\n var updateViewSizeThrottled = throttle(updateViewSize, 100);\n dom.addEventListener(window, 'resize', updateViewSizeThrottled);\n dom.addEventListener(window, 'orientationchange', updateViewSizeThrottled);\n }\n\n player.on('vast.resize', updateViewSize);\n\n next(null, adUnit, vastResponse);\n};\n\nVPAIDIntegrator.prototype._addSkipButton = function (adUnit, vastResponse, next) {\n var skipButton;\n var player = this.player;\n\n adUnit.on('AdSkippableStateChange', updateSkipButtonState);\n\n player.one('vast.adend', removeSkipButton);\n player.one('vast.aderror', removeSkipButton);\n\n next(null, adUnit, vastResponse);\n\n /*** Local function ***/\n function updateSkipButtonState() {\n adUnit.getAdSkippableState(function (error, isSkippable) {\n if (isSkippable) {\n addSkipButton(player);\n } else {\n removeSkipButton(player);\n }\n });\n }\n\n function addSkipButton(player) {\n skipButton = createSkipButton(player);\n player.el().appendChild(skipButton);\n }\n\n function removeSkipButton() {\n dom.remove(skipButton);\n skipButton = null;\n }\n\n function createSkipButton() {\n var skipButton = window.document.createElement(\"div\");\n dom.addClass(skipButton, \"vast-skip-button\");\n dom.addClass(skipButton, \"enabled\");\n skipButton.innerHTML = \"Skip ad\";\n\n skipButton.onclick = function (e) {\n adUnit.skipAd(noop);//We skip the adUnit\n\n //We prevent event propagation to avoid problems with the clickThrough and so on\n if (window.Event.prototype.stopPropagation !== undefined) {\n e.stopPropagation();\n } else {\n return false;\n }\n };\n\n return skipButton;\n }\n};\n\nVPAIDIntegrator.prototype._linkPlayerControls = function (adUnit, vastResponse, next) {\n linkVolumeControl(this.player, adUnit);\n linkFullScreenControl(this.player, adUnit, this.VIEW_MODE);\n\n next(null, adUnit, vastResponse);\n\n /*** Local functions ***/\n function linkVolumeControl(player, adUnit) {\n player.on('advolumechange', updateAdUnitVolume);\n adUnit.on('AdVolumeChange', updatePlayerVolume);\n\n player.on('VPAID.adended', function () {\n player.off('advolumechange', updateAdUnitVolume);\n });\n\n\n /*** local functions ***/\n function updateAdUnitVolume() {\n var vol = player.muted() ? 0 : player.volume();\n adUnit.setAdVolume(vol, logError);\n }\n\n function updatePlayerVolume() {\n adUnit.getAdVolume(function (error, vol) {\n if (error) {\n logError(error);\n } else {\n player.volume(vol);\n }\n });\n }\n }\n\n function linkFullScreenControl(player, adUnit, VIEW_MODE) {\n var updateViewSize = resizeAd.bind(this, player, adUnit, VIEW_MODE);\n\n player.on('fullscreenchange', updateViewSize);\n\n player.on('VPAID.adended', function () {\n player.off('fullscreenchange', updateViewSize);\n });\n }\n};\n\nVPAIDIntegrator.prototype._startAd = function (adUnit, vastResponse, next) {\n var player = this.player;\n\n adUnit.startAd(function (error) {\n if (!error) {\n player.trigger('vast.adstart');\n }\n next(error, adUnit, vastResponse);\n });\n};\n\nVPAIDIntegrator.prototype._finishPlaying = function (adUnit, vastResponse, next) {\n adUnit.on('AdStopped', function () {\n next(null, adUnit, vastResponse);\n });\n\n adUnit.on('AdError', function () {\n next(new VASTError('on VPAIDIntegrator, error while waiting for the adUnit to finish playing'), adUnit, vastResponse);\n });\n};\n\nVPAIDIntegrator.prototype._trackError = function trackError(response) {\n vastUtil.track(response.errorURLMacros, {ERRORCODE: 901});\n};\n\nfunction resizeAd(player, adUnit, VIEW_MODE) {\n var dimension = dom.getDimension(player.el());\n var MODE = player.isFullscreen() ? VIEW_MODE.FULLSCREEN : VIEW_MODE.NORMAL;\n adUnit.resizeAd(dimension.width, dimension.height, MODE, logError);\n}\n\nfunction logError(error) {\n if (error && console && console.log) {\n console.log('ERROR: ' + error.message, error);\n }\n}\n\n","function Ad(adJTree) {\n if (!(this instanceof Ad)) {\n return new Ad(adJTree);\n }\n\n this.id = adJTree.attr('id');\n this.sequence = adJTree.attr('sequence');\n\n if(adJTree.inLine) {\n this.inLine = new InLine(adJTree.inLine);\n }\n\n if(adJTree.wrapper){\n this.wrapper = new Wrapper(adJTree.wrapper);\n }\n}","\nfunction Creative(creativeJTree) {\n if(!(this instanceof Creative)) {\n return new Creative(creativeJTree);\n }\n\n this.id = creativeJTree.attr('id');\n this.sequence = creativeJTree.attr('sequence');\n this.adId = creativeJTree.attr('adId');\n this.apiFramework = creativeJTree.attr('apiFramework');\n\n if(creativeJTree.linear) {\n this.linear = new Linear(creativeJTree.linear);\n }\n}","function InLine(inlineJTree) {\n if (!(this instanceof InLine)) {\n return new InLine(inlineJTree);\n }\n\n //Required Fields\n this.adTitle = xml.keyValue(inlineJTree.adTitle);\n this.adSystem = xml.keyValue(inlineJTree.adSystem);\n this.impressions = vastUtil.parseImpressions(inlineJTree.impression);\n this.creatives = vastUtil.parseCreatives(inlineJTree.creatives);\n\n //Optional Fields\n this.description = xml.keyValue(inlineJTree.description);\n this.advertiser = xml.keyValue(inlineJTree.advertiser);\n this.surveys = parseSurveys(inlineJTree.survey);\n this.error = xml.keyValue(inlineJTree.error);\n this.pricing = xml.keyValue(inlineJTree.pricing);\n this.extensions = inlineJTree.extensions;\n\n /*** Local Functions ***/\n function parseSurveys(inlineSurveys) {\n if (inlineSurveys) {\n return transformArray(isArray(inlineSurveys) ? inlineSurveys : [inlineSurveys], function (survey) {\n if(isNotEmptyString(survey.keyValue)){\n return {\n uri: survey.keyValue,\n type: survey.attr('type')\n };\n }\n\n return undefined;\n });\n }\n return [];\n }\n}","function Linear(linearJTree) {\n if (!(this instanceof Linear)) {\n return new Linear(linearJTree);\n }\n\n //Required Elements\n this.duration = vastUtil.parseDuration(xml.keyValue(linearJTree.duration));\n this.mediaFiles = parseMediaFiles(linearJTree.mediaFiles && linearJTree.mediaFiles.mediaFile);\n\n //Optional fields\n this.trackingEvents = parseTrackingEvents(linearJTree.trackingEvents && linearJTree.trackingEvents.tracking, this.duration);\n this.skipoffset = vastUtil.parseOffset(xml.attr(linearJTree, 'skipoffset'), this.duration);\n\n if (linearJTree.videoClicks) {\n this.videoClicks = new VideoClicks(linearJTree.videoClicks);\n }\n \n if(linearJTree.adParameters) {\n this.adParameters = xml.keyValue(linearJTree.adParameters);\n\n if(xml.attr(linearJTree.adParameters, 'xmlEncoded')){\n this.adParameters = xml.decode(this.adParameters);\n }\n }\n\n /*** Local functions ***/\n function parseTrackingEvents(trackingEvents, duration) {\n var trackings = [];\n if (isDefined(trackingEvents)) {\n trackingEvents = isArray(trackingEvents) ? trackingEvents : [trackingEvents];\n trackingEvents.forEach(function (trackingData) {\n trackings.push(new TrackingEvent(trackingData, duration));\n });\n }\n return trackings;\n }\n\n function parseMediaFiles(mediaFilesJxonTree) {\n var mediaFiles = [];\n if (isDefined(mediaFilesJxonTree)) {\n mediaFilesJxonTree = isArray(mediaFilesJxonTree) ? mediaFilesJxonTree : [mediaFilesJxonTree];\n\n mediaFilesJxonTree.forEach(function (mfData) {\n mediaFiles.push(new MediaFile(mfData));\n });\n }\n return mediaFiles;\n }\n}","function MediaFile(mediaFileJTree) {\n if (!(this instanceof MediaFile)) {\n return new MediaFile(mediaFileJTree);\n }\n\n //Required attributes\n this.src = xml.keyValue(mediaFileJTree);\n this.delivery = mediaFileJTree.attr('delivery');\n this.type = mediaFileJTree.attr('type');\n this.width = mediaFileJTree.attr('width');\n this.height = mediaFileJTree.attr('height');\n\n //Optional attributes\n this.codec = mediaFileJTree.attr('codec');\n this.id = mediaFileJTree.attr('id');\n this.bitrate = mediaFileJTree.attr('bitrate');\n this.minBitrate = mediaFileJTree.attr('minBitrate');\n this.maxBitrate = mediaFileJTree.attr('maxBitrate');\n this.scalable = mediaFileJTree.attr('scalable');\n this.maintainAspectRatio = mediaFileJTree.attr('maintainAspectRatio');\n this.apiFramework = mediaFileJTree.attr('apiFramework');\n}","function TrackingEvent(trackingJTree, duration) {\n if (!(this instanceof TrackingEvent)) {\n return new TrackingEvent(trackingJTree, duration);\n }\n\n this.name = trackingJTree.attr('event');\n this.uri = xml.keyValue(trackingJTree);\n\n if('progress' === this.name) {\n this.offset = vastUtil.parseOffset(trackingJTree.attr('offset'), duration);\n }\n}\n","function VASTClient(options) {\n if (!(this instanceof VASTClient)) {\n return new VASTClient(options);\n }\n var defaultOptions = {\n WRAPPER_LIMIT: 5\n };\n\n options = options || {};\n this.settings = extend({}, options, defaultOptions);\n this.errorURLMacros = [];\n}\n\nVASTClient.prototype.getVASTResponse = function getVASTResponse(url, callback) {\n var that = this;\n\n //We reset the errorURLMacros before doing anything.\n this.errorURLMacros = [];\n\n async.waterfall([\n this._getAd.bind(this, url),\n buildVASTResponse\n ],\n this._sendVASTResponse(callback));\n\n /*** Local functions ***/\n function buildVASTResponse(adsChain, cb) {\n try {\n var response = that._buildVASTResponse(adsChain);\n cb(null, response);\n } catch (e) {\n cb(e);\n }\n }\n};\n\nVASTClient.prototype._sendVASTResponse = function sendVASTResponse(callback) {\n var that = this;\n callback = callback || noop;\n\n return function (error, response) {\n if (error) {\n vastUtil.track(that.errorURLMacros, {ERRORCODE: error.code || 900}); //900 <== Undefined error\n }\n callback(error, response);\n };\n};\n\nVASTClient.prototype._getAd = function getVASTAd(url, callback) {\n var error;\n var that = this;\n var options = isObject(url) && !isNull(url) ? url : {url: url};\n options.ads = options.ads || [];\n error = sanityCheck(options, callback);\n if (error) {\n if (isFunction(callback)) {\n return callback(error, null);\n }\n throw error;\n }\n\n async.waterfall([\n requestVASTXml,\n buildAd\n ], callback);\n\n /*** local function ***/\n function sanityCheck(opts, cb) {\n if (!isString(opts.url)) {\n return new VASTError('on VASTClient._getAd, missing video tag URL');\n }\n\n if (!isFunction(cb)) {\n return new VASTError('on VASTClient._getAd, missing callback function');\n }\n\n if (opts.ads.length >= that.WRAPPER_LIMIT) {\n return new VASTError(\"on VASTClient._getAd, players wrapper limit reached (the limit is \" + that.WRAPPER_LIMIT + \")\", 302);\n }\n }\n\n function requestVASTXml(callback) {\n that._requestVASTXml(options.url, callback);\n }\n\n function buildAd(adXML, callback) {\n var adTree;\n try {\n adTree = that._buildVastTree(adXML);\n getValidAd(adTree.ads, options.ads, callback);\n } catch (e) {\n callback(e);\n }\n\n /*** local Functions ***/\n function getValidAd(possibleAds, previousAds, callback) {\n getAd(possibleAds.shift(), previousAds, function (error, adChain) {\n if (error) {\n if (possibleAds.length > 0) {\n return getValidAd(possibleAds, previousAds, callback);\n }\n return callback(error);\n }\n callback(null, adChain);\n });\n }\n\n function getAd(adTree, previousAds, callback) {\n try {\n var ad = that._buildAd(adTree);\n\n if (ad.wrapper) {\n return getNextAd(ad, previousAds, callback);\n }\n return callback(null, previousAds.concat(ad));\n } catch (e) {\n callback(e);\n }\n }\n\n function getNextAd(ad, previousAds, callback) {\n return that._getAd({\n url: ad.wrapper.VASTAdTagURI,\n ads: previousAds.concat(ad)\n }, callback);\n }\n }\n};\n\nVASTClient.prototype._requestVASTXml = function requestVASTXml(url, callback) {\n try{\n http.get(url, function (error, response, status){\n if(error) {\n return callback(new VASTError(\"on VASTClient.requestVastXML, HTTP request error with status '\" + status + \"'\", 301));\n }\n callback(null, response);\n });\n }catch(e){\n callback(e);\n }\n};\n\nVASTClient.prototype._buildVastTree = function buildVastTree(xmlStr) {\n var vastTree, vastVersion;\n\n try {\n vastTree = xml.toJXONTree(xmlStr);\n vastVersion = xml.attr(vastTree, 'version');\n vastTree.ads = isArray(vastTree.ad) ? vastTree.ad : [vastTree.ad];\n\n } catch (e) {\n throw new VASTError(\"on VASTClient.buildVastTree, error parsing xml\", 100);\n }\n\n if (!vastTree.ad) {\n throw new VASTError('on VASTClient.buildVastTree, no Ad in VAST tree', 303);\n }\n\n if(vastVersion && (vastVersion != 3 && vastVersion != 2)){\n throw new VASTError('on VASTClient.buildVastTree, not supported VAST version \"'+vastVersion+'\"', 102);\n }\n\n return vastTree;\n\n};\n\nVASTClient.prototype._buildAd = function buildAd(adJxonTree) {\n var ad;\n var that = this;\n\n try {\n ad = new Ad(adJxonTree);\n } catch (e) {\n throw new VASTError('on VASTClient._buildAd, ' + e.message, 900);\n }\n\n addErrorUrlMacros(ad);\n validateAd(ad);\n\n return ad;\n /*** Local Functions ***/\n\n function addErrorUrlMacros(ad) {\n if(ad.wrapper && ad.wrapper.error) {\n that.errorURLMacros.push(ad.wrapper.error);\n }\n\n if(ad.inLine && ad.inLine.error){\n that.errorURLMacros.push(ad.inLine.error);\n }\n }\n\n function validateAd(ad) {\n var wrapper = ad.wrapper;\n var inLine = ad.inLine;\n\n if (inLine && wrapper) {\n throw new VASTError('on VASTClient._buildAd, InLine and Wrapper both found on the same Ad', 101);\n }\n\n if (!inLine && !wrapper) {\n throw new VASTError('on VASTClient._buildAd, nor wrapper nor inline elements found on the Ad', 101);\n }\n\n if (inLine) {\n if (inLine.creatives.length === 0) {\n throw new VASTError(\"on VASTClient._buildAd, missing creative in InLine element\", 101);\n }\n }\n\n if (wrapper) {\n if (!wrapper.VASTAdTagURI) {\n throw new VASTError(\"on VASTClient._buildAd, missing 'VASTAdTagURI' in wrapper\", 101);\n }\n }\n }\n};\n\nVASTClient.prototype._buildVASTResponse = function buildVASTResponse(adsChain) {\n var response = new VASTResponse();\n addAdsToResponse(response, adsChain);\n validateResponse(response);\n\n return response;\n\n //*** Local function ****\n function addAdsToResponse(response, ads) {\n ads.forEach(function (ad) {\n response.addAd(ad);\n });\n }\n\n function validateResponse(response) {\n var progressEvents = response.trackingEvents.progress;\n\n if(!response.hasLinear()){\n throw new VASTError(\"on VASTClient._buildVASTResponse, Received an Ad type that is not supported\", 200);\n }\n\n if (!response.duration) {\n throw new VASTError(\"on VASTClient._buildVASTResponse, Missing duration field in VAST response\", 101);\n }\n\n if (progressEvents) {\n if (progressEvents.length > 1) {\n throw new VASTError(\"on VASTClient._buildVASTResponse, found more than one progress tracking event in VAST response\", 101);\n }\n\n if (!isNumber(progressEvents[0].offset)) {\n throw new VASTError(\"on VASTClient._buildVASTResponse, missing offset attribute on progress tracking event\", 101);\n }\n }\n }\n};\n","var VAST = {};\n\nfunction VASTError(message, code) {\n this.message = 'VAST Error: ' + (message || '');\n if (code) {\n this.code = code;\n }\n}\n\nVASTError.prototype = new Error();\nVASTError.prototype.name = \"VAST Error\";","/**\n * Inner helper class that deals with the logic of the individual steps needed to setup an ad in the player.\n *\n * @param player {object} instance of the player that will play the ad. It assumes that the videojs-contrib-ads plugin\n * has been initialized when you use its utility functions.\n *\n * @constructor\n */\nfunction VASTIntegrator(player) {\n if (!(this instanceof VASTIntegrator)) {\n return new VASTIntegrator(player);\n }\n\n this.player = player;\n}\n\nVASTIntegrator.prototype.playAd = function playAd(vastResponse, callback) {\n var that = this;\n callback = callback || noop;\n\n if (!(vastResponse instanceof VASTResponse)) {\n return callback(new VASTError('On VASTIntegrator, missing required VASTResponse'));\n }\n\n async.waterfall([\n function (next) {\n next(null, vastResponse);\n },\n this._selectAdSource.bind(this),\n this._createVASTTracker.bind(this),\n this._addClickThrough.bind(this),\n this._addSkipButton.bind(this),\n this._setupEvents.bind(this),\n this._playSelectedAd.bind(this)\n ], function (error, response) {\n if (error && response) {\n that._trackError(error, response);\n }\n callback(error, response);\n });\n};\n\nVASTIntegrator.prototype._selectAdSource = function selectAdSource(response, callback) {\n var source;\n\n var playerWidth = dom.getDimension(this.player.el()).width;\n response.mediaFiles.sort(function compareTo(a, b) {\n var deltaA = Math.abs(playerWidth - a.width);\n var deltaB = Math.abs(playerWidth - b.width);\n return deltaA - deltaB;\n });\n\n source = this.player.selectSource(response.mediaFiles).source;\n\n if (source) {\n return callback(null, source, response);\n }\n\n // code 403 <== Couldn't find MediaFile that is supported by this video player\n callback(new VASTError(\"Could not find Ad mediafile supported by this player\", 403), response);\n};\n\nVASTIntegrator.prototype._createVASTTracker = function createVASTTracker(adMediaFile, response, callback) {\n try {\n callback(null, adMediaFile, new VASTTracker(adMediaFile.src, response), response);\n } catch (e) {\n callback(e, response);\n }\n};\n\nVASTIntegrator.prototype._setupEvents = function setupEvents(adMediaFile, tracker, response, callback) {\n var previouslyMuted;\n var player = this.player;\n player.on('adfullscreenchange', trackFullscreenChange);\n player.on('vast.adstart', trackImpressions);\n player.on('adpause', trackPause);\n player.on('adtimeupdate', trackProgress);\n player.on('advolumechange', trackVolumeChange);\n\n player.one('vast.adend', unbindEvents);\n player.one('vast.aderror', unbindEvents);\n\n //NOTE: Pending tracking events skip, close, closeLinear, expand, collapse and creativeView. See VAST implementation\n\n return callback(null, adMediaFile, response);\n\n /*** Local Functions ***/\n function unbindEvents() {\n tracker.trackComplete();\n player.off('adfullscreenchange', trackFullscreenChange);\n player.off('vast.adstart', trackImpressions);\n player.off('adpause', trackPause);\n player.off('adtimeupdate', trackProgress);\n player.off('advolumechange', trackVolumeChange);\n }\n\n function trackFullscreenChange() {\n if (player.isFullscreen()) {\n tracker.trackFullscreen();\n } else {\n tracker.trackExitFullscreen();\n }\n }\n\n function trackPause() {\n tracker.trackPause();\n player.one('play', function () {\n tracker.trackResume();\n });\n }\n\n function trackProgress() {\n var currentTimeInMs = player.currentTime() * 1000;\n tracker.trackProgress(currentTimeInMs);\n }\n\n function trackImpressions() {\n tracker.trackImpressions();\n }\n\n function trackVolumeChange() {\n var muted = player.muted();\n if (muted) {\n tracker.trackMute();\n } else if (previouslyMuted) {\n tracker.trackUnmute();\n }\n previouslyMuted = muted;\n }\n};\n\nVASTIntegrator.prototype._addSkipButton = function addSkipButton(source, tracker, response, callback) {\n var skipOffsetInSec;\n\n if (isNumber(response.skipoffset)) {\n skipOffsetInSec = response.skipoffset / 1000;\n addSkipButtonToPlayer(this.player, skipOffsetInSec);\n }\n callback(null, source, tracker, response);\n\n /*** Local function ***/\n function addSkipButtonToPlayer(player, skipOffset) {\n var skipButton = createSkipButton(player);\n var updateSkipButton = updateSkipButtonState.bind(this, skipButton, skipOffset, player);\n\n player.el().appendChild(skipButton);\n player.on('adtimeupdate', updateSkipButton);\n\n player.one('vast.adend', removeSkipButton);\n player.one('vast.aderror', removeSkipButton);\n\n function removeSkipButton() {\n player.off('adtimeupdate', updateSkipButton);\n dom.remove(skipButton);\n }\n }\n\n function createSkipButton(player) {\n var skipButton = window.document.createElement(\"div\");\n dom.addClass(skipButton, \"vast-skip-button\");\n\n skipButton.onclick = function (e) {\n if (dom.hasClass(skipButton, 'enabled')) {\n tracker.trackSkip();\n player.trigger('adended');//We trigger the end of the ad playing\n }\n\n //We prevent event propagation to avoid problems with the clickThrough and so on\n if (window.Event.prototype.stopPropagation !== undefined) {\n e.stopPropagation();\n } else {\n return false;\n }\n };\n\n return skipButton;\n }\n\n function updateSkipButtonState(skipButton, skipOffset, player) {\n var timeLeft = Math.ceil(skipOffset - player.currentTime());\n if (timeLeft > 0) {\n skipButton.innerHTML = \"Skip in \" + toFixedDigits(timeLeft, 2) + \"...\";\n } else {\n if (!dom.hasClass(skipButton, 'enabled')) {\n dom.addClass(skipButton, 'enabled');\n skipButton.innerHTML = \"Skip ad\";\n }\n }\n }\n};\n\nVASTIntegrator.prototype._addClickThrough = function addClickThrough(mediaFile, tracker, response, callback) {\n var player = this.player;\n var blocker = createClickThroughBlocker(player, tracker, response);\n var updateBlocker = updateBlockerURL.bind(this, blocker, response, player);\n\n player.el().insertBefore(blocker, player.controlBar.el());\n player.on('adtimeupdate', updateBlocker);\n player.one('vast.adend', removeBlocker);\n player.one('vast.aderror', removeBlocker);\n\n return callback(null, mediaFile, tracker, response);\n\n /*** Local Functions ***/\n\n function createClickThroughBlocker(player, tracker, response) {\n var blocker = window.document.createElement(\"a\");\n var clickThroughMacro = response.clickThrough;\n\n dom.addClass(blocker, 'vast-blocker');\n blocker.href = generateClickThroughURL(clickThroughMacro, player);\n\n if (isString(clickThroughMacro)) {\n blocker.target = \"_blank\";\n }\n\n blocker.onclick = function (e) {\n if (player.paused()) {\n player.play();\n\n //We prevent event propagation to avoid problems with the player's normal pause mechanism\n if (window.Event.prototype.stopPropagation !== undefined) {\n e.stopPropagation();\n }\n return false;\n }\n\n player.pause();\n tracker.trackClick();\n };\n\n return blocker;\n }\n\n function updateBlockerURL(blocker, response, player) {\n blocker.href = generateClickThroughURL(response.clickThrough, player);\n }\n\n function generateClickThroughURL(clickThroughMacro, player) {\n var variables = {\n ASSETURI: mediaFile.src,\n CONTENTPLAYHEAD: vastUtil.formatProgress(player.currentTime() * 1000)\n };\n\n return clickThroughMacro ? vastUtil.parseURLMacro(clickThroughMacro, variables) : '#';\n }\n\n function removeBlocker() {\n player.off('adtimeupdate', updateBlocker);\n dom.remove(blocker);\n }\n};\n\nVASTIntegrator.prototype._playSelectedAd = function playSelectedAd(source, response, callback) {\n var player = this.player;\n\n player.src(source);\n\n player.one('addurationchange', playAd);\n player.one('adended', finishPlayingAd);\n player.one('error', handlePlayerError);\n\n /**** local functions ******/\n function playAd() {\n player.one('adplaying', function () {\n player.trigger('vast.adstart');\n });\n }\n\n function finishPlayingAd() {\n player.off('error', handlePlayerError);\n player.trigger('vast.adend');\n callback(null, response);\n }\n\n function handlePlayerError() {\n player.off('addurationchange', playAd);\n player.off('contentended', finishPlayingAd);\n callback(new VASTError(\"on VASTIntegrator, Player is unable to play the Ad\", 400), response);\n }\n};\n\nVASTIntegrator.prototype._trackError = function trackError(error, response) {\n vastUtil.track(response.errorURLMacros, {ERRORCODE: error.code || 900});\n};\n\n","function VASTTracker(assetURI, vastResponse) {\n if (!(this instanceof VASTTracker)) {\n return new VASTTracker(assetURI, vastResponse);\n }\n\n sanityCheck(assetURI, vastResponse);\n this.response = vastResponse;\n this.assetURI = assetURI;\n this.progress = 0;\n this.quartiles = {\n firstQuartile: Math.round(25 * vastResponse.duration) / 100,\n midpoint: Math.round(50 * vastResponse.duration) / 100,\n thirdQuartile: Math.round(75 * vastResponse.duration) / 100\n };\n\n /*** Local Functions ***/\n function sanityCheck(assetURI, vastResponse) {\n if (!isString(assetURI) || isEmptyString(assetURI)) {\n throw new VASTError('on VASTTracker constructor, missing required the URI of the ad asset being played');\n }\n\n if (!(vastResponse instanceof VASTResponse)) {\n throw new VASTError('on VASTTracker constructor, missing required VAST response');\n }\n }\n}\n\nVASTTracker.prototype.trackURLs = function trackURLs(urls, variables) {\n if (isArray(urls) && urls.length > 0) {\n variables = extend({\n ASSETURI: this.assetURI,\n CONTENTPLAYHEAD: vastUtil.formatProgress(this.progress)\n }, variables || {});\n\n vastUtil.track(urls, variables);\n }\n};\n\nVASTTracker.prototype.trackEvent = function trackEvent(eventName, trackOnce) {\n this.trackURLs(getEventUris(this.response.trackingEvents[eventName]));\n if (trackOnce) {\n this.response.trackingEvents[eventName] = undefined;\n }\n\n /*** Local function ***/\n function getEventUris(trackingEvents) {\n var uris;\n\n if (trackingEvents) {\n uris = [];\n trackingEvents.forEach(function (event) {\n uris.push(event.uri);\n });\n }\n return uris;\n }\n};\n\nVASTTracker.prototype.trackProgress = function trackProgress(newProgress) {\n var events = [];\n var ONCE = true;\n var ALWAYS = false;\n var trackingEvents = this.response.trackingEvents;\n\n if (isNumber(newProgress)) {\n addTrackEvent('start', ONCE, newProgress > 0);\n addTrackEvent('rewind', ALWAYS, this.progress > newProgress);\n addQuartileEvents.call(this, newProgress);\n addProgressEvent.call(this, newProgress);\n trackEvents.call(this);\n this.progress = newProgress;\n }\n\n /*** Local function ***/\n function addTrackEvent(eventName, trackOnce, canBeAdded) {\n if (trackingEvents[eventName] && canBeAdded) {\n events.push({\n name: eventName,\n trackOnce: !!trackOnce\n });\n }\n }\n\n function addQuartileEvents(progress) {\n forEach(this.quartiles, function (quartileTime, eventName) {\n //We only fire the quartile event if the progress is bigger than the quartile time by one second at most.\n addTrackEvent(eventName, ONCE, progress >= quartileTime && progress <= (quartileTime + 1000));\n });\n }\n\n function addProgressEvent(progress) {\n var progressEvent = trackingEvents.progress && trackingEvents.progress[0];\n if (progressEvent) {\n addTrackEvent('progress', ONCE, progressEvent.offset <= progress);\n }\n }\n\n function trackEvents() {\n events.forEach(function (event) {\n this.trackEvent(event.name, event.trackOnce);\n }, this);\n }\n};\n\n[\n 'start',\n 'rewind',\n 'fullscreen',\n 'exitFullscreen',\n 'complete',\n 'pause',\n 'resume',\n 'close',\n 'closeLinear',\n 'skip',\n 'mute',\n 'unmute',\n 'firstQuartile',\n 'midpoint',\n 'thirdQuartile',\n 'acceptInvitation',\n 'acceptInvitationLinear',\n 'collapse',\n 'expand'\n].forEach(function (eventName) {\n VASTTracker.prototype['track' + capitalize(eventName)] = function () {\n this.trackEvent(eventName);\n };\n });\n\nVASTTracker.prototype.trackErrorWithCode = function trackErrorWithCode(errorcode) {\n if (isNumber(errorcode)) {\n this.trackURLs(this.response.errorURLMacros, {ERRORCODE: errorcode});\n }\n};\n\nVASTTracker.prototype.trackImpressions = function trackImpressions() {\n this.trackURLs(this.response.impressions);\n};\n\nVASTTracker.prototype.trackClick = function trackClick() {\n this.trackURLs(this.response.clickTrackings);\n};\n","function VideoClicks(videoClickJTree) {\n if (!(this instanceof VideoClicks)) {\n return new VideoClicks(videoClickJTree);\n }\n\n this.clickThrough = xml.keyValue(videoClickJTree.clickThrough);\n this.clickTrackings = parseClickTrackings(videoClickJTree.clickTracking);\n this.customClicks = parseClickTrackings(videoClickJTree.customClick);\n\n /*** Local functions ***/\n function parseClickTrackings(trackingData) {\n var clickTrackings = [];\n if (trackingData) {\n trackingData = isArray(trackingData) ? trackingData : [trackingData];\n trackingData.forEach(function (clickTrackingData) {\n clickTrackings.push(xml.keyValue(clickTrackingData));\n });\n }\n return clickTrackings;\n }\n}","function Wrapper(wrapperJTree) {\n if(!(this instanceof Wrapper)) {\n return new Wrapper(wrapperJTree);\n }\n\n //Required elements\n this.adSystem = xml.keyValue(wrapperJTree.adSystem);\n this.impressions = vastUtil.parseImpressions(wrapperJTree.impression);\n this.VASTAdTagURI = xml.keyValue(wrapperJTree.vASTAdTagURI);\n\n //Optional elements\n this.creatives = vastUtil.parseCreatives(wrapperJTree.creatives);\n this.error = xml.keyValue(wrapperJTree.error);\n this.extensions = wrapperJTree.extensions;\n\n //Optional attrs\n this.followAdditionalWrappers = isDefined(xml.attr(wrapperJTree, 'followAdditionalWrappers'))? xml.attr(wrapperJTree, 'followAdditionalWrappers'): true;\n this.allowMultipleAds = xml.attr(wrapperJTree, 'allowMultipleAds');\n this.fallbackOnNoAd = xml.attr(wrapperJTree, 'fallbackOnNoAd');\n}\n\n\n","/**\n There is a bug on android 4.2 ont the way it parses string\n The code bellow fixes the problem if there is a problem\n */\n(function () {\n var parseNum;\n if(parseInt('09') !== 9) {\n parseNum = window.parseInt;\n window.parseInt = function(str) {\n if(typeof str === 'string' && !/^(\\s+)?0+(\\s+)?$/.test(str)){\n //We remove the 0 from the left of the number\n return parseNum(str.replace(/^0+/, ''));\n }\n\n return parseNum(str);\n };\n }\n})();","(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;o\\n\\n\\n \\n\\n\\n \\n \\n
\\n
\\n\\n\\n\";\n\nvar AD_STOPPED = 'AdStopped';\n\n/**\n * This callback is displayed as global member. The callback use nodejs error-first callback style\n * @callback NodeStyleCallback\n * @param {string|null}\n * @param {undefined|object}\n */\n\n/**\n * VPAIDHTML5Client\n * @class\n *\n * @param {HTMLElement} el that will contain the iframe to load adUnit and a el to add to adUnit slot\n * @param {HTMLVideoElement} video default video element to be used by adUnit\n * @param {object} [templateConfig] template: html template to be used instead of the default, extraOptions: to be used when rendering the template\n * @param {object} [vpaidOptions] timeout: when loading adUnit\n */\nfunction VPAIDHTML5Client(el, video, templateConfig, vpaidOptions) {\n templateConfig = templateConfig || {};\n\n this._id = unique();\n this._destroyed = false;\n\n this._frameContainer = utils.createElementInEl(el, 'div');\n this._videoEl = video;\n this._vpaidOptions = vpaidOptions || {timeout: 10000};\n\n this._templateConfig = {\n template: templateConfig.template || defaultTemplate,\n extraOptions: templateConfig.extraOptions || {}\n };\n\n}\n\n/**\n * destroy\n *\n */\nVPAIDHTML5Client.prototype.destroy = function destroy() {\n if (this._destroyed) {\n return;\n }\n this._destroyed = true;\n $unloadPreviousAdUnit.call(this);\n};\n\n/**\n * isDestroyed\n *\n * @return {boolean}\n */\nVPAIDHTML5Client.prototype.isDestroyed = function isDestroyed() {\n return this._destroyed;\n};\n\n/**\n * loadAdUnit\n *\n * @param {string} adURL url of the js of the adUnit\n * @param {nodeStyleCallback} callback\n */\nVPAIDHTML5Client.prototype.loadAdUnit = function loadAdUnit(adURL, callback) {\n $throwIfDestroyed.call(this);\n $unloadPreviousAdUnit.call(this);\n\n var frame = utils.createIframeWithContent(\n this._frameContainer,\n this._templateConfig.template,\n utils.extend({\n iframeURL_JS: adURL,\n iframeID: this.getID()\n }, this._templateConfig.extraOptions)\n );\n this._frame = frame;\n\n this._onLoad = utils.callbackTimeout(\n this._vpaidOptions.timeout,\n onLoad.bind(this),\n onTimeout.bind(this)\n );\n\n window.addEventListener('message', this._onLoad);\n\n function onLoad (e) {\n /*jshint validthis: false */\n //don't clear timeout\n if (e.origin !== window.location.origin) return;\n var result = JSON.parse(e.data);\n\n //don't clear timeout\n if (result.id !== this.getID()) return;\n\n var adUnit, error, createAd;\n if (!this._frame.contentWindow) {\n\n error = 'the iframe is not anymore in the DOM tree';\n\n } else {\n createAd = this._frame.contentWindow.getVPAIDAd;\n error = utils.validate(typeof createAd === 'function', 'the ad didn\\'t return a function to create an ad');\n }\n\n if (!error) {\n var adEl = this._frame.contentWindow.document.querySelector('.ad-element');\n adUnit = new VPAIDAdUnit(createAd(), adEl, this._videoEl, this._frame);\n adUnit.subscribe(AD_STOPPED, $adDestroyed.bind(this));\n error = utils.validate(adUnit.isValidVPAIDAd(), 'the add is not fully complaint with VPAID specification');\n }\n\n this._adUnit = adUnit;\n $destroyLoadListener.call(this);\n callback(error, error ? null : adUnit);\n\n //clear timeout\n return true;\n }\n\n function onTimeout() {\n callback('timeout', null);\n }\n};\n\n/**\n * unloadAdUnit\n *\n */\nVPAIDHTML5Client.prototype.unloadAdUnit = function unloadAdUnit() {\n $unloadPreviousAdUnit.call(this);\n};\n\n/**\n * getID will return the unique id\n *\n * @return {string}\n */\nVPAIDHTML5Client.prototype.getID = function () {\n return this._id;\n};\n\n\n/**\n * $removeEl\n *\n * @param {string} key\n */\nfunction $removeEl(key) {\n var el = this[key];\n if (el) {\n el.remove();\n delete this[key];\n }\n}\n\nfunction $adDestroyed() {\n $removeAdElements.call(this);\n delete this._adUnit;\n}\n\nfunction $unloadPreviousAdUnit() {\n $removeAdElements.call(this);\n $destroyAdUnit.call(this);\n}\n\nfunction $removeAdElements() {\n $removeEl.call(this, '_frame');\n $destroyLoadListener.call(this);\n}\n\n/**\n * $destroyLoadListener\n *\n */\nfunction $destroyLoadListener() {\n if (this._onLoad) {\n window.removeEventListener('message', this._onLoad);\n utils.clearCallbackTimeout(this._onLoad);\n delete this._onLoad;\n }\n}\n\n\nfunction $destroyAdUnit() {\n if (this._adUnit) {\n this._adUnit.stopAd();\n delete this._adUnit;\n }\n}\n\n/**\n * $throwIfDestroyed\n *\n */\nfunction $throwIfDestroyed() {\n if (this._destroyed) {\n throw new Error ('VPAIDHTML5Client already destroyed!');\n }\n}\n\nmodule.exports = VPAIDHTML5Client;\nwindow.VPAIDHTML5Client = VPAIDHTML5Client;\n\n\n},{\"./VPAIDAdUnit\":2,\"./utils\":5}],4:[function(require,module,exports){\n'use strict';\n\nfunction Subscriber() {\n this._subscribers = {};\n}\n\nSubscriber.prototype.subscribe = function subscribe(handler, eventName, context) {\n this.get(eventName).push({handler: handler, context: context});\n};\n\nSubscriber.prototype.unsubscribe = function unsubscribe(handler, eventName) {\n this._subscribers[eventName] = this.get(eventName).filter(function (subscriber) {\n return handler === subscriber.handler;\n });\n};\n\nSubscriber.prototype.unsubscribeAll = function unsubscribeAll() {\n this._subscribers = {};\n};\n\nSubscriber.prototype.trigger = function(eventName, data) {\n this.get(eventName).forEach(function (subscriber) {\n setTimeout(function () {\n subscriber.handler.call(subscriber.context, data);\n }, 0);\n });\n};\n\nSubscriber.prototype.get = function get(eventName) {\n if (!this._subscribers[eventName]) {\n this._subscribers[eventName] = [];\n }\n return this._subscribers[eventName];\n};\n\nmodule.exports = Subscriber;\n\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\n/**\n * noop a empty function\n */\nfunction noop() {}\n\n/**\n * validate if is not validate will return an Error with the message\n *\n * @param {boolean} isValid\n * @param {string} message\n */\nfunction validate(isValid, message) {\n return isValid ? null : new Error(message);\n}\n\nvar timeouts = {};\n/**\n * clearCallbackTimeout\n *\n * @param {function} func handler to remove\n */\nfunction clearCallbackTimeout(func) {\n var timeout = timeouts[func];\n if (timeout) {\n clearTimeout(timeout);\n delete timeouts[func];\n }\n}\n\n/**\n * callbackTimeout if the onSuccess is not called and returns true in the timelimit then onTimeout will be called\n *\n * @param {number} timer\n * @param {function} onSuccess\n * @param {function} onTimeout\n */\nfunction callbackTimeout(timer, onSuccess, onTimeout) {\n var callback, timeout;\n\n timeout = setTimeout(function () {\n onSuccess = noop;\n delete timeout[callback];\n onTimeout();\n }, timer);\n\n callback = function () {\n // TODO avoid leaking arguments\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n if (onSuccess.apply(this, arguments)) {\n clearCallbackTimeout(callback);\n }\n };\n\n timeouts[callback] = timeout;\n\n return callback;\n}\n\n\n/**\n * createElementInEl\n *\n * @param {HTMLElement} parent\n * @param {string} tagName\n * @param {string} id\n */\nfunction createElementInEl(parent, tagName, id) {\n var nEl = document.createElement(tagName);\n if (id) nEl.id = id;\n parent.appendChild(nEl);\n return nEl;\n}\n\n/**\n * createIframeWithContent\n *\n * @param {HTMLElement} parent\n * @param {string} template simple template using {{var}}\n * @param {object} data\n */\nfunction createIframeWithContent(parent, template, data) {\n var iframe = createIframe(parent);\n if (!setIframeContent(iframe, simpleTemplate(template, data))) return;\n return iframe;\n}\n\n/**\n * createIframe\n *\n * @param {HTMLElement} parent\n * @param {string} url\n */\nfunction createIframe(parent, url) {\n var nEl = document.createElement('iframe');\n nEl.src = url || 'about:blank';\n nEl.width = '100%';\n nEl.height = '100%';\n nEl.style.position = 'absolute';\n nEl.style.left = '0';\n nEl.style.top = '0';\n parent.innerHTML = '';\n parent.appendChild(nEl);\n return nEl;\n}\n\n/**\n * simpleTemplate\n *\n * @param {string} template\n * @param {object} data\n */\nfunction simpleTemplate(template, data) {\n Object.keys(data).forEach(function (key) {\n var value = (typeof value === 'object') ? JSON.stringify(data[key]) : data[key];\n template = template.replace(new RegExp('{{' + key + '}}', 'g'), value);\n });\n return template;\n}\n\n/**\n * setIframeContent\n *\n * @param {HTMLIframeElement} iframeEl\n * @param content\n */\nfunction setIframeContent(iframeEl, content) {\n var iframeDoc = iframeEl.contentWindow && iframeEl.contentWindow.document;\n if (!iframeDoc) return false;\n\n iframeDoc.write(content);\n\n return true;\n}\n\n\n/**\n * extend object with keys from another object\n *\n * @param {object} toExtend\n * @param {object} fromSource\n */\nfunction extend(toExtend, fromSource) {\n Object.keys(fromSource).forEach(function(key) {\n toExtend[key] = fromSource[key];\n });\n return toExtend;\n}\n\n\n/**\n * unique will create a unique string everytime is called, sequentially and prefixed\n *\n * @param {string} prefix\n */\nfunction unique(prefix) {\n var count = -1;\n return function () {\n return prefix + '_' + (++count);\n };\n}\n\nmodule.exports = {\n noop: noop,\n validate: validate,\n clearCallbackTimeout: clearCallbackTimeout,\n callbackTimeout: callbackTimeout,\n createElementInEl: createElementInEl,\n createIframeWithContent: createIframeWithContent,\n createIframe: createIframe,\n simpleTemplate: simpleTemplate,\n setIframeContent: setIframeContent,\n extend: extend,\n unique: unique\n};\n\n\n},{}]},{},[3])\n\n\n//# sourceMappingURL=VPAIDHTML5Client.js.map","//Small subset of async\nvar async = {};\n\nasync.setImmediate = function (fn) {\n setTimeout(fn, 0);\n};\n\nasync.iterator = function (tasks) {\n var makeCallback = function (index) {\n var fn = function () {\n if (tasks.length) {\n tasks[index].apply(null, arguments);\n }\n return fn.next();\n };\n fn.next = function () {\n return (index < tasks.length - 1) ? makeCallback(index + 1) : null;\n };\n return fn;\n };\n return makeCallback(0);\n};\n\n\nasync.waterfall = function (tasks, callback) {\n callback = callback || function () { };\n if (!isArray(tasks)) {\n var err = new Error('First argument to waterfall must be an array of functions');\n return callback(err);\n }\n if (!tasks.length) {\n return callback();\n }\n var wrapIterator = function (iterator) {\n return function (err) {\n if (err) {\n callback.apply(null, arguments);\n callback = function () {\n };\n }\n else {\n var args = Array.prototype.slice.call(arguments, 1);\n var next = iterator.next();\n if (next) {\n args.push(wrapIterator(next));\n }\n else {\n args.push(callback);\n }\n async.setImmediate(function () {\n iterator.apply(null, args);\n });\n }\n };\n };\n wrapIterator(async.iterator(tasks))();\n};\n\nasync.when = function (condition, callback) {\n if (!isFunction(callback)) {\n throw new Error(\"async.when error: missing callback argument\");\n }\n\n var isAllowed = isFunction(condition) ? condition : function () {\n return !!condition;\n };\n\n return function () {\n var args = arrayLikeObjToArray(arguments);\n var next = args.pop();\n\n if (isAllowed.apply(null, args)) {\n return callback.apply(this, arguments);\n }\n\n args.unshift(null);\n return next.apply(null, args);\n };\n};\n\n\n","/*! videojs-contrib-ads - v2.1.0 - 2015-06-11\n* Copyright (c) 2015 Brightcove; Licensed */\n(function(window, document, vjs, undefined) {\n\"use strict\";\n\nvar\n\n /**\n * Copies properties from one or more objects onto an original.\n */\n extend = function(obj /*, arg1, arg2, ... */) {\n var arg, i, k;\n for (i=1; i 1) {\n // some browsers and media aren't \"seekable\".\n // readyState greater than 1 allows for seeking without exceptions\n return resume();\n }\n\n if (tech.seekable === undefined) {\n // if the tech doesn't expose the seekable time ranges, try to\n // resume playback immediately\n return resume();\n }\n\n if (tech.seekable.length > 0) {\n // if some period of the video is seekable, resume playback\n return resume();\n }\n\n // delay a bit and then check again unless we're out of attempts\n if (attempts--) {\n setTimeout(tryToResume, 50);\n } else {\n (function() {\n try {\n resume();\n } catch(e) {\n videojs.log.warn('Failed to resume the content after an advertisement', e);\n }\n })();\n }\n },\n\n // whether the video element has been modified since the\n // snapshot was taken\n srcChanged;\n\n if (snapshot.nativePoster) {\n tech.poster = snapshot.nativePoster;\n }\n\n if ('style' in snapshot) {\n // overwrite all css style properties to restore state precisely\n tech.setAttribute('style', snapshot.style || '');\n }\n\n // Determine whether the player needs to be restored to its state\n // before ad playback began. With a custom ad display or burned-in\n // ads, the content player state hasn't been modified and so no\n // restoration is required\n\n if (player.src()) {\n // the player was in src attribute mode before the ad and the\n // src attribute has not been modified, no restoration is required\n // to resume playback\n srcChanged = player.src() !== snapshot.src;\n } else {\n // the player was configured through source element children\n // and the currentSrc hasn't changed, no restoration is required\n // to resume playback\n srcChanged = player.currentSrc() !== snapshot.src;\n }\n\n if (srcChanged) {\n // on ios7, fiddling with textTracks too early will cause safari to crash\n player.one('contentloadedmetadata', restoreTracks);\n\n // if the src changed for ad playback, reset it\n player.src({ src: snapshot.src, type: snapshot.type });\n // safari requires a call to `load` to pick up a changed source\n player.load();\n // and then resume from the snapshots time once the original src has loaded\n player.one('contentcanplay', tryToResume);\n } else if (!player.ended() || !snapshot.ended) {\n // if we didn't change the src, just restore the tracks\n restoreTracks();\n\n // the src didn't change and this wasn't a postroll\n // just resume playback at the current time.\n player.play();\n }\n },\n\n /**\n * Remove the poster attribute from the video element tech, if present. When\n * reusing a video element for multiple videos, the poster image will briefly\n * reappear while the new source loads. Removing the attribute ahead of time\n * prevents the poster from showing up between videos.\n * @param {object} player The videojs player object\n */\n removeNativePoster = function(player) {\n var tech = player.el().querySelector('.vjs-tech');\n if (tech) {\n tech.removeAttribute('poster');\n }\n },\n\n // ---------------------------------------------------------------------------\n // Ad Framework\n // ---------------------------------------------------------------------------\n\n // default framework settings\n defaults = {\n // maximum amount of time in ms to wait to receive `adsready` from the ad\n // implementation after play has been requested. Ad implementations are\n // expected to load any dynamic libraries and make any requests to determine\n // ad policies for a video during this time.\n timeout: 5000,\n\n // maximum amount of time in ms to wait for the ad implementation to start\n // linear ad mode after `readyforpreroll` has fired. This is in addition to\n // the standard timeout.\n prerollTimeout: 100,\n\n // maximum amount of time in ms to wait for the ad implementation to start\n // linear ad mode after `contentended` has fired.\n postrollTimeout: 100,\n\n // when truthy, instructs the plugin to output additional information about\n // plugin state to the video.js log. On most devices, the video.js log is\n // the same as the developer console.\n debug: false\n },\n\n adFramework = function(options) {\n var\n player = this,\n\n // merge options and defaults\n settings = extend({}, defaults, options || {}),\n\n fsmHandler;\n\n // prefix all video element events during ad playback\n // if the video element emits ad-related events directly,\n // plugins that aren't ad-aware will break. prefixing allows\n // plugins that wish to handle ad events to do so while\n // avoiding the complexity for common usage\n (function() {\n var\n videoEvents = videojs.Html5.Events,\n i = videoEvents.length,\n returnTrue = function() { return true; },\n triggerEvent = function(type, event) {\n // pretend we called stopImmediatePropagation because we want the native\n // element events to continue propagating\n event.isImmediatePropagationStopped = returnTrue;\n event.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n player.trigger({\n type: type + event.type,\n state: player.ads.state,\n originalEvent: event\n });\n },\n redispatch = function(event) {\n //TODO: the if bellow was added while waiting for the PR https://github.com/videojs/videojs-contrib-ads/issues/93\n if(event.type === 'play'){\n player.hasStarted(true);\n }\n\n if (player.ads.state === 'ad-playback') {\n triggerEvent('ad', event);\n } else if (player.ads.state === 'content-playback' && event.type === 'ended') {\n triggerEvent('content', event);\n\n } else if (player.ads.state === 'content-resuming') {\n if (player.ads.snapshot) {\n // the video element was recycled for ad playback\n if (player.currentSrc() !== player.ads.snapshot.src) {\n if (event.type === 'loadstart') {\n return;\n }\n return triggerEvent('content', event);\n\n // we ended playing postrolls and the video itself\n // the content src is back in place\n } else if (player.ads.snapshot.ended) {\n if ((event.type === 'pause' ||\n event.type === 'ended')) {\n // after loading a video, the natural state is to not be started\n // in this case, it actually has, so, we do it manually\n player.addClass('vjs-has-started');\n // let `pause` and `ended` events through, naturally\n return;\n }\n // prefix all other events in content-resuming with `content`\n return triggerEvent('content', event);\n }\n }\n if (event.type !== 'playing') {\n triggerEvent('content', event);\n }\n }\n };\n\n while (i--) {\n player.on(videoEvents[i], redispatch);\n }\n return redispatch;\n })();\n\n // We now auto-play when an ad gets loaded if we're playing ads in the same video element as the content.\n // The problem is that in IE11, we cannot play in addurationchange but in iOS8, we cannot play from adcanplay.\n // This will allow ad-integrations from needing to do this themselves.\n player.on(['addurationchange', 'adcanplay'], function() {\n var snapshot = player.ads.snapshot;\n if (player.currentSrc() === snapshot.src) {\n return; // do nothing\n }\n\n player.play();\n });\n\n // replace the ad initializer with the ad namespace\n player.ads = {\n state: 'content-set',\n\n startLinearAdMode: function() {\n player.trigger('adstart');\n },\n\n endLinearAdMode: function() {\n player.trigger('adend');\n }\n };\n\n fsmHandler = function(event) {\n // Ad Playback State Machine\n var\n fsm = {\n 'content-set': {\n events: {\n 'adscanceled': function() {\n this.state = 'content-playback';\n },\n 'adsready': function() {\n this.state = 'ads-ready';\n },\n 'play': function() {\n this.state = 'ads-ready?';\n cancelContentPlay(player);\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n },\n 'adserror': function() {\n this.state = 'content-playback';\n }\n }\n },\n 'ads-ready': {\n events: {\n 'play': function() {\n this.state = 'preroll?';\n cancelContentPlay(player);\n },\n 'adserror': function() {\n this.state = 'content-playback';\n }\n }\n },\n 'preroll?': {\n enter: function() {\n // change class to show that we're waiting on ads\n player.el().className += ' vjs-ad-loading';\n // schedule an adtimeout event to fire if we waited too long\n player.ads.timeout = window.setTimeout(function() {\n player.trigger('adtimeout');\n }, settings.prerollTimeout);\n // signal to ad plugin that it's their opportunity to play a preroll\n player.trigger('readyforpreroll');\n },\n leave: function() {\n window.clearTimeout(player.ads.timeout);\n removeClass(player.el(), 'vjs-ad-loading');\n },\n events: {\n 'play': function() {\n cancelContentPlay(player);\n },\n 'adstart': function() {\n this.state = 'ad-playback';\n player.el().className += ' vjs-ad-playing';\n },\n 'adtimeout': function() {\n this.state = 'content-playback';\n },\n 'adserror': function() {\n this.state = 'content-playback';\n }\n }\n },\n 'ads-ready?': {\n enter: function() {\n player.el().className += ' vjs-ad-loading';\n player.ads.timeout = window.setTimeout(function() {\n player.trigger('adtimeout');\n }, settings.timeout);\n },\n leave: function() {\n window.clearTimeout(player.ads.timeout);\n removeClass(player.el(), 'vjs-ad-loading');\n },\n events: {\n 'play': function() {\n cancelContentPlay(player);\n },\n 'adscanceled': function() {\n this.state = 'content-playback';\n },\n 'adsready': function() {\n this.state = 'preroll?';\n },\n 'adtimeout': function() {\n this.state = 'content-playback';\n },\n 'adserror': function() {\n this.state = 'content-playback';\n }\n }\n },\n 'ad-playback': {\n enter: function() {\n // capture current player state snapshot (playing, currentTime, src)\n this.snapshot = getPlayerSnapshot(player);\n\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n // We no longer need to supress play events once an ad is playing.\n // Clear it if we were.\n if (player.ads.cancelPlayTimeout) {\n clearImmediate(player.ads.cancelPlayTimeout);\n player.ads.cancelPlayTimeout = null;\n }\n },\n leave: function() {\n removeClass(player.el(), 'vjs-ad-playing');\n\n restorePlayerSnapshot(player, this.snapshot);\n if (player.ads.triggerevent !== 'adend') {\n // trigger 'adend' as a consistent notification\n // event that we're exiting ad-playback.\n player.trigger('adend');\n }\n },\n events: {\n 'adend': function() {\n this.state = 'content-resuming';\n },\n 'adserror': function() {\n this.state = 'content-resuming';\n }\n }\n },\n 'content-resuming': {\n enter: function() {\n if (this.snapshot.ended) {\n window.clearTimeout(player.ads._fireEndedTimeout);\n // in some cases, ads are played in a swf or another video element\n // so we do not get an ended event in this state automatically.\n // If we don't get an ended event we can use, we need to trigger\n // one ourselves or else we won't actually ever end the current video.\n player.ads._fireEndedTimeout = window.setTimeout(function() {\n player.trigger('ended');\n }, 1000);\n }\n },\n leave: function() {\n window.clearTimeout(player.ads._fireEndedTimeout);\n },\n events: {\n 'contentupdate': function() {\n this.state = 'content-set';\n },\n 'playing': function() {\n this.state = 'content-playback';\n },\n 'ended': function() {\n this.state = 'content-playback';\n }\n }\n },\n 'postroll?': {\n enter: function() {\n this.snapshot = getPlayerSnapshot(player);\n\n player.el().className += ' vjs-ad-loading';\n\n player.ads.timeout = window.setTimeout(function() {\n player.trigger('adtimeout');\n }, settings.postrollTimeout);\n },\n leave: function() {\n window.clearTimeout(player.ads.timeout);\n removeClass(player.el(), 'vjs-ad-loading');\n },\n events: {\n 'adstart': function() {\n this.state = 'ad-playback';\n player.el().className += ' vjs-ad-playing';\n },\n 'adtimeout': function() {\n this.state = 'content-resuming';\n setImmediate(function() {\n player.trigger('ended');\n });\n },\n 'adserror': function() {\n this.state = 'content-resuming';\n setImmediate(function() {\n player.trigger('ended');\n });\n }\n }\n },\n 'content-playback': {\n enter: function() {\n // make sure that any cancelPlayTimeout is cleared\n if (player.ads.cancelPlayTimeout) {\n clearImmediate(player.ads.cancelPlayTimeout);\n player.ads.cancelPlayTimeout = null;\n }\n // this will cause content to start if a user initiated\n // 'play' event was canceled earlier.\n player.trigger({\n type: 'contentplayback',\n triggerevent: player.ads.triggerevent\n });\n },\n events: {\n // in the case of a timeout, adsready might come in late.\n 'adsready': function() {\n player.trigger('readyforpreroll');\n },\n 'adstart': function() {\n this.state = 'ad-playback';\n player.el().className += ' vjs-ad-playing';\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n },\n 'contentupdate': function() {\n if (player.paused()) {\n this.state = 'content-set';\n } else {\n this.state = 'ads-ready?';\n }\n },\n 'contentended': function() {\n this.state = 'postroll?';\n }\n }\n }\n };\n\n (function(state) {\n var noop = function() {};\n\n // process the current event with a noop default handler\n ((fsm[state].events || {})[event.type] || noop).apply(player.ads);\n\n // check whether the state has changed\n if (state !== player.ads.state) {\n\n // record the event that caused the state transition\n player.ads.triggerevent = event.type;\n\n // execute leave/enter callbacks if present\n (fsm[state].leave || noop).apply(player.ads);\n (fsm[player.ads.state].enter || noop).apply(player.ads);\n\n // output debug logging\n if (settings.debug) {\n videojs.log('ads', player.ads.triggerevent + ' triggered: ' + state + ' -> ' + player.ads.state);\n }\n }\n\n })(player.ads.state);\n\n };\n\n // register for the events we're interested in\n on(player, vjs.Html5.Events.concat([\n // events emitted by ad plugin\n 'adtimeout',\n 'contentupdate',\n 'contentplaying',\n 'contentended',\n\n // events emitted by third party ad implementors\n 'adsready',\n 'adserror',\n 'adscanceled',\n 'adstart', // startLinearAdMode()\n 'adend' // endLinearAdMode()\n ]), fsmHandler);\n\n // keep track of the current content source\n // if you want to change the src of the video without triggering\n // the ad workflow to restart, you can update this variable before\n // modifying the player's source\n player.ads.contentSrc = player.currentSrc();\n\n // implement 'contentupdate' event.\n (function(){\n var\n // check if a new src has been set, if so, trigger contentupdate\n checkSrc = function() {\n var src;\n if (player.ads.state !== 'ad-playback') {\n src = player.currentSrc();\n if (src !== player.ads.contentSrc) {\n player.trigger({\n type: 'contentupdate',\n oldValue: player.ads.contentSrc,\n newValue: src\n });\n player.ads.contentSrc = src;\n }\n }\n };\n // loadstart reliably indicates a new src has been set\n player.on(['loadstart'], checkSrc);\n // check immediately in case we missed the loadstart\n setImmediate(checkSrc);\n })();\n\n // kick off the fsm\n if (!player.paused()) {\n // simulate a play event if we're autoplaying\n fsmHandler({type:'play'});\n }\n\n };\n\n // register the ad plugin framework\n vjs.plugin('ads', adFramework);\n\n})(window, document, videojs);\n","\"use strict\";\n\nvar dom = {};\n\ndom.isVisible = function isVisible(el) {\n var style = window.getComputedStyle(el);\n return style.visibility !== 'hidden';\n};\n\ndom.isHidden = function isHidden(el) {\n var style = window.getComputedStyle(el);\n return style.display === 'none';\n};\n\ndom.isShown = function isShown(el) {\n return !dom.isHidden(el);\n};\n\ndom.hide = function hide(el) {\n el.__prev_style_display_ = el.style.display;\n el.style.display = 'none';\n};\n\ndom.show = function show(el) {\n if (dom.isHidden(el)) {\n el.style.display = el.__prev_style_display_;\n }\n el.__prev_style_display_ = undefined;\n};\n\ndom.hasClass = function hasClass(el, cssClass) {\n var classes, i, len;\n\n if (isNotEmptyString(cssClass)) {\n if (el.classList) {\n return el.classList.contains(cssClass);\n }\n\n classes = isString(el.getAttribute('class')) ? el.getAttribute('class').split(/\\s+/) : [];\n cssClass = (cssClass || '');\n\n for (i = 0, len = classes.length; i < len; i += 1) {\n if (classes[i] === cssClass) {\n return true;\n }\n }\n }\n return false;\n};\n\ndom.addClass = function (el, cssClass) {\n var classes;\n\n if (isNotEmptyString(cssClass)) {\n if (el.classList) {\n return el.classList.add(cssClass);\n }\n\n classes = isString(el.getAttribute('class')) ? el.getAttribute('class').split(/\\s+/) : [];\n if (isString(cssClass) && isNotEmptyString(cssClass.replace(/\\s+/, ''))) {\n classes.push(cssClass);\n el.setAttribute('class', classes.join(' '));\n }\n }\n};\n\ndom.removeClass = function (el, cssClass) {\n var classes;\n\n if (isNotEmptyString(cssClass)) {\n if (el.classList) {\n return el.classList.remove(cssClass);\n }\n\n classes = isString(el.getAttribute('class')) ? el.getAttribute('class').split(/\\s+/) : [];\n var newClasses = [];\n var i, len;\n if (isString(cssClass) && isNotEmptyString(cssClass.replace(/\\s+/, ''))) {\n\n for (i = 0, len = classes.length; i < len; i += 1) {\n if (cssClass !== classes[i]) {\n newClasses.push(classes[i]);\n }\n }\n el.setAttribute('class', newClasses.join(' '));\n }\n }\n};\n\ndom.addEventListener = function addEventListener(el, type, handler) {\n if(isArray(el)){\n forEach(el, function(e) {\n dom.addEventListener(e, type, handler);\n });\n return;\n }\n\n if(isArray(type)){\n forEach(type, function(t) {\n dom.addEventListener(el, t, handler);\n });\n return;\n }\n\n if (el.addEventListener) {\n el.addEventListener(type, handler, false);\n } else if (el.attachEvent) {\n // WARNING!!! this is a very naive implementation !\n // the event object that should be passed to the handler\n // would not be there for IE8\n // we should use \"window.event\" and then \"event.srcElement\"\n // instead of \"event.target\"\n el.attachEvent(\"on\" + type, handler);\n }\n};\n\ndom.removeEventListener = function removeEventListener(el, type, handler) {\n if(isArray(el)){\n forEach(el, function(e) {\n dom.removeEventListener(e, type, handler);\n });\n return;\n }\n\n if(isArray(type)){\n forEach(type, function(t) {\n dom.removeEventListener(el, t, handler);\n });\n return;\n }\n\n if (el.removeEventListener) {\n el.removeEventListener(type, handler, false);\n } else if (el.detachEvent) {\n el.detachEvent(\"on\" + type, handler);\n } else {\n el[\"on\" + type] = null;\n }\n};\n\ndom.dispatchEvent = function dispatchEvent(el, event) {\n if (el.dispatchEvent) {\n el.dispatchEvent(event);\n } else {\n el.fireEvent(\"on\" + event.eventType, event);\n }\n};\n\ndom.isDescendant = function isDescendant(parent, child) {\n var node = child.parentNode;\n while (node !== null) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n};\n\ndom.getTextContent = function getTextContent(el){\n return el.textContent || el.text;\n};\n\ndom.prependChild = function prependChild(parent, child) {\n if(child.parentNode){\n child.parentNode.removeChild(child);\n }\n return parent.insertBefore(child, parent.firstChild);\n};\n\ndom.remove = function removeNode(node){\n if(node && node.parentNode){\n node.parentNode.removeChild(node);\n }\n};\n\ndom.isDomElement = function isDomElement(o) {\n return o instanceof Element;\n};\n\ndom.click = function(el, handler) {\n dom.addEventListener(el, 'click', handler);\n};\n\ndom.once = function(el, type, handler) {\n function handlerWrap() {\n handler.apply(null, arguments);\n dom.removeEventListener(el, type, handlerWrap);\n }\n\n dom.addEventListener(el, type, handlerWrap);\n};\n\n\n\n//Note: there is no getBoundingClientRect on iPad so we need a fallback\ndom.getDimension = function getDimension(element) {\n var rect;\n\n if(element.getBoundingClientRect) {\n rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height\n };\n }\n\n return {\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n};\n","var xml = {};\n\nxml.strToXMLDoc = function strToXMLDoc(stringContainingXMLSource){\n //IE 8\n if(!DOMParser){\n var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');\n xmlDocument.async = false;\n xmlDocument.loadXML(stringContainingXMLSource);\n return xmlDocument;\n }\n\n return parseString(stringContainingXMLSource);\n\n function parseString(stringContainingXMLSource){\n var parser = new DOMParser();\n var parsedDocument;\n\n //Note: This try catch is to deal with the fact that on IE parser.parseFromString does throw an error but the rest of the browsers don't.\n try {\n parsedDocument = parser.parseFromString(stringContainingXMLSource, \"application/xml\");\n\n if(isParseError(parsedDocument) || isEmptyString(stringContainingXMLSource)){\n throw new Error();\n }\n }catch(e){\n throw new Error(\"xml.strToXMLDOC: Error parsing the string: '\" + stringContainingXMLSource + \"'\");\n }\n\n return parsedDocument;\n }\n\n function isParseError(parsedDocument) {\n try { // parser and parsererrorNS could be cached on startup for efficiency\n var parser = new DOMParser(),\n errorneousParse = parser.parseFromString('INVALID', 'text/xml'),\n parsererrorNS = errorneousParse.getElementsByTagName(\"parsererror\")[0].namespaceURI;\n\n if (parsererrorNS === 'http://www.w3.org/1999/xhtml') {\n // In PhantomJS the parseerror element doesn't seem to have a special namespace, so we are just guessing here :(\n return parsedDocument.getElementsByTagName(\"parsererror\").length > 0;\n }\n\n return parsedDocument.getElementsByTagNameNS(parsererrorNS, 'parsererror').length > 0;\n } catch (e) {\n //Note on IE parseString throws an error by itself and it will never reach this code. Because it will have failed before\n }\n }\n};\n\nxml.parseText = function parseText (sValue) {\n if (/^\\s*$/.test(sValue)) { return null; }\n if (/^(?:true|false)$/i.test(sValue)) { return sValue.toLowerCase() === \"true\"; }\n if (isFinite(sValue)) { return parseFloat(sValue); }\n if (isISO8601(sValue)) { return new Date(sValue); }\n return sValue.trim();\n};\n\nxml.JXONTree = function JXONTree (oXMLParent) {\n var parseText = xml.parseText;\n\n //The document object is an especial object that it may miss some functions or attrs depending on the browser.\n //To prevent this problem with create the JXONTree using the root childNode which is a fully fleshed node on all supported\n //browsers.\n if(oXMLParent.documentElement){\n return new xml.JXONTree(oXMLParent.documentElement);\n }\n\n if (oXMLParent.hasChildNodes()) {\n var sCollectedTxt = \"\";\n for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) {\n oNode = oXMLParent.childNodes.item(nItem);\n /*jshint bitwise: false*/\n if ((oNode.nodeType - 1 | 1) === 3) { sCollectedTxt += oNode.nodeType === 3 ? oNode.nodeValue.trim() : oNode.nodeValue; }\n else if (oNode.nodeType === 1 && !oNode.prefix) {\n sProp = decapitalize(oNode.nodeName);\n vContent = new xml.JXONTree(oNode);\n if (this.hasOwnProperty(sProp)) {\n if (this[sProp].constructor !== Array) { this[sProp] = [this[sProp]]; }\n this[sProp].push(vContent);\n } else { this[sProp] = vContent; }\n }\n }\n if (sCollectedTxt) { this.keyValue = parseText(sCollectedTxt); }\n }\n\n if (oXMLParent.hasAttributes()) {\n var oAttrib;\n for (var nAttrib = 0; nAttrib < oXMLParent.attributes.length; nAttrib++) {\n oAttrib = oXMLParent.attributes.item(nAttrib);\n this[\"@\" + decapitalize(oAttrib.name)] = parseText(oAttrib.value.trim());\n }\n }\n};\n\nxml.JXONTree.prototype.attr = function(attr) {\n return this['@' + decapitalize(attr)];\n};\n\nxml.toJXONTree = function toJXONTree(xmlString){\n var xmlDoc = xml.strToXMLDoc(xmlString);\n return new xml.JXONTree(xmlDoc);\n};\n\n/**\n * Helper function to extract the keyvalue of a JXONTree obj\n *\n * @param xmlObj {JXONTree}\n * return the key value or undefined;\n */\nxml.keyValue = function getKeyValue(xmlObj) {\n if(xmlObj){\n return xmlObj.keyValue;\n }\n return undefined;\n};\n\nxml.attr = function getAttrValue(xmlObj, attr) {\n if(xmlObj) {\n return xmlObj['@' + decapitalize(attr)];\n }\n return undefined;\n};\n\nxml.encode = function encodeXML(str) {\n return str.replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n};\n\nxml.decode = function decodeXML(str) {\n return str.replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<')\n .replace(/&/g, '&');\n};","var iPhone = (function (userAgent) {\n return /(iPhone|iPod)/.test(userAgent);\n})(navigator.userAgent);\n\nvjs.plugin('vastClient', function VASTPlugin(options) {\n var player = this;\n var vast = new VASTClient();\n var adsCanceled = false;\n var volumeSnapshot;\n var defaultOpts = {\n // maximum amount of time in ms to wait to receive `adsready` from the ad\n // implementation after play has been requested. Ad implementations are\n // expected to load any dynamic libraries and make any requests to determine\n // ad policies for a video during this time.\n timeout: 500,\n\n // for the moment we don't support post roll ads\n postrollTimeout: 0,\n\n //TODO:finish this IOS FIX\n //Whenever you play an add on IOS, the native player kicks in and we loose control of it. On very heavy pages the 'play' event\n // May occur after the video content has already started. This is wrong if you want to play a preroll ad that needs to happen before the user\n // starts watching the content. To prevent this usec\n iosPrerollCancelTimeout: 2000,\n\n // maximun amount of time for the ad to actually start playing. If this timeout gets\n // triggered the ads will be cancelled\n adCancelTimeout: 3000,\n\n // Boolean flag that configures the player to play a new ad before the user sees the video again\n // the current video\n playAdAlways: false,\n\n // Flag to enable or disable the ads by default.\n adsEnabled: true,\n\n // Boolean flag to enable or disable the resize with window.resize or orientationchange\n autoResize: true\n };\n\n var settings = extend({}, defaultOpts, options || {});\n\n if(!settings.prerollTimeout) {\n settings.prerollTimeout = settings.adCancelTimeout;\n }\n\n if (isString(settings.url)) {\n settings.url = echoFn(settings.url);\n }\n\n if (!isDefined(settings.url)) {\n return trackAdError(new VASTError('on VideoJS VAST plugin, missing url on options object'));\n }\n\n /*\n What I am doing below is ugly and horrible and I should think twice before calling myself a good developer. With that said,\n it is the best solution I could find to mute the video until the 'play' event happens and the plugin can decide whether\n to play the ad or not.\n\n If you have a better solution please do tell me.\n */\n var origPlay = player.play;\n player.play = function () {\n if (isFirstPlay() && !iPhone) {\n volumeSnapshot = saveVolumeSnapshot();\n player.muted(true);\n }\n return origPlay.apply(this, arguments);\n };\n\n player.addChild('blackPoster');\n\n\n player.on('play', playAdHandler);\n player.on('readyforpreroll', playPrerollAd);\n\n if (settings.playAdAlways) {\n // No matter what happens we play a new ad before the user sees the video again.\n player.on('ended', function () {\n setTimeout(function () {\n player.trigger('contentupdate');\n }, 0);\n });\n }\n\n // initialize videojs contrib ads plugin\n player.ads(settings);\n\n player.vast = {\n isEnabled: function () {\n return settings.adsEnabled;\n },\n\n enable: function () {\n settings.adsEnabled = true;\n },\n\n disable: function () {\n settings.adsEnabled = false;\n }\n };\n\n return player.vast;\n\n /**** Local functions ****/\n function isFirstPlay(){\n return !dom.hasClass(player.el(), 'vjs-vast-finish') && (player.ads.state === 'content-set' || player.ads.state === 'ads-ready?');\n }\n\n function saveVolumeSnapshot(){\n return {\n muted: player.muted(),\n volume: player.volume()\n };\n }\n\n function restoreVolumeSnapshot(snapshot){\n if(isObject(snapshot)){\n player.volume(snapshot.volume);\n player.muted(snapshot.muted);\n }\n }\n\n function playAdHandler() {\n if(isFirstPlay()){\n if(!iPhone){\n player.currentTime(0);\n restoreVolumeSnapshot(volumeSnapshot);\n }\n\n player.on('vast.adstart', markVastAsFinished);\n player.on('vast.aderror', markVastAsFinished);\n player.on('adscanceled', markVastAsFinished);\n\n player.one('ended', function () {\n dom.removeClass(player.el(), 'vjs-vast-finish');\n volumeSnapshot = saveVolumeSnapshot();\n });\n }\n\n if(settings.adsEnabled){\n if (player.ads.state === 'content-set' || player.ads.state === 'ads-ready?') {\n if(canPlayPrerollAd()){\n initAds();\n }else{\n trackAdError(new VASTError('video content has been playing before preroll ad'));\n }\n }\n }else{\n cancelAds();\n }\n\n /*** Local functions ***/\n function markVastAsFinished(){\n dom.addClass(player.el(), 'vjs-vast-finish');\n\n player.off('vast.adstart', markVastAsFinished);\n player.off('vast.aderror', markVastAsFinished);\n player.off('adscanceled', markVastAsFinished);\n }\n\n function canPlayPrerollAd(){\n return !iPhone || player.currentTime() <= settings.iosPrerollCancelTimeout;\n }\n\n function initAds() {\n var adCancelTimeoutId;\n adsCanceled = false;\n\n if(!player.paused()){\n player.pause();\n }\n\n player.trigger('adsready');\n addSpinnerIcon();\n player.on('vast.adstart', removeSpinnerIcon);\n player.on('vast.aderror', removeSpinnerIcon);\n\n adCancelTimeoutId = setTimeout(function () {\n trackAdError(new VASTError('timeout while waiting for the video to start playing', 402));\n }, settings.adCancelTimeout);\n\n player.one('vast.adstart', clearAdCancelTimeout);\n player.one('vast.aderror', clearAdCancelTimeout);\n\n /*** local functions ***/\n function clearAdCancelTimeout(){\n if(adCancelTimeoutId) {\n clearTimeout(adCancelTimeoutId);\n adCancelTimeoutId = null;\n player.off('vast.adstart', clearAdCancelTimeout);\n player.off('vast.aderror', clearAdCancelTimeout);\n }\n }\n }\n\n function addSpinnerIcon() {\n dom.addClass(player.el(), 'vjs-vast-ad-loading');\n }\n\n function removeSpinnerIcon() {\n //IMPORTANT NOTE: We remove the spinnerIcon asynchronously to give time to the browser to start the video.\n // If we remove it synchronously we see a flash of the content video before the ad starts playing.\n setTimeout(function() {\n dom.removeClass(player.el(), 'vjs-vast-ad-loading');\n player.off('vast.adstart', removeSpinnerIcon);\n player.off('vast.aderror', removeSpinnerIcon);\n }, 100);\n }\n\n }\n\n function cancelAds() {\n // We trigger 'adscanceled' to cancel the ads if they are in 'content-set' or 'ads-read?' state\n player.trigger('adscanceled');\n //We trigger 'adserror' to cancel the ads if they are in 'adsready' or 'preroll?' or 'ad-playback' state\n player.trigger('adserror');\n adsCanceled = true;\n }\n\n function playPrerollAd() {\n async.waterfall([\n getVastResponse,\n playAd,\n finishPlayingAd\n ], function (error, response) {\n if (error) {\n trackAdError(error, response);\n }\n });\n }\n\n function getVastResponse(callback) {\n vast.getVASTResponse(settings.url(), callback);\n }\n\n function playAd(vastResponse, callback) {\n //TODO: Find a better way to stop the play. The 'playPrerollWaterfall' ends in an inconsistent situation\n //If the state is not 'preroll?' it means the ads were canceled therefore, we break the waterfall\n if(adsCanceled){\n return;\n }\n\n var adIntegrator = isVPAID(vastResponse) ? new VPAIDIntegrator(player, settings) : new VASTIntegrator(player);\n var adFinished = false;\n\n player.ads.startLinearAdMode();\n adIntegrator.playAd(vastResponse, callback);\n player.one('vast.adstart', adAdsLabel);\n player.one('adend', removeAdsLabel);\n player.one('adserror', removeAdsLabel);\n player.one('vast.aderror', removeAdsLabel);\n\n if(isIDevice()) {\n preventManualProgress();\n }\n\n /*** Local functions ****/\n\n function adAdsLabel(){\n if(adFinished) {\n return;\n }\n player.controlBar.addChild('AdsLabel');\n }\n\n function removeAdsLabel() {\n if(adFinished) {\n return;\n }\n player.controlBar.removeChild('AdsLabel');\n adFinished = true;\n }\n\n function preventManualProgress(){\n var PROGRESS_THRESHOLD = 1;\n var previousTime = player.currentTime();\n var tech = player.el().querySelector('.vjs-tech');\n var skipad_attempts = 0;\n\n player.on('adtimeupdate', adTimeupdateHandler);\n player.one('adended', function () {\n player.off('adtimeupdate', adTimeupdateHandler);\n });\n\n /*** Local functions ***/\n function adTimeupdateHandler() {\n var currentTime = player.currentTime();\n var progressDelta = Math.abs(currentTime - previousTime);\n\n if (progressDelta > PROGRESS_THRESHOLD) {\n skipad_attempts+=1;\n if(skipad_attempts >= 2){\n player.pause();\n }\n player.currentTime(previousTime);\n } else {\n previousTime = currentTime;\n }\n }\n }\n }\n\n function finishPlayingAd(vastResponse, callback) {\n player.ads.endLinearAdMode();\n callback(null, vastResponse);\n }\n\n function trackAdError(error, vastResponse) {\n player.trigger({type: 'vast.aderror', error: error});\n cancelAds();\n if (console && console.log) {\n console.log('AD ERROR:', error.message, error, vastResponse);\n }\n }\n\n function isVPAID(vastResponse) {\n var i, len;\n var mediaFiles = vastResponse.mediaFiles;\n for (i = 0, len = mediaFiles.length; i < len; i++) {\n if (vastUtil.isVPAID(mediaFiles[i])) {\n return true;\n }\n }\n return false;\n }\n});\n\n","vjs.AdsLabel = vjs.Component.extend({\n /** @constructor */\n init: function (player, options) {\n vjs.Component.call(this, player, options);\n\n var that = this;\n\n // We asynchronously reposition the ads label element\n setTimeout(function () {\n var currentTimeComp = player.controlBar &&( player.controlBar.getChild(\"timerControls\") || player.controlBar.getChild(\"currentTimeDisplay\") );\n if(currentTimeComp) {\n player.controlBar.el().insertBefore(that.el(), currentTimeComp.el());\n }\n dom.removeClass(that.el(), 'vjs-label-hidden');\n }, 0);\n }\n});\n\nvjs.AdsLabel.prototype.createEl = function(){\n return vjs.Component.prototype.createEl.call(this, 'div', {\n className: 'vjs-ads-label vjs-control vjs-label-hidden',\n innerHTML: 'Advertisement'\n });\n};","/**\n * The component that shows a black screen until the ads plugin has decided if it can or it can not play the ad.\n *\n * Note: In case you wonder why instead of this black poster we don't just show the spinner loader.\n * IOS devices do not work well with animations and the browser chrashes from time to time That is why we chose to\n * have a secondary black poster.\n *\n * It also makes it much more easier for the users of the plugin since it does not change the default behaviour of the\n * spinner and the player works the same way with and without the plugin.\n *\n * @param {vjs.Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nvjs.BlackPoster = vjs.Component.extend({\n /** @constructor */\n init: function(player, options){\n vjs.Component.call(this, player, options);\n\n var posterImg = player.getChild('posterImage');\n\n //We need to do it asynchronously to be sure that the black poster el is on the dom.\n setTimeout(function() {\n if(posterImg) {\n player.el().insertBefore(this.el(), posterImg.el());\n }\n }.bind(this), 0);\n }\n});\n\n/**\n * Create the black poster div element\n * @return {Element}\n */\nvjs.BlackPoster.prototype.createEl = function(){\n return vjs.createEl('div', {\n className: 'vjs-black-poster',\n });\n};","(function (window) {\n \"use strict\";\n\n\n function VASTResponse() {\n if (!(this instanceof VASTResponse)) {\n return new VASTResponse();\n }\n\n this._linearAdded = false;\n this.ads = [];\n this.errorURLMacros = [];\n this.impressions = [];\n this.clickTrackings = [];\n this.customClicks = [];\n this.trackingEvents = {};\n this.mediaFiles = [];\n this.clickThrough = undefined;\n this.adTitle = '';\n this.duration = undefined;\n this.skipoffset = undefined;\n }\n\n VASTResponse.prototype.addAd = function (ad) {\n var inLine, wrapper;\n\n if (ad instanceof Ad) {\n inLine = ad.inLine;\n wrapper = ad.wrapper;\n\n this.ads.push(ad);\n\n if (inLine) {\n this._addInLine(inLine);\n }\n\n if (wrapper) {\n this._addWrapper(wrapper);\n }\n }\n };\n\n VASTResponse.prototype._addErrorTrackUrl = function (error) {\n var errorURL = error instanceof xml.JXONTree ? xml.keyValue(error) : error;\n if (errorURL) {\n this.errorURLMacros.push(errorURL);\n }\n };\n\n VASTResponse.prototype._addImpressions = function (impressions) {\n isArray(impressions) && appendToArray(this.impressions, impressions);\n };\n\n VASTResponse.prototype._addClickThrough = function (clickThrough) {\n if (isNotEmptyString(clickThrough)) {\n this.clickThrough = clickThrough;\n }\n };\n\n VASTResponse.prototype._addClickTrackings = function (clickTrackings) {\n isArray(clickTrackings) && appendToArray(this.clickTrackings, clickTrackings);\n };\n\n VASTResponse.prototype._addCustomClicks = function (customClicks) {\n isArray(customClicks) && appendToArray(this.customClicks, customClicks);\n };\n\n VASTResponse.prototype._addTrackingEvents = function (trackingEvents) {\n var eventsMap = this.trackingEvents;\n\n if (trackingEvents) {\n trackingEvents = isArray(trackingEvents) ? trackingEvents : [trackingEvents];\n trackingEvents.forEach(function (trackingEvent) {\n if (!eventsMap[trackingEvent.name]) {\n eventsMap[trackingEvent.name] = [];\n }\n eventsMap[trackingEvent.name].push(trackingEvent);\n });\n }\n };\n\n VASTResponse.prototype._addTitle = function (title) {\n if (isNotEmptyString(title)) {\n this.adTitle = title;\n }\n };\n\n VASTResponse.prototype._addDuration = function (duration) {\n if (isNumber(duration)) {\n this.duration = duration;\n }\n };\n\n VASTResponse.prototype._addVideoClicks = function (videoClicks) {\n if (videoClicks instanceof VideoClicks) {\n this._addClickThrough(videoClicks.clickThrough);\n this._addClickTrackings(videoClicks.clickTrackings);\n this._addCustomClicks(videoClicks.customClicks);\n }\n };\n\n VASTResponse.prototype._addMediaFiles = function (mediaFiles) {\n isArray(mediaFiles) && appendToArray(this.mediaFiles, mediaFiles);\n };\n\n VASTResponse.prototype._addSkipoffset = function (offset) {\n if (offset) {\n this.skipoffset = offset;\n }\n };\n\n VASTResponse.prototype._addAdParameters = function (adParameters) {\n if (adParameters) {\n this.adParameters = adParameters;\n }\n };\n\n VASTResponse.prototype._addLinear = function (linear) {\n if (linear instanceof Linear) {\n this._addDuration(linear.duration);\n this._addTrackingEvents(linear.trackingEvents);\n this._addVideoClicks(linear.videoClicks);\n this._addMediaFiles(linear.mediaFiles);\n this._addSkipoffset(linear.skipoffset);\n this._addAdParameters(linear.adParameters);\n this._linearAdded = true;\n }\n };\n\n VASTResponse.prototype._addInLine = function (inLine) {\n var that = this;\n\n if (inLine instanceof InLine) {\n this._addTitle(inLine.adTitle);\n this._addErrorTrackUrl(inLine.error);\n this._addImpressions(inLine.impressions);\n\n inLine.creatives.forEach(function (creative) {\n if (creative.linear) {\n that._addLinear(creative.linear);\n }\n });\n }\n };\n\n VASTResponse.prototype._addWrapper = function (wrapper) {\n var that = this;\n\n if (wrapper instanceof Wrapper) {\n this._addErrorTrackUrl(wrapper.error);\n this._addImpressions(wrapper.impressions);\n\n wrapper.creatives.forEach(function (creative) {\n var linear = creative.linear;\n if (linear) {\n that._addVideoClicks(linear.videoClicks);\n that.clickThrough = undefined;//We ensure that no clickThrough has been added\n that._addTrackingEvents(linear.trackingEvents);\n }\n });\n }\n };\n\n VASTResponse.prototype.hasLinear = function(){\n return this._linearAdded;\n };\n\n function appendToArray(array, items) {\n items.forEach(function (item) {\n array.push(item);\n });\n }\n\n window.VASTResponse = VASTResponse;\n})(window);\n","\"use strict\";\n\nvar vastUtil = {\n\n track: function track(URLMacros, variables) {\n var sources = vastUtil.parseURLMacros(URLMacros, variables);\n var trackImgs = [];\n sources.forEach(function (src) {\n var img = new Image();\n img.src = src;\n trackImgs.push(img);\n });\n return trackImgs;\n },\n\n parseURLMacros: function parseMacros(URLMacros, variables) {\n var parsedURLs = [];\n\n variables = variables || {};\n\n if (!(variables[\"CACHEBUSTING\"])) {\n variables[\"CACHEBUSTING\"] = Math.round(Math.random() * 1.0e+10);\n }\n\n URLMacros.forEach(function (URLMacro) {\n parsedURLs.push(vastUtil._parseURLMacro(URLMacro, variables));\n });\n\n return parsedURLs;\n },\n\n parseURLMacro: function parseMacro(URLMacro, variables) {\n variables = variables || {};\n\n if (!(variables[\"CACHEBUSTING\"])) {\n variables[\"CACHEBUSTING\"] = Math.round(Math.random() * 1.0e+10);\n }\n\n return vastUtil._parseURLMacro(URLMacro, variables);\n },\n\n _parseURLMacro: function parseMacro(URLMacro, variables) {\n variables = variables || {};\n\n forEach(variables, function (value, key) {\n URLMacro = URLMacro.replace(new RegExp(\"\\\\[\" + key + \"\\\\\\]\", 'gm'), value);\n });\n\n return URLMacro;\n },\n\n parseDuration: function parseDuration(durationStr) {\n var durationRegex = /(\\d\\d):(\\d\\d):(\\d\\d)(\\.(\\d\\d\\d))?/;\n var match, durationInMs;\n\n if (isString(durationStr)) {\n match = durationStr.match(durationRegex);\n if (match) {\n durationInMs = parseHoursToMs(match[1]) + parseMinToMs(match[2]) + parseSecToMs(match[3]) + parseInt(match[5] || 0);\n }\n }\n\n return isNaN(durationInMs) ? null : durationInMs;\n\n /*** local functions ***/\n function parseHoursToMs(hourStr) {\n return parseInt(hourStr) * 60 * 60 * 1000;\n }\n\n function parseMinToMs(minStr) {\n return parseInt(minStr) * 60 * 1000;\n }\n\n function parseSecToMs(secStr) {\n return parseInt(secStr) * 1000;\n }\n },\n\n parseImpressions: function parseImpressions(impressions) {\n if (impressions) {\n impressions = isArray(impressions) ? impressions : [impressions];\n return transformArray(impressions, function (impression) {\n if (isNotEmptyString(impression.keyValue)) {\n return impression.keyValue;\n }\n return undefined;\n });\n }\n return [];\n },\n\n parseCreatives: function parseCreatives(creativesJTree) {\n var creatives = [];\n var creativesData;\n if (isDefined(creativesJTree) && isDefined(creativesJTree.creative)) {\n creativesData = isArray(creativesJTree.creative) ? creativesJTree.creative : [creativesJTree.creative];\n creativesData.forEach(function (creative) {\n creatives.push(new Creative(creative));\n });\n }\n return creatives;\n },\n\n //We assume that the progress is going to arrive in milliseconds\n formatProgress: function formatProgress(progress) {\n var hours, minutes, seconds, milliseconds;\n hours = progress / (60 * 60 * 1000);\n hours = Math.floor(hours);\n minutes = (progress / (60 * 1000)) % 60;\n minutes = Math.floor(minutes);\n seconds = (progress / 1000) % 60;\n seconds = Math.floor(seconds);\n milliseconds = progress % 1000;\n return toFixedDigits(hours, 2) + ':' + toFixedDigits(minutes, 2) + ':' + toFixedDigits(seconds, 2) + '.' + toFixedDigits(milliseconds, 3);\n },\n\n parseOffset: function parseOffset(offset, duration) {\n if(isPercentage(offset)){\n return calculatePercentage(offset, duration);\n }\n return vastUtil.parseDuration(offset);\n\n /*** Local function ***/\n function isPercentage(offset) {\n var percentageRegex = /^\\d+(\\.\\d+)?%$/g;\n return percentageRegex.test(offset);\n }\n\n function calculatePercentage(percentStr, duration) {\n if(duration) {\n return calcPercent(duration, parseFloat(percentStr.replace('%', '')));\n }\n return null;\n }\n\n function calcPercent(quantity, percent){\n return quantity * percent / 100;\n }\n },\n\n isVPAID: function isVPAIDMediaFile(mediaFile) {\n return !!mediaFile && mediaFile.apiFramework === 'VPAID';\n }\n};"],"sourceRoot":"/source/"}