var started = false; var update_timeout = null; var start_time = null; var stop_time = null; var remaining_time = null; var elapsed_time = null; var steps = []; $(document).ready(function(){ $('#set').click(start_timer); $('#stop').click(stop_timer); $('#add').click(add_step); }); var start_timer = function(){ remaining_time = parseFloat($('#total').val()); elapsed_time = 0; if(!remaining_time){ alert('invalid number: ' + $('#total').val()); return false; } remaining_time *= 60; start_time = new Date().getTime(); stop_time = start_time + (remaining_time * 1000); update_timers(); $('#set-timer').hide(); $('#stop-timer').show(); }; var stop_timer = function(){ $('#total').val(round(remaining_time / 60, 2)); if(update_timeout){ clearTimeout(update_timeout); } $('#set-timer').show(); $('#stop-timer').hide(); }; var update_timers = function(){ remaining_time -= 1; elapsed_time -= 1; if(remaining_time > 0){ update_timeout = setTimeout(update_timers, 1000); } else{ $('#finished').trigger('play'); $('#set-timer').show(); $('#stop-timer').hide(); } $('#remaining h3').html(format_time(remaining_time)); $('#elapsed h3').html('-' + format_time(elapsed_time)); var now = new Date().getTime(); var true_total = Math.floor((stop_time - start_time) / 1000); var true_elapsed = Math.floor((start_time - now) / 1000); var true_remaining = Math.floor((stop_time - now) / 1000); if(true_elapsed != elapsed_time || true_remaining != remaining_time || (elapsed_time + remaining_time) != true_total){ remaining_time = Math.floor((stop_time - now) / 1000); elapsed_time = true_elapsed; } check_steps(true_remaining); }; var format_time = function(time){ time = Math.abs(time); var hours = Math.floor(time / 3600); time -= hours * 3600; var minutes = Math.floor(time / 60); time -= minutes * 60; var seconds = round(time, 0); return less_than_ten(hours) + ':' + less_than_ten(minutes) + ':' + less_than_ten(seconds); }; var less_than_ten = function(time){ return (time < 10)? '0' + time : time; }; var add_step = function(){ var step = { at: round(parseFloat($('#add-step #time').val()), 2), name: $('#add-step #name').val() }; if(!step.at){ alert('invalid number: ' + $('#add-step #time').val()); return false; } if(!step.name || step.name == ''){ alert('invalid name: ' + step.name); return false; } step.at *= 60; steps.push(step); write_steps(); $('#add-step #time').val(''); $('#add-step #name').val(''); }; var write_steps = function(){ steps.sort(function(a, b){ return a.at < b.at; }); $('#steps .step').remove(); for(var i in steps){ var step = steps[i]; var html = $('
'); html.append('