/*! workout-timer - v0.0.1 - 2015-11-09 * Copyright (c) 2015 Dave Rodriguez; Licensed MIT */ (function(){var a,b,c,d,e,f,g,h,i;if(c={version:"2.3.3",name:"jQuery-runner"},g=this.jQuery||this.Zepto||this.$,!g||!g.fn)throw new Error("["+c.name+"] jQuery or jQuery-like library is required for this plugin to work");e={},d=function(a){return(10>a?"0":"")+a},i=1,f=function(){return"runner"+i++},h=function(a,b){return a["r"+b]||a["webkitR"+b]||a["mozR"+b]||a["msR"+b]||function(a){return setTimeout(a,30)}}(this,"equestAnimationFrame"),b=function(a,b){var c,e,f,g,h,i,j,k,l,m,n;for(b=b||{},k=[36e5,6e4,1e3,10],i=["",":",":","."],h="",g="",f=b.milliseconds,e=k.length,l=0,0>a&&(a=Math.abs(a),h="-"),c=m=0,n=k.length;n>m;c=++m)j=k[c],l=0,a>=j&&(l=Math.floor(a/j),a-=l*j),(l||c>1||g)&&(c!==e-1||f)&&(g+=(g?i[c]:"")+d(l));return h+g},a=function(){function a(b,c,d){var h;return this instanceof a?(this.items=b,h=this.id=f(),this.settings=g.extend({},this.settings,c),e[h]=this,b.each(function(a,b){g(b).data("runner",h)}),this.value(this.settings.startAt),void((d||this.settings.autostart)&&this.start())):new a(b,c,d)}return a.prototype.running=!1,a.prototype.updating=!1,a.prototype.finished=!1,a.prototype.interval=null,a.prototype.total=0,a.prototype.lastTime=0,a.prototype.startTime=0,a.prototype.lastLap=0,a.prototype.lapTime=0,a.prototype.settings={autostart:!1,countdown:!1,stopAt:null,startAt:0,milliseconds:!0,format:null},a.prototype.value=function(a){this.items.each(function(b){return function(c,d){var e;c=g(d),e=c.is("input")?"val":"text",c[e](b.format(a))}}(this))},a.prototype.format=function(a){var c;return c=this.settings.format,(c=g.isFunction(c)?c:b)(a,this.settings)},a.prototype.update=function(){var a,b,c,d,e;this.updating||(this.updating=!0,c=this.settings,e=g.now(),d=c.stopAt,a=c.countdown,b=e-this.lastTime,this.lastTime=e,a?this.total-=b:this.total+=b,null!==d&&(a&&this.total<=d||!a&&this.total>=d)&&(this.total=d,this.finished=!0,this.stop(),this.fire("runnerFinish")),this.value(this.total),this.updating=!1)},a.prototype.fire=function(a){this.items.trigger(a,this.info())},a.prototype.start=function(){var a;this.running||(this.running=!0,(!this.startTime||this.finished)&&this.reset(),this.lastTime=g.now(),a=function(b){return function(){b.running&&(b.update(),h(a))}}(this),h(a),this.fire("runnerStart"))},a.prototype.stop=function(){this.running&&(this.running=!1,this.update(),this.fire("runnerStop"))},a.prototype.toggle=function(){this.running?this.stop():this.start()},a.prototype.lap=function(){var a,b;return b=this.lastTime,a=b-this.lapTime,this.settings.countdown&&(a=-a),(this.running||a)&&(this.lastLap=a,this.lapTime=b),b=this.format(this.lastLap),this.fire("runnerLap"),b},a.prototype.reset=function(a){var b;a&&this.stop(),b=g.now(),"number"!=typeof this.settings.startAt||this.settings.countdown||(b-=this.settings.startAt),this.startTime=this.lapTime=this.lastTime=b,this.total=this.settings.startAt,this.value(this.total),this.finished=!1,this.fire("runnerReset")},a.prototype.info=function(){var a;return a=this.lastLap||0,{running:this.running,finished:this.finished,time:this.total,formattedTime:this.format(this.total),startTime:this.startTime,lapTime:a,formattedLapTime:this.format(a),settings:this.settings}},a}(),g.fn.runner=function(b,d,f){var h,i;switch(b||(b="init"),"object"==typeof b&&(f=d,d=b,b="init"),h=this.data("runner"),i=h?e[h]:!1,b){case"init":new a(this,d,f);break;case"info":if(i)return i.info();break;case"reset":i&&i.reset(d);break;case"lap":if(i)return i.lap();break;case"start":case"stop":case"toggle":if(i)return i[b]();break;case"version":return c.version;default:g.error("["+c.name+"] Method "+b+" does not exist")}return this},g.fn.runner.format=b}).call(this),function(a,b,c,d){"use strict";if(a.ion=a.ion||{},!ion.sound){var e=function(b){if(b||(b="undefined"),a.console){console.warn&&"function"==typeof console.warn?console.warn(b):console.log&&"function"==typeof console.log&&console.log(b);var d=c&&c("#debug");if(d&&d.length){var e=d.html();d.html(e+b+"
")}}},f=function(a,b){var c;b=b||{};for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b};if("function"!=typeof Audio&&"object"!=typeof Audio){var g=function(){e("HTML5 Audio is not supported in this browser")};return ion.sound=g,ion.sound.play=g,ion.sound.stop=g,ion.sound.pause=g,ion.sound.preload=g,ion.sound.destroy=g,void g()}var h,i=/iPad|iPhone|iPod/.test(b.appVersion),j=0,k={},l={};!k.supported&&i?k.supported=["mp3","mp4","aac"]:k.supported||(k.supported=["mp3","ogg","mp4","aac","wav"]);var m=function(a){var b=a.alias||a.name;l[b]||(l[b]=new p(a),l[b].init())};ion.sound=function(a){if(f(a,k),k.path=k.path||"",k.volume=k.volume||1,k.preload=k.preload||!1,k.multiplay=k.multiplay||!1,k.loop=k.loop||!1,k.sprite=k.sprite||null,k.scope=k.scope||null,k.ready_callback=k.ready_callback||null,k.ended_callback=k.ended_callback||null,j=k.sounds.length,!j)return void e("No sound-files provided!");for(h=0;j>h;h++)m(k.sounds[h])},ion.sound.VERSION="3.0.6",ion.sound._method=function(a,b,c){if(b)l[b]&&l[b][a](c);else for(h in l)l.hasOwnProperty(h)&&l[h]&&l[h][a](c)},ion.sound.preload=function(a,b){b=b||{},f({preload:!0},b),ion.sound._method("init",a,b)},ion.sound.destroy=function(a){if(ion.sound._method("destroy",a),a)l[a]=null;else for(h in l)l.hasOwnProperty(h)&&l[h]&&(l[h]=null)},ion.sound.play=function(a,b){ion.sound._method("play",a,b)},ion.sound.stop=function(a,b){ion.sound._method("stop",a,b)},ion.sound.pause=function(a,b){ion.sound._method("pause",a,b)},ion.sound.volume=function(a,b){ion.sound._method("volume",a,b)},c&&(c.ionSound=ion.sound);var n,o=a.AudioContext||a.webkitAudioContext;o&&(n=new o);var p=function(a){this.options=f(k),delete this.options.sounds,f(a,this.options),this.request=null,this.streams={},this.result={},this.ext=0,this.url="",this.loaded=!1,this.decoded=!1,this.no_file=!1,this.autoplay=!1};p.prototype={init:function(a){a&&f(a,this.options),this.options.preload&&this.load()},destroy:function(){var a;for(h in this.streams)a=this.streams[h],a&&(a.destroy(),a=null);this.streams={},this.result=null,this.options.buffer=null,this.options=null,this.request&&(this.request.removeEventListener("load",this.ready.bind(this),!1),this.request.removeEventListener("error",this.error.bind(this),!1),this.request.abort(),this.request=null)},createUrl:function(){var a=(new Date).valueOf();this.url=this.options.path+encodeURIComponent(this.options.name)+"."+this.options.supported[this.ext]+"?"+a},load:function(){return this.no_file?void e('No sources for "'+this.options.name+'" sound :('):(this.createUrl(),this.request=new XMLHttpRequest,this.request.open("GET",this.url,!0),this.request.responseType="arraybuffer",this.request.addEventListener("load",this.ready.bind(this),!1),this.request.addEventListener("error",this.error.bind(this),!1),void this.request.send())},reload:function(){this.ext++,this.options.supported[this.ext]?this.load():(this.no_file=!0,e('No sources for "'+this.options.name+'" sound :('))},ready:function(a){return this.result=a.target,4!==this.result.readyState?void this.reload():200!==this.result.status&&0!==this.result.status?(e(this.url+" was not found on server!"),void this.reload()):(this.request.removeEventListener("load",this.ready.bind(this),!1),this.request.removeEventListener("error",this.error.bind(this),!1),this.request=null,this.loaded=!0,void this.decode())},decode:function(){n&&n.decodeAudioData(this.result.response,this.setBuffer.bind(this),this.error.bind(this))},setBuffer:function(a){this.options.buffer=a,this.decoded=!0;var b={name:this.options.name,alias:this.options.alias,ext:this.options.supported[this.ext],duration:this.options.buffer.duration};if(this.options.ready_callback&&"function"==typeof this.options.ready_callback&&this.options.ready_callback.call(this.options.scope,b),this.options.sprite)for(h in this.options.sprite)this.options.start=this.options.sprite[h][0],this.options.end=this.options.sprite[h][1],this.streams[h]=new q(this.options,h);else this.streams[0]=new q(this.options);this.autoplay&&(this.autoplay=!1,this.play())},error:function(){this.reload()},play:function(a){if(delete this.options.part,a&&f(a,this.options),!this.loaded)return void(this.options.preload||(this.autoplay=!0,this.load()));if(!this.no_file&&this.decoded)if(this.options.sprite)if(this.options.part)this.streams[this.options.part].play(this.options);else for(h in this.options.sprite)this.streams[h].play(this.options);else this.streams[0].play(this.options)},stop:function(a){if(this.options.sprite)if(a)this.streams[a.part].stop();else for(h in this.options.sprite)this.streams[h].stop();else this.streams[0].stop()},pause:function(a){if(this.options.sprite)if(a)this.streams[a.part].pause();else for(h in this.options.sprite)this.streams[h].pause();else this.streams[0].pause()},volume:function(a){var b;if(a)if(f(a,this.options),this.options.sprite)if(this.options.part)b=this.streams[this.options.part],b&&b.setVolume(this.options);else for(h in this.options.sprite)b=this.streams[h],b&&b.setVolume(this.options);else b=this.streams[0],b&&b.setVolume(this.options)}};var q=function(a,b){this.alias=a.alias,this.name=a.name,this.sprite_part=b,this.buffer=a.buffer,this.start=a.start||0,this.end=a.end||this.buffer.duration,this.multiplay=a.multiplay||!1,this.volume=a.volume||1,this.scope=a.scope,this.ended_callback=a.ended_callback,this.setLoop(a),this.source=null,this.gain=null,this.playing=!1,this.paused=!1,this.time_started=0,this.time_ended=0,this.time_played=0,this.time_offset=0};if(q.prototype={destroy:function(){this.stop(),this.buffer=null,this.source=null,this.gain&&this.gain.disconnect(),this.source&&this.source.disconnect(),this.gain=null,this.source=null},setLoop:function(a){a.loop===!0?this.loop=9999999:"number"==typeof a.loop?this.loop=+a.loop-1:this.loop=!1},update:function(a){this.setLoop(a),"volume"in a&&(this.volume=a.volume)},play:function(a){a&&this.update(a),(this.multiplay||!this.playing)&&(this.gain=n.createGain(),this.source=n.createBufferSource(),this.source.buffer=this.buffer,this.source.connect(this.gain),this.gain.connect(n.destination),this.gain.gain.value=this.volume,this.source.onended=this.ended.bind(this),this._play())},_play:function(){var a,b;return this.paused?(a=this.start+this.time_offset,b=this.end-this.time_offset):(a=this.start,b=this.end),0>=b?void this.clear():("function"==typeof this.source.start?this.source.start(0,a,b):this.source.noteOn(0,a,b),this.playing=!0,this.paused=!1,void(this.time_started=(new Date).valueOf()))},stop:function(){this.playing&&this.source&&("function"==typeof this.source.stop?this.source.stop(0):this.source.noteOff(0)),this.clear()},pause:function(){return this.paused?void this.play():void(this.playing&&(this.source&&this.source.stop(0),this.paused=!0))},ended:function(){this.playing=!1,this.time_ended=(new Date).valueOf(),this.time_played=(this.time_ended-this.time_started)/1e3,this.time_offset+=this.time_played,(this.time_offset>=this.end||this.end-this.time_offset<.015)&&(this._ended(),this.clear(),this.loop&&(this.loop--,this.play()))},_ended:function(){var a={name:this.name,alias:this.alias,part:this.sprite_part,start:this.start,duration:this.end};this.ended_callback&&"function"==typeof this.ended_callback&&this.ended_callback.call(this.scope,a)},clear:function(){this.time_played=0,this.time_offset=0,this.paused=!1,this.playing=!1},setVolume:function(a){this.volume=a.volume,this.gain&&(this.gain.gain.value=this.volume)}},!n){var r=function(){var a,b,c=new Audio,d=c.canPlayType("audio/mpeg"),e=c.canPlayType("audio/ogg"),f=c.canPlayType('audio/mp4; codecs="mp4a.40.2"');for(b=0;b=this.end&&this.playing&&(this.stop(),this._ended())}},ended:function(){this.playing&&(this.stop(),this._ended())},_ended:function(){this.playing=!1;var a={name:this.name,alias:this.alias,part:this.sprite_part,start:this.start,duration:this.end};this.ended_callback&&"function"==typeof this.ended_callback&&this.ended_callback.call(this.scope,a),this.loop&&setTimeout(this.looper.bind(this),15)},looper:function(){this.loop--,this.play()},clear:function(){this.start_time=0,this.played_time=0,this.paused_time=0},setVolume:function(a){this.volume=a.volume,this.sound&&(this.sound.volume=this.volume)}}}}}(window,navigator,window.jQuery||window.$),function(a){var b=function(c,d){this.domElement=a(c),this.options=d,this.options.originalRepetitions=this.options.repetitions,b.instances.push(this),this.setOptionsFromDataAttributes(),this.counter=this.domElement.find("[data-counter]")||null,this.counter.attr("data-state","base"),this.options.sound&&(this.options.volume=b.volumeStates[0].level),this.initRunner(),this.initControls(),this.updateRepetitionCounter(),this.updateVolumeCounter()};b.defaults={countdown:!1,autostart:!1,duration:10,duration2:0,repetitions:0,sound:null,onPlay:function(){},onPause:function(){},onRestart:function(){},onRoundComplete:function(){},onComplete:function(){}},b.instances=[],b.volumeStates=[{name:"level1",level:.5},{name:"level2",level:1},{name:"level3",level:2},{name:"mute",level:0}],b.events={START:"start",PAUSE:"pause",RESTART:"restart",ROUND_COMPLETE:"roundComplete",COMPLETE:"complete"},b.toggleVolume=function(){b.volumeStates.push(b.volumeStates.shift());for(var a=0;a=0&&(this.options.countdown?d.stopAt=0:d.stopAt=1e3*a),this.counter.runner(d),this.counter.off("runnerFinish").on("runnerFinish",function(){c.intervalComplete()})},b.prototype.initControls=function(){var a=this;this.controls=this.controls||{},this.controls.playPause=this.domElement.find("[data-control=play-pause]")||null,this.controls.reset=this.domElement.find("[data-control=reset]")||null,this.controls.repetitionCounter=this.domElement.find("[data-repetitions]")||null,this.controls.volume=this.domElement.find("[data-control=volume]")||null,this.controls.playPause.on("click",function(){a.toggleRunnerState()}),this.resetPlayPauseControl(),this.controls.reset.on("click",function(){a.counter.runner("reset",!0),a.resetPlayPauseControl(),a.resetRepetitions()}),this.controls.volume.on("click",function(){b.toggleVolume()})},b.prototype.resetPlayPauseControl=function(){this.options.autostart?this.controls.playPause.attr("data-paused","false"):this.controls.playPause.attr("data-paused","true")},b.prototype.toggleRunnerState=function(){this.counter.runner("toggle"),"true"===this.controls.playPause.attr("data-paused")?(this.controls.playPause.attr("data-paused","false"),this.options.onStart&&"function"==typeof this.options.onStart&&this.options.onStart(b.events.START,this.domElement.eq(0),this)):(this.controls.playPause.attr("data-paused","true"),this.options.onPause&&"function"==typeof this.options.onPause&&this.options.onPause(b.events.PAUSE,this.domElement.eq(0),this))},b.prototype.updateRepetitionCounter=function(){this.controls.repetitionCounter.html(this.options.repetitions>=0?this.options.repetitions:"∞")},b.prototype.resetRepetitions=function(){this.options.repetitions=this.options.originalRepetitions,this.updateRepetitionCounter(),this.options.onRestart&&"function"==typeof this.options.onRestart&&this.options.onRestart(b.events.RESTART,this.domElement.eq(0),this)},b.prototype.intervalComplete=function(){if(this.options.sound&&ion.sound.play(this.options.sound,{volume:this.options.volume}),this.options.onRoundComplete&&"function"==typeof this.options.onRoundComplete&&this.options.onRoundComplete(b.events.ROUND_COMPLETE,this.domElement.eq(0),this),this.options.repetitions>0){var a=this.options.duration;this.options.duration2?"alternate"===this.domElement.data("currentCounter")?(a=this.options.duration,this.domElement.data("currentCounter","base"),this.counter.attr("data-state","base"),this.options.repetitions--):(a=this.options.duration2,this.domElement.data("currentCounter","alternate"),this.counter.attr("data-state","alternate")):(this.domElement.data("currentCounter","base"),this.counter.attr("data-state","base"),this.options.repetitions--),this.updateRepetitionCounter(),this.initRunner(a,!0)}else this.timerComplete()},b.prototype.timerComplete=function(){this.counter.attr("data-state","complete"),this.options.onComplete&&"function"==typeof this.options.onComplete&&this.options.onComplete(b.events.COMPLETE,this.domElement.eq(0),this)},b.prototype.updateVolumeCounter=function(){var a=b.volumeStates[0];this.volume=a.level,this.controls.volume.attr("data-volume-level",a.name)},a.WorkoutTimer=b,a.fn.workoutTimer=function(c){return this.each(function(){var d=a.extend({},b.defaults,c);new b(this,d)})}}(jQuery);