MWF.xApplication.Calculator.options.multitask = true;
MWF.xApplication.Calculator.Main = new Class({
Extends: MWF.xApplication.Common.Main,
Implements: [Options, Events],
options: {
"style": "default",
"name": "Calculator",
"icon": "icon.png",
"width": "320",
"height": "440",
"isResize": false,
"isMax": false,
"title": MWF.xApplication.Calculator.LP.title
},
onQueryLoad: function(){
this.lp = MWF.xApplication.Calculator.LP;
},
init: function(){
this.resultData = 0;
this.currentOperation = "";
this.startNumber = true;
},
loadDecimal: function(callback){
if (!window.Decimal){
var url = "/x_component_Calculator/Decimal.js";
COMMON.AjaxModule.loadDom(url, function(){
// COMMON.AjaxModule.loadDom(this.tools, function(){
if (callback) callback();
// }.bind(this))
}.bind(this));
}else{
if (callback) callback();
}
},
loadApplication: function(callback){
this.loadDecimal(function(){
this.init();
this.node = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
this.screenNode = new Element("div", {"styles": this.css.screenNode}).inject(this.node);
this.buttonAreaNode = new Element("div", {"styles": this.css.buttonAreaNode}).inject(this.node);
this.screenReferenceNode = new Element("div", {"styles": this.css.screenReferenceNode}).inject(this.screenNode);
this.screenContentNode = new Element("div", {"styles": this.css.screenContentNode, "text": "0"}).inject(this.screenNode);
var html = "
" +
"" +
"MC | " +
"MR | " +
"MS | " +
"M+ | " +
"M- |
" +
"" +
" | " +
"CE | " +
"C | " +
"+- | " +
" |
" +
"" +
"7 | " +
"8 | " +
"9 | " +
"/ | " +
"% |
" +
"" +
"4 | " +
"5 | " +
"6 | " +
"* | " +
"1/x |
" +
"" +
"1 | " +
"2 | " +
"3 | " +
"- | " +
"= |
" +
"" +
"0 | " +
". | " +
"+ |
" +
"
";
this.buttonAreaNode.set("html", html);
var but1 = this.buttonAreaNode.getElements(".but1");
but1.setStyles(this.css.buttonStyle1);
var but2 = this.buttonAreaNode.getElements(".but2");
but2.setStyles(this.css.buttonStyle2);
var but3 = this.buttonAreaNode.getElements(".but3");
but3.setStyles(this.css.buttonStyle3);
var _self = this;
but1.addEvents({
"mouseover": function(){this.setStyles(_self.css.button_over);},
"mouseout": function(){this.setStyles(_self.css.buttonStyle1);},
"mousedown": function(){this.setStyles(_self.css.button_down);},
"mouseup": function(){this.setStyles(_self.css.button_over);},
});
but2.addEvents({
"mouseover": function(){this.setStyles(_self.css.button_over);},
"mouseout": function(){this.setStyles(_self.css.buttonStyle2);},
"mousedown": function(){this.setStyles(_self.css.button_down);},
"mouseup": function(){this.setStyles(_self.css.button_over);},
});
but3.addEvents({
"mouseover": function(){this.setStyles(_self.css.button_over);},
"mouseout": function(){this.setStyles(_self.css.buttonStyle3);},
"mousedown": function(){this.setStyles(_self.css.button_down);},
"mouseup": function(){this.setStyles(_self.css.button_over);},
});
this.but_equal = this.buttonAreaNode.getElement("#calculator_equal");
this.but_equal.setStyles(this.css.but_equal);
this.but_equal.addEvents({
"mouseover": function(){this.setStyles(_self.css.but_equal_over);},
"mouseout": function(){this.setStyles(_self.css.but_equal);},
"mousedown": function(){this.setStyles(_self.css.but_equal_down);},
"mouseup": function(){this.setStyles(_self.css.but_equal_over);},
});
this.but_0 = this.buttonAreaNode.getElement("#calculator_0");
this.but_0.setStyles(this.css.but_0);
this.but_0.addEvents({
"mouseover": function(){this.setStyles(_self.css.but_0_over);},
"mouseout": function(){this.setStyles(_self.css.but_0);},
"mousedown": function(){this.setStyles(_self.css.but_0_down);},
"mouseup": function(){this.setStyles(_self.css.but_0_over);},
});
this.but_back = this.buttonAreaNode.getElement("#calculator_back");
var icon = new Element("div", {"styles": this.css.but_back_icon}).inject(this.but_back);
this.but_sqrt = this.buttonAreaNode.getElement("#calculator_sqrt");
icon = new Element("div", {"styles": this.css.but_sqrt_icon}).inject(this.but_sqrt);
this.getButtons();
this.setEvent();
}.bind(this));
},
getButtons: function(){
if (!this.but_mc) this.but_mc = this.buttonAreaNode.getElement("#calculator_mc");
if (!this.but_mr) this.but_mr = this.buttonAreaNode.getElement("#calculator_mr");
if (!this.but_ms) this.but_ms = this.buttonAreaNode.getElement("#calculator_ms");
if (!this.but_madd) this.but_madd = this.buttonAreaNode.getElement("#calculator_madd");
if (!this.but_mminus) this.but_mminus = this.buttonAreaNode.getElement("#calculator_mminus");
if (!this.but_back) this.but_mminus = this.buttonAreaNode.getElement("#calculator_back");
if (!this.but_ce) this.but_ce = this.buttonAreaNode.getElement("#calculator_ce");
if (!this.but_c) this.but_c = this.buttonAreaNode.getElement("#calculator_c");
if (!this.but_pm) this.but_pm = this.buttonAreaNode.getElement("#calculator_pm");
if (!this.but_sqrt) this.but_sqrt = this.buttonAreaNode.getElement("#calculator_sqrt");
if (!this.but_7) this.but_7 = this.buttonAreaNode.getElement("#calculator_7");
if (!this.but_8) this.but_8 = this.buttonAreaNode.getElement("#calculator_8");
if (!this.but_9) this.but_9 = this.buttonAreaNode.getElement("#calculator_9");
if (!this.but_div) this.but_div = this.buttonAreaNode.getElement("#calculator_div");
if (!this.but_mod) this.but_mod = this.buttonAreaNode.getElement("#calculator_mod");
if (!this.but_4) this.but_4 = this.buttonAreaNode.getElement("#calculator_4");
if (!this.but_5) this.but_5 = this.buttonAreaNode.getElement("#calculator_5");
if (!this.but_6) this.but_6 = this.buttonAreaNode.getElement("#calculator_6");
if (!this.but_mul) this.but_mul = this.buttonAreaNode.getElement("#calculator_mul");
if (!this.but_inverse) this.but_inverse = this.buttonAreaNode.getElement("#calculator_inverse");
if (!this.but_1) this.but_1 = this.buttonAreaNode.getElement("#calculator_1");
if (!this.but_2) this.but_2 = this.buttonAreaNode.getElement("#calculator_2");
if (!this.but_3) this.but_3 = this.buttonAreaNode.getElement("#calculator_3");
if (!this.but_sub) this.but_sub = this.buttonAreaNode.getElement("#calculator_sub");
if (!this.but_equal) this.but_equal = this.buttonAreaNode.getElement("#calculator_equal");
if (!this.but_0) this.but_0 = this.buttonAreaNode.getElement("#calculator_0");
if (!this.but_dot) this.but_dot = this.buttonAreaNode.getElement("#calculator_dot");
if (!this.but_add) this.but_add = this.buttonAreaNode.getElement("#calculator_add");
},
setEvent: function(){
var but3 = this.buttonAreaNode.getElements(".but3");
but3.setStyles(this.css.buttonStyle3);
var _self = this;
but3.addEvent("click", function(){
if (_self.startNumber){
_self.screenContentNode.set("text", "0");
_self.startNumber = false;
_self.screenContentNode.setStyles(_self.css.screenContentNode);
}
var v = _self.screenContentNode.get("text");
if (v.length>=19) return false;
var value = this.get("text");
var str = v+value;
if (!v || v=="0") str = value;
if (str.length>13) _self.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
_self.screenContentNode.set("text", str);
});
this.but_dot.removeEvents("click");
this.but_dot.addEvent("click", function(){
if (_self.startNumber){
_self.screenContentNode.set("text", "0");
_self.startNumber = false;
_self.screenContentNode.setStyles(_self.css.screenContentNode);
}
var v = _self.screenContentNode.get("text");
if (v.length>=19) return false;
str = v+".";
if (!v || v=="0") str = "0.";
if (str.length>13) _self.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
_self.screenContentNode.set("text", str);
});
this.but_0.addEvent("click", function(){
if (_self.startNumber){
_self.screenContentNode.set("text", "0");
_self.startNumber = false;
_self.screenContentNode.setStyles(_self.css.screenContentNode);
}
var v = _self.screenContentNode.get("text");
if (v.length>=19) return false;
str = v+"0";
if (!v || v=="0") str = "0";
if (str.length>13) _self.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
_self.screenContentNode.set("text", str);
});
this.but_add.addEvent("click", function(){
_self.baseCompute("+", "plus");
});
this.but_sub.addEvent("click", function(){
_self.baseCompute("-", "minus");
});
this.but_mul.addEvent("click", function(){
_self.baseCompute("*", "times");
});
this.but_div.addEvent("click", function(){
_self.baseCompute("/", "div");
});
this.but_mod.addEvent("click", function(){
_self.baseCompute("%", "mod");
});
this.but_equal.addEvent("click", function(){
_self.baseCompute("", "");
_self.resultData = 0;
_self.currentOperation = "";
_self.startNumber = true;
_self.screenReferenceNode.set("text", "");
});
},
baseCompute: function(symbol, method){
var v = this.screenContentNode.get("text");
var vr = this.screenReferenceNode.get("text");
this.screenReferenceNode.set("text", vr+v+symbol);
if (this.currentOperation){
var x = new Decimal(this.resultData);
this.resultData = x[this.currentOperation](new Decimal(v));
this.resultData = (new Decimal(this.resultData)).toNumber();
if (this.resultData.toString().length>19){
this.screenContentNode.setStyles({"font-size": "18px", "line-height": "70px"});
}else if (this.resultData.toString().length>13){
this.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
}
this.screenContentNode.set("text", this.resultData);
}else{
this.resultData = v;
}
this.currentOperation = method;
this.startNumber = true;
}
});