// thank you!!!

// http://fehrenbacher.com/technology/code/ympseekposition/

var TrackResume=function(){this.debug=false;this.player=YAHOO.MediaPlayer;this.track=null;this.config={elapsed:0,duration:0,token:'',paused:false,cookieKeys:{paused:'ympPAU',elapsedTime:'ympTET',durationTime:'ympTDR',tokenHash:'ympTTK'}};this.elapsed=this.getCookie(this.config.cookieKeys.elapsedTime)||this.config.elapsed;this.duration=this.getCookie(this.config.cookieKeys.durationTime)||this.config.duration;this.token=this.getCookie(this.config.cookieKeys.tokenHash)||this.config.token;this.paused=(this.getCookie(this.config.cookieKeys.paused)==1)?true:this.config.paused;this.init()};TrackResume.create=function(args){YAHOO.mediaplayer.TrackResume=new TrackResume(args);return YAHOO.mediaplayer.TrackResume};TrackResume.prototype={init:function(options){this.player.onTrackStart.subscribe(this.onPlay,this,true);this.player.onTrackPause.subscribe(this.onPause,this,true);this.player.onProgress.subscribe(this.onProgress,this,true);this.player.onMediaUpdate.subscribe(this.onUpdate,this,true)},onProgress:function(options){if(options.duration>0){this.setTrackTime(options);return true}return false},setTrackTime:function(options){this.setCookie(this.config.cookieKeys.elapsedTime,options.elapsed,1);this.setCookie(this.config.cookieKeys.durationTime,options.duration,1)},setCurrentTrack:function(track){var token=track.mediaObject.token;this.track=track.mediaObject;if(token!=this.token){this.elapsed=0}this.setCookie(this.config.cookieKeys.tokenHash,token,1)},setPausedState:function(state){this.paused=state;this.setCookie(this.config.cookieKeys.paused,(this.paused?1:0),1)},onPlay:function(track){this.setCurrentTrack(track);this.setPausedState(false);this.player.play(this.track,this.elapsed)},onPause:function(track){this.setPausedState(true)},updateSeekPosition:function(){if(YAHOO.mediaplayer.SeekPosition){YAHOO.mediaplayer.SeekPosition.onProgress({elapsed:this.elapsed,duration:this.duration})}},onUpdate:function(mediaObject){if(mediaObject.token==this.token){this.track=mediaObject;if(this.paused){var volume=this.player.getVolume();this.player.setVolume(0);this.player.play(this.track,this.elapsed);this.playCheck=YAHOO.ympyui.lang.later(100,this,function(volume){var playerState=this.player.getPlayerState();if(playerState==2){this.playCheck.cancel();this.updateSeekPosition();this.player.pause();this.player.setVolume(volume)}},[volume],true)}else{this.updateSeekPosition();this.player.play(this.track,this.elapsed)}}},getCookie:function(key){var start=0,end=0;if(key&&(document.cookie.length>0)){start=document.cookie.indexOf(key+'=');if(start!=-1){start=start+key.length+1;end=document.cookie.indexOf(';',start);if(end==-1){end=document.cookie.length}return unescape(document.cookie.substring(start,end))}}return''},setCookie:function(key,value,expiredays){var exdate=new Date();exdate.setDate(exdate.getDate()+expiredays);document.cookie=key+'='+escape(value)+((expiredays==null)?'':';expires='+exdate.toGMTString()+';path=/;')}};(typeof YAHOO!='undefined')&&YAHOO.MediaPlayer.onAPIReady.subscribe(TrackResume.create);var SeekPosition=function(){this.player=YAHOO.MediaPlayer;this.setupUI();this.seekControlX=0;this.track=null;this.elapsed=0;this.duration=0;this.paused=true;this.dragging=false;this.movePosition=0;this.seekControlWidth=parseInt(YAHOO.ympyui.util.Dom.getStyle('ymp-seek','width'));this.seekLeftConstraint=Math.round(parseInt(YAHOO.ympyui.util.Dom.getStyle('ymp-seek-thumb','width'))/2);this.seekRightConstraint=this.seekControlWidth-this.seekLeftConstraint;this.onPositionChange(1);YAHOO.ympyui.util.Event.on('ymp-seek','mousedown',this.seekStartDrag,this,true);YAHOO.ympyui.util.Event.on('ymp-seek','click',this.stopEvent);this.init()};SeekPosition.create=function(args){YAHOO.mediaplayer.SeekPosition=new SeekPosition(args[0]);return YAHOO.mediaplayer.SeekPosition};SeekPosition.prototype={init:function(){this.player.onTrackStart.subscribe(this.onPlay,this,true);this.player.onProgress.subscribe(this.onProgress,this,true);this.player.onTrackPause.subscribe(this.onPause,this,true);this.player.onTrackComplete.subscribe(this.onComplete,this,true);YAHOO.ympyui.util.Event.addListener(['ymp-next','ymp-prev'],'click',function(){this.onPositionChange(1)},this,true)},setupUI:function(){var control=document.getElementById('ymp-control');control.style.height='40px';control.style.top='5px';var volume=document.getElementById('ymp-volume');var seekContainer=document.createElement('div');seekContainer.id='ymp-seek';with(seekContainer.style){position='absolute';top='45px';left='49px';width='100px';height='15px';zIndex='2';backgroundColor='transparent'}var seekCover=document.createElement('div');seekCover.id='ymp-seek-cover';with(seekCover.style){display='block';position='absolute';overflow='hidden';top='4px';left='0px';width='100%';height='4px';backgroundColor='#E9E8E8';border='1px inset #B2B2B2'}var seekCoverElapsed=document.createElement('div');seekCoverElapsed.id='ymp-seek-cover-elapsed';with(seekCoverElapsed.style){display='block';position='absolute';visibility='hidden';overflow='hidden';top='0px';left='0px';width='100%';height='4px';backgroundColor='#CEFD0D'}seekCover.appendChild(seekCoverElapsed);seekContainer.appendChild(seekCover);var seekThumb=document.createElement('div');seekThumb.id='ymp-seek-thumb';with(seekThumb.style){display='block';position='absolute';overflow='hidden';top='1px';left='0px';width='7px';height='11px';backgroundColor='#E9E8E8';border='1px solid #7F7F7F';cursor='pointer'}var seekThumbLine=document.createElement('div');seekThumbLine.id='ymp-seek-thumb-line';with(seekThumbLine.style){display='block';position='absolute';overflow='hidden';top='1px';left='2px';width='1px';height='9px';backgroundColor='#7F7F7F';borderWidth='0px 1px';borderColor='#BFBFBF';borderStyle='solid'}seekThumb.appendChild(seekThumbLine);seekContainer.appendChild(seekThumb);volume.parentNode.insertBefore(seekContainer,volume)},stopEvent:function(evt){YAHOO.ympyui.util.Event.stopEvent(evt)},seekStartDrag:function(evt){this.stopEvent(evt);this.dragging=true;this.seekControlX=YAHOO.ympyui.util.Dom.getX('ymp-seek');this.notifySeekChange(evt);YAHOO.ympyui.util.Event.on(document,'mousemove',this.notifySeekChange,this,true);YAHOO.ympyui.util.Event.on(document,'mouseup',this.seekMouseUp,this,true)},seekMouseUp:function(evt){this.dragging=false;this.stopEvent(evt);YAHOO.ympyui.util.Event.removeListener(document,'mousemove',this.notifySeekChange);YAHOO.ympyui.util.Event.removeListener(document,'mouseup',this.seekMouseUp);if(this.paused){this.player.pause()}else{this.player.play(this.track,this.duration-(this.movePosition*this.duration))}},notifySeekChange:function(evt){this.stopEvent(evt);var newMouseX=YAHOO.ympyui.util.Event.getPageX(evt);var xDiff=(newMouseX-this.seekControlX);xDiff-=0;var thumbLeft;if((xDiff>=this.seekLeftConstraint)&&(xDiff<this.seekRightConstraint)){thumbLeft=xDiff-this.seekLeftConstraint}else if(xDiff>=this.seekRightConstraint){thumbLeft=this.seekRightConstraint-this.seekLeftConstraint}else if(xDiff<this.seekLeftConstraint){thumbLeft=0}this.movePosition=1-(thumbLeft/(this.seekRightConstraint-this.seekLeftConstraint));this.onPositionChange(this.movePosition)},onPlay:function(track){this.paused=false;this.track=track.mediaObject},onProgress:function(options){this.elapsed=options.elapsed;this.duration=options.duration||(YAHOO.mediaplayer.TrackResume&&YAHOO.mediaplayer.TrackResume.duration)||0;if(!this.dragging&&(this.duration!=0)){var thumbLeft;var xDiff=Math.ceil((Math.ceil(this.elapsed)*this.seekRightConstraint-this.seekLeftConstraint)/Math.ceil(this.duration));xDiff-=0;if((xDiff>=this.seekLeftConstraint)&&(xDiff<this.seekRightConstraint)){thumbLeft=xDiff-this.seekLeftConstraint}else if(xDiff>=this.seekRightConstraint){thumbLeft=this.seekRightConstraint-this.seekLeftConstraint}else if(xDiff<this.seekLeftConstraint){thumbLeft=0}var position=1-(thumbLeft/(this.seekRightConstraint-this.seekLeftConstraint));this.onPositionChange(position)}},onComplete:function(track){},onPause:function(track){this.paused=true},onPositionChange:function(position){var thumbLeft=(1-position)*(this.seekRightConstraint-this.seekLeftConstraint);YAHOO.ympyui.util.Dom.setStyle('ymp-seek-thumb','left',thumbLeft+'px');YAHOO.ympyui.util.Dom.setStyle('ymp-seek-cover-elapsed','visibility','visible');YAHOO.ympyui.util.Dom.setStyle('ymp-seek-cover-elapsed','left',-((this.seekRightConstraint-this.seekLeftConstraint)-thumbLeft)+'px')}};(typeof YAHOO!='undefined')&&YAHOO.ympyui.util.Event.onAvailable('ymp-volume',SeekPosition.create,SeekPosition);

