(function($,undefined){$.jPlayerInspector={};$.jPlayerInspector.i=0;$.jPlayerInspector.defaults={jPlayer:undefined,idPrefix:"jplayer_inspector_",visible:false};var methods={init:function(options){var self=this;var $this=$(this);var config=$.extend({},$.jPlayerInspector.defaults,options);$(this).data("jPlayerInspector",config);config.id=$(this).attr("id");config.jPlayerId=config.jPlayer.attr("id");config.windowId=config.idPrefix+"window_"+$.jPlayerInspector.i;config.statusId=config.idPrefix+"status_"+$.jPlayerInspector.i;config.configId=config.idPrefix+"config_"+$.jPlayerInspector.i;config.toggleId=config.idPrefix+"toggle_"+$.jPlayerInspector.i;config.eventResetId=config.idPrefix+"event_reset_"+$.jPlayerInspector.i;config.updateId=config.idPrefix+"update_"+$.jPlayerInspector.i;config.eventWindowId=config.idPrefix+"event_window_"+$.jPlayerInspector.i;config.eventId={};config.eventJq={};config.eventTimeout={};config.eventOccurrence={};$.each($.jPlayer.event,function(eventName,eventType){config.eventId[eventType]=config.idPrefix+"event_"+eventName+"_"+$.jPlayerInspector.i;config.eventOccurrence[eventType]=0});var structure='<p><a href="#" id="'+config.toggleId+'">'+(config.visible?"Hide":"Show")+'</a> jPlayer Inspector</p>'+'<div id="'+config.windowId+'">'+'<div id="'+config.statusId+'"></div>'+'<div id="'+config.eventWindowId+'" style="padding:5px 5px 0 5px;background-color:#eee;border:1px dotted #000;">'+'<p style="margin:0 0 10px 0;"><strong>jPlayer events that have occurred over the past 1 second:</strong>'+'<br />(Backgrounds: <span style="padding:0 5px;background-color:#eee;border:1px dotted #000;">Never occurred</span> <span style="padding:0 5px;background-color:#fff;border:1px dotted #000;">Occurred before</span> <span style="padding:0 5px;background-color:#9f9;border:1px dotted #000;">Occurred</span> <span style="padding:0 5px;background-color:#ff9;border:1px dotted #000;">Multiple occurrences</span> <a href="#" id="'+config.eventResetId+'">reset</a>)</p>';var eventStyle="float:left;margin:0 5px 5px 0;padding:0 5px;border:1px dotted #000;";structure+='<div id="'+config.eventId[$.jPlayer.event.ready]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.resize]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.volumechange]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.error]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.warning]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.loadstart]+'" style="clear:left;'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.progress]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.timeupdate]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.play]+'" style="clear:left;'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.pause]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.waiting]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.playing]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.seeking]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.seeked]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.ended]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.loadeddata]+'" style="clear:left;'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.loadedmetadata]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.canplay]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.canplaythrough]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.suspend]+'" style="clear:left;'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.abort]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.emptied]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.stalled]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.ratechange]+'" style="'+eventStyle+'"></div>'+'<div id="'+config.eventId[$.jPlayer.event.durationchange]+'" style="'+eventStyle+'"></div>'+'<div style="clear:both"></div>';structure+='</div>'+'<p><a href="#" id="'+config.updateId+'">Update</a> jPlayer Inspector</p>'+'<div id="'+config.configId+'"></div>'+'</div>';$(this).html(structure);config.windowJq=$("#"+config.windowId);config.statusJq=$("#"+config.statusId);config.configJq=$("#"+config.configId);config.toggleJq=$("#"+config.toggleId);config.eventResetJq=$("#"+config.eventResetId);config.updateJq=$("#"+config.updateId);$.each($.jPlayer.event,function(eventName,eventType){config.eventJq[eventType]=$("#"+config.eventId[eventType]);config.eventJq[eventType].text(eventName+" ("+config.eventOccurrence[eventType]+")");config.jPlayer.bind(eventType+".jPlayerInspector",function(e){config.eventOccurrence[e.type]++;if(config.eventOccurrence[e.type]>1){config.eventJq[e.type].css("background-color","#ff9")}else{config.eventJq[e.type].css("background-color","#9f9")}config.eventJq[e.type].text(eventName+" ("+config.eventOccurrence[e.type]+")");clearTimeout(config.eventTimeout[e.type]);config.eventTimeout[e.type]=setTimeout(function(){config.eventJq[e.type].css("background-color","#fff")},1000);setTimeout(function(){config.eventOccurrence[e.type]--;config.eventJq[e.type].text(eventName+" ("+config.eventOccurrence[e.type]+")")},1000);if(config.visible){$this.jPlayerInspector("updateStatus")}})});config.jPlayer.bind($.jPlayer.event.ready+".jPlayerInspector",function(e){$this.jPlayerInspector("updateConfig")});config.toggleJq.click(function(){if(config.visible){$(this).text("Show");config.windowJq.hide();config.statusJq.empty();config.configJq.empty()}else{$(this).text("Hide");config.windowJq.show();config.updateJq.click()}config.visible=!config.visible;$(this).blur();return false});config.eventResetJq.click(function(){$.each($.jPlayer.event,function(eventName,eventType){config.eventJq[eventType].css("background-color","#eee")});$(this).blur();return false});config.updateJq.click(function(){$this.jPlayerInspector("updateStatus");$this.jPlayerInspector("updateConfig");return false});if(!config.visible){config.windowJq.hide()}else{}$.jPlayerInspector.i++;return this},destroy:function(){$(this).data("jPlayerInspector")&&$(this).data("jPlayerInspector").jPlayer.jPlayer("removeEventListener",".jPlayerInspector");$(this).empty()},updateConfig:function(){var jPlayerInfo="<p>This jPlayer instance is running in your browser where:<br />";for(i=0;i<$(this).data("jPlayerInspector").jPlayer.data("jPlayer").solutions.length;i++){var solution=$(this).data("jPlayerInspector").jPlayer.data("jPlayer").solutions[i];jPlayerInfo+=" jPlayer's <strong>"+solution+"</strong> solution is";if($(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].used){jPlayerInfo+=" being <strong>used</strong> and will support:<strong>";for(format in $(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].support){if($(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].support[format]){jPlayerInfo+=" "+format}}jPlayerInfo+="</strong><br />"}else{jPlayerInfo+=" <strong>not required</strong><br />"}}jPlayerInfo+="</p>";if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.active){if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").flash.active){jPlayerInfo+="<strong>Problem with jPlayer since both HTML5 and Flash are active.</strong>"}else{jPlayerInfo+="The <strong>HTML5 is active</strong>."}}else{if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").flash.active){jPlayerInfo+="The <strong>Flash is active</strong>."}else{jPlayerInfo+="No solution is currently active. jPlayer needs a setMedia()."}}jPlayerInfo+="</p>";var formatType=$(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.formatType;jPlayerInfo+="<p><code>status.formatType = '"+formatType+"'</code><br />";if(formatType){jPlayerInfo+="<code>Browser canPlay('"+$.jPlayer.prototype.format[formatType].codec+"')</code>"}else{jPlayerInfo+="</p>"}jPlayerInfo+="<p><code>status.src = '"+$(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.src+"'</code></p>";jPlayerInfo+="<p><code>status.media = {<br />";for(prop in $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.media){jPlayerInfo+=" "+prop+": "+$(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.media[prop]+"<br />"}jPlayerInfo+="};</code></p>"+"<p>Raw browser test for HTML5 support. Should equal a function if HTML5 is available.<br />";if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.audio.available){jPlayerInfo+="<code>htmlElement.audio.canPlayType = "+(typeof $(this).data("jPlayerInspector").jPlayer.data("jPlayer").htmlElement.audio.canPlayType)+"</code><br />"}if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.video.available){jPlayerInfo+="<code>htmlElement.video.canPlayType = "+(typeof $(this).data("jPlayerInspector").jPlayer.data("jPlayer").htmlElement.video.canPlayType)+"</code>"}jPlayerInfo+="</p>";jPlayerInfo+="<p>This instance is using the constructor options:<br />"+"<code>$('#"+$(this).data("jPlayerInspector").jPlayer.data("jPlayer").internal.self.id+"').jPlayer({<br />"+" swfPath: '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","swfPath")+"',<br />"+" solution: '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","solution")+"',<br />"+" supplied: '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","supplied")+"',<br />"+" preload: '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","preload")+"',<br />"+" volume: "+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","volume")+",<br />"+" muted: "+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","muted")+",<br />"+" backgroundColor: '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","backgroundColor")+"',<br />"+" cssSelectorAncestor: '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","cssSelectorAncestor")+"',<br />"+" cssSelector: {";var cssSelector=$(this).data("jPlayerInspector").jPlayer.jPlayer("option","cssSelector");for(prop in cssSelector){jPlayerInfo+="<br />  "+prop+": '"+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","cssSelector."+prop)+"',"}jPlayerInfo=jPlayerInfo.slice(0,-1);jPlayerInfo+="<br /> },<br />"+" errorAlerts: "+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","errorAlerts")+",<br />"+" warningAlerts: "+$(this).data("jPlayerInspector").jPlayer.jPlayer("option","warningAlerts")+"<br />"+"});</code></p>";$(this).data("jPlayerInspector").configJq.html(jPlayerInfo);return this},updateStatus:function(){$(this).data("jPlayerInspector").statusJq.html("<p>jPlayer is "+($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.paused?"paused":"playing")+" at time: "+Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentTime*10)/10+"s."+" (d: "+Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.duration*10)/10+"s"+", sp: "+Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.seekPercent)+"%"+", cpr: "+Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentPercentRelative)+"%"+", cpa: "+Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentPercentAbsolute)+"%)</p>");return this}};$.fn.jPlayerInspector=function(method){if(methods[method]){return methods[method].apply(this,Array.prototype.slice.call(arguments,1))}else if(typeof method==='object'||!method){return methods.init.apply(this,arguments)}else{$.error('Method '+method+' does not exist on jQuery.jPlayerInspector')}}})(jQuery);
