{"version":3,"sources":["samba.player.api.js"],"names":["EventDispatcher","this","dict","findMediaPosition","array","key","value","i","length","XD","w","interval_id","last_hash","attached_callback","cache_bust","window","postMessage","message","target_url","target","parent","replace","location","Date","receiveMessage","callback","source_origin","e","indexOf","origin","Object","prototype","toString","call","clearInterval","setInterval","hash","document","re","test","data","SambaPlayerUtils","URL_BASE","url","getAllElementsWithAttribute","src","substring","lastIndexOf","tagName","matchingElements","allElements","querySelectorAll","push","createAndAppendScript","name","params","cb","script","createElement","type","done","onload","onreadystatechange","readyState","getElementsByTagName","appendChild","toQueryString","obj","str","p","hasOwnProperty","param","encodeURIComponent","join","getQueryParams","result","slice","split","tmp","unescape","createAndAppendIframe","options","frame","iframe","iframeSRC","playerParams","baseSRC","getIframeAddress","ph","baseSRCQueryParams","href","allowAttributeContent","browserNavigator","ua","navigator","userAgent","regex","browserInfoArray","match","appName","appVersion","toLowerCase","version","parseInt","console","log","setAttribute","m","live","playlistId","mock","encodeURI","width","height","frameBorder","scrolling","responsive","wrap","addFluid","attachEvent","frames","currentProtocol","protocol","iframeBaseURLMap","localhost-8080","qa","staging","prod","iframeURL","addEvent","evnt","elem","func","addEventListener","updateQueryStringParameter","uri","RegExp","separator","inherit","SubClass","SuperClass","T","constructor","className","style","paddingTop","css","head","styleSheet","cssText","createTextNode","handler","removeEventListener","handlers","splice","dispatchEvent","evtReturn","evtReturnTmp","handlersClone","concat","SambaPlayerApiMessage","player","embedURL","players","onLoadMedia","init","methodList","self","returnCallback","hasLoaded","a","messageDomain","host","eval","event","events","sendMessage","msg","isPrism","method","sambaPlayerApiMessage","callMethod","translatePrismEvents","id","_status","eventsDictionary","player:load","player:start","player:resume","player:pause","player:seek","player:mediaview","player:cuepoint","player:progress","player:listen","player:finish","player:error","status","title","duration","eventParam","setPlayerToReceiveMethod","doAction","action","JSON","stringify","getInfo","fn","SambaPlayer","container","playlist","initPlaylist","initSingle","MEDIA_ID","Math","floor","random","getElementById","sequence","medias","currentPlaylist","loop","timeout","autoplay","onLoad","config","onFinish","setTimeout","sendToNextMedia","onPlaylistClick","elements","getElementsByClassName","getAttribute","click","onCancelPlaylist","bindPlaylist","onClick","mediaId","changeVideo","isClick","triggers","triggersLength","evt","srcElement","isTrusted","preventDefault","on","fb","play","pause","mute","unmute","getStatus","media","seek","time","setDRM","drmObj","changeSubtitle","subtitle","voiceScreen","setVolume","volume","changeSpeed","speed","syncSlideshow","changeSlide","num","slidePlayer","jumpTo","provider","allowScriptAccess","atts","flashvars","doc","startSlide","rel","swfobject","embedSWF","info","map","dimLights","flag","dimDiv","zIndex","position","validateApiAuthorization","receivedMediaId","currentMediaId","isAbleToReproduce","addAnnotations","annotations","annotationHandler","noRepeat","offInterval","showed","timeLast","index","delay","destroyAnnotations","verifyPrism","parse","bind","error","warn","initPrismPlugin","exec","addMidrollLinks","apiVersion","initAnnotationsPrism","annotationClicked","annotation","destroyMidrollLinks","initComments","comments","commentsConfig","initCommentsPrism","initCommentsQuartz","parameters","addComments","timeInterval","lastTime","treatCommentData","cm","points","dontGroup","cms","n","cuepoints","commentsParsed"],"mappings":"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","file":"samba.player.api.js","sourcesContent":["/*\n * a backwards compatable implementation of postMessage\n * by Josh Fraser (joshfraser.com)\n * released under the Apache 2.0 license.\n *\n * this code was adapted from Ben Alman's jQuery postMessage code found at:\n * http://benalman.com/projects/jquery-postmessage-plugin/\n *\n * other inspiration was taken from Luke Shepard's code for Facebook Connect:\n * http://github.com/facebook/connect-js/blob/master/src/core/xd.js\n *\n * the goal of this project was to make a backwards compatable version of postMessage\n * without having any dependency on jQuery or the FB Connect libraries\n *\n * my goal was to keep this as terse as possible since my own purpose was to use this\n * as part of a distributed widget where filesize could be sensative.\n *\n */\n\n// everything is wrapped in the XD function to reduce namespace collisions\n/*\n * a backwards compatable implementation of postMessage\n * by Josh Fraser (joshfraser.com)\n * released under the Apache 2.0 license.\n *\n * this code was adapted from Ben Alman's jQuery postMessage code found at:\n * http://benalman.com/projects/jquery-postmessage-plugin/\n *\n * other inspiration was taken from Luke Shepard's code for Facebook Connect:\n * http://github.com/facebook/connect-js/blob/master/src/core/xd.js\n *\n * the goal of this project was to make a backwards compatable version of postMessage\n * without having any dependency on jQuery or the FB Connect libraries\n *\n * my goal was to keep this as terse as possible since my own purpose was to use this\n * as part of a distributed widget where filesize could be sensative.\n *\n */\n\n// everything is wrapped in the XD function to reduce namespace collisions\n'use strict';\nvar XD = function(w){\n var interval_id,\n last_hash,\n cache_bust = 1,\n attached_callback,\n window = w;\n\n return {\n postMessage : function(message, target_url, target) {\n if (!target_url) {\n return;\n }\n target = target || parent; // default to parent\n if (window['postMessage']) {\n // the browser supports window.postMessage, so call it with a targetOrigin\n // set appropriately, based on the target_url parameter.\n \t\ttarget['postMessage'](message, target_url.replace( /([^:]+:\\/\\/[^\\/]+).*/, '$1'));\n\n } else if (target_url) {\n // the browser does not support window.postMessage, so set the location\n // of the target to target_url#message. A bit ugly, but it works! A cache\n // bust parameter is added to ensure that repeat messages trigger the callback.\n target.location = target_url.replace(/#.*$/, '') + '#' + (+new Date) + (cache_bust++) + '&' + message;\n }\n },\n\n receiveMessage : function(callback, source_origin) {\n // browser supports window.postMessage\n if (window['postMessage']) {\n // bind the callback to the actual event associated with window.postMessage\n if (callback) {\n attached_callback = function(e) {\n if ((typeof source_origin === 'string' && source_origin.indexOf(e.origin) < 0)\n || (Object.prototype.toString.call(source_origin) === \"[object Function]\" && source_origin(e.origin) === !1)) {\n return !1;\n }\n callback(e);\n };\n }\n if (window['addEventListener']) {\n window[callback ? 'addEventListener' : 'removeEventListener']('message', attached_callback, !1);\n } else {\n window[callback ? 'attachEvent' : 'detachEvent']('onmessage', attached_callback);\n }\n } else {\n // a polling loop is started & callback is called whenever the location.hash changes\n interval_id && clearInterval(interval_id);\n interval_id = null;\n\n if (callback) {\n interval_id = setInterval(function(){\n var hash = document.location.hash,\n re = /^#?\\d+&/;\n\n if (hash !== last_hash && re.test(hash)) {\n last_hash = hash;\n callback({data: hash.replace(re, '')});\n }\n }, 100);\n }\n }\n }\n };\n}(window);\n\n/************************************************************************\n\tSamba player Utils\n*************************************************************************/\nvar SambaPlayerUtils = {\n\tURL_BASE: function(){\n\t\tvar url = this.getAllElementsWithAttribute('samba.player.api.js', 'script')[0].src;\n\t\treturn url.substring(0, url.lastIndexOf('/')) + '/sambalabs/';\n\t},\n\tgetAllElementsWithAttribute: function(src, tagName) {\n\t\tvar matchingElements = [];\n\t\tvar allElements = document.querySelectorAll(tagName);\n\t\tfor (var i = 0; i < allElements.length; i++) {\n\t\t\tif (allElements[i].src.indexOf(src) > -1)\n\t\t\t{\n\t\t\t\t// Element exists with attribute. Add to array.\n\t\t\t\tmatchingElements.push(allElements[i]);\n\t\t\t}\n\t\t}\n\t\treturn matchingElements;\n\t},\n\tcreateAndAppendScript: function(name, params, cb) {\n\t\tvar script = document.createElement(\"script\");\n\t\tscript.type = \"text/javascript\";\n\t\tscript.src = this.URL_BASE() + name;\n\t\tfor(var key in params) {\n\t\t\tscript[key] = params[key];\n\t\t}\n\t\tif(cb) {\n\t\t\tvar done = false;\n\t\t\tscript.onload = script.onreadystatechange = function() {\n\t\t\t\tif ( !done && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\") ) {\n\t\t\t\t\tdone = true;\n\t\t\t\t\tcb();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar html = document.getElementsByTagName(\"html\")[0];\n\t\thtml.appendChild(script);\n\t},\n\ttoQueryString: function(obj) {\n\t\tvar str = [];\n\n\t\tfor (var p in obj) {\n\t\t\tif (obj.hasOwnProperty(p) === false)\n\t\t\t\tcontinue;\n\n\t\t\tvar param = obj[p];\n\n\t\t\tif (p === 'ad_program') {\n\t\t\t\t// removes brackets if there's any\n\t\t\t\tif (/^(\\[|%5B)\\w{3,5}/.test(param))\n\t\t\t\t\tparam = param.replace(/^(\\[|%5B)|(\\]|%5D)$/g, '');\n\n\t\t\t\t// non-encoded URL with no brackets will add brackets,\n\t\t\t\t// encoded URL will remain w/o brackets\n\t\t\t\tif (/^\\w{3,5}\\:\\/\\//.test(param))\n\t\t\t\t\tparam = '[' + encodeURIComponent(param) + ']';\n\t\t\t}\n\n\t\t\tstr.push(p + \"=\" + param);\n\t\t}\n\n\t\treturn str.join(\"&\");\n\t},\n\tgetQueryParams: function() {\n\t\tvar result = {};\n\t\tvar url = this.getAllElementsWithAttribute('samba.player.api.js', 'script')[0].src;\n\n\t\tif (url)\n\t\t{\n\t\t\tvar params = url.slice(url.indexOf(\"?\") + 1).split(\"&\");\n\t\t\tfor (var i = 0; i < params.length; i++)\n\t\t\t{\n\t\t\t\tvar tmp = params[i].split(\"=\");\n\t\t\t\tresult[tmp[0]] = unescape(tmp[1]).replace(/\\[|\\]/g, \"\");\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\tcreateAndAppendIframe: function(target, name, options, cb) {\n\t\tvar frame;\n\t\tvar iframe;\n\t\tvar iframeSRC;\n\t\tvar params = (options.playerParams) ? this.toQueryString(options.playerParams) : \"\";\n\t\tvar baseSRC = this.getIframeAddress() + options.ph;\n\t\tvar baseSRCQueryParams = \"jsApi=true&\" + params + \"&parentURL=#\" + document.location.href;\n\t\tvar allowAttributeContent = \"geolocation; microphone; camera; encrypted-media; midi;\";\n\n\n\t\t/*\n\t\t*\n\t\t* AS ALTERAÇÕES ABAIXO FORAM IMPLEMENTADAS PARA RESOLVER UM PROBLEMA DOS EVENTOS DO player.play()\n\t\t* e player.pause() ESPECÍFICOS DA VERSÃO 72 DO GOOGLE CHROME RELACIONADOS AO \"USER ACTIVATION V2\"\n\t\t*\n\t\t* */\n\n try {\n var browserNavigator = (function(){\n var ua = navigator.userAgent;\n var regex = /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i;\n var browserInfoArray = ua.match(regex) || [];\n\n browserInfoArray = browserInfoArray[2]\n\t\t\t\t\t? [browserInfoArray[1], browserInfoArray[2]]\n\t\t\t\t\t: [navigator.appName, navigator.appVersion, '-?'];\n\n if(browserInfoArray.length >= 2) {\n return {\n name: browserInfoArray[0].toLowerCase(),\n version: parseInt(browserInfoArray[1])\n }\n\t\t\t\t} else {\n return {\n name: null,\n version: -1\n }\n }\n })();\n\n if(browserNavigator.version >= 72 && browserNavigator.name === 'chrome') {\n allowAttributeContent += \" autoplay;\"\n }\n } catch (e) {\n console.log('Erro ao tratar versão do browser para User Activation V2')\n }\n\n /* FIM DAS ALTERAÇÕES PARA A VERSÃO 72 DO CHROME */\n\n\t\ttry {\n\t\t\tiframe = document.createElement('iframe');\n\t\t\tiframe.setAttribute('allowfullscreen', true);\n\t\t\tiframe.setAttribute('webkitallowfullscreen', true);\n\t\t\tiframe.setAttribute('mozallowfullscreen', true);\n\t\t\tiframe.setAttribute('msallowfullscreen', true);\n\t\t\tiframe.setAttribute('allow', allowAttributeContent);\n\t\t} catch (e) {\n\t\t\tiframe = document.createElement(\"iframe\");\n\t\t}\n\n\t\tif(options.m && !options.live) {\n\t\t\tiframeSRC = baseSRC + \"/\" + options.m + \"?\" + baseSRCQueryParams;\n\t\t}else if(options.live) {\n\t\t\tiframeSRC = baseSRC + \"/live/\" + options.live + \"?\" + baseSRCQueryParams;\n\t\t}else if(options.playlistId) {\n\t\t\tiframeSRC = baseSRC + \"/playlist/\" + options.playlistId + (options.mock ? \"/mock\" : \"\") + \"?\" + baseSRCQueryParams;\n\t\t}else {\n\t\t\tiframeSRC = baseSRC + \"?frameId=\" + name + \"&\" + baseSRCQueryParams;\n\t\t}\n\n\t\tiframe.src = encodeURI(iframeSRC);\n\t\tiframe.name = name;\n\t\t// IE11: iframe dimensions cannot be assigned undefined due to a bug\n\t\t// \"options\" var loses its reference and becomes undefined\n\t\t// seems to relate to a wrong management of the memory boundaries\n\t\tiframe.width = options.width || '100%';\n\t\tiframe.height = options.height || '100%';\n\t\tiframe.frameBorder = 0;\n\t\tiframe.scrolling = \"no\";\n\n\t\tif(options.responsive) {\n\t\t\tvar wrap = this.addFluid(iframe);\n\t\t\ttarget.appendChild(wrap);\n\t\t}else {\n\t\t\ttarget.appendChild(iframe);\n\t\t}\n\n\t\tif(iframe.attachEvent) {\n\t\t\tiframe.attachEvent('onload', function(){\n\t\t\t\tframe = {\n\t\t\t\t\tsrc: iframe.src,\n\t\t\t\t\tdocument: frames[iframe.name]\n\t\t\t\t};\n\n\t\t\t\tcb(iframe, frame);\n\t\t\t});\n\t\t}else {\n\t\t\tiframe.onload = function(){\n\t\t\t\tframe = {\n\t\t\t\t\tsrc: iframe.src,\n\t\t\t\t\tdocument: frames[iframe.name]\n\t\t\t\t};\n\n\t\t\t\tcb(iframe, frame);\n\t\t\t}\n\t\t}\n\t},\n\tgetIframeAddress: function() {\n\t\tvar currentProtocol = this.getQueryParams().protocol || this.URL_BASE().match(/(https?:)?/)[0] || window.location.protocol;\n\t\tvar iframeBaseURLMap = {\n\t\t\t\t\t'localhost-8080': currentProtocol + \"//localhost:8080/player-api/embed/\",\n\t\t\t\t\t'qa': currentProtocol + \"//player-api.qa.sambatech.com/v3/embed/\",\n\t\t\t\t\t'staging': currentProtocol + \"//player-api.staging.sambatech.com/v3/embed/\",\n\t\t\t\t\t'prod': currentProtocol + \"//fast.player.liquidplatform.com/pApiv2/embed/\"\n \t};\n\t\tvar iframeSrc = (iframeBaseURLMap[this.getQueryParams().iframeURL]) ? iframeBaseURLMap[this.getQueryParams().iframeURL] : iframeBaseURLMap.prod;\n\t\treturn iframeSrc;\n\t},\n\taddEvent: function(evnt, elem, func) {\n\t if (elem.addEventListener) // W3C DOM\n\t elem.addEventListener(evnt,func,false);\n\t else if (elem.attachEvent) { // IE DOM\n\t elem.attachEvent(\"on\"+evnt, func);\n\t }\n\t else { // No much to do\n\t elem[evnt] = func;\n\t }\n\t},\n\tupdateQueryStringParameter: function(uri, key, value) {\n\t\tvar url = uri.split('#');\n\t var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\n\t var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\n\t if (uri.match(re)) {\n\t return uri.replace(re, '$1' + key + \"=\" + value + '$2') + '#' + url[1];\n\t }\n\t else {\n\t return url[0] + separator + key + \"=\" + value + '#' + url[1];\n\t }\n\t},\n\t/** Herança **/\n\tinherit: function(SubClass, SuperClass) {\n\t\tvar T = function() {};\n\t\tT.prototype = SuperClass.prototype;\n\t\tSubClass.prototype = new T();\n\t\tSubClass.prototype.constructor = SubClass;\n\t},\n\t/**reponsive layout**/\n\taddFluid: function(elem) {\n\t var wrap = document.createElement('div');\n\t elem.className += (elem.className ? ' ' : '') + 'fluidsambaplayer-item';\n\t wrap.className += 'fluidsambaplayer';\n\t wrap.style.paddingTop = getRatio(elem.height, elem.width);\n\t wrap.appendChild(elem);\n\n\t addStyle();\n\n\t return wrap;\n\n\t function addStyle() {\n\t\tvar css = [\n\t\t\t'.fluidsambaplayer {',\n\t\t\t 'width: 100%; max-width: 100%; position: relative;',\n\t\t\t'}',\n\t\t\t'.fluidsambaplayer-item {',\n\t\t\t 'position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;',\n\t\t\t'}'\n\t\t].join('');\n\t\tvar head = document.head || document.getElementsByTagName('head')[0];\n\t\tvar style = document.createElement('style');\n\t\tstyle.type = 'text/css';\n\t\tif (style.styleSheet) {\n\t\t\tstyle.styleSheet.cssText = css;\n\t\t} else {\n\t\t\tstyle.appendChild(document.createTextNode(css));\n\t\t}\n\t\thead.appendChild(style);\n\t }\n\n function getRatio (height, width) {\n\t return ((parseInt(height, 10) / parseInt(width, 10)) * 100) + '%';\n\t }\n\t},\n};\n\n/** EVENT DISPATCHER **/\n\nfunction EventDispatcher() {\n\tthis.dict = {};\n}\n\nEventDispatcher.prototype.dict = null;\n\nEventDispatcher.prototype.addEventListener = function(type, handler) {\n\tif (this.dict[type] == null)\n\t\tthis.dict[type] = [];\n\n\tthis.dict[type].push(handler);\n};\nEventDispatcher.prototype.removeEventListener = function(type, handler) {\n\tvar handlers = this.dict[type];\n\tvar i = -1;\n\n\tif (handlers == null)\n\t\treturn;\n\n\tfor (i = 0; i < handlers.length; ++i)\n\t\tif (handler === handlers[i])\n\t\t\tbreak;\n\n\tif (i > -1 && i < handlers.length)\n\t\thandlers.splice(i, 1);\n};\nEventDispatcher.prototype.dispatchEvent = function(e) {\n\tvar handlers = this.dict[e.type];\n\tvar evtReturn, evtReturnTmp;\n\n\tif (handlers == null)\n\t\treturn;\n\n\tvar handlersClone = handlers.concat();\n\n\tfor (var i = 0; i < handlersClone.length; ++i) {\n\t\tevtReturnTmp = handlersClone[i].call(this, e);\n\n\t\tif (evtReturn !== false)\n\t\t\tevtReturn = evtReturnTmp;\n\t}\n\n\treturn evtReturn;\n};\n\n/************************************************************************\n\tObjeto de menssagens\n*************************************************************************/\n\nvar SambaPlayerApiMessage = function(player) {\n\tthis.embedURL = SambaPlayerUtils.getIframeAddress();\n \tthis.players = {};\n \tthis.player = player;\n\tthis.onLoadMedia = {};\n \tthis.init();\n \tthis.methodList = [];\n};\n\nSambaPlayerApiMessage.prototype.init = function() {\n\tvar self = this;\n\tself.returnCallback = function(){};\n\n\tself.hasLoaded = false;\n\n\tvar a = document.createElement(\"a\");\n\ta.href = self.embedURL;\n\tvar messageDomain = a.protocol + \"//\" + a.host;\n\n\tXD.receiveMessage(function(message){\n\t\ttry{\n\t\t\tvar data = eval('(' + message.data + ')');\n\t\t\tif(data.event == \"getStatus\") {\n\t\t\t\tself.returnCallback(data);\n\t\t\t}else {\n\t\t\t\tself.events(data);\n\t\t\t}\n\t\t}catch(e) {\n\t\t}\n\t}, messageDomain);\n};\n\nSambaPlayerApiMessage.prototype.sendMessage = function(msg, frame) {\n\tXD.postMessage(msg, frame.src, frame.document);\n};\n\nSambaPlayerApiMessage.prototype.events = function(player, iframe) {\n\ttry {\n\t\t// Validations created to support prism\n\t\t// Prism when created sends 'player:prism' event\n\t\tif (player.data && player.data.type === 'player:prism') {\n\t\t\tthis.isPrism = true;\n\t\t}\n\t\tif (this.isPrism) { // If is prism, translate the event to a known pattern\n\t\t\tif (player.method) {\n\t\t\t\tsambaPlayerApiMessage.callMethod(player);\n\t\t\t} else {\n \t\tplayer = sambaPlayerApiMessage.translatePrismEvents(player);\n\t\t\t}\n\t\t}\n\n\t\t//Eventos específicos\n\t\tif(typeof this.players[player.id][player.event] == \"function\") {\n\t\t\tthis.players[player.id][player.event](player);\n\t\t} else if(typeof this.players[player.id][player.event] == \"string\") {\n\t\t\twindow[this.players[player.id][player.event]](player);\n\t\t}\n\n\t\t//Eventos globais\n\t\tif(this.players[player.id][\"*\"]) {\n\t\t\tif(typeof this.players[player.id][\"*\"] == \"function\") {\n\t\t\t\tthis.players[player.id][\"*\"](player);\n\t\t\t}else if(typeof this.players[player.id][\"*\"] == \"string\") {\n\t\t\t\twindow[this.players[player.id][\"*\"]](player);\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\t// TODO: handle exception\n\t}\n\n};\n\nSambaPlayerApiMessage.prototype.translatePrismEvents = function(event) {\n\tif (event.name === 'status') {\n\t\tthis._status = event.data\n\t}\n\n\tif (event.data && event.event) {\n\t\tvar eventsDictionary = {\n\t\t\t'player:load': 'onLoad',\n\t\t\t'player:start': 'onStart',\n\t\t\t'player:resume': 'onResume',\n\t\t\t'player:pause': 'onPause',\n\t\t\t'player:seek': 'onSeek',\n\t\t\t'player:mediaview': 'onMediaView',\n\t\t\t'player:cuepoint': 'onCuepoint',\n\t\t\t'player:progress': 'onProgress',\n\t\t\t'player:listen': 'onListen',\n\t\t\t'player:finish': 'onFinish',\n\t\t\t'player:error': 'onError',\n\t\t};\n\t\tvar status = this._status\n\t\tevent = {\n\t\t\ttitle: status.title,\n\t\t\tid: status.id,\n\t\t\tduration: status.duration,\n\t\t\tevent: eventsDictionary[event.data.type],\n\t\t\teventParam: event.data.event\n\t\t}\n\t}\n\treturn event\n};\n\nSambaPlayerApiMessage.prototype.setPlayerToReceiveMethod = function(player) {\n this.player = player;\n};\n\nSambaPlayerApiMessage.prototype.callMethod = function(method) {\n if (this.player[method.name]) {\n this.player[method.name](method.data);\n }\n};\n\nSambaPlayerApiMessage.prototype.doAction = function(method, param, frame){\n\tvar action;\n\tif (this.isPrism) {\n\t\taction = {\n\t\t\tmethod: true,\n\t\t\tname: method,\n\t\t\tdata: [param]\n\t\t}\n\t}\n\telse {\n\t\taction = method;\n\t\tif (param != null)\n\t\t\taction += ':' + (typeof param === 'object' ? encodeURIComponent(JSON.stringify(param)) : param);\n\t}\n\tthis.sendMessage(action, frame);\n};\n\nSambaPlayerApiMessage.prototype.getInfo = function(method, fn, frame){\n\tif (this.isPrism) { // if is prism just call the function with status previously saved\n\t\tfn(this._status)\n\t}\n\telse {\n\t\tthis.returnCallback = fn;\n\t\tthis.sendMessage(method + \":getStatus\", frame);\n\t}\n};\n\nSambaPlayerApiMessage.prototype.getQueryParams = function() {\n\tvar result = {};\n\tvar url = SambaPlayerUtils.getAllElementsWithAttribute(\"samba-player-api\")[0].src;\n if (url)\n {\n var params = url.slice(url.indexOf(\"?\") + 1).split(\"&\");\n for (var i = 0; i < params.length; i++)\n {\n var tmp = params[i].split(\"=\");\n result[tmp[0]] = unescape(tmp[1]).replace(/\\[|\\]/g, \"\");\n }\n }\n\t\treturn result;\n};\n\n//Tratamento se já existir um script nosso na página\nvar sambaPlayerApiMessage = sambaPlayerApiMessage || new SambaPlayerApiMessage();\n\n/************************************************************************\n\tObjeto de controle dos players\n*************************************************************************/\nvar SambaPlayer = function(container, options) {\n\tEventDispatcher.call(this);\n \tsambaPlayerApiMessage = new SambaPlayerApiMessage(this);\n\tvar self = this;\n\tif(!options.playlist) {\n\t\tself.initSingle(container, options);\n\t}else {\n\t\tself.initPlaylist(container, options);\n\t}\n\treturn this;\n};\n\nSambaPlayerUtils.inherit(SambaPlayer, EventDispatcher);\n\nSambaPlayer.prototype.initSingle = function(container, options) {\n\tvar self = this;\n\tself.MEDIA_ID = options.m || options.live || options.playlistId || \"player-\" + Math.floor(Math.random()*1000);\n\tvar elem = (typeof container == \"string\") ? document.getElementById(container) : container;\n\n\t//Bindando o iframe correto nos eventos\n\tsambaPlayerApiMessage.players[self.MEDIA_ID] = options.events || {};\n\n\tvar elems = SambaPlayerUtils.createAndAppendIframe(elem, self.MEDIA_ID, options, function(iframe, frame){\n\t\t\tself.iframe = iframe;\n\t\t\tself.frame = frame;\n\n\t\t\tsambaPlayerApiMessage.players[self.MEDIA_ID].event = 'onLoad';\n\t\t\tsambaPlayerApiMessage.players[self.MEDIA_ID].id = self.MEDIA_ID;\n\t\t\tsambaPlayerApiMessage.events(sambaPlayerApiMessage.players[self.MEDIA_ID]);\n\t});\n};\n/************************************************************************\n\tPlaylist\n*************************************************************************/\nSambaPlayer.prototype.initPlaylist = function(container, options) {\n var self = this;\n self.sequence = (options.playlist.sequence) ? options.playlist.sequence : false;\n\tself.playlist = options.playlist.medias;\n\tself.currentPlaylist = 0;\n\tself.loop = options.playlist.loop || false;\n\tself.timeout = options.playlist.timeout || 5;\n\tself.autoplay = options.playlist.autoplay || false;\n\n\toptions.ph = options.playlist.ph;\n\toptions.m = (typeof self.playlist[self.currentPlaylist] === 'string') ? self.playlist[self.currentPlaylist]: self.playlist[self.currentPlaylist].id;\n \toptions.events = options.events || {};\n\n\toptions.events.onLoad = function() {\n\t\tif (sambaPlayerApiMessage.isPrism) {\n\t\t\tvar config = new Object();\n\t\t\tconfig.timeout = self.timeout;\n\t\t\tsambaPlayerApiMessage.doAction(\"setupPlaylistProgress\", config, self.frame);\n\t\t\tsambaPlayerApiMessage.setPlayerToReceiveMethod(self);\n\t\t}\n }\n\n\t//Loop\n\toptions.events.onFinish = function() {\n\t\tif(self.sequence) {\n self.currentPlaylist = findMediaPosition(self.playlist, 'id', self.MEDIA_ID)\n }\n self.currentPlaylist = ((self.currentPlaylist + 1) == self.playlist.length) ? 0 : self.currentPlaylist + 1;\n\t\tif(self.currentPlaylist != 0 || self.loop) {\n\t\t\tif (sambaPlayerApiMessage.isPrism) {\n\t\t\t\tsambaPlayerApiMessage.doAction(\"showProgressSpinner\",null, self.frame);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tself.sendToNextMedia();\n\t\t\t\t\toptions.events.onPlaylistClick();\n\t\t\t\t}, self.timeout * 1000)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsambaPlayerApiMessage.doAction(\"showPlaylist\", encodeURIComponent(JSON.stringify({title: self.playlist[self.currentPlaylist].title, timeout: self.timeout})), self.frame);\n\t\t\t}\n\t\t}\n\t};\n\n\toptions.events.onPlaylistClick = function() {\n\t\tvar elements = document.getElementsByClassName('samba-playlist-trigger');\n\t\tfor(var i=elements.length; i--;) {\n\t\t\tif(elements[i].getAttribute('data-mediaid') == self.playlist[self.currentPlaylist] || (self.playlist[self.currentPlaylist].id && elements[i].getAttribute('data-mediaid') === self.playlist[self.currentPlaylist].id) ) {\n\t\t\t\telements[i].click();\n\t\t\t}\n\t\t}\n\t};\n\n\toptions.events.onCancelPlaylist = function() {\n\t\tself.currentPlaylist = ((self.currentPlaylist) === 0) ? self.currentPlaylist.length - 1 : self.currentPlaylist - 1;\n\t};\n\n\tthis.initSingle(container, options);\n\tthis.bindPlaylist(options.playlist.onClick);\n};\n\nSambaPlayer.prototype.sendToNextMedia = function() {\n \tvar mediaId = this.playlist[this.currentPlaylist].id\n \tthis.changeVideo(mediaId);\n};\n\nSambaPlayer.prototype.changeVideo = function(id, isClick) {\n\tvar self = this;\n\tvar url = self.iframe.src;\n\n\tsambaPlayerApiMessage.players[id] = sambaPlayerApiMessage.players[self.MEDIA_ID];\n\n\t//Repopulando o currentPlaylist\n\tfor(var i = 0; i= annotations[i].time + annotations[i].delay;\n\n\t\t\tif (showed[i]) {\n\t\t\t\tif (offInterval) {\n\t\t\t\t\tshowed[i] = false;\n\t\t\t\t\tself.destroyAnnotations(i);\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse if (offInterval)\n\t\t\t\tcontinue;\n\n\t\t\tshowed[i] = true;\n\t\t\t// injecting array index in client's config object\n\t\t\tannotations[i].index = i;\n\n\t\t\tsambaPlayerApiMessage.doAction(\"showAnnotation\", annotations[i], self.frame);\n\t\t}\n\t};\n\n\tsambaPlayerApiMessage.players[this.MEDIA_ID][\"onFinish\"] = function(e) {\n\t\tshowed = {};\n\t\tself.destroyAnnotations();\n\t};\n};\nSambaPlayer.prototype.verifyPrism = function(callback,params){\n\tself = this\n\twindow.addEventListener('message',function (e){\n\t\ttry {\n\t\t\tvar event = typeof e.data === 'string'? JSON.parse(e.data) : e.data\n\t\t\tif (event.data && event.data.type === 'player:prism') {\n\t\t\t\tcallback = callback.bind(self)\n\t\t\t\tcallback(params)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(error)\n\t\t}\n\t})\n};\nSambaPlayer.prototype.initPrismPlugin = function(config){\n\tfunction exec() {\n\t\tif (config.handler!==null) {\n\t\t\tconfig.callback(config.params,config.handler);\n\t\t} else {\n\t\t\tconfig.callback(config.params);\n\t\t}\n\t}\n\tif (this.frame)\n\t\texec();\n\telse sambaPlayerApiMessage.players[this.MEDIA_ID][\"onLoad\"] = exec;\n};\n\nSambaPlayer.prototype.addMidrollLinks = function(annotations, annotationHandler, noRepeat) {\n\tvar self = this;\n\tvar config = {\n\t\t'params' : {\n\t\t\t'apiVersion':'V3',\n\t\t\t'annotations': annotations\n\t\t},\n\t\t'handler': annotationHandler,\n\t\t'callback': self.initAnnotationsPrism.bind(this)\n\t}\n\tif (sambaPlayerApiMessage.isPrism) {\n\t\tself.initPrismPlugin(config)\n\t} else {\n\t\tself.verifyPrism = self.verifyPrism.bind(this)\n\t\tself.verifyPrism(self.initPrismPlugin, config)\n\t\tself.addAnnotations(annotations, annotationHandler, noRepeat);\n\t}\n};\n\nSambaPlayer.prototype.initAnnotationsPrism = function(annotations, annotationHandler) {\n\tthis.annotationHandler = annotationHandler;\n\tsambaPlayerApiMessage.doAction(\"initMidrollLinks\",annotations,this.frame);\n\twindow.addEventListener('message',this.annotationClicked,false);\n};\n\nSambaPlayer.prototype.annotationClicked = function (event) {\n\ttry {\n\t\tvar data = typeof event.data === 'string'? JSON.parse(event.data) : event.data\n\t\tif (data.type === 'ANNOTATION-CLICKED' && this.annotationHandler) {\n\t\t var callback = this.annotationHandler;\n\t\t // if it`s string, call function by name, otherwise a function must be passed\n\t\t if (typeof callback === 'string') {\n\t\t\tif (window[callback]) {\n\t\t\t window[callback](data.annotation, data.index);\n\t\t\t}\n\t\t } else {\n\t\t\tcallback(data.annotation, data.index);\n\t\t }\n\t\t}\n\t} catch (error) {\n\t\tconsole.warn(error)\n\t}\n};\n/**\n * Destroys all annotations or a single one.\n *\n * @param index (optional) - Index in collection of the annotation to destroy\n */\nSambaPlayer.prototype.destroyAnnotations = function(index) {\n\tsambaPlayerApiMessage.doAction(\"destroyAnnotations\", index, this.frame);\n};\n\nSambaPlayer.prototype.destroyMidrollLinks = function(index) {\n\tthis.destroyAnnotations(index);\n};\n\n/**\n * Configures comments feature.\n *\n * @param config : Object - Config data\n *\t readOnly : Boolean - Shows comments on cuepoints (HTML5 only) and blocks user interactions; defaults to false\n *\t autoShow : Boolean - Enable/disable automatically showing comments on cuepoints; defaults to false\n *\t timeInterval : int - Group and show comments by n-n seconds\n *\t author : Boolean/String - Whether to show comment author field or to have it pre-filled; defaults to true\n * @param comments : Array - \"addComments()\"\n */\n\nSambaPlayer.prototype.initComments = function (config, comments) {\n\tself = this;\n\tvar params = {\n\t\t'params':{\n\t\t\t'apiVersion':'V3',\n\t\t\t'commentsConfig': {\n\t\t\t\t'config': config,\n\t\t\t\t'comments': comments\n\t\t\t}\n\t\t},\n\t\t'handler': null,\n\t\t'callback': self.initCommentsPrism.bind(this)\n\t}\n\tif (sambaPlayerApiMessage.isPrism) {\n\t\tself.initPrismPlugin(params)\n\t} else {\n\t\tself.verifyPrism = self.verifyPrism.bind(this)\n\t\tself.verifyPrism(self.initPrismPlugin,params)\n\t\tself.initCommentsQuartz(config,comments)\n\t}\n}\nSambaPlayer.prototype.initCommentsPrism= function (parameters) {\n\tsambaPlayerApiMessage.doAction(\"initComments\",parameters,this.frame);\n}\nSambaPlayer.prototype.initCommentsQuartz = function(config, comments) {\n\tvar self = this;\n\tvar timeInterval = config.timeInterval > 0 ? config.timeInterval : 5;\n\tvar lastTime = -1;\n\tif (comments)\n\t\tcomments = this.treatCommentData(comments);\n\n\tfunction exec() {\n\t\tsambaPlayerApiMessage.doAction(\"initComments\", config, self.frame);\n\t\tcomments && self.addComments(comments);\n\t}\n\tif (this.frame)\n\t\texec();\n\telse sambaPlayerApiMessage.players[this.MEDIA_ID][\"onStart\"] = exec;\n\n\t// user action\n\tsambaPlayerApiMessage.players[this.MEDIA_ID][\"onCommentAdded\"] = function(e) {\n\t\tself.dispatchEvent({type: \"commentAdded\", data: e.eventParam});\n\n\t\tif(comments.cm[e.eventParam.time] == null) {\n\t\t\tcomments.cm[e.eventParam.time] = [];\n\t\t\tcomments.points.push(e.eventParam.time);\n\t\t}\n\n\t\tcomments.cm[e.eventParam.time].push(e.eventParam);\n\t};\n\n\t//On comment show\n\tsambaPlayerApiMessage.players[this.MEDIA_ID][\"onCommentCuepoint\"] = function(e) {\n\t\tvar time = +e.eventParam.time;\n\t\tif (e.eventParam.dontGroup)\n\t\t\tsambaPlayerApiMessage.doAction(\"showComment\", comments.cm[time], self.frame);\n\t\telse {\n\t\t\tvar cms = [];\n\t\t\tvar n = timeInterval;\n\n\t\t\tif (lastTime === -1 || time - lastTime > timeInterval) {\n\t\t\t\tlastTime = time;\n\n\t\t\t\twhile (n--) {\n\t\t\t\t\tif (!comments.cm.hasOwnProperty(time + n))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tcms = cms.concat(comments.cm[time + n]);\n\t\t\t\t}\n\n\t\t\t\tsambaPlayerApiMessage.doAction(\"showComment\", cms, self.frame);\n\t\t\t}\n\t\t}\n\t};\n\n\tsambaPlayerApiMessage.players[this.MEDIA_ID][\"onPause\"] =\n\tsambaPlayerApiMessage.players[this.MEDIA_ID][\"onSeek\"] =\n\tsambaPlayerApiMessage.players[this.MEDIA_ID][\"onFinish\"] = function(e) {\n\t\tlastTime = -1;\n\t};\n};\n\n/**\n * Adds comments to be shown at specific media times.\n *\n * @param comments : Array - Comments config data\n *\t time : int - Time for showing the comment (in seconds)\n * text : String - Comment text\n *\t author : String - Comment author name\n */\nSambaPlayer.prototype.addComments = function(comments) {\n\tif (comments.points == null)\n\t\tcomments = this.treatCommentData(comments);\n\n\tsambaPlayerApiMessage.doAction(\"addComments\", comments.points, this.frame);\n};\n\nSambaPlayer.prototype.treatCommentData = function(comments) {\n\tvar cuepoints = [];\n\tvar commentsParsed = {};\n\n\tfor(var key in comments) {\n\t\tif(comments.hasOwnProperty(key)) {\n\t\t\tvar time = comments[key].time;\n\t\t\tcuepoints.push(time);\n\t\t\tif(commentsParsed.hasOwnProperty(time)) {\n\t\t\t\tcommentsParsed[time].push(comments[key]);\n\t\t\t}else {\n\t\t\t\tcommentsParsed[time] = [comments[key]];\n\t\t\t}\n\n\t\t}\n\t}\n\n\treturn {points: cuepoints, cm: commentsParsed};\n};\n"]}