var mData=new Hashtable();var mOps=new Array("+","-","*","/");var mRanges=new Array(20,50,100,500);var mRangeNames=new Array("0-20","20-50","50-100","100-500");var mSpeeds=new Array(1500,800,400,200);var mSpeedNames=new Array("Slower","Medium","Fast","Faster");var Delta=10;var SName='<span class="c1" >M</span><span class="c2" >a</span>th<span class="c1" >T</span><span class="c2" >o</span><span class="c1" >S</span><span class="c2" >u</span>cc<span class="c2" >e</span><span class="c4">ss</span> Calc Challenger';var SVersion="Version 5.0.0";function MCalcGame(a,g,d,j,e,h,i,c,f,b){this.SID=a;this.Low=j;this.High=e;this.Operations=h;this.TimeOut=i;this.TotalNum=c;this.CorrectNum=0;this.Answer=0;this.CurCnt=0;this.CurOper="+";this.Nums=null;this.Store=new Array();this.Width=g;this.Height=d;this.Left=0;this.Top=0;this.Cid=null;this.Running=false;this.StartMS=0;this.TimeMS=0;this.Login=f;this.Float=b;}function writeCalcGame(a){document.writeln('<div id="'+a.SID+'Out" style="width:'+(a.Width+60)+"px;height:"+(a.Height+132)+"px;line-height:120%;text-indent:0px;display:block;"+(a.Float?"float:right;":"")+'border-width:5px;border:double rgb(0,0,255);background:#7EC0EE;"><div id="'+a.SID+'Cmd" style="width:'+(a.Width+60)+'px;">'+configureAndHelp(a.SID)+'</div><div id="'+a.SID+'Blk" style="background-color:#EEE5DE;width:'+(a.Width+60)+"px;height:"+(a.Height)+"px;display:block;"+(a.Float?"float:right;":"")+'border-bottom:double rgb(0,0,255);border-top:double rgb(0,0,255);overflow:auto;"><span id="'+a.SID+'" style="margin:10px 10px 10px 10px;position:relative;top:10px;left:0px;background:#FF8C00;"></span></div><div style="width:'+(a.Width+60)+"px;display:absolute;bottom:0px;"+(a.Float?"float:right;":"")+'"><table style="width:'+(a.Width+50)+'px;font-size:8pt;"><tr><td>Answer Here:<input type="text" size="3" id="'+a.SID+'Ans" onkeyup="CheckAnswer(event)"/></td><td>QuestionNum<input type="text" size="2" id="'+a.SID+'Num" value="'+a.TotalNum+'" onchange="qNumchanged(event)" />:<span id="'+a.SID+'Cnt">0</span></td><td><input type="button" id="'+a.SID+'Run" onclick="reRun(\''+a.SID+'\')" value="Start" ></td><td><input type="button" id="'+a.SID+'Hlp" onclick="help(event)" value="Reset"/></td></tr></table></div></div>');}function help(c){if(!c){c=window.event;}var d=c.srcElement||c.currentTarget||c.target;var b=d.id;var a=b.substring(0,b.length-3);setHelp(a);}function setHelp(a){var c=mData.get(a);if(c){if(c.Running){clearTimeout(c.Cid);document.getElementById(c.SID+"Cnt").innerHTML=0;c.Running=false;}var b=document.getElementById(a+"Blk");if(b){b.innerHTML='<div style="width:'+(c.Width+50)+'px;text-align:center;padding-top:3mm;"><div style="font-weight:bold">'+SName+" - "+SVersion+'</div><table align="center" style="font-size:10pt;text-align:left;margin-top:3mm;"><caption style="text-decoration:underline;margin-top:3mm;">You can change the settings at any time</caption><tr><th>Operations:</th><td>The arithmetic operations;</td></tr><tr><th>Ranges:</th><td>The number range of the arithmetic operations;</td></tr><tr><th>Speed:</th><td>The speed to present each question;</td></tr><tr><th>QuestionNum:</th><td>The question number of each run.</td></tr></table><div style="padding-left:5mm;text-align:left;padding-top:5mm;padding-bottom:5mm;">Type your answer in the blank after "<b>Answer Here</b>" and push "Enter" to finalize.</div>Click <b>Start</b> to start challenging yourself!</div>';}}}function qNumchanged(event){if(!event){event=window.event;}var tgt=event.srcElement||event.currentTarget||event.target;var stid=tgt.id;var sid=stid.substring(0,stid.length-3);var gm=mData.get(sid);if(gm){try{gm.TotalNum=eval(tgt.value);}catch(err){gm.TotalNum=10;}}}function reRun(a){var e=mData.get(a);if(e&&!(e.Running)){e.CorrectNum=0;e.CurCnt=0;e.Store=new Array();e.Top=e.Height-Delta;var b=document.getElementById(a);if(!b){var c=document.getElementById(a+"Blk");if(c){c.innerHTML='<span id="'+a+'" style="margin:10px 10px 10px 10px;position:relative;top:10px;left:0px;background:#FF8C00;"></span>';}}runNext(a);var f=new Date();e.StartMS=f.getTime();}}function operationChanged(e){if(!e){e=window.event;}var h=e.srcElement||e.currentTarget||e.target;var d=h.id;var a=d.substring(0,d.length-3);var f=mData.get(a);if(f){var b=h.value;if(h.checked){for(var c=0;c<f.Operations.length;c++){if(f.Operations[c]==b){return;}}f.Operations.push(b);}else{var g=new Array();for(var c=0;c<f.Operations.length;c++){if(f.Operations[c]!=b){g.push(f.Operations[c]);}}if(g.length==0){g.push(b);h.checked=true;}f.Operations=g;}}}function rangeChanged(event){if(!event){event=window.event;}var tgt=event.srcElement||event.currentTarget||event.target;var stid=tgt.name;var sid=stid.substring(0,stid.length-3);var gm=mData.get(sid);if(gm){var v=eval(tgt.value);gm.High=v;for(var i=0;i<mRanges.length;i++){if(mRanges[i]==v){if(i>1){gm.Low=mRanges[i-1];}else{gm.Low=0;}return;}}}}function speedChanged(event){if(!event){event=window.event;}var tgt=event.srcElement||event.currentTarget||event.target;var stid=tgt.name;var sid=stid.substring(0,stid.length-3);var gm=mData.get(sid);if(gm){gm.TimeOut=eval(tgt.value);}}function CheckAnswer(c){if(!c){c=window.event;}if(c.keyCode==13){var e=c.srcElement||c.currentTarget||c.target;var b=e.id;var a=b.substring(0,b.length-3);var d=mData.get(a);d.Top=d.Height-Delta;clearTimeout(d.Cid);runNext(d.SID);}}function evalAnswer(gm){var stid=gm.SID+"Ans";var tgt=document.getElementById(stid);var uanswer;try{uanswer=eval(tgt.value);}catch(err){}var s=gm.Nums[0]+"&nbsp;"+getDisplay(gm.CurOper)+"&nbsp;"+gm.Nums[1]+"&nbsp;=&nbsp;";if(gm&&gm.Answer==uanswer){s+=uanswer;gm.CorrectNum+=1;}else{s+='<span style="color:red;text-decoration:line-through">&nbsp;'+tgt.value+"&nbsp;</span>";s+="&nbsp;&nbsp; ===> &nbsp;&nbsp; "+gm.Answer;}gm.Store[gm.CurCnt-1]=s;tgt.value="";tgt.focus();}function addCalcGame(a,g,d,j,e,h,i,c,f){var b=new MCalcGame(a,g,d,j,e,h,i,c,f,true);mData.put(a,b);writeCalcGame(b);setHelp(a);document.getElementById(a+"Ans").focus();}function addCalcGameNoFloat(a,g,d,j,e,h,i,c,f){var b=new MCalcGame(a,g,d,j,e,h,i,c,f,false);mData.put(a,b);writeCalcGame(b);setHelp(a);document.getElementById(a+"Ans").focus();}function getDisplay(a){if("-"==a){return"&minus;";}else{if("*"==a){return"&times;";}else{if("/"==a){return"&divide;";}else{return a;}}}}function setNumsAndAnswer1(sid){var gm=mData.get(sid);if(gm==null){return;}gm.CurCnt+=1;var ops=gm.Operations;if(ops&&ops.length>0){gm.CurOper=ops[Math.floor(Math.random()*ops.length)];}else{gm.CurOper="+";}if(gm.Nums==null){gm.Nums=new Array(2);}if(gm.CurOper=="-"){gm.Nums[0]=gm.Low+Math.round(Math.random()*(gm.High-gm.Low));gm.Nums[1]=Math.round(Math.random()*gm.Nums[0]);}else{if(gm.CurOper=="*"){gm.Nums[0]=Math.round(Math.sqrt(gm.Low+Math.random()*(gm.High-gm.Low)));if(gm.Nums[0]==0){gm.Nums[0]=1;}gm.Nums[1]=Math.round((1+Math.random()*(gm.High-1))/gm.Nums[0]);}else{if(gm.CurOper=="/"){gm.Nums[0]=Math.round(Math.sqrt(Math.random()*gm.High));if(gm.Nums[0]==0){gm.Nums[0]=1;}gm.Nums[1]=Math.ceil((1+Math.random()*(gm.High-1))/gm.Nums[0]);gm.Nums[0]=gm.Nums[0]*gm.Nums[1];}else{gm.Nums[0]=Math.round(Math.random()*gm.High);if(gm.Nums[0]<gm.Low){gm.Nums[1]=gm.Low-gm.Nums[0]+Math.round(Math.random()*(gm.High-gm.Low));}else{gm.Nums[1]=Math.round(Math.random()*(gm.High-gm.Nums[0]));}}}}gm.Answer=eval(gm.Nums[0]+gm.CurOper+gm.Nums[1]);}function runNext(b){var f=mData.get(b);if(f==null){return;}if(f){document.getElementById(f.SID+"Ans").focus();}if(!(f.Running)){f.Running=true;}if(f.Top>=(f.Height-Delta)){if(f.CurCnt>0){evalAnswer(f);}if(f.CurCnt>=f.TotalNum){var g=new Date();f.TimeMS=Math.round((g.getTime()-f.StartMS)/f.TotalNum);var a="<table width='300' border='1' align='center'><caption style=\"text-decoration:underline;\">Practice results</caption><tr><th>Total Questions</th><td>"+f.TotalNum+"</td></tr><tr><th>Correct Number</th><td>"+f.CorrectNum+"</td></tr><tr><th>Percentage</th><td>"+Math.round(f.CorrectNum*100/f.TotalNum)+"%</td></tr><tr><th>Time/Question</th><td>"+f.TimeMS+" ms</td></tr></table>";a+="<table align='center' width='300' ><caption style=\"text-decoration:underline;\">Details of all the questions</caption>";for(var c=0;c<f.Store.length;c++){a+="<tr><td>"+f.Store[c]+"</td></tr>";}a+="</table>";document.getElementById(f.SID+"Blk").innerHTML=a;f.Running=false;if(f.Login){saveGame(f,"MGSAVE");}return;}setNumsAndAnswer1(b);document.getElementById(f.SID+"Cnt").innerHTML=f.CurCnt;var e=f.Nums;document.getElementById(b).innerHTML=e[0]+"&nbsp;"+getDisplay(f.CurOper)+"&nbsp;"+e[1]+"&nbsp;=&nbsp;";f.Top=f.Top%(f.Height-Delta);f.Left=Math.round((f.Width-50)*Math.random());}var h=document.getElementById(b);h.style.top=f.Top+"px";h.style.left=f.Left+"px";h.innerHTML=h.innerHTML;f.Top=f.Top+Math.round((f.Height-Delta)/10);f.Cid=setTimeout("runNext('"+b+"');",Math.round(f.TimeOut*Math.log(10+f.High/20)/Math.log(10)));}function hasOperation(c,d){if(c&&d){var b=c.Operations;for(var a=0;a<b.length;a++){if(d==b[a]){return true;}}}return false;}function configureAndHelp(b){var d=mData.get(b);var a='<table align="center" style="border:solid 1px;width:'+(d.Width+50)+'px;font-size:8pt;text-align:right;line-height:50%;margin-top:1mm;margin-left:0px;"><caption style="padding:2mm;"><span style="font-size:10pt;font-weight:bold;text-decoration:underline;">'+SName+"</span></caption>";a+='<tr><td style="margin-left:-50px"><b>Operations:</b></td>';for(var c=0;c<mOps.length;c++){if(hasOperation(d,mOps[c])){a+="<td>"+getDisplay(mOps[c])+'<input type="checkbox" value="'+mOps[c]+'" id="'+b+"Op"+c+'" onclick="operationChanged(event)" checked="checked"/></td>';}else{a+="<td>"+getDisplay(mOps[c])+'<input type="checkbox" value="'+mOps[c]+'" id="'+b+"Op"+c+'" onclick="operationChanged(event)" /></td>';}}a+="</tr><tr><td><b>Ranges:</b></td>";for(var c=0;c<mRanges.length;c++){if(d&&d.High==mRanges[c]){a+="<td>"+mRangeNames[c]+'<input type="radio" value="'+mRanges[c]+'" name="'+b+'Rng" onclick="rangeChanged(event)" checked="checked"/></td>';}else{a+="<td>"+mRangeNames[c]+'<input type="radio" value="'+mRanges[c]+'" name="'+b+'Rng" onclick="rangeChanged(event)" /></td>';}}a+="</tr><tr><td><b>Speeds:</b></td>";for(var c=0;c<mSpeeds.length;c++){if(d&&d.TimeOut==mSpeeds[c]){a+="<td>"+mSpeedNames[c]+'<input type="radio" value="'+mSpeeds[c]+'" name="'+b+'Spd" onclick="speedChanged(event)" checked="checked"/></td>';}else{a+="<td>"+mSpeedNames[c]+'<input type="radio" value="'+mSpeeds[c]+'" name="'+b+'Spd" onclick="speedChanged(event)" /></td>';}}a+="</tr></table>";return a;}function urlEncode(c){var a;try{a=encodeURIComponent(c);}catch(b){a=escape(c);}return a.replace(/%20/g,"+");}function fetchData(e){var d=e.indexOf("[");var c=e.lastIndexOf("]");if(d==-1||c==-1){myWindow=window.open("","","width=600,height=400");myWindow.document.write(e);myWindow.focus();return;}e=e.substring(d+1,c);var a=e.indexOf("|");if(a!=-1){var b=e.substring(0,a);var f=document.getElementById(b);if(f){f.innerHTML='<div style="padding: 1mm 3mm;color:red;font-weight:bold;">'+e.substring(a+1)+"</div>"+f.innerHTML;}}}function saveGame(f,b){if(!f||f.TotalNum<10||f.TotalNum>f.CorrectNum){return;}else{var d="MGID="+f.SID+"Blk&MCMD="+b+"&MKEY="+urlEncode(f.Operations.sort()+"_"+f.High)+"&MGMS="+f.TimeMS;var a;try{a=new XMLHttpRequest();if(a.overrideMimeType){a.overrideMimeType("text/html");}}catch(c){try{a=new ActiveXObject("Msxml2.XMLHTTP");}catch(c){try{a=new ActiveXObject("Microsoft.XMLHTTP");}catch(c){alert("Your browser does not support AJAX and you may need to consider to update your browser!");return;}}}a.onreadystatechange=function(){if(a.readyState==4){fetchData(a.responseText);}};a.open("POST","http://"+document.domain+"/DoMath.do",true);a.setRequestHeader("Content-type","application/x-www-form-urlencoded");a.send("MAJAX=1&MService=MGame_4&"+d);}}
