1var Froogaloop=(function(){function Froogaloop(iframe){return new Froogaloop.fn.init(iframe)} 2var eventCallbacks={},hasWindowEvent=!1,isReady=!1,slice=Array.prototype.slice,playerDomain='';Froogaloop.fn=Froogaloop.prototype={element:null,init:function(iframe){if(typeof iframe==="string"){iframe=document.getElementById(iframe)} 3this.element=iframe;playerDomain=getDomainFromUrl(this.element.getAttribute('src'));return this},api:function(method,valueOrCallback){if(!this.element||!method){return!1} 4var self=this,element=self.element,target_id=element.id!==''?element.id:null,params=!isFunction(valueOrCallback)?valueOrCallback:null,callback=isFunction(valueOrCallback)?valueOrCallback:null;if(callback){storeCallback(method,callback,target_id)} 5postMessage(method,params,element);return self},addEvent:function(eventName,callback){if(!this.element){return!1} 6var self=this,element=self.element,target_id=element.id!==''?element.id:null;storeCallback(eventName,callback,target_id);if(eventName!='ready'){postMessage('addEventListener',eventName,element)}else if(eventName=='ready'&&isReady){callback.call(null,target_id)} 7return self},removeEvent:function(eventName){if(!this.element){return!1} 8var self=this,element=self.element,target_id=element.id!==''?element.id:null,removed=removeCallback(eventName,target_id);if(eventName!='ready'&&removed){postMessage('removeEventListener',eventName,element)}}};function postMessage(method,params,target){if(!target.contentWindow.postMessage){return!1} 9var url=target.getAttribute('src').split('?')[0],data=JSON.stringify({method:method,value:params});if(url.substr(0,2)==='//'){url=window.location.protocol+url} 10target.contentWindow.postMessage(data,url)} 11function onMessageReceived(event){var data,method;try{data=JSON.parse(event.data);method=data.event||data.method}catch(e){} 12if(method=='ready'&&!isReady){isReady=!0} 13if(event.origin!=playerDomain){return!1} 14var value=data.value,eventData=data.data,target_id=target_id===''?null:data.player_id,callback=getCallback(method,target_id),params=[];if(!callback){return!1} 15if(value!==undefined){params.push(value)} 16if(eventData){params.push(eventData)} 17if(target_id){params.push(target_id)} 18return params.length>0?callback.apply(null,params):callback.call()} 19function storeCallback(eventName,callback,target_id){if(target_id){if(!eventCallbacks[target_id]){eventCallbacks[target_id]={}} 20eventCallbacks[target_id][eventName]=callback}else{eventCallbacks[eventName]=callback}} 21function getCallback(eventName,target_id){if(target_id){return eventCallbacks[target_id][eventName]}else{return eventCallbacks[eventName]}} 22function removeCallback(eventName,target_id){if(target_id&&eventCallbacks[target_id]){if(!eventCallbacks[target_id][eventName]){return!1} 23eventCallbacks[target_id][eventName]=null}else{if(!eventCallbacks[eventName]){return!1} 24eventCallbacks[eventName]=null} 25return!0} 26function getDomainFromUrl(url){if(url.substr(0,2)==='//'){url=window.location.protocol+url} 27var url_pieces=url.split('/'),domain_str='';for(var i=0,length=url_pieces.length;i<length;i++){if(i<3){domain_str+=url_pieces[i]}else{break} 28if(i<2){domain_str+='/'}} 29return domain_str} 30function isFunction(obj){return!!(obj&&obj.constructor&&obj.call&&obj.apply)} 31function isArray(obj){return toString.call(obj)==='[object Array]'} 32Froogaloop.fn.init.prototype=Froogaloop.fn;if(window.addEventListener){window.addEventListener('message',onMessageReceived,!1)}else{window.attachEvent('onmessage',onMessageReceived)} 33return(window.Froogaloop=window.$f=Froogaloop)})()
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.