var pagePlayer=null;
function PagePlayer(){var b=this,d=this,f=soundManager,i,m=null,j=null,q=document.getElementsByTagName("head")[0],k=null,o=navigator.userAgent,r=o.match(/(opera|firefox)/i),l=o.match(/ipad|ipod|iphone/i),p;this.config={usePeakData:false,useWaveformData:false,useEQData:false,fillGraph:false,useMovieStar:true,allowRightClick:true,useThrottling:false,autoStart:false,playNext:true,updatePageTitle:false,emptyTime:"-:--",useFavIcon:false};this.css={sDefault:"sm2_link",sLoading:"sm2_loading",sPlaying:"sm2_playing",
sPaused:"sm2_paused"};this.sounds=[];this.soundsByObject=[];this.lastSound=null;this.soundCount=0;this.strings=[];this.dragActive=false;this.dragExec=new Date;this.dragTimer=null;this.pageTitle=document.title;this.lastWPExec=new Date;this.lastWLExec=new Date;this.vuMeterData=[];this.oControls=null;this._mergeObjects=function(a,b){var g={},e,h;for(e in a)a.hasOwnProperty(e)&&(g[e]=a[e]);e=typeof b==="undefined"?{}:b;for(h in e)typeof g[h]==="undefined"&&(g[h]=e[h]);return g};i=function(){function a(a){var a=
e.call(a),b=a.length;g?(a[1]="on"+a[1],b>3&&a.pop()):b===3&&a.push(false);return a}function b(a,c){var e=a.shift(),d=[h[c]];if(g)e[d](a[0],a[1]);else e[d].apply(e,a)}var g=window.attachEvent&&!window.addEventListener,e=Array.prototype.slice,h={add:g?"attachEvent":"addEventListener",remove:g?"detachEvent":"removeEventListener"};return{add:function(){b(a(arguments),"add")},remove:function(){b(a(arguments),"remove")}}}();this.hasClass=function(a,b){return typeof a.className!=="undefined"?RegExp("(^|\\s)"+
b+"(\\s|$)").test(a.className):false};this.addClass=function(a,c){if(!a||!c||b.hasClass(a,c))return false;a.className=(a.className?a.className+" ":"")+c};this.removeClass=function(a,c){if(!a||!c||!b.hasClass(a,c))return false;a.className=a.className.replace(RegExp("( "+c+")|("+c+")","g"),"")};this.select=function(a,c){var g=b.getByClassName(a,"div",c||null);return g?g[0]:null};this.getByClassName=document.querySelectorAll?function(a,b,g){a="."+a;b&&(b=b.split(" "));b=b.length>1?b.join(a+", "):b[0]+
a;return(g?g:document).querySelectorAll(b)}:function(a,c,g){var e=g?g:document,g=[],d,f=[];c&&(c=c.split(" "));if(c instanceof Array){for(d=c.length;d--;)if(!f||!f[c[d]])f[c[d]]=e.getElementsByTagName(c[d]);for(d=c.length;d--;)for(e=f[c[d]].length;e--;)b.hasClass(f[c[d]][e],a)&&g.push(f[c[d]][e])}else{f=e.all||e.getElementsByTagName("*");for(d=0,e=f.length;d<e;d++)b.hasClass(f[d],a)&&g.push(f[d])}return g};this.isChildOfClass=function(a,c){if(!a||!c)return false;for(;a.parentNode&&!b.hasClass(a,c);)a=
a.parentNode;return b.hasClass(a,c)};this.getParentByNodeName=function(a,b){if(!a||!b)return false;for(b=b.toLowerCase();a.parentNode&&b!==a.parentNode.nodeName.toLowerCase();)a=a.parentNode;return a.parentNode&&b===a.parentNode.nodeName.toLowerCase()?a.parentNode:null};this.getOffX=function(a){var b=0;if(a.offsetParent)for(;a.offsetParent;)b+=a.offsetLeft,a=a.offsetParent;else a.x&&(b+=a.x);return b};this.getTime=function(a,b){var d=Math.floor(a/1E3),e=Math.floor(d/60);d-=e*60;return b?e+":"+(d<
10?"0"+d:d):{min:e,sec:d}};this.getSoundByObject=function(a){return typeof b.soundsByObject[a.id]!=="undefined"?b.soundsByObject[a.id]:null};this.getPreviousItem=function(a){if(a.previousElementSibling)a=a.previousElementSibling;else for(a=a.previousSibling;a&&a.previousSibling&&a.previousSibling.nodeType!==1;)a=a.previousSibling;return a.nodeName.toLowerCase()!=="li"?null:a.getElementsByTagName("a")[0]};this.playPrevious=function(a){if(!a)a=b.lastSound;if(!a)return false;(a=b.getPreviousItem(a._data.oLI))&&
d.handleClick({target:a});return a};this.getNextItem=function(a){if(a.nextElementSibling)a=a.nextElementSibling;else for(a=a.nextSibling;a&&a.nextSibling&&a.nextSibling.nodeType!==1;)a=a.nextSibling;return a.nodeName.toLowerCase()!=="li"?null:a.getElementsByTagName("a")[0]};this.playNext=function(a){if(!a)a=b.lastSound;if(!a)return false;(a=b.getNextItem(a._data.oLI))&&d.handleClick({target:a});return a};this.setPageTitle=function(a){if(!b.config.updatePageTitle)return false;try{document.title=(a?
a+" - ":"")+b.pageTitle}catch(c){b.setPageTitle=function(){return false}}};this.events={play:function(){d.removeClass(this._data.oLI,this._data.className);this._data.className=d.css.sPlaying;d.addClass(this._data.oLI,this._data.className);b.setPageTitle(this._data.originalTitle)},stop:function(){d.removeClass(this._data.oLI,this._data.className);this._data.className="";this._data.oPosition.style.width="0px";b.setPageTitle();b.resetPageIcon()},pause:function(){if(d.dragActive)return false;d.removeClass(this._data.oLI,
this._data.className);this._data.className=d.css.sPaused;d.addClass(this._data.oLI,this._data.className);b.setPageTitle();b.resetPageIcon()},resume:function(){if(d.dragActive)return false;d.removeClass(this._data.oLI,this._data.className);this._data.className=d.css.sPlaying;d.addClass(this._data.oLI,this._data.className)},finish:function(){d.removeClass(this._data.oLI,this._data.className);this._data.className="";this._data.oPosition.style.width="0px";b.config.playNext?d.playNext(this):(b.setPageTitle(),
b.resetPageIcon())},whileloading:function(){function a(){this._data.oLoading.style.width=this.bytesLoaded/this.bytesTotal*100+"%";if(!this._data.didRefresh&&this._data.metadata)this._data.didRefresh=true,this._data.metadata.refresh()}if(d.config.useThrottling){var c=new Date;if(c&&c-b.lastWLExec>30||this.bytesLoaded===this.bytesTotal)a.apply(this),b.lastWLExec=c}else a.apply(this)},onload:function(){if(this.loaded)this._data.metadata&&this._data.metadata.refresh();else{var a=this._data.oLI.getElementsByTagName("a")[0],
b=a.innerHTML;a.innerHTML=b+' <span style="font-size:0.75em"> | Load failed. '+(f.sandbox.noRemote?" Possible cause: Flash sandbox is denying remote URL access.":f.sandbox.noLocal?"Flash denying local filesystem access":"404?")+"</span>";setTimeout(function(){a.innerHTML=b},5E3)}},whileplaying:function(){var a=null;if(d.dragActive||!d.config.useThrottling){b.updateTime.apply(this);f.flashVersion>=9&&(d.config.usePeakData&&this.instanceOptions.usePeakData&&b.updatePeaks.apply(this),(d.config.useWaveformData&&
this.instanceOptions.useWaveformData||d.config.useEQData&&this.instanceOptions.useEQData)&&b.updateGraph.apply(this));if(this._data.metadata&&(a=new Date)&&a-b.lastWPExec>500)this._data.metadata.refreshMetadata(this),b.lastWPExec=a;this._data.oPosition.style.width=this.position/b.getDurationEstimate(this)*100+"%"}else if(a=new Date,a-b.lastWPExec>30)b.updateTime.apply(this),f.flashVersion>=9&&(d.config.usePeakData&&this.instanceOptions.usePeakData&&b.updatePeaks.apply(this),(d.config.useWaveformData&&
this.instanceOptions.useWaveformData||d.config.useEQData&&this.instanceOptions.useEQData)&&b.updateGraph.apply(this)),this._data.metadata&&this._data.metadata.refreshMetadata(this),this._data.oPosition.style.width=this.position/b.getDurationEstimate(this)*100+"%",b.lastWPExec=a}};this.setPageIcon=function(a){if(!b.config.useFavIcon||!b.config.usePeakData||!a)return false;var c=document.getElementById("sm2-favicon");c&&(q.removeChild(c),c=null);if(!c)c=document.createElement("link"),c.id="sm2-favicon",
c.rel="shortcut icon",c.type="image/png",c.href=a,document.getElementsByTagName("head")[0].appendChild(c)};this.resetPageIcon=function(){if(!b.config.useFavIcon)return false;var a=document.getElementById("favicon");if(a)a.href="/favicon.ico"};this.updatePeaks=function(){var a=this._data.oPeak.getElementsByTagName("span");a[0].style.marginTop=13-Math.floor(15*this.peakData.left)+"px";a[1].style.marginTop=13-Math.floor(15*this.peakData.right)+"px";f.flashVersion>8&&b.config.useFavIcon&&b.config.usePeakData&&
b.setPageIcon(b.vuMeterData[parseInt(16*this.peakData.left,10)][parseInt(16*this.peakData.right,10)])};this.updateGraph=function(){if(d.config.flashVersion<9||!d.config.useWaveformData&&!d.config.useEQData)return false;var a=this._data.oGraph.getElementsByTagName("div"),b;if(d.config.useWaveformData)for(b=255;b--;)a[255-b].style.marginTop=9+Math.ceil(this.waveformData.left[b]*-8)+"px";else for(b=255;b--;)a[255-b].style.marginTop=17+Math.ceil(this.eqData[b]*-9)+"px"};this.resetGraph=function(){if(!d.config.useEQData||
d.config.flashVersion<9)return false;var a=this._data.oGraph.getElementsByTagName("div"),b=!d.config.useEQData?"9px":"17px",g=!d.config.fillGraph?"1px":"32px",e;for(e=255;e--;)a[255-e].style.marginTop=b,a[255-e].style.height=g};this.updateTime=function(){var a=b.strings.timing.replace("%s1",b.getTime(this.position,true)),a=a.replace("%s2",b.getTime(b.getDurationEstimate(this),true));this._data.oTiming.innerHTML=a};this.getTheDamnTarget=function(a){return a.target||(window.event?window.event.srcElement:
null)};this.withinStatusBar=function(a){return b.isChildOfClass(a,"controls")};this.handleClick=function(a){if(a.button===2)return d.config.allowRightClick||d.stopEvent(a),d.config.allowRightClick;var c=b.getTheDamnTarget(a),g,e,h;if(!c)return true;b.dragActive&&b.stopDrag();if(b.withinStatusBar(c))return false;c.nodeName.toLowerCase()!=="a"&&(c=b.getParentByNodeName(c,"a"));if(!c)return true;c.getAttribute("href");if(!c.href||!f.canPlayLink(c)&&!b.hasClass(c,"playable")||b.hasClass(c,"exclude"))return true;
else{b.initUL(b.getParentByNodeName(c,"ul"));b.initItem(c);g=c.href;if(e=b.getSoundByObject(c))b.setPageTitle(e._data.originalTitle),e===b.lastSound?e.readyState!==2?e.playState!==1?e.play():e.togglePause():f._writeDebug("Warning: sound failed to load (security restrictions, 404 or bad format)",2):(b.lastSound&&b.stopSound(b.lastSound),k&&e._data.oTimingBox.appendChild(k),e.togglePause());else{e=f.createSound({id:c.id,url:decodeURI(g),onplay:b.events.play,onstop:b.events.stop,onpause:b.events.pause,
onresume:b.events.resume,onfinish:b.events.finish,whileloading:b.events.whileloading,whileplaying:b.events.whileplaying,onmetadata:b.events.metadata,onload:b.events.onload});g=b.oControls.cloneNode(true);h=c.parentNode;h.appendChild(g);k&&h.appendChild(k);b.soundsByObject[c.id]=e;e._data={oLink:c,oLI:h,oControls:b.select("controls",h),oStatus:b.select("statusbar",h),oLoading:b.select("loading",h),oPosition:b.select("position",h),oTimingBox:b.select("timing",h),oTiming:b.select("timing",h).getElementsByTagName("div")[0],
oPeak:b.select("peak",h),oGraph:b.select("spectrum-box",h),className:b.css.sPlaying,originalTitle:c.innerHTML,metadata:null};k&&e._data.oTimingBox.appendChild(k);if(e._data.oLI.getElementsByTagName("ul").length)e._data.metadata=new Metadata(e);c=b.strings.timing.replace("%s1",b.config.emptyTime);c=c.replace("%s2",b.config.emptyTime);e._data.oTiming.innerHTML=c;b.sounds.push(e);b.lastSound&&b.stopSound(b.lastSound);b.resetGraph.apply(e);e.play()}b.lastSound=e;return b.stopEvent(a)}};this.handleMouseDown=
function(a){l&&a.touches&&(a=a.touches[0]);if(a.button===2)return d.config.allowRightClick||d.stopEvent(a),d.config.allowRightClick;var c=b.getTheDamnTarget(a);if(!c)return true;if(!b.withinStatusBar(c))return true;b.dragActive=true;b.lastSound.pause();b.setPosition(a);l?i.add(document,"touchmove",b.handleMouseMove):i.add(document,"mousemove",b.handleMouseMove);b.addClass(b.lastSound._data.oControls,"dragging");return b.stopEvent(a)};this.handleMouseMove=function(a){l&&a.touches&&(a=a.touches[0]);
if(b.dragActive)if(b.config.useThrottling){var c=new Date;c-b.dragExec>20?b.setPosition(a):(window.clearTimeout(b.dragTimer),b.dragTimer=window.setTimeout(function(){b.setPosition(a)},20));b.dragExec=c}else b.setPosition(a);else b.stopDrag();a.stopPropagation=true;return false};this.stopDrag=function(a){if(b.dragActive)return b.removeClass(b.lastSound._data.oControls,"dragging"),l?i.remove(document,"touchmove",b.handleMouseMove):i.remove(document,"mousemove",b.handleMouseMove),d.hasClass(b.lastSound._data.oLI,
b.css.sPaused)||b.lastSound.resume(),b.dragActive=false,b.stopEvent(a)};this.handleStatusClick=function(a){b.setPosition(a);d.hasClass(b.lastSound._data.oLI,b.css.sPaused)||b.resume();return b.stopEvent(a)};this.stopEvent=function(a){if(typeof a!=="undefined")typeof a.preventDefault!=="undefined"?a.preventDefault():(a.stopPropagation=true,a.returnValue=false);return false};this.setPosition=function(a){var c=b.getTheDamnTarget(a),d;if(!c)return true;for(d=c;!b.hasClass(d,"controls")&&d.parentNode;)d=
d.parentNode;c=b.lastSound;a=parseInt(a.clientX,10);a=Math.floor((a-b.getOffX(d)-4)/d.offsetWidth*b.getDurationEstimate(c));isNaN(a)||(a=Math.min(a,c.duration));isNaN(a)||c.setPosition(a)};this.stopSound=function(a){f._writeDebug("stopping sound: "+a.sID);f.stop(a.sID);l||f.unload(a.sID)};this.getDurationEstimate=function(a){return a.instanceOptions.isMovieStar?a.duration:!a._data.metadata||!a._data.metadata.data.givenDuration?a.durationEstimate||0:a._data.metadata.data.givenDuration};this.createVUData=
function(){var a=0,c=0,d=m.getContext("2d"),e=d.createLinearGradient(0,16,0,0),f;e.addColorStop(0,"rgb(0,192,0)");e.addColorStop(0.3,"rgb(0,255,0)");e.addColorStop(0.625,"rgb(255,255,0)");e.addColorStop(0.85,"rgb(255,0,0)");f=d.createLinearGradient(0,16,0,0);f.addColorStop(0,"rgba(0,0,0,0.2)");f.addColorStop(1,"rgba(0,0,0,0.5)");for(a=0;a<16;a++)b.vuMeterData[a]=[];for(a=0;a<16;a++)for(c=0;c<16;c++)m.setAttribute("width",16),m.setAttribute("height",16),d.fillStyle=f,d.fillRect(0,0,7,15),d.fillRect(8,
0,7,15),d.fillStyle=e,d.fillRect(0,15-a,7,16-(16-a)),d.fillRect(8,15-c,7,16-(16-c)),d.clearRect(0,3,16,1),d.clearRect(0,7,16,1),d.clearRect(0,11,16,1),b.vuMeterData[a][c]=m.toDataURL("image/png")};this.testCanvas=function(){var a=document.createElement("canvas"),b=null;if(!a||typeof a.getContext==="undefined")return null;b=a.getContext("2d");if(!b||typeof a.toDataURL!=="function")return null;try{a.toDataURL("image/png")}catch(d){return null}return a};this.initItem=function(a){if(!a.id)a.id="pagePlayerMP3Sound"+
b.soundCount++;b.addClass(a,b.css.sDefault)};this.initUL=function(a){f.flashVersion>=9&&b.addClass(a,b.cssBase)};this.init=function(a){function c(a){i[a](document,"click",b.handleClick);l?(i[a](document,"touchstart",b.handleMouseDown),i[a](document,"touchend",b.stopDrag)):(i[a](document,"mousedown",b.handleMouseDown),i[a](document,"mouseup",b.stopDrag));i[a](window,"unload",p)}a?(f._writeDebug("pagePlayer.init(): Using custom configuration"),this.config=this._mergeObjects(a,this.config)):f._writeDebug("pagePlayer.init(): Using default configuration");
var g,e,h,n;this.cssBase=[];f.useFlashBlock=true;if(f.flashVersion>=9){if(f.useMovieStar=this.config.useMovieStar,f.defaultOptions.usePeakData=this.config.usePeakData,f.defaultOptions.useWaveformData=this.config.useWaveformData,f.defaultOptions.useEQData=this.config.useEQData,this.config.usePeakData&&this.cssBase.push("use-peak"),(this.config.useWaveformData||this.config.useEQData)&&this.cssBase.push("use-spectrum"),this.cssBase=this.cssBase.join(" "),this.config.useFavIcon)(m=b.testCanvas())&&r?
b.createVUData():this.config.useFavIcon=false}else(this.config.usePeakData||this.config.useWaveformData||this.config.useEQData)&&f._writeDebug("Page player: Note: soundManager.flashVersion = 9 is required for peak/waveform/EQ features.");j=document.createElement("div");j.innerHTML='  <div class="controls">\n   <div class="statusbar">\n    <div class="loading"></div>\n    <div class="position"></div>\n   </div>\n  </div>\n  <div class="timing">\n   <div id="sm2_timing" class="timing-data">\n    <span class="sm2_position">%s1</span> / <span class="sm2_total">%s2</span>\n   </div>\n  </div>\n  <div class="peak">\n   <div class="peak-box"><span class="l"></span><span class="r"></span></div>\n  </div>\n <div class="spectrum-container">\n  <div class="spectrum-box">\n   <div class="spectrum"></div>\n  </div>\n </div>';
if(f.flashVersion>=9){k=b.select("spectrum-container",j);k=j.removeChild(k);g=b.select("spectrum-box",k);e=g.getElementsByTagName("div")[0];h=document.createDocumentFragment();n=null;for(a=256;a--;)n=e.cloneNode(false),n.style.left=a+"px",h.appendChild(n);g.removeChild(e);g.appendChild(h)}else j.removeChild(b.select("spectrum-container",j)),j.removeChild(b.select("peak",j));b.oControls=j.cloneNode(true);a=b.select("timing-data",j);b.strings.timing=a.innerHTML;a.innerHTML="";a.id="";p=function(){c("remove")};
c("add");f._writeDebug("pagePlayer.init(): Ready",1);b.config.autoStart&&d.handleClick({target:d.getByClassName("playlist","ul")[0].getElementsByTagName("a")[0]})}}soundManager.onready(function(){pagePlayer=new PagePlayer;pagePlayer.init(typeof PP_CONFIG!=="undefined"?PP_CONFIG:null)});
