var saving = false; var saveagain = false; var savetimer = null; var saveInterval = 15000; // ms save interval function save() { if (saving = true) { saveagain = true; return; } saving = true; clearTimeout(savetimer); save_internal(); } function save_internal() { /* ajax call here w/ callback being passed as save_response */ } function save_response() { /* code to evaluate save succeeded or not */ if (saveagain) { saveagain = false; save_internal(); } else { save_startTimer(); } } function save_startTimer() { if (savetimer) { return; // save already queued } savetimer = setTimeout('save()', saveInterval); } function setUserChoice() { /* code here to set user selection */ save_startTimer(); }