diff --git a/app/assets/javascripts/toicontest.js b/app/assets/javascripts/toicontest.js --- a/app/assets/javascripts/toicontest.js +++ b/app/assets/javascripts/toicontest.js @@ -1,7 +1,9 @@ var TOIContest = { NO_TIMEOUT: -1, + SUBMISSION_TIMEOUT: 300, timeOuts: {}, + timeStarted: 0, problemSelectClick: function() { $$(".submission-submit-divs").each(function(item) { @@ -14,8 +16,18 @@ $("submission_submit_div_" + problem_id + "_id").show(); }, - confirmDownload: function() { - return confirm("แน่ใจ?"); + confirmDownload: function(pid) { + result = confirm("คุณแน่ใจที่จะส่งข้อนี้หรือไม่?\nเมื่อคุณดาวน์โหลดข้อมูลชุดทดสอบแล้ว คุณจะต้องส่งข้อมูลส่งออกและโปรแกรมภายในเวลา 5 นาที"); + if ( result ) { + if ( TOIContest.timeOuts[ pid ] == TOIContest.NO_TIMEOUT ) { + TOIContest.refreshTimeOuts(); + + TOIContest.timeOuts[ pid ] = TOIContest.SUBMISSION_TIMEOUT; + + TOIContest.refreshTimeOutMessages(); + } + } + return result; }, refreshTimeOutMessages: function() { @@ -26,12 +38,40 @@ var minLeft = parseInt(timeOut / 60); var secLeft = parseInt(timeOut % 60); $('submission_time_left_' + pid + '_id').innerHTML = '| เหลือเวลาอีก ' + minLeft + ':' + secLeft + ' นาที'; + $('submission_form_'+ pid + '_id').show(); } else { $('submission_time_left_' + pid + '_id').innerHTML = '| หมดเวลาส่ง'; $('submission_form_'+ pid + '_id').hide(); } + } else { + $('submission_form_'+ pid + '_id').hide(); } } - } + }, + + refreshTimeOuts: function() { + if ( TOIContest.timeStarted == 0 ) { + TOIContest.timeStarted = (new Date()).getTime(); + } + + var timeElapsed = ((new Date()).getTime() - TOIContest.timeStarted)/1000; + for ( var pid in TOIContest.timeOuts ) { + var timeOut = TOIContest.timeOuts[ pid ]; + if ( timeOut > timeElapsed ) { + TOIContest.timeOuts[ pid ] -= timeElapsed; + } else if ( timeOut > 0 ) { + TOIContest.timeOuts[ pid ] = 0; + } + } + }, + + registerRefreshEvent: function() { + TOIContest.timeStarted = (new Date()).getTime(); + setTimeout(function () { + TOIContest.refreshTimeOuts(); + TOIContest.refreshTimeOutMessages(); + TOIContest.registerRefreshEvent(); + }, 1000); + }, };