function updateKeyboard(A){if(!g_exercise.isFinished()){if(g_isVirtualKeyboardPresent){var C=g_exercise.getToken();g_exercise.addInputKeyCode(A);var B=g_exercise.getToken();if(C!=B){selectNeededKeys(C,false);if(B.length>0){selectNeededKeys(B,true)}}redrawExercise()}else{g_exercise.addInputKeyCode(A);redrawExercise()}}if(g_exercise.isFinished()){if(C!=null&&g_isVirtualKeyboardPresent){selectNeededKeys(C,false);C=null}exerciseFinished()}}var KeyHandler=function(){this.keyCode=0;this.keyFlags=kbdNone;this.mode="exercise";this.setMode=function(A){this.mode=A};this.handler=function(B){var A=false;switch(this.mode){case"menu":return this.menuKeyHandler(B);break;default:return this.exerciseKeyHandler(B);break}return false};this.exerciseKeyHandler=function(B){var C=false;if(window.event&&!window.opera){B=window.event;C=true}if(B.ctrlKey||this.altKey){return true}if(B.type=="keydown"){this.keyCode=B.keyCode;this.keyFlags=kbdNone;if(B.shiftKey){if(B.shiftLeft==true){this.keyFlags|=kbdLeft}else{if(B.shiftLeft==false){this.keyFlags|=kbdRight}else{this.keyFlags|=kbdLeft|kbdRight}}}if(C&&this.keyCode==8){updateKeyboard(8);if(!C){B.preventDefault()}return false}return true}else{if(B.type=="keypress"&&B.which!=0){var A=B.which;if(!A){A=B.keyCode}if((A!=16)&&(A!=17)&&(A!=18)){updateKeyboard(A)}}}if(!C){B.preventDefault()}return false};this.menuKeyHandler=function(A){ie=false;if(window.event&&!window.opera){A=window.event;ie=true}if(A.ctrlKey||this.altKey){return true}var B=null;switch(String.fromCharCode(A.keyCode).toLowerCase()){case"\r":case"\n":if($("#AdviceRepeatExerciseBox").is(":visible")){B="repeat"}else{B="continue"}break;case"c":B="continue";break;case"r":B="repeat";break}if(B!=null){this.mode="exercise";switch(B){case"repeat":goExercise(0);break;case"continue":goExercise(+1);break}return true}if(!ie){A.preventDefault()}return false}};function cursorHandler(){var B=false;var A=1000;if((!g_exercise.getStatistics().paused())&&($("#Cursor").is(":visible")==false)){B=true}if(g_exercise.isFinished()){$("#Cursor").hide()}else{if(B){$("#Cursor").show()}else{$("#Cursor").hide()}setTimeout("cursorHandler()",A)}return true}var g_exerciseFinishedCalled=false;function saveStatistics(){if(g_isGuestUser){return}var A=g_exercise.getStatistics();var B=base64_encode(g_exercise.getUserInput());$.post(g_basedir_with_lang+"/typing-tutor/practice",{actionkey:"exercise-stats",lesson:g_lessonID,exercise:g_exerciseID,time:A.getTimeInMS(),nchars:A.getNumberOfCharacters(),errors:A.getNumberOfErrors(),score:A.getScore(),text:B})}function exerciseFinished(){if(g_exerciseFinishedCalled){return}g_exerciseFinishedCalled=true;drawStatistics(false);saveStatistics();showExerciseScores()}function showExerciseScores(){$("#VirtualKeyboard").hide();$("#ShowKeyboardMessage").hide();$("#KeyboardOptions").hide();animateExerciseStatistics();setTimeout("g_keyHandler.setMode ('menu');",1250)}function animateExerciseStatistics(){var A=g_exercise.getStatistics();var C=parseInt($("#StatisticsTotalScore").html());$("#ExerciseSpeed").html("0");$("#ExerciseAccuracy").html("0");$("#ExerciseBonus").html("0");$("#ExerciseScore").html("0");$("#ExerciseErrors").html("0");$("#TotalScore").html(C);if(A.getAccuracy()<g_minAccuracy){$("#WarningNotEnoughAccuracy").show();$("#AdviceRepeatExerciseBox").show()}if(A.getCPM()<g_minCPM){$("#WarningNotEnoughSpeed").show();$("#AdviceRepeatExerciseBox").show()}var B=0;if(A.getBonus()!=0){if(!A.isPerfect()){$("#ExerciseInfoPerfectText").hide();$("#ExerciseInfoBonusText").show()}$("#ExerciseInfoBonus").html(A.getBonus());$("#ExerciseInfoScores").hide();$("#ExerciseInfoMessage").show();setTimeout(function(){$("#ExerciseScoreTable").fadeIn(1000)},250);setTimeout(function(){$("#ExerciseScoreOptions").fadeIn(1000)},250);setTimeout(function(){$("#ExerciseInfoMessage").fadeOut(1000)},2500);setTimeout(function(){$("#ExerciseInfoScores").fadeIn(1000)},3750);B=4300}else{$("#ExerciseInfoScores").show();$("#ExerciseInfoMessage").hide();$("#ExerciseScoreTable").fadeIn(1500);$("#ExerciseScoreOptions").fadeIn(1500);B=1750}setTimeout("animateExerciseResults ("+C+", 0, 0, 0, 0, 0);",B)}function _getExpIncrement(A){var B=10;if(A>=500){B=100}else{if(A>=250){B=50}else{if(A>=100){B=25}}}return B}function animateExerciseResults(K,B,D,C,I,J){var G=g_exercise.getStatistics();var E=!g_exercise.isFinished();var A=0;var F=1;var H=0;if(D!=G.getCPM()){H=0}else{if(C!=G.getAccuracy()){H=1}else{if(I!=G.getBonus()){H=2}else{if(J!=G.getNumberOfErrors()){H=3}else{H=100}}}}switch(H){case 0:inc=_getExpIncrement(G.getCPM()-D);A=getExerciseResultsStep(G.getCPM()-D,inc);D+=A;B+=A;$("#ExerciseSpeed").html(D+" cpm");$("#ExerciseScore").html(B);$("#TotalScore").html(K+B);F=25;if(D==0){F=1000}break;case 1:inc=_getExpIncrement(G.getAccuracy()-C);A=getExerciseResultsStep(G.getAccuracy()-C,inc);C+=A;B+=5*A;$("#ExerciseAccuracy").html(C+" %");$("#ExerciseScore").html(B);$("#TotalScore").html(K+B);F=25;if(C==0){F=1000}break;case 2:inc=_getExpIncrement(G.getBonus()-I);A=getExerciseResultsStep(G.getBonus()-I,inc);I+=A;B+=A;$("#ExerciseBonus").html(I);$("#ExerciseScore").html(B);$("#TotalScore").html(K+B);F=25;if(I==0){F=1000}break;case 3:inc=_getExpIncrement(G.getNumberOfErrors()-J);A=getExerciseResultsStep(G.getNumberOfErrors()-J,inc);J+=A;if(J>2){if(B<50*A){B=0}else{B-=50*A}}$("#ExerciseErrors").html(J);$("#ExerciseScore").html(B);$("#TotalScore").html(K+B);F=100;if(J==0){F=1000}break;default:E=true}if(!E){setTimeout("animateExerciseResults("+K+","+B+","+D+","+C+","+I+","+J+");",F)}}function getExerciseResultsStep(B,A){if(B==0){return 0}if(B<A){A=B}return A}function drawStatistics(A){if(!g_exercise.isFinished()||!A){g_exercise.drawStatistics({cpm:"#StatisticsCPM",time:"#StatisticsTime",accuracy:"#StatisticsAccuracy"});if(A){setTimeout("drawStatistics(true)",1000)}}};