var a=du();var b=new Array();var d;var e=new Array();var f;var g;function cf(){cj();window.onresize=cj;cg();document.getElementById('ee').focus();}function cg(){cl('Refresh page for more tips.');var table=document.getElementById('eb');var tips=6;var h=Math.round(Math.random()*(tips-1))+1;switch(h){case 6:{dm(table, di('80% of 15 by 20'), di('240'));dm(table, di('9 in 15'), di('0.6'));dm(table, di('8:43 to 9:32'), di('0:49'));dm(table, '&nbsp;', '&nbsp;', ' ');dm(table, '<pre>Simplify calculations\nwith several natural\nlanguage operators.</pre>', '<strong>Try it!</strong>', ' ');break;}case 5:{dm(table, di('100'), di('100'));dm(table, di('-14.35'), di('85.65'));dm(table, di('-51.08'), di('34.57'));dm(table, '&nbsp;', '&nbsp;', ' ');dm(table, '<pre>Perform a series\nof adding machine\nstyle calculations.</pre>', '<strong>Try it!</strong>', ' ');break;}case 4:{dm(table, di('2:45 * 3'), di('8:15'));dm(table, di('1:00 / 5'), di('0:12'));dm(table, di('6:00-3:15'), di('2:45'));dm(table, '&nbsp;', '&nbsp;', ' ');dm(table, '<pre>Calculate with\nquantities of time.</pre>', '<strong>Try it!</strong>', ' ');break;}case 3:{dm(table, di('2ln(e^3)'), di('6'));dm(table, di('1+sin(1/2pi)'), di('2'));dm(table, di('3 * 12 / 4'), di('9'));dm(table, '&nbsp;', '&nbsp;', ' ');dm(table, '<pre>Sum the above expressions\nby clicking each one\nfollowed by a <strong>+</strong></pre>', '<strong>Try it!</strong>', ' ');break;}case 2:{dm(table, di('3.96+1.08'), di('5.04'));dm(table, di('117.88+23.15'), di('141.03'));dm(table, '&nbsp;', '&nbsp;', ' ');dm(table, '<pre>Click both the above\nexpressions to multipy\nthem together.</pre>', '<strong>Try it!</strong>', ' ');break;}default:{dm(table, di('(2+2)^2'), di('16'));dm(table, '&nbsp;', '&nbsp;', ' ');dm(table, '<pre>Click the expression\nabove to edit or\nadd to it below.</pre>', '<strong>Try it!</strong>', ' ');break;}}}function ch(){var l=document.getElementById('ButtonsDiv');var m=0;if(!l.hasChildNodes())return;l=l.firstChild;m++;while(m){while(1){if(l.nodeName == 'P'){l.attachEvent("onmouseover", ci);l.attachEvent("onmouseout", ci);}if(l.firstChild){l=l.firstChild;m++;}else break;}while(!l.nextSibling){l=l.parentNode;if(! --m)return;}l=l.nextSibling;}}function ci(e){if(e.type=="mouseover")e.srcElement.style.color="#6565FF";else if(e.type=="mouseout")e.srcElement.style.color="black";}function cj(){var n;var o=document.documentElement.clientHeight;var p=document.getElementById('bo');var q=160+50;var r=550;var s=4;var t=document.getElementById('ButtonsDiv');var u=r-2 * 100;var v=560;var w=1;for(var x=0;x<2-w;x++){n=document.documentElement.clientWidth;var y=q;var z=n-(y+q)-s;if(z<r){y -=(r-z);if(y<0)y=0;z=r;}p.style.width=z+"px";p.style.margin="auto auto auto "+y+"px";var ba=z-200;if(ba>v)ba=v;else if(ba<u)ba=u;t.style.width=ba+"px";if(n != document.documentElement.clientWidth&&w)w--;}if(o<300)o=300;var fontSize=o / 890;document.body.style.fontSize=fontSize + 'em';}function ck(bf){cl('');var bb=document.getElementById('ee');bb.focus();if(bf){if(bf == 'Clear') bb.value = '';else if(bf == 'PlusMinus') ct('(-', ')');else if(bf == 'SquareRoot') bb.value += '^(1/2)';else if(db(bf))bb.value += ' ' + bf + ' ';else if(bf == '(...)') bb.value = '(' + bb.value + ')';else if(bf == '...') bb.value=cm(bb.value);else if(bf == '=') cq();else bb.value += bf;}}function cl(bf){document.getElementById('eg').innerHTML=bf;return false;}function cm(bf){if(!cu(bf)){cl('Invalid expression.');return bf;}else if(bf.charAt(0)== '(' && bf.charAt(bf.length-1)== ')'){var bc=bf.substring(1, bf.length-1);if(!cu(bc)){cl('Cannot remove outermost parentheses without invalidating expression.');return bf;}else return bc;}else{cl('No outermost parentheses to remove.');return bf;}}function cn(bf){var bd=/\s*(.*?)([\s\d\(]|$)/;var be=bf.match(bd);if(!be)return false;return db(be[1])| dc(be[1]);}function co(TwoDArray){if(TwoDArray[TwoDArray.length-1].length){return TwoDArray[TwoDArray.length-1][TwoDArray[TwoDArray.length-1].length-1];}else return '';}function cp(bf){var bd=/>(.+)</;if(bf){be=bf.match(bd);return be[1];}else return '';}function cq(){if(d){cl('Waiting for server response...');return;}if(!b[0])df();var bf=document.getElementById('ee').value;var bg = '';if(!bf){bf=cp(co(b));if(!cn(bf))bf = '';}if(cn(bf))bg=cp(co(e));if(cu(bg+bf)){dj(bf);dv(bg+bf);if(bg)cl('Assuming: ' + bg+bf);}else cl('Invalid expression.');}function cr(bf){var bh="";var bi=0;var x=bf.length-1;var bj=0;var bk=0;if(bf.length==0)return "";bi=bf.charCodeAt(x);if(((bi>0x2F)&&(bi<0x3A))||(bi==0x2E)){do{x--;bi=bf.charCodeAt(x);if((bi==0x2D||bi==0x2B)&&(x>1)&&(bf.charCodeAt(x-1)==0x45||bf.charCodeAt(x-1)==0x65)&&(da(bf.charAt(x-2)))){x -= 2;bi=bf.charCodeAt(x);}else if((bi==0x45||bi==0x65)&&(x>0)&&(da(bf.charAt(x-1)))){x -= 1;bi=bf.charCodeAt(x);}}while((x>-1)&&(((bi>0x2F)&&(bi<0x3A))||(bi==0x2E)))x++;}else if(bi==0x29){bk=1;do{x--;bi=bf.charCodeAt(x);if(bi==0x28)bj++;else if(bi==0x29)bk++;}while((x>0)&&(bj<bk));x -= cy(bf, x);}else if(bi==0x65);else if(bi==0x69&&(x>0)&&(bf.charCodeAt(x-1)==0x70))x--;else return "";var bl=x-1;while(bl>-1&&bf.charAt(bl)== ' ') bl--;if(bl>-1&&bf.charAt(bl)== '-'){var bm=bl-1;while(bm>-1&&(prech=bf.charAt(bm))== ' ') bm--;if(bm<0||db(prech)||prech == '(') x=bl;}bh=bf.substring(x, bf.length);if(cu(bh))return bh;else return "";}function cs(TextBox){var bn=cr(TextBox.value);TextBox.value=TextBox.value.substring(0, TextBox.value.length-bn.length);return bn;}function ct(leftstr, rightstr){var bo=document.getElementById('ee');var bp=cs(bo);if(bp)bo.value += leftstr+bp+rightstr;else cl('No operand found.');}function cu(bf){var bj=false;var bk=false;var bq=false;var br=false;var bs=false;var bt=false;var bu=false;var bv=false;var bw=true;var x=0;var bi = ' ';var bx=0;var bm=0;if(bf.length<1)return false;if(de(bf))return true;var by=rpcount=0;for(var bl=0;bl<bf.length;bl++){bi=bf.charAt(bl);if(bi == '(') by++;if(bi == ')') rpcount++;if(by<rpcount)return false;}if(by != rpcount)return false;while(x<bf.length){bi=bf.charAt(x);if(bi == '-'){if(!(bj||bk||bq||br||bu||bw))return false;if(bj||br||bw){bt=true;bj=bk=bq=br=bw=false;x++;bi=bf.charAt(x);}}if(bi == ' ');else if(bi == '('){if(!(bj||bk||bq||br||bs||bt||bu||bw))return false;bj=true;bk=bq=br=bs=bt=bu=bw=false;}else if(bi == ')'){if(!(bk||bq||bu))return false;bk=true;bq=bu=false;}else if(db(bi)){if(!(bk||bq||bu))return false;br=true;bk=bq=bu=false;}else if(da(bi)){if(!(bj||bk||br||bt||bu||bw))return false;bq=true;bj=bk=br=bt=bu=bw=false;bx=x+cw(bf.substring(x, bf.length));if(!cz(bf.substring(x, bx+1)))return false;x=bx;}else if((bi == 'e' && bf.charAt(x+1)== '^')||(bi == 'p' && bf.charAt(x+1)== 'i')){if(!(bj||bk||bq||br||bt||bu||bw))return false;bu=true;bj=bk=bq=br=bt=bw=false;if(bi == 'p') x++;}else if(bi == 'E' || bi == 'e'){if(!(bq||bu))return false;bq=true;bu=false;x++;bx=x+cx(bf.substring(x, bf.length));if(x>bx)return false;if(!cz(bf.substring(x, bx+1)))return false;x=bx;}else if((bx=dd(bf.substring(x, bf.length)))>0){if(!(bj||bk||bq||br||bt||bu||bw))return false;bs=true;bj=bk=bq=br=bt=bu=bw=false;x += bx-1;}else if(bi == '%' || bf.length-x >= 7&&bf.substring(x, x+7)== 'percent'){if(!(bk||bq||bu))return false;bq=true;bk=bu=false;if(bi != '%') x += 7-1;}else if(bm=cv(bf.substring(x, bf.length))){if(!(bk||bq||bu))return false;br=true;bk=bq=bu=false;x += bm-1;}else return false;x++;}if(br||bw||bs||bt)return false;else return true;}function cv(bf){var bd=/^and/;if(bf.match(bd))return 3;bd=/^to/;if(bf.match(bd))return 2;bd=/^from/;if(bf.match(bd))return 4;bd=/^of/;if(bf.match(bd))return 2;bd=/^by/;if(bf.match(bd))return 2;bd=/^in/;if(bf.match(bd))return 2;bd=/^per/;if(bf.match(bd))return 3;return 0;}function cw(bf){var x=0;while(x<bf.length&&da(bf.charAt(x)))x++;return x-1;}function cx(bf){var x=0;var bi = ' ';if(bf.length<1)return -1;bi=bf.charCodeAt(x);if(bi==0x2B||bi==0x2D){if(bf.length<2)return -1;x++;bi=bf.charCodeAt(x);}while(x<bf.length&&(bi>0x2F&&bi<0x3A)){x++;bi=bf.charCodeAt(x);}return x-1;}function cy(bf, x){if(x<2)return 0;else sub=bf.substring(x-2, x);if(sub == 'ln') return 2;if(x<3)return 0;else sub=bf.substring(x-3, x);if(sub == 'sin' || sub == 'cos' || sub == 'tan' || sub == 'log'){if(x>5){sub=bf.substring(x-6, x);if(sub == 'arcsin' || sub == 'arccos' || sub == 'arctan') return 6;else return 3;}else return 3;}if(x<4)return 0;else sub=bf.substring(x-4, x);if(sub == 'logb') return 4;else return 0;}function cz(bf){var x=0;var bz=0;var ca=0;while(x<bf.length){if(bf.charAt(x)== '.'){if(bz)return false;bz++;}else if(bf.charAt(x)== ':'){if(ca >= 2||bz)return false;ca++;}x++;}if(bf.length==bz+ca)return false;return true;}function da(ch){var bi=ch.charCodeAt(0);if((bi>0x2F&&bi<0x3A)||bi==0x2E||bi==0x3A)return true;else return false;}function db(bi){if(bi == '^' || bi == '*' || bi == '/' || bi == '+' || bi == '-') return true;return false;}function dc(s){if(s == 'and' || s == 'to' || s == 'from' || s == 'of' || s == 'by' || s == 'in' || s == 'per' || s == 'percent' || s == '%') return true;return false;}function dd(bf){if(bf.length<2)return 0;else sub=bf.substring(0, 2);if(sub == 'ln') return 2;if(bf.length<3)return 0;else sub=bf.substring(0, 3);if(sub == 'sin' || sub == 'cos' || sub == 'tan' || sub == 'log'){if(bf.charAt(3)== 'b') return 4;else return 3;}if(bf.length<6)return 0;else sub=bf.substring(0, 6);if(sub == 'arcsin' || sub == 'arccos' || sub == 'arctan') return 6;else return 0;}function de(bf){if(bf=="keyword")return true;else return false;}function df(){b[0]=new Array();e[0]=new Array();ds(document.getElementById('eb'));dg();}function dg(){f=new Array();g=new Array();f[0]=new Array();g[0]=new Array();}function dh(bf){var bd=/^(\(|[a-zA-Z]).*\)$/;if(bd.test(bf)||cn(bf))document.getElementById('ee').value += bf;else document.getElementById('ee').value += '(' + bf + ')';ck();}function di(bf){return "<a onclick='dh(this.innerHTML);return false;' href='#' onmouseover='return true;'>"+bf+"</a>";}function dj(bf){d=bf;}function dk(bf){b[b.length-1].push(di(d));e[e.length-1].push(di(bf));}function dl(){dm(document.getElementById('eb'),b[b.length-1][b[b.length-1].length-1],e[e.length-1][e[e.length-1].length-1]);dg();objDiv=document.getElementById('ea');objDiv.scrollTop=objDiv.scrollHeight;}function dm(table, expression, result, relation){if(!relation)relation="&nbsp;=&nbsp;";row=table.insertRow(-1);cell=row.insertCell(0);cell.innerHTML=expression;cell=row.insertCell(1);cell.innerHTML=relation;cell=row.insertCell(2);cell.innerHTML=result;}function dn(){dq(b, f);dq(e, g);dr(document.getElementById('eb'), b[b.length-1], e[e.length-1]);}function dp(){dq(f, b);dq(g, e);dr(document.getElementById('eb'), b[b.length-1], e[e.length-1]);}function dq(popA, pushA){if(popA[popA.length-1].length>0)pushA[pushA.length-1].push(popA[popA.length-1].pop());else if(popA.length>1)pushA.push(popA.pop());}function dr(table, lArray, rArray){if(lArray.length != rArray.length)return false;ds(table);for(var x=0;x<lArray.length;x++){dm(table, lArray[x], rArray[x]);}return true;}function ds(table){while(table.rows.length>0)table.deleteRow(0);}function dt(){ds(document.getElementById('eb'));if(b[b.length-1].length>0)b[b.length]=new Array();if(e[e.length-1].length>0)e[e.length]=new Array();dg();return;}function du(){var a;if(window.ActiveXObject){try{a=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){a=false;}}else{try{a=new XMLHttpRequest();}catch(e){a=false;}}if(!a)alert("Error creating the XMLHttpRequest object.");else return a;}function dv(bf){if(a.readyState==4||a.readyState==0){a.open("GET", "response.php?input="+encodeURIComponent(bf), true);a.onreadystatechange=dw;a.send(null);}else{setTimeout('dv()', 1000);}}function dw(){if(a.readyState==4){if(a.status==200){var cb=a.responseXML;var cc=cb.documentElement;var cd=cc.getElementsByTagName('result').item(0).firstChild;var ce=cc.getElementsByTagName('message').item(0).firstChild;var result=cd ? cd.data : 'error';var message=ce ? ce.data : '';if(result != 'error'){dk(result);d = '';if(document.getElementById('eg').innerHTML == 'Waiting for server response...') cl('');document.getElementById('ee').value = '';dl();}else cl(message);}else alert("There was a problem accessing the server: "+a.statusText);}}
