function pavTime2L14(a){if(a>=0&&a<.2308){return 4.33*a}else{return 1}}function pavTime2L13(a){if(a>=0&&a<.2222){return 4.5*a}else{return 1}}function pavTime2L12(a){if(a>=0&&a<.2143){return 4.67*a}else{return 1}}function pavTime2L11(a){if(a>=0&&a<.2069){return 4.83*a}else{return 1}}function pavTime2L10(a){if(a>=0&&a<.2){return 5*a}else{return 1}}function pavTime2L9(a){if(a>=0&&a<.1935){return 5.17*a}else{return 1}}function pavTime2L8(a){if(a>=0&&a<.1875){return 5.33*a}else{return 1}}function pavTime2L7(a){if(a>=0&&a<.1818){return 5.5*a}else{return 1}}function pavTime2L6(a){if(a>=0&&a<.1765){return 5.67*a}else{return 1}}function pavTime2L5(a){if(a>=0&&a<.1714){return 5.83*a}else{return 1}}function pavTime2L4(a){if(a>=0&&a<.1667){return 6*a}else{return 1}}function pavTime2L3(a){if(a>=0&&a<.1622){return 6.17*a}else{return 1}}function pavTime2L2(a){if(a>=0&&a<.1579){return 6.33*a}else{return 1}}function pavTime2L1(a){if(a>=0&&a<.1538){return 6.5*a}else{return 1}}function pavTimeL4(a){if(a>=0&&a<.1333){return 7.5*a}else{return 1}}function pavTimeL3(a){if(a>=0&&a<.1277){return 7.83*a}else{return 1}}function pavTimeL2(a){if(a>=0&&a<.1224){return 8.17*a}else{return 1}}function pavTimeL1(a){if(a>=0&&a<.1176){return 8.5*a}else{return 1}}function pavTimeR3(a){if(a>=0&&a<.26){return 3.8*a}else{return 1}}function pavTimeR2(a){if(a>=0&&a<.14){return 7.1*a}else{return 1}}function pavTimeR1(a){if(a>=0&&a<.11){return 9.1*a}else{return 1}}function pavTime4(a){if(a>=0&&a<.12){return 8.33*a}else{return 1}}function pavTime3(a){if(a>=0&&a<.09){return 11.1*a}else if(a>=.09&&a<.91){return 1}else{return-11.1*a}}function pavTime2(a){if(a>=0&&a<.07){return 14.29*a}else if(a>=.07&&a<.93){return 1}else{return-14.29*a}}function pavTime1(a){if(a>=0&&a<.93){return 1}else{return-14.29*a}}function linear(a){return a}function slope(a,b,c,d){var e=c-a;var f=d-b;return Math.atan2(f,e)}function quadratic(a,b,c,d){a=Math.max(Math.min(1,a),0);return Math.pow(1-a,2)*b+2*a*(1-a)*c+a*a*d}function bezier(a,b,c,d,e){return Math.pow(a,3)*(e+3*(c-d)-b)+3*Math.pow(a,2)*(b-2*c+d)+3*a*(c-b)+b}function followOrientation(a,b,c,d,e){if(e==1){return slope(a,b,c,d)}else{return slope(c,d,a,b)}}function updatePath(){var a=this.pathClock;var b=a.value;if(b!=this.lastValue){if(b<0||b>this.linear.length-1){b=b<0?0:this.linear.length-1}var c=Math.floor(b);var d=b-c;var e=this.linear[c][0];var f=e;var g=this.linear[c][1];var h=g;var i=this.linear[c][2];var j=i;if(c+1<this.linear.length){var f=this.linear[c+1][0];var h=this.linear[c+1][1];var j=this.linear[c+1][2]}var k=e;var l=0;if(e==f){l=d*(h-g)+g}else{var m=j-i;var n=d*m;var o=this.segmentT[e]-i;if(i+n<this.segmentT[e]){var p=o==0?0:n/o;l=(1-g)*p+g}else{k=f;var q=j-this.segmentT[e];var r=n-o;var p=q==0?0:r/q;l=p*h}}this.x=bezier(l,this.points[k][0][0],this.points[k][1][0],this.points[k][2][0],this.points[k][3][0]);this.y=bezier(l,this.points[k][0][1],this.points[k][1][1],this.points[k][2][1],this.points[k][3][1]);var s=0;var t=0;if(l==0){s=this.points[k][1][0];t=this.points[k][1][1];this.orientation=followOrientation(this.x,this.y,s,t,a.d)}else if(l==1){s=this.points[k][1][0];t=this.points[k][1][1];this.orientation=followOrientation(s,t,this.x,this.y,a.d)}else{s=quadratic(l,this.points[k][0][0],this.points[k][1][0],this.points[k][2][0]);t=quadratic(l,this.points[k][0][1],this.points[k][1][1],this.points[k][2][1]);this.orientation=followOrientation(s,t,this.x,this.y,a.d)}this.lastValue=b}a.update()}function customEvent(){this.eventName=arguments[0];this.subscribers=new Array;this.subscribe=function(a){if(this.subscribers.indexOf(a)==-1){this.subscribers.push(a)}};this.fire=function(a,b){if(this.subscribers.length>0){for(var c=0;c<this.subscribers.length;c++){this.subscribers[c](a,b)}}}}function standardClock(){this.ticks=function(){return(new Date).getTime()};this.ticksPerSecond=function(){return 1e3}}function updateAllClocks(){var a=clocks.length;for(var b=0;b<a;b++){clocks[b].update()}}function updateClock(){if(this.isRunning&&!this.isFinished){var a=this.timeProvider.ticks();if(a!=this.lastTime){var b=(a-this.startTime)/this.timeProvider.ticksPerSecond();var c=(b-this.delay)/this.duration;if(c<0){c=0}var d=Math.floor(c);if(d!=this.i){this.iterated.fire(null,{message:this.iterated.eventName})}this.t=c-d;if(this.iterations!=0){if(d>=this.iterations){d=this.iterations-1;this.t=1;this.stop();this.isFinished=true;this.finished.fire(null,{message:this.finished.eventName})}}this.i=d;if(this.reverses){if(Math.floor(this.i)%2==0){this.d=this.baseDirection}else{this.d=-this.baseDirection}}else{this.d=this.baseDirection}if(this.d==-1){this.t=1-this.t}this.value=this.timingFunction(this.t)*this.multiplier+this.offset;this.lastTime=a}}}function clock(a,b,c,d,e,f,g,h,i){this.timeProvider=timeProvider;this.duration=a;this.delay=b;this.direction=c;this.reverses=d;this.iterations=e;this.timingFunction=f;this.multiplier=g*h;this.offset=g*i;this.reset=function(){this.startTime=0;this.stopTime=0;this.lastTime=0;this.baseDirection=this.direction;this.d=this.baseDirection;this.t=this.baseDirection==1?0:1;this.i=0;this.isRunning=false;this.isFinished=false;this.value=0};this.reset();this.started=new customEvent("started");this.stopped=new customEvent("stopped");this.iterated=new customEvent("iterated");this.finished=new customEvent("finished");this.start=function(){if(!this.isRunning&&!this.isFinished){this.startTime=this.timeProvider.ticks()-(this.stopTime-this.startTime);this.isRunning=true;this.started.fire(null,{message:this.started.eventName})}};this.restart=function(){this.reset();this.start()};this.stop=function(){if(this.isRunning&&!this.isFinished){this.stopTime=this.timeProvider.ticks();this.isRunning=false;this.stopped.fire(null,{message:this.stopped.eventName})}};this.toggle=function(){if(!this.isFinished){if(this.isRunning){this.stop()}else{this.start()}}};this.rewind=function(){if(this.isRunning&&!this.isFinished){this.jumpTo(this.i)}};this.fastForward=function(){if(this.isRunning&&!this.isFinished){this.jumpTo(this.i+1)}};this.reverse=function(){if(this.isRunning&&!this.isFinished){this.baseDirection=-this.baseDirection;var a=this.i+(this.d==-1?this.t:1-this.t);this.jumpTo(a)}};this.jumpTo=function(a){var b=this.timeProvider.ticks();var c=this.timeProvider.ticksPerSecond();var d=this.delay*c+a*this.duration*c;this.startTime=b-d};this.update=updateClock;this.value=this.timingFunction(this.t)*this.multiplier+this.offset;clocks.push(this)}var timeProvider=new standardClock;var clocks=new Array;
