Calculator=function(){this.endNumber=true;this.mem=0;this.carry=10;this.hexnum="0123456789abcdef";this.angle="d";this.stack="";this.level="0";this.layer=0;this.inputkey=function(key){var index=key.charCodeAt(0);if((this.carry==2&&(index==48||index==49))||(this.carry==8&&index>=48&&index<=55)||(this.carry==10&&(index>=48&&index<=57||index==46))||(this.carry==16&&((index>=48&&index<=57)||(index>=97&&index<=102))));if(this.endNumber){this.endNumber=false;document.getElementById("display").value=key;}else if(document.getElementById("display").value==null||document.getElementById("display").value=="0")document.getElementById("display").value=key;else document.getElementById("display").value+=key};this.changeSign=function(){if(document.getElementById("display").value!="0")if(document.getElementById("display").value.substr(0,1)=="-")document.getElementById("display").value=document.getElementById("display").value.substr(1);else document.getElementById("display").value="-"+document.getElementById("display").value};this.inputfunction=function(fun,shiftfun){this.endNumber=true;if(document.getElementById("shiftf").checked)document.getElementById("display").value=this.decto(this.funcalc(shiftfun,(this.todec(document.getElementById("display").value,this.carry))),this.carry);else document.getElementById("display").value=this.decto(this.funcalc(fun,(this.todec(document.getElementById("display").value,this.carry))),this.carry);document.getElementById("shiftf").checked=false;document.getElementById("hypf").checked=false;this.inputshift();};this.inputtrig=function(trig,arctrig,hyp,archyp){if(document.getElementById("hypf").checked)this.inputfunction(hyp,archyp);else this.inputfunction(trig,arctrig)};this.operation=function(join,newlevel){this.endNumber=true;var temp=this.stack.substr(this.stack.lastIndexOf("(")+1)+document.getElementById("display").value;while(newlevel!=0&&(newlevel<=(this.level.charAt(this.level.length-1)))){temp=this.parse(temp);this.level=this.level.slice(0,-1)};if(temp.match(/^(.*\d[\+\-\*\/\%\^\&\|x])?([+-]?[0-9a-f\.]+)$/))document.getElementById("display").value=RegExp.$2;this.stack=this.stack.substr(0,this.stack.lastIndexOf("(")+1)+temp+join;document.getElementById("operator").value=" "+join+" ";this.level=this.level+newlevel};this.addbracket=function(){this.endNumber=true;document.getElementById("display").value=0;this.stack=this.stack+"(";document.getElementById("operator").value="   ";this.level=this.level+0;this.layer+=1;document.getElementById("bracket").value="(="+this.layer};this.disbracket=function(){this.endNumber=true;var temp=this.stack.substr(this.stack.lastIndexOf("(")+1)+document.getElementById("display").value;while((this.level.charAt(this.level.length-1))>0){temp=this.parse(temp);this.level=this.level.slice(0,-1)};document.getElementById("display").value=temp;this.stack=this.stack.substr(0,this.stack.lastIndexOf("("));document.getElementById("operator").value="   ";this.level=this.level.slice(0,-1);this.layer=this.layer-1;if(this.layer>0){document.getElementById("bracket").value="(="+this.layer;}else{document.getElementById("bracket").value="";};};this.result=function(){this.endNumber=true;while(this.layer>0)this.disbracket();var temp=this.stack+document.getElementById("display").value;while((this.level.charAt(this.level.length-1))>0){temp=this.parse(temp);this.level=this.level.slice(0,-1)};document.getElementById("display").value=temp;document.getElementById("bracket").value="";document.getElementById("operator").value="";this.stack="";this.level="0"};this.backspace=function(){if(!this.endNumber){if(document.getElementById("display").value.length>1)document.getElementById("display").value=document.getElementById("display").value.substring(0,document.getElementById("display").value.length-1);else document.getElementById("display").value=0};};this.clearall=function(){document.getElementById("display").value=0;this.endNumber=true;this.stack="";this.level="0";this.layer="";document.getElementById("operator").value="";document.getElementById("bracket").value=""};this.inputChangCarry=function(newcarry){this.endNumber=true;document.getElementById("display").value=(this.decto(this.todec(document.getElementById("display").value,this.carry),newcarry));this.carry=newcarry;document.getElementById("sin").disabled=(this.carry!=10);document.getElementById("cos").disabled=(this.carry!=10);document.getElementById("tan").disabled=(this.carry!=10);document.getElementById("bt").disabled=(this.carry!=10);document.getElementById("pi").disabled=(this.carry!=10);document.getElementById("e").disabled=(this.carry!=10);document.getElementById("kp").disabled=(this.carry!=10);document.getElementById("k2").disabled=(this.carry<=2);document.getElementById("k3").disabled=(this.carry<=2);document.getElementById("k4").disabled=(this.carry<=2);document.getElementById("k5").disabled=(this.carry<=2);document.getElementById("k6").disabled=(this.carry<=2);document.getElementById("k7").disabled=(this.carry<=2);document.getElementById("k8").disabled=(this.carry<=8);document.getElementById("k9").disabled=(this.carry<=8);document.getElementById("ka").disabled=(this.carry<=10);document.getElementById("kb").disabled=(this.carry<=10);document.getElementById("kc").disabled=(this.carry<=10);document.getElementById("kd").disabled=(this.carry<=10);document.getElementById("ke").disabled=(this.carry<=10);document.getElementById("kf").disabled=(this.carry<=10)};this.inputChangAngle=function(angletype){this.endNumber=true;this.angle=angletype;if(this.angle=="d")document.getElementById("display").value=this.radiansToDegress(document.getElementById("display").value);else document.getElementById("display").value=this.degressToRadians(document.getElementById("display").value);this.endNumber=true};this.inputshift=function(){if(document.getElementById("shiftf").checked){document.getElementById("bt").value="deg ";document.getElementById("ln").value="exp ";document.getElementById("log").value="expd";if(document.getElementById("hypf").checked){document.getElementById("sin").value="ahs ";document.getElementById("cos").value="ahc ";document.getElementById("tan").value="aht "}else{document.getElementById("sin").value="asin";document.getElementById("cos").value="acos";document.getElementById("tan").value="atan"};document.getElementById("sqr").value="x^.5";document.getElementById("cube").value="x^.3";document.getElementById("floor").value="\u5c0f\u6570"}else{document.getElementById("bt").value="d.ms";document.getElementById("ln").value=" ln ";document.getElementById("log").value="log ";if(document.getElementById("hypf").checked){document.getElementById("sin").value="hsin";document.getElementById("cos").value="hcos";document.getElementById("tan").value="htan"}else{document.getElementById("sin").value="sin ";document.getElementById("cos").value="cos ";document.getElementById("tan").value="tan "};document.getElementById("sqr").value="x^2 ";document.getElementById("cube").value="x^3 ";document.getElementById("floor").value="\u53d6\u6574"};};this.clearmemory=function(){this.mem=0;document.getElementById("memory").value="   "};this.getmemory=function(){this.endNumber=true;document.getElementById("display").value=this.decto(this.mem,this.carry)};this.putmemory=function(){this.endNumber=true;if(document.getElementById("display").value!=0){this.mem=this.todec(document.getElementById("display").value,this.carry);document.getElementById("memory").value=" M "}else document.getElementById("memory").value="   "};this.addmemory=function(){this.endNumber=true;this.mem=parseFloat(this.mem)+parseFloat(this.todec(document.getElementById("display").value,this.carry));if(this.mem==0)document.getElementById("memory").value="   ";else document.getElementById("memory").value=" M "};this.multimemory=function(){this.endNumber=true;this.mem=parseFloat(this.mem)*parseFloat(this.todec(document.getElementById("display").value,this.carry));if(this.mem==0)document.getElementById("memory").value="   ";else document.getElementById("memory").value=" M "};this.todec=function(num,oldcarry){if(oldcarry==10||num==0)return(num);var neg=(num.charAt(0)=="-");if(neg)num=num.substr(1);var newnum=0;for(var index=1;index<=num.length;index++)newnum=newnum*oldcarry+this.hexnum.indexOf(num.charAt(index-1));if(neg)newnum=-newnum;return(newnum)};this.decto=function(num,newcarry){var neg=(num<0);if(newcarry==10||num==0)return(num);num=""+Math.abs(num);var newnum="";while(num!=0){newnum=this.hexnum.charAt(num%newcarry)+newnum;num=Math.floor(num/newcarry)};if(neg)newnum="-"+newnum;return(newnum)};this.parse=function(string){if(string.match(/^(.*\d[\+\-\*\/\%\^\&\|x\<])?([+-]?[0-9a-f\.]+)([\+\-\*\/\%\^\&\|x\<])([+-]?[0-9a-f\.]+)$/))return(RegExp.$1+this.cypher(RegExp.$2,RegExp.$3,RegExp.$4));else return(string)};this.cypher=function(left,join,right){left=this.todec(left,this.carry);right=this.todec(right,this.carry);if(join=="+")return(this.decto(parseFloat(left)+parseFloat(right),this.carry));if(join=="-")return(this.decto(left-right,this.carry));if(join=="*")return(this.decto(left*right,this.carry));if(join=="/"&&right!=0)return(this.decto(left/right,this.carry));if(join=="%")return(this.decto(left%right,this.carry));if(join=="&")return(this.decto(left&right,this.carry));if(join=="|")return(this.decto(left|right,this.carry));if(join=="^")return(this.decto(Math.pow(left,right),this.carry));if(join=="x")return(this.decto(left^right,this.carry));if(join=="<")return(this.decto(left<<right,this.carry));alert("\u9664\u6570\u4e0d\u80fd\u4e3a\u96f6");return(left)};this.funcalc=function(fun,num){with(Math){if(fun=="pi")return(PI);if(fun=="e")return(E);if(fun=="abs")return(abs(num));if(fun=="ceil")return(ceil(num));if(fun=="round")return(round(num));if(fun=="floor")return(floor(num));if(fun=="deci")return(num-floor(num));if(fun=="ln"&&num>0)return(log(num));if(fun=="exp")return(exp(num));if(fun=="log"&&num>0)return(log(num)*LOG10E);if(fun=="expdec")return(pow(10,num));if(fun=="cube")return(num*num*num);if(fun=="cubt")return(pow(num,1/3));if(fun=="sqr")return(num*num);if(fun=="sqrt"&&num>=0)return(sqrt(num));if(fun=="!")return(this.factorial(num));if(fun=="recip"&&num!=0)return(1/num);if(fun=="dms")return(this.dms(num));if(fun=="deg")return(this.deg(num));if(fun=="~")return(~num);if(this.angle=="d"){if(fun=="sin")return(sin(this.degressToRadians(num)));if(fun=="cos")return(cos(this.degressToRadians(num)));if(fun=="tan")return(tan(this.degressToRadians(num)));if(fun=="arcsin"&&abs(num)<=1)return(this.radiansToDegress(asin(num)));if(fun=="arccos"&&abs(num)<=1)return(this.radiansToDegress(acos(num)));if(fun=="arctan")return(this.radiansToDegress(atan(num)))}else{if(fun=="sin")return(sin(num));if(fun=="cos")return(cos(num));if(fun=="tan")return(tan(num));if(fun=="arcsin"&&abs(num)<=1)return(asin(num));if(fun=="arccos"&&abs(num)<=1)return(acos(num));if(fun=="arctan")return(atan(num))};if(fun=="hypsin")return((exp(num)-exp(0-num))*0.5);if(fun=="hypcos")return((exp(num)+exp(-num))*0.5);if(fun=="hyptan")return((exp(num)-exp(-num))/(exp(num)+exp(-num)));if(fun=="ahypsin"|fun=="hypcos"|fun=="hyptan"){alert("\u5bf9\u4e0d\u8d77,\u516c\u5f0f\u8fd8\u6ca1\u6709\u67e5\u5230!");return(num)};alert("\u8d85\u51fa\u51fd\u6570\u5b9a\u4e49\u8303\u56f4");return(num)};};this.factorial=function(n){n=Math.abs(parseInt(n));var fac=1;for(;n>0;n-=1)fac*=n;return(fac)};this.dms=function(n){var neg=(n<0);with(Math){n=abs(n);var d=floor(n);var m=floor(60*(n-d));var s=(n-d)*60-m};var dms=d+m/100+s*0.006;if(neg)dms=-dms;return(dms)};this.deg=function(n){var neg=(n<0);with(Math){n=abs(n);var d=floor(n);var m=floor((n-d)*100);var s=(n-d)*100-m};var deg=d+m/60+s/36;if(neg)deg=-deg;return(deg)};this.degressToRadians=function(degress){return(degress*Math.PI/180)};this.radiansToDegress=function(radians){return(radians*180/Math.PI)};this.copyToClipboard=function(txt){if(window.clipboardData){window.clipboardData.clearData();window.clipboardData.setData("Text",txt);}else if(navigator.userAgent.indexOf("Opera")!=-1){window.location=txt;}else if(window.netscape){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");}catch(e){alert("\u88ab\u6d4f\u89c8\u5668\u62d2\u7edd\uff01\n\u8bf7\u5728\u6d4f\u89c8\u5668\u5730\u5740\u680f\u8f93\u5165'about:config'\u5e76\u56de\u8f66\n\u7136\u540e\u5c06'signed.applets.codebase_principal_support'\u8bbe\u7f6e\u4e3a'true'");return;};var clip=Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);if(!clip)return;var trans=Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);if(!trans)return;trans.addDataFlavor('text/unicode');var str=new Object();var len=new Object();var str=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);var copytext=txt;str.data=copytext;trans.setTransferData("text/unicode",str,copytext.length*2);var clipid=Components.interfaces.nsIClipboard;if(!clip)return false;clip.setData(trans,null,clipid.kGlobalClipboard);alert("\u590d\u5236\u6210\u529f\uff01")};};};
