/*
SymfoniP.com 2009-2010 -  Enhanced MP3 Audio Stack javascript RapidWeaver Stacks - FatDeck
 Version 2 14-Dec-2010
 
  ----------------------------------------------
  http://schillmania.com/projects/soundmanager2/
  Requires SoundManager 2 Javascript API.

*/
function PagePlayer(s){var c=this,g=this,i=soundManager,r=navigator.userAgent;r.match(/msie/i);var v=r.match(/opera/i),w=r.match(/firefox/i),p=r.match(/ipad|iphone/i);this.config={flashVersion:8,usePeakData:false,useWaveformData:false,useEQData:false,fillGraph:false,allowRightClick:false,useThrottling:true,autoStart:false,playNext:false,updatePageTitle:true,emptyTime:"-:--",useFavIcon:false};if(typeof s=="object")for(var t in s)this.config[t]=s[t];i.debugMode=window.location.href.toString().match(/debug=1/i)?
true:false;this.css={sDefault:"sm2_link",sLoading:"sm2_loading",sPlaying:"sm2_playing",sPaused:"sm2_paused"};this.cssBase=[];this.config.usePeakData&&this.cssBase.push("use-peak");if(this.config.useWaveformData||this.config.useEQData)this.cssBase.push("use-spectrum");this.cssBase=this.cssBase.join(" ");i.useFlashBlock=true;i.flashVersion=this.config.flashVersion;if(i.flashVersion>=9){i.useMovieStar=this.config.useMovieStar;i.defaultOptions.usePeakData=this.config.usePeakData;i.defaultOptions.useWaveformData=
this.config.useWaveformData;i.defaultOptions.useEQData=this.config.useEQData}this.links=[];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.addEventHandler=function(a,b,f){typeof attachEvent=="undefined"?a.addEventListener(b,f,false):a.attachEvent("on"+b,f)};this.removeEventHandler=
function(a,b,f){typeof attachEvent=="undefined"?a.removeEventListener(b,f,false):a.detachEvent("on"+b,f)};this.hasClass=function(a,b){return typeof a.className!="undefined"?RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className):false};this.addClass=function(a,b){if(!a||!b)return false;if(c.hasClass(a,b))return false;a.className=(a.className?a.className+" ":"")+b};this.removeClass=function(a,b){if(!a||!b)return false;if(!c.hasClass(a,b))return false;a.className=a.className.replace(RegExp("( "+b+")|("+b+")",
"g"),"")};this.getElementsByClassName=function(a,b,f){var e=f?f:document;f=[];var h,k=[];if(typeof b!="undefined"&&typeof b!="string")for(h=b.length;h--;){if(!k||!k[b[h]])k[b[h]]=e.getElementsByTagName(b[h])}else k=b?e.getElementsByTagName(b):e.all||e.getElementsByTagName("*");if(typeof b!="string")for(h=b.length;h--;)for(e=k[b[h]].length;e--;){if(c.hasClass(k[b[h]][e],a))f[f.length]=k[b[h]][e]}else for(h=0;h<k.length;h++)if(c.hasClass(k[h],a))f[f.length]=k[h];return f};this.getOffX=function(a){var b=
0;if(a.offsetParent)for(;a.offsetParent;){b+=a.offsetLeft;a=a.offsetParent}else if(a.x)b+=a.x;return b};this.isChildOfClass=function(a,b){if(!a||!b)return false;for(;a.parentNode&&!c.hasClass(a,b);)a=a.parentNode;return c.hasClass(a,b)};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.getTime=function(a,b){var f=
Math.floor(a/1E3),e=Math.floor(f/60);f=f-e*60;return b?e+":"+(f<10?"0"+f:f):{min:e,sec:f}};this.getSoundByObject=function(a){return typeof c.soundsByObject[a.rel]!="undefined"?c.soundsByObject[a.rel]:null};this.getSoundIndex=function(a){for(var b=c.links.length;b--;)if(c.links[b].rel==a.rel)return b;return-1};this.setPageTitle=function(a){if(!c.config.updatePageTitle)return false;try{document.title=(a?a+" - ":"")+c.pageTitle}catch(b){c.setPageTitle=function(){return false}}};this.events={play:function(){g.removeClass(this._data.oLI,
this._data.className);this._data.className=g.css.sPlaying;g.addClass(this._data.oLI,this._data.className);c.setPageTitle(this._data.originalTitle)},stop:function(){g.removeClass(this._data.oLI,this._data.className);this._data.className="";this._data.oPosition.style.width="0px";c.setPageTitle();c.resetPageIcon()},pause:function(){if(g.dragActive)return false;g.removeClass(this._data.oLI,this._data.className);this._data.className=g.css.sPaused;g.addClass(this._data.oLI,this._data.className);c.setPageTitle();
c.resetPageIcon()},resume:function(){if(g.dragActive)return false;g.removeClass(this._data.oLI,this._data.className);this._data.className=g.css.sPlaying;g.addClass(this._data.oLI,this._data.className)},finish:function(){g.removeClass(this._data.oLI,this._data.className);this._data.className="";this._data.oPosition.style.width="0px";if(c.config.playNext&&this._data.nIndex<g.links.length-1)g.handleClick({target:g.links[this._data.nIndex+1]});else{c.setPageTitle();c.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(g.config.useThrottling){if((d=new Date)&&d-c.lastWLExec>30||this.bytesLoaded===this.bytesTotal){a.apply(this);c.lastWLExec=d}}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.5em"> | Load failed, d\'oh! '+
(i.sandbox.noRemote?" Possible cause: Flash sandbox is denying remote URL access.":i.sandbox.noLocal?"Flash denying local filesystem access":"404?")+"</span>";setTimeout(function(){a.innerHTML=b},5E3)}},whileplaying:function(){var a=null;if(g.dragActive||!g.config.useThrottling){c.updateTime.apply(this);if(i.flashVersion>=9){g.config.usePeakData&&this.instanceOptions.usePeakData&&c.updatePeaks.apply(this);if(g.config.useWaveformData&&this.instanceOptions.useWaveformData||g.config.useEQData&&this.instanceOptions.useEQData)c.updateGraph.apply(this)}if(this._data.metadata)if((a=
new Date)&&a-c.lastWPExec>500){c.refreshMetadata(this);c.lastWPExec=a}this._data.oPosition.style.width=this.position/c.getDurationEstimate(this)*100+"%"}else{a=new Date;if(a-c.lastWPExec>30){c.updateTime.apply(this);if(i.flashVersion>=9){g.config.usePeakData&&this.instanceOptions.usePeakData&&c.updatePeaks.apply(this);if(g.config.useWaveformData&&this.instanceOptions.useWaveformData||g.config.useEQData&&this.instanceOptions.useEQData)c.updateGraph.apply(this)}this._data.metadata&&c.refreshMetadata(this);
this._data.oPosition.style.width=this.position/c.getDurationEstimate(this)*100+"%";c.lastWPExec=a}}}};var x=document.getElementsByTagName("head")[0];this.setPageIcon=function(a){if(!c.config.useFavIcon||!c.config.usePeakData||!a)return false;var b=document.getElementById("sm2-favicon");if(b){x.removeChild(b);b=null}if(!b){b=document.createElement("link");b.id="sm2-favicon";b.rel="shortcut icon";b.type="image/png";b.href=a;document.getElementsByTagName("head")[0].appendChild(b)}};this.resetPageIcon=
function(){if(!c.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";c.config.flashVersion>8&&c.config.useFavIcon&&c.config.usePeakData&&c.setPageIcon(c.vuMeterData[parseInt(16*this.peakData.left)][parseInt(16*this.peakData.right)])};this.updateGraph=
function(){if(!g.config.useWaveformData&&!g.config.useEQData||g.config.flashVersion<9)return false;var a=this._data.oGraph.getElementsByTagName("div");if(g.config.useWaveformData)for(var 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(!g.config.useEQData||g.config.flashVersion<9)return false;for(var a=this._data.oGraph.getElementsByTagName("div"),b=!g.config.useEQData?
"9px":"17px",f=!g.config.fillGraph?"1px":"32px",e=255;e--;){a[255-e].style.marginTop=b;a[255-e].style.height=f}};this.refreshMetadata=function(a){for(var b=null,f=a.position,e=a._data.metadata.data,h=0,k=e.length;h<k;h++)if(f>=e[h].startTimeMS&&f<=e[h].endTimeMS){b=h;break}if(b!=e.currentItem){a._data.oLink.innerHTML=e.mainTitle+' <span class="metadata"><span class="sm2_divider"> | </span><span class="sm2_metadata">'+e[b].title+"</span></span>";c.setPageTitle(e[b].title+" | "+e.mainTitle);e.currentItem=
b}};this.updateTime=function(){var a=c.strings.timing.replace("%s1",c.getTime(this.position,true));a=a.replace("%s2",c.getTime(c.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 c.isChildOfClass(a,"controls")};this.handleClick=function(a){if(a.button==2){g.config.allowRightClick||g.stopEvent(a);return g.config.allowRightClick}var b=c.getTheDamnTarget(a);
if(!b)return true;c.dragActive&&c.stopDrag();if(c.withinStatusBar(b))return false;if(b.nodeName.toLowerCase()!="a")b=c.getParentByNodeName(b,"a");if(!b)return true;b.getAttribute("href");if(!(!b.href||!i.canPlayLink(b)&&!c.hasClass(b,"playable")||c.hasClass(b,"exclude"))){var f=b.href,e=c.getSoundByObject(b);if(e){c.setPageTitle(e._data.originalTitle);if(e==c.lastSound)if(e.readyState!=2)e.playState!=1?e.play():e.togglePause();else i._writeDebug("Warning: sound failed to load (security restrictions, 404 or bad format)",
2);else{c.lastSound&&c.stopSound(c.lastSound);e._data.oTimingBox.appendChild(document.getElementById("spectrum-container"));e.togglePause()}}else{e=i.createSound({id:"pagePlayerMP3Sound"+c.soundCount++,url:decodeURI(f),onplay:c.events.play,onstop:c.events.stop,onpause:c.events.pause,onresume:c.events.resume,onfinish:c.events.finish,whileloading:c.events.whileloading,whileplaying:c.events.whileplaying,onmetadata:c.events.metadata,onload:c.events.onload});f=c.oControls.cloneNode(true);b.parentNode.appendChild(f);
b.parentNode.appendChild(document.getElementById("spectrum-container"));c.soundsByObject[b.rel]=e;e._data={oLink:b,oLI:b.parentNode,oControls:c.getElementsByClassName("controls","div",b.parentNode)[0],oStatus:c.getElementsByClassName("statusbar","div",b.parentNode)[0],oLoading:c.getElementsByClassName("loading","div",b.parentNode)[0],oPosition:c.getElementsByClassName("position","div",b.parentNode)[0],oTimingBox:c.getElementsByClassName("timing","div",b.parentNode)[0],oTiming:c.getElementsByClassName("timing",
"div",b.parentNode)[0].getElementsByTagName("div")[0],oPeak:c.getElementsByClassName("peak","div",b.parentNode)[0],oGraph:c.getElementsByClassName("spectrum-box","div",b.parentNode)[0],nIndex:c.getSoundIndex(b),className:c.css.sPlaying,originalTitle:b.innerHTML,metadata:null};e._data.oTimingBox.appendChild(document.getElementById("spectrum-container"));if(e._data.oLI.getElementsByTagName("ul").length)e._data.metadata=new y(e);b=c.strings.timing.replace("%s1",c.config.emptyTime);b=b.replace("%s2",
c.config.emptyTime);e._data.oTiming.innerHTML=b;c.sounds.push(e);c.lastSound&&c.stopSound(c.lastSound);c.resetGraph.apply(e);e.play()}c.lastSound=e;return c.stopEvent(a)}};this.handleMouseDown=function(a){if(p&&a.touches)a=a.touches[0];if(a.button==2){g.config.allowRightClick||g.stopEvent(a);return g.config.allowRightClick}var b=c.getTheDamnTarget(a);if(!b)return true;if(!c.withinStatusBar(b))return true;c.dragActive=true;c.lastSound.pause();c.setPosition(a);p?c.addEventHandler(document,"touchmove",
c.handleMouseMove):c.addEventHandler(document,"mousemove",c.handleMouseMove);c.addClass(c.lastSound._data.oControls,"dragging");c.stopEvent(a);return false};this.handleMouseMove=function(a){if(p&&a.touches)a=a.touches[0];if(c.dragActive)if(c.config.useThrottling){var b=new Date;if(b-c.dragExec>20)c.setPosition(a);else{window.clearTimeout(c.dragTimer);c.dragTimer=window.setTimeout(function(){c.setPosition(a)},20)}c.dragExec=b}else c.setPosition(a);else c.stopDrag();a.stopPropagation=true;return false};
this.stopDrag=function(a){if(c.dragActive){c.removeClass(c.lastSound._data.oControls,"dragging");p?c.removeEventHandler(document,"touchmove",c.handleMouseMove):c.removeEventHandler(document,"mousemove",c.handleMouseMove);g.hasClass(c.lastSound._data.oLI,c.css.sPaused)||c.lastSound.resume();c.dragActive=false;c.stopEvent(a);return false}};this.handleStatusClick=function(a){c.setPosition(a);g.hasClass(c.lastSound._data.oLI,c.css.sPaused)||c.resume();return c.stopEvent(a)};this.stopEvent=function(a){if(typeof a!=
"undefined")if(typeof a.preventDefault!="undefined")a.preventDefault();else if(typeof a.returnValue!="undefined"||typeof event!="undefined"){(a||event).cancelBubble=true;(a||event).returnValue=false}return false};this.setPosition=function(a){var b=c.getTheDamnTarget(a);if(!b)return true;for(var f=b;!c.hasClass(f,"controls")&&f.parentNode;)f=f.parentNode;b=c.lastSound;a=parseInt(a.clientX);a=Math.floor((a-c.getOffX(f)-4)/f.offsetWidth*c.getDurationEstimate(b));isNaN(a)||(a=Math.min(a,b.duration));
isNaN(a)||b.setPosition(a)};this.stopSound=function(a){i._writeDebug("stopping sound: "+a.sID);i.stop(a.sID);i.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,b=0,f=q.getContext("2d"),e=f.createLinearGradient(0,16,0,0);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)");var h=f.createLinearGradient(0,16,0,0);h.addColorStop(0,"rgba(0,0,0,0.2)");h.addColorStop(1,"rgba(0,0,0,0.5)");for(a=0;a<16;a++)c.vuMeterData[a]=[];for(a=0;a<16;a++)for(b=0;b<16;b++){q.setAttribute("width",16);q.setAttribute("height",16);f.fillStyle=h;f.fillRect(0,0,7,15);f.fillRect(8,0,7,15);f.fillStyle=e;f.fillRect(0,15-a,7,16-(16-a));f.fillRect(8,15-b,7,16-(16-b));f.clearRect(0,3,16,1);f.clearRect(0,7,16,1);f.clearRect(0,11,16,1);c.vuMeterData[a][b]=
q.toDataURL("image/png")}};var q=null;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(f){return null}return a};if(this.config.useFavIcon)if((q=c.testCanvas())&&(w||v))c.createVUData();else this.config.useFavIcon=false;this.init=function(){i._writeDebug("pagePlayer.init()");var a=document.getElementsByTagName("a");for(e=
0;e<a.length;e++){var b=a[e],f=b.getAttribute("href");f=f!=null&&f!=""?f.substring(f.length-4).toLowerCase():"";if((f==".mp3"||f==".aac"||f==".m4a")&&b.parentNode.getAttribute("class")!="sympage"){f=document.createElement("div");f.className="sympage";f.appendChild(b.cloneNode(true));b.parentNode.replaceChild(f,b)}}b=document.getElementsByTagName("a");for(var e=a=0;e<b.length;e++)if((i.canPlayURL(b[e].href)||c.hasClass(b[e],"playable"))&&!c.hasClass(b[e],"exclude")){b[e].rel="pagePlayerMP3Sound"+e;
c.links[c.links.length]=b[e];c.addClass(b[e],c.css.sDefault);a++}if(a>0){e=document.getElementById("sm2_timing");c.strings.timing=e.innerHTML;e.innerHTML="";e.id="";c.addEventHandler(document,"click",c.handleClick);if(p){c.addEventHandler(document,"touchstart",c.handleMouseDown);c.addEventHandler(document,"touchend",c.stopDrag)}else{c.addEventHandler(document,"mousedown",c.handleMouseDown);c.addEventHandler(document,"mouseup",c.stopDrag)}}i._writeDebug("pagePlayer.init(): Found "+a+" relevant items.");
c.config.autoStart&&setTimeout(function(){g.handleClick({target:g.links[0]})},150)};var y=function(a){var b=this,f=a._data.oLI,e=f.getElementsByTagName("ul")[0].getElementsByTagName("li"),h=document.createElement("div");h.innerHTML="<span>&nbsp;</span>";h.className="annotation";var k=document.createElement("div");k.innerHTML="<span>&nbsp;</span>";k.className="annotation alt";var u=document.createElement("div");u.className="note";this.totalTime=0;this.strToTime=function(l){l=l.split(":");for(var n=
0,o=l.length;o--;)n+=parseInt(l[o])*Math.pow(60,l.length-1-o,10);return n};this.data=[];this.data.givenDuration=null;this.data.currentItem=null;this.data.mainTitle=a._data.oLink.innerHTML;for(var j=0;j<e.length;j++)this.data[j]={o:null,title:e[j].getElementsByTagName("p")[0].innerHTML,startTime:e[j].getElementsByTagName("span")[0].innerHTML,startSeconds:b.strToTime(e[j].getElementsByTagName("span")[0].innerHTML.replace(/[()]/g,"")),duration:0,durationMS:null,startTimeMS:null,endTimeMS:null,oNote:null};
f=g.getElementsByClassName("duration","div",f);this.data.givenDuration=f.length?b.strToTime(f[0].innerHTML)*1E3:0;for(j=0;j<this.data.length;j++){this.data[j].duration=parseInt(this.data[j+1]?this.data[j+1].startSeconds:(b.data.givenDuration?b.data.givenDuration:a.durationEstimate)/1E3)-this.data[j].startSeconds;this.data[j].startTimeMS=this.data[j].startSeconds*1E3;this.data[j].durationMS=this.data[j].duration*1E3;this.data[j].endTimeMS=this.data[j].startTimeMS+this.data[j].durationMS;this.totalTime+=
this.data[j].duration}this.createElements=function(){for(var l=document.createDocumentFragment(),n=null,o=null,m=0;m<b.data.length;m++){n=(m%2==0?h:k).cloneNode(true);n.getElementsByTagName("span");n.rel=m;b.data[m].o=n;o=u.cloneNode(true);if(m%2==0)o.className="note alt";o.innerHTML=this.data[m].title;n.onmouseover=b.mouseover;n.onmouseout=b.mouseout;this.data[m].oNote=o;a._data.oControls.appendChild(o);l.appendChild(n)}b.refresh();a._data.oStatus.appendChild(l)};this.refresh=function(){for(var l=
0,n=null,o=b.data.givenDuration?b.data.givenDuration:a.durationEstimate,m=0;m<b.data.length;m++)if(o){n=b.data[m].duration*1E3/o*100;b.data[m].o.style.left=l?l+"%":"-2px";b.data[m].oNote.style.left=l?l+"%":"0px";l+=n}};this.mouseover=function(){b.data[this.rel].oNote.style.visibility="hidden";b.data[this.rel].oNote.style.display="inline-block";b.data[this.rel].oNote.style.marginLeft=-parseInt(b.data[this.rel].oNote.offsetWidth/2)+"px";b.data[this.rel].oNote.style.visibility="visible"};this.mouseout=
function(){b.data[this.rel].oNote.style.display="none"};this.createElements();this.refresh()};this.initDOM=function(){var a=c.getElementsByClassName("spectrum-box","div",document.documentElement)[0];if(i.flashVersion>=9){for(var b=c.getElementsByClassName("playlist","ul",document.documentElement),f=b.length;f--;)c.addClass(b[f],c.cssBase);b=a.getElementsByTagName("div")[0];var e=document.createDocumentFragment(),h=null;for(f=256;f--;){h=b.cloneNode(false);h.style.left=f+"px";e.appendChild(h)}a.removeChild(b);
a.appendChild(e)}this.oControls=document.getElementById("control-template").cloneNode(true);this.oControls.id="";this.init()}}soundManager.onready(function(){if(soundManager.supported())(new PagePlayer(typeof symMp3Opts=="object"?symMp3Opts:{})).initDOM()});

