base.js 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. // JavaScript Document
  2. var base = {
  3. args : {
  4. sign : null,
  5. left : null,
  6. right : null,
  7. result : null,
  8. memory : null,
  9. isConcat : true,
  10. isOperator : false
  11. },
  12. input : function(btn){
  13. var value = btn.value;
  14. if(/[0-9]/.test(value)){
  15. if($("resultIpt").value.length >= 16 && base.args.isConcat){return false;}
  16. $("resultIpt").style.fontSize = "40";
  17. if((base.args.sign == "=" || base.args.sign == null) && !base.args.isConcat){base.output(null,"");}
  18. if(base.args.isConcat){
  19. if($("resultIpt").value == "0"){
  20. $("resultIpt").value = "";
  21. }
  22. base.output($("resultIpt").value + value,$("expressBox").innerHTML + value);
  23. }else{
  24. base.output(value,$("expressBox").innerHTML + value);
  25. }
  26. base.args.isConcat = true;
  27. base.args.isOperator = false;
  28. }
  29. if(/\./.test(value)){
  30. if($("resultIpt").value.length > 16 && base.args.isConcat){return false;}
  31. if($("resultIpt").value.indexOf(".") != -1 && base.args.isConcat){return false;}
  32. if(base.args.isConcat){
  33. base.output($("resultIpt").value + value,$("expressBox").innerHTML + value);
  34. }else{
  35. base.output("0" + value,$("expressBox").innerHTML + value);
  36. base.args.isConcat = true;
  37. }
  38. }
  39. if(/[\+|\-|÷|×]/.test(value) && value.length < 2){
  40. if(!base.args.isOperator){
  41. base.set();
  42. base.args.result = base.calculate();
  43. if(base.args.result){
  44. base.output(base.args.result,$("expressBox").innerHTML + "=" + base.args.result);
  45. base.clear(true);
  46. base.args.left = base.args.result;
  47. }
  48. base.output(null,$("expressBox").innerHTML + value);
  49. }else{
  50. base.output(null,$("expressBox").html().substring(0,$("expressBox").html().length-1) + value);
  51. }
  52. base.args.sign = value;
  53. base.args.isConcat = false;
  54. base.args.isOperator = true;
  55. }
  56. if(/[\+\/-]/.test(value) && value.length > 2){
  57. var result = $("resultIpt").value;
  58. $("expressBox").innerHTML = $("expressBox").innerHTML.substr(0,($("expressBox").innerHTML.length - result.length));
  59. if(Number(result) != 0 && result != ""){
  60. result = -Number(result);
  61. }
  62. base.output(result,$("expressBox").innerHTML + result);
  63. base.set();
  64. }
  65. if(/=/.test(value)){
  66. base.set();
  67. base.args.result = base.calculate();
  68. //if(/^\-?\d+(?=\.{0,1}\d+$|$)/.test(base.args.result)){//^[0-9]+.?[0-9]*$/
  69. base.output(base.args.result,$("expressBox").innerHTML + "=" + base.args.result);
  70. base.args.sign = value;
  71. base.clear(true);
  72. base.args.left = base.args.result;
  73. //}
  74. base.args.isConcat = false;
  75. }
  76. if(btn.maxLength >= 0 && (String(btn.maxLength).length == 1)){
  77. switch(btn.maxLength){
  78. case 5:
  79. base.save();
  80. break;
  81. case 1:
  82. var memory = base.get();
  83. if(memory == null){return false;}
  84. base.args.isConcat = false;
  85. base.output(memory,$("expressBox").innerHTML + memory);
  86. break;
  87. case 2:
  88. base.saveAdd();
  89. break;
  90. case 3:
  91. base.saveMultiple();
  92. break;
  93. case 4:
  94. base.saveClear();
  95. break;
  96. case 8:
  97. base.remove();
  98. break;
  99. case 9:
  100. base.clear();
  101. break;
  102. }
  103. }
  104. },
  105. output : function(value,html){
  106. if(value != null){
  107. //if((value+"").length > 16){$("resultIpt").style.fontSize = "35";}
  108. if((value+"").length > 16){//$("resultInput").style.fontSize = "35";
  109. if((value+"").indexOf(".") != -1){
  110. var r = (value+"").split(".")[1];
  111. var count = (value+"").length - 16;
  112. if(r.length > count){
  113. r = r.substring(0,(r.length - count));
  114. value = (value+"").split(".")[0] + "." + r;
  115. }else{
  116. $("resultIpt").style.fontSize = "35";
  117. }
  118. }else{
  119. $("resultIpt").style.fontSize = "35";
  120. }
  121. }
  122. $("resultIpt").value = value;
  123. }
  124. if(html != null){$("expressBox").innerHTML = html;}
  125. },
  126. accurate : {
  127. add : function(num1,num2){
  128. var index1 = 0,index2 = 0,index = 0;
  129. try{index1 = String(num1).split(".")[1].length}catch(e){index1 = 0;}
  130. try{index2 = String(num2).split(".")[1].length}catch(e){index2 = 0;}
  131. index = Math.pow(10,Math.max(index1,index2));
  132. return parseFloat((num1 * index + num2 * index) / index);
  133. },
  134. sub : function(num1,num2){
  135. var index1 = 0,index2 = 0,index = 0;
  136. try{index1 = String(num1).split(".")[1].length}catch(e){index1 = 0;}
  137. try{index2 = String(num2).split(".")[1].length}catch(e){index2 = 0;}
  138. index = Math.pow(10,Math.max(index1,index2));
  139. return (num1 * index - num2 * index) / index;
  140. },
  141. mul : function(num1,num2){
  142. var index = 0;
  143. try{index += String(num1).split(".")[1].length}catch(e){}
  144. try{index += String(num2).split(".")[1].length}catch(e){}
  145. return (Number(String(num1).replace(".","")) * Number(String(num2).replace(".","")))/Math.pow(10,index);
  146. },
  147. div : function(num1,num2){
  148. var index1 = 0,index2 = 0;
  149. try{index1 = String(num1).split(".")[1].length}catch(e){}
  150. try{index2 = String(num2).split(".")[1].length}catch(e){}
  151. //alert(index1 + " @@ " + index2);
  152. //return (Number(String(num1).replace(".","")) / Number(String(num2).replace(".",""))) * Math.pow(10,(index2 - index1));
  153. var a = Number(String(num1).replace(".",""));
  154. var b = Number(String(num2).replace(".",""));
  155. var c = Math.pow(10,(index2 - index1));
  156. var result = null;
  157. if((a/b).toString().indexOf("e") != -1){result = (a/b) * c;}
  158. else{result = base.accurate.mul((a/b),c);}
  159. return result;
  160. }
  161. },
  162. calculate : function(){
  163. if(base.args.left != null && base.args.sign != null && base.args.right != null){
  164. switch(base.args.sign){
  165. case "+":
  166. return base.accurate.add(Number(base.args.left),Number(base.args.right));
  167. break;
  168. case "-":
  169. return base.accurate.sub(Number(base.args.left),Number(base.args.right));
  170. break;
  171. case "×":
  172. return base.accurate.mul(Number(base.args.left),Number(base.args.right));
  173. break;
  174. case "÷":
  175. return base.accurate.div(Number(base.args.left),Number(base.args.right));
  176. break;
  177. }
  178. }
  179. },
  180. set : function(){
  181. var value = $("resultIpt").value;
  182. if(base.args.sign == null){
  183. //left
  184. base.args.left = value;
  185. }else{
  186. //right
  187. base.args.right = value;
  188. }
  189. },
  190. remove : function(){
  191. var html = $("expressBox").innerHTML;
  192. var value = $("resultIpt").value;
  193. if(html.length >= 1){
  194. if(/[0-9|\.]/.test(html.substr(html.length-1,1))){
  195. html = html.substring(0,html.length-1);
  196. value = String(value).substring(0,value.length-1);
  197. if(value == ""){value = 0;}
  198. base.output(value,html);
  199. base.set();
  200. }
  201. }
  202. },
  203. clear : function(flag){
  204. if(flag != true){
  205. base.args.sign = null;
  206. base.args.left = null;
  207. base.args.right = null;
  208. base.args.result = null;
  209. //base.args.memory = null;
  210. $("expressBox").innerHTML = "";
  211. $("resultIpt").value = 0;
  212. }else if(flag == true){
  213. base.args.sign = null;
  214. base.args.left = null;
  215. base.args.right = null;
  216. }
  217. },
  218. save : function(){
  219. base.args.memory = $("resultIpt").value;
  220. base.args.isConcat = false;
  221. },
  222. get : function(){
  223. return (base.args.memory == null) ? 0 : base.args.memory;
  224. },
  225. saveAdd : function(){
  226. if(base.args.memory != null){
  227. base.args.memory = base.accurate.add(Number(base.args.memory),Number($("resultIpt").value));
  228. }else{base.save();}
  229. },
  230. saveMultiple : function(){
  231. if(base.args.memory != null){
  232. base.args.memory = base.accurate.mul(Number(base.args.memory),Number($("resultIpt").value));//base.args.memory * Number($("resultIpt").value);// accurate
  233. }else{base.save();}
  234. },
  235. saveClear : function(){
  236. base.args.memory = null;
  237. },
  238. showStyle : function(btn){
  239. btn.style.backgroundPosition = "0 0";
  240. try{clearTimeout(itv);}catch(e){}
  241. var itv = setTimeout(function(){btn.style.backgroundPosition = "0px -44px";},100);
  242. }
  243. }
  244. my.loaded(function(){
  245. // tabs click
  246. var tabs = $t("LI");
  247. var i = 0;
  248. while(i<tabs.length){
  249. tabs[i].index = i;
  250. tabs[i].sibling = tabs[i ? 0 : 1];
  251. tabs[i].bind("click",function(){
  252. var e = my.events.get();
  253. var target = e.target;
  254. var href = "";
  255. var args = ((location.search.indexOf("canvas_pos=search") != -1) ? "?canvas_pos=search" : "")
  256. target.style.background = "none";
  257. if(target.index){
  258. target.sibling.style.background = "url(images/cal_tab_top.gif) no-repeat 0 0";
  259. href = "senior.html";
  260. }else{
  261. target.sibling.style.background = "url(images/cal_tab_bottom.gif) no-repeat 0 0";
  262. href = "base.html"
  263. }
  264. self.location.href = href + args;
  265. });
  266. i++;
  267. }
  268. // btns mousedown
  269. var btns = $t("INPUT").$css("btnCss");
  270. for(var i=0;i<btns.length;i++){
  271. btns[i].bind("mousedown",function(){
  272. var e = my.events.get();
  273. var target = e.target;
  274. target.style.backgroundPosition = "0 0";
  275. });
  276. btns[i].bind("mouseup",function(){
  277. var e = my.events.get();
  278. var target = e.target;
  279. target.style.backgroundPosition = "0px -44px";
  280. });
  281. btns[i].bind("click",function(){
  282. var e = my.events.get();
  283. var target = e.target;
  284. target.blur();
  285. base.input(target);
  286. });
  287. }
  288. // keybroad
  289. my.events.bind(document,"keydown",function(){
  290. var e = my.events.get();
  291. var keyCode = e.keyCode;
  292. var btn = null;
  293. if(keyCode == 48 || keyCode == 96){btn = $("num0Btn");}
  294. if(keyCode == 49 || keyCode == 97){btn = $("num1Btn");}
  295. if(keyCode == 50 || keyCode == 98){btn = $("num2Btn");}
  296. if(keyCode == 51 || keyCode == 99){btn = $("num3Btn");}
  297. if(keyCode == 52 || keyCode == 100){btn = $("num4Btn");}
  298. if(keyCode == 53 || keyCode == 101){btn = $("num5Btn");}
  299. if(keyCode == 54 || keyCode == 102){btn = $("num6Btn");}
  300. if(keyCode == 55 || keyCode == 103){btn = $("num7Btn");}
  301. if(keyCode == 56 || keyCode == 104){btn = $("num8Btn");}
  302. if(keyCode == 57 || keyCode == 105){btn = $("num9Btn");}
  303. if(keyCode == 190 || keyCode == 110){btn = $("dotBtn");}
  304. if(keyCode == 109 || keyCode == 189){btn = $("subBtn");}
  305. if(keyCode == 111 || keyCode == 191){btn = $("divBtn");}
  306. if(keyCode == 13 || keyCode == 187){btn = $("equBtn");}
  307. if(keyCode == 107){btn = $("addBtn");}
  308. if(keyCode == 106){btn = $("mulBtn");}
  309. if(keyCode == 46){btn = $("removeBtn");}
  310. if(btn){
  311. btn.click();
  312. base.showStyle(btn);
  313. }
  314. });
  315. });