/* nthist_spinner.js */
/* USAGE spinner.spin_start( <number to spin>, <element for number>[,<call back>] );
displays the number passed in the element designated,
lets the rightmost digits change while freezing the eleftmost digits one at a time.
when the number is finished displaying, the "call back" function ( if passed) is called.
*/
var spinner={
do_step_sz : 25 ,
do_millis : 500 ,
target: "" ,
kkk : 0,
rsz : 0,
span1 : null ,
span2 : null ,
stepInerval : null ,
onComplete : null ,
jumpstart : 0 ,
spin_jump : function() {
spinner.rsz /= 10;
spinner.kkk -= 1;
if( spinner.kkk > 0 ) { spinner.start_spin_step(); }
if( spinner.kkk == 0 && spinner.onComplete) { spinner.onComplete(); }
} ,
spin_step : function (){
if( performance.now() - spinner.jumpstart > spinner.do_millis ) {
clearInterval( spinner.stepInerval );
spinner.spin_jump();
}
spinner.span1.innerHTML=spinner.target.slice(0,spinner.target.length - spinner.kkk);
spinner.span2.innerHTML=( spinner.kkk < 1 ) ? "" :
10 ** spinner.kkk - 1 - Math.floor(Math.random() * spinner.rsz );
} ,
start_spin_step : function (){
spinner.jumpstart = performance.now() ;
stepInerval = setInterval( spinner.spin_step, spinner.do_step_sz );
} ,
spin_start : function( display_value , display_target , call_back ){
spinner.target = display_value;
spinner.kkk = spinner.target.length;
display_target.innerHTML="";
if( ! spinner.span1 ) { spinner.span1 = document.createElement( "SPAN" ); }
display_target.appendChild( spinner.span1 );
if( ! spinner.span2 ) { spinner.span2 = document.createElement( "SPAN" ); }
display_target.appendChild( spinner.span2 );
if( call_back ) { spinner.onComplete = call_back ; }
spinner.rsz = 10 ** spinner.kkk ;
spinner.start_spin_step();
} ,
} ;