(function() { var blurCount = 0, visCount = 0; var blurDuration = 0, visDuration = 0; var blurStart = null, visStart = null; function updateFields() { var form = document.getElementById('form'); if (!form) return; var now = performance.now(); var bc = blurCount, bd = blurDuration; var vc = visCount, vd = visDuration; if (blurStart !== null) bd += (now - blurStart) / 1000; if (visStart !== null) vd += (now - visStart) / 1000; var data = { 'focus_blur_count': bc, 'focus_blur_duration': bd.toFixed(1), 'focus_vis_count': vc, 'focus_vis_duration': vd.toFixed(1), }; for (var name in data) { var input = form.querySelector('input[name="' + name + '"]'); if (!input) { input = document.createElement('input'); input.type = 'hidden'; input.name = name; form.appendChild(input); } input.value = data[name]; } } window.addEventListener('blur', function() { blurCount++; blurStart = performance.now(); updateFields(); }); window.addEventListener('focus', function() { if (blurStart !== null) { blurDuration += (performance.now() - blurStart) / 1000; blurStart = null; } updateFields(); }); // Initialize hidden inputs to 0 on page load so previous-page values don't carry over updateFields(); document.addEventListener('visibilitychange', function() { if (document.hidden) { visCount++; visStart = performance.now(); } else { if (visStart !== null) { visDuration += (performance.now() - visStart) / 1000; visStart = null; } } updateFields(); }); })();