(function(){ var supportsPassive=false; try { var opts=Object.defineProperty({}, 'passive', { get:function(){ supportsPassive=true; }}); window.addEventListener('testPassive', null, opts); window.removeEventListener('testPassive', null, opts); } catch(e){} function init(){ var input_begin=''; var keydowns={}; var lastKeyup=null; var lastKeydown=null; var keypresses=[]; var modifierKeys=[]; var correctionKeys=[]; var lastMouseup=null; var lastMousedown=null; var mouseclicks=[]; var mousemoveTimer=null; var lastMousemoveX=null; var lastMousemoveY=null; var mousemoveStart=null; var mousemoves=[]; var touchmoveCountTimer=null; var touchmoveCount=0; var lastTouchEnd=null; var lastTouchStart=null; var touchEvents=[]; var scrollCountTimer=null; var scrollCount=0; var correctionKeyCodes=[ 'Backspace', 'Delete', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End', 'PageUp', 'PageDown' ]; var modifierKeyCodes=[ 'Shift', 'CapsLock' ]; var forms=document.querySelectorAll('form[method=post]'); for(var i=0; i < forms.length; i++){ var form=forms[i]; var formAction=form.getAttribute('action'); if(formAction){ if(formAction.indexOf('http://')==0||formAction.indexOf('https://')==0){ if(formAction.indexOf('http://' + window.location.hostname + '/')!=0&&formAction.indexOf('https://' + window.location.hostname + '/')!=0){ continue; }} } form.addEventListener('submit', function (){ var ak_bkp=prepare_timestamp_array_for_request(keypresses); var ak_bmc=prepare_timestamp_array_for_request(mouseclicks); var ak_bte=prepare_timestamp_array_for_request(touchEvents); var ak_bmm=prepare_timestamp_array_for_request(mousemoves); var input_fields={ 'bib': input_begin, 'bfs': Date.now(), 'bkpc': keypresses.length, 'bkp': ak_bkp, 'bmc': ak_bmc, 'bmcc': mouseclicks.length, 'bmk': modifierKeys.join(';'), 'bck': correctionKeys.join(';'), 'bmmc': mousemoves.length, 'btmc': touchmoveCount, 'bsc': scrollCount, 'bte': ak_bte, 'btec':touchEvents.length, 'bmm':ak_bmm }; var akismet_field_prefix='ak_'; if(this.getElementsByClassName){ var possible_akismet_containers=this.getElementsByClassName('akismet-fields-container'); for(var containerIndex=0; containerIndex < possible_akismet_containers.length; containerIndex++){ var container=possible_akismet_containers.item(containerIndex); if(container.getAttribute('data-prefix') ){ akismet_field_prefix=container.getAttribute('data-prefix'); break; }} } for(var field_name in input_fields){ var field=document.createElement('input'); field.setAttribute('type', 'hidden'); field.setAttribute('name', akismet_field_prefix + field_name); field.setAttribute('value', input_fields[ field_name ]); this.appendChild(field); }}, supportsPassive ? { passive: true }:false); form.addEventListener('keydown', function(e){ if(e.key in keydowns){ return; } var keydownTime=(new Date()).getTime(); keydowns[ e.key ]=[ keydownTime ]; if(! input_begin){ input_begin=keydownTime; } var lastKeyEvent=Math.max(lastKeydown, lastKeyup); if(lastKeyEvent){ keydowns[ e.key ].push(keydownTime - lastKeyEvent); } lastKeydown=keydownTime; }, supportsPassive ? { passive: true }:false); form.addEventListener('keyup', function(e){ if(!(e.key in keydowns) ){ return; } var keyupTime=(new Date()).getTime(); if('TEXTAREA'===e.target.nodeName||'INPUT'===e.target.nodeName){ if(-1!==modifierKeyCodes.indexOf(e.key) ){ modifierKeys.push(keypresses.length - 1); }else if(-1!==correctionKeyCodes.indexOf(e.key) ){ correctionKeys.push(keypresses.length - 1); }else{ var keydownTime=keydowns[ e.key ][0]; var keypress=[]; keypress.push(keyupTime - keydownTime); if(keydowns[ e.key ].length > 1){ keypress.push(keydowns[ e.key ][1]); } keypresses.push(keypress); }} delete keydowns[ e.key ]; lastKeyup=keyupTime; }, supportsPassive ? { passive: true }:false); form.addEventListener("focusin", function(e){ lastKeydown=null; lastKeyup=null; keydowns={};}, supportsPassive ? { passive: true }:false); form.addEventListener("focusout", function(e){ lastKeydown=null; lastKeyup=null; keydowns={};}, supportsPassive ? { passive: true }:false); } document.addEventListener('mousedown', function(e){ lastMousedown=(new Date()).getTime(); }, supportsPassive ? { passive: true }:false); document.addEventListener('mouseup', function(e){ if(! lastMousedown){ return; } var now=(new Date()).getTime(); var mouseclick=[]; mouseclick.push(now - lastMousedown); if(lastMouseup){ mouseclick.push(lastMousedown - lastMouseup); } mouseclicks.push(mouseclick); lastMouseup=now; lastKeydown=null; lastKeyup=null; keydowns={};}, supportsPassive ? { passive: true }:false); document.addEventListener('mousemove', function(e){ if(mousemoveTimer){ clearTimeout(mousemoveTimer); mousemoveTimer=null; }else{ mousemoveStart=(new Date()).getTime(); lastMousemoveX=e.offsetX; lastMousemoveY=e.offsetY; } mousemoveTimer=setTimeout(function(theEvent, originalMousemoveStart){ var now=(new Date()).getTime() - 500; var mousemove=[]; mousemove.push(now - originalMousemoveStart); mousemove.push(Math.round(Math.sqrt(Math.pow(theEvent.offsetX - lastMousemoveX, 2) + Math.pow(theEvent.offsetY - lastMousemoveY, 2) ) ) ); if(mousemove[1] > 0){ mousemoves.push(mousemove); } mousemoveStart=null; mousemoveTimer=null; }, 500, e, mousemoveStart); }, supportsPassive ? { passive: true }:false); document.addEventListener('touchmove', function(e){ if(touchmoveCountTimer){ clearTimeout(touchmoveCountTimer); } touchmoveCountTimer=setTimeout(function (){ touchmoveCount++; }, 500); }, supportsPassive ? { passive: true }:false); document.addEventListener('touchstart', function(e){ lastTouchStart=(new Date()).getTime(); }, supportsPassive ? { passive: true }:false); document.addEventListener('touchend', function(e){ if(! lastTouchStart){ return; } var now=(new Date()).getTime(); var touchEvent=[]; touchEvent.push(now - lastTouchStart); if(lastTouchEnd){ touchEvent.push(lastTouchStart - lastTouchEnd); } touchEvents.push(touchEvent); lastTouchEnd=now; lastKeydown=null; lastKeyup=null; keydowns={};}, supportsPassive ? { passive: true }:false); document.addEventListener('scroll', function(e){ if(scrollCountTimer){ clearTimeout(scrollCountTimer); } scrollCountTimer=setTimeout(function (){ scrollCount++; }, 500); }, supportsPassive ? { passive: true }:false); } function prepare_timestamp_array_for_request(a, limit){ if(! limit){ limit=100; } var rv=''; if(a.length > 0){ var random_starting_point=Math.max(0, Math.floor(Math.random() * a.length - limit) ); for(var i=0; i < limit&&i < a.length; i++){ rv +=a[ random_starting_point + i ][0]; if(a[ random_starting_point + i ].length >=2){ rv +="," + a[ random_starting_point + i ][1]; } rv +=";"; }} return rv; } if(document.readyState!=='loading'){ init(); }else{ document.addEventListener('DOMContentLoaded', init); }})();