var MAG = Object.extend({}, MAG || {});
MAG.Calculator = Class.create();
MAG.Calculator.prototype = {
	initialize: function()
	{
		MAG.MagCalculator = this;
		this.display = $('display');
		this.accum = 0;
		this.flagnewnum = false;
		this.pendingop = "";
	},
	
	numPressed: function(num) 
	{
		this.display = $('display');
	    if (this.flagnewnum)
	    {
		    this.display.value  = num;
	        this.flagnewnum = false;
	    }
	    else
	    {
	        if (this.display.value == "0")
	            this.display.value = num;
	        else
	            this.display.value += num;
	    }
	},
	
	doOperation: function(op)
	{
		this.display = $('display');
	    var readout = this.display.value;
	    if (this.flagnewnum && this.pendingop != "=");
	        // User is hitting op keys repeatedly, so don't do anything
	    else
	    {
	        this.flagnewnum = true;
	        if ( '+' == this.pendingop )
	            this.accum += parseFloat(readout);
	        else if ( '-' == this.pendingop )
	            this.accum -= parseFloat(readout);
	        else if ( '/' == this.pendingop )
	            this.accum /= parseFloat(readout);
	        else if ( '*' == this.pendingop )
	            this.accum *= parseFloat(readout);
	        else
	            this.accum = parseFloat(readout);
	
	        this.display.value = this.accum;
	        this.pendingop = op;
	    }
	},
	
	doDecimal: function()
	{
		this.display = $('display');
	    var curReadOut = this.display.value;
	
	    if (this.flagnewnum)
	    {
	        curReadOut = "0.";
	        this.flagnewnum = false;
	    }
	    else
	    {
	        if (curReadOut.indexOf(".") == -1)
	            curReadOut += ".";
	    }
	    
	    this.display.value = curReadOut;
	},
	

	clearEntry: function()
	{
	    this.display.value = "0";
	    this.flagnewnum = true;
	},
	
	doClear: function()
	{
	    this.accum = 0;
	    this.pendingop = "";
	    this.clearEntry();
	},
	
	doNeg: function()
	{
	    this.display.value = parseFloat(this.display.value) * -1;
	},
	
	doPercent: function()
	{
	    this.display.value = (parseFloat(this.display.value) / 100) * parseFloat(this.accum);
	},
	
	showCalculator: function() 
	{
		html = this.calc;
		
		this.layer = new Element('div', {id: 'layer'});
		var w = 200;
		var h = 306;
		this.layer.setStyle({
			width: w + 'px',
			height: h + 'px',
			top: parseInt((MAG.Mask.getDimensions().height - h)/2) + $(document.body).cumulativeScrollOffset().top + 'px',
			left: parseInt((MAG.Mask.getDimensions().width - w)/2) + 'px',
			position: 'absolute'
		});
		
		this.layer.style.zIndex = 1001;
		this.layer = this.layer.update(html);
		
		MAG.Mask.show(40);
	
		$(document.body).insert(this.layer);
	} , 
	
	doHide: function(elem)
	{
		$(elem).remove();
		MAG.Mask.hide();
	},
	
	initCalculator: function() 
	{
		this.calc =
		'<div id="calculator" style="display: block;"> \
				<a href="javascript:;" onclick="Calc.doHide($(this.parentNode));" class="close"> X </a> \
				<form method="get" action=""> \
					<fieldset> \
						<span id="display_wrapper"> \
							<input id="display" value="0" size="50" type="text" readonly="readonly" /> \
						</span> \
						<ul> \
							<li><a href="javascript:;" class="clears" onclick="Calc.doClear()">c</a></li> \
							<li><a href="javascript:;" class="clears" onclick="Calc.clearEntry()">ce</a></li> \
							<li><a href="javascript:;" class="clears" onclick="Calc.doNeg()">+/-</a></li> \
							<li><a href="javascript:;" class="functions" onclick="Calc.doOperation(\'/\')">/</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(7)">7</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(8)">8</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(9)">9</a></li> \
							<li><a href="javascript:;" class="functions" onclick="Calc.doOperation(\'*\')">*</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(4)">4</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(5)">5</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(6)">6</a></li> \
							<li><a href="javascript:;" class="functions" onclick="Calc.doOperation(\'+\')" >+</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(1)">1</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(2)">2</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(3)">3</a></li> \
							<li><a href="javascript:;" class="functions" onclick="Calc.doOperation(\'-\')">-</a></li> \
							<li><a href="javascript:;" onclick="Calc.numPressed(0)">0</a></li> \
							<li><a href="javascript:;" class="functions" onclick="Calc.doDecimal()">.</a></li> \
							<li><a href="javascript:;" class="functions" onclick="Calc.doPercent()">%</a></li> \
							<li><a href="javascript:;" class="calculate" onclick="Calc.doOperation(\'=\')">=</a></li> \
						</ul> \
					</fieldset> \
				</form> \
			</div>';
	}
}

document.observe("dom:loaded", function()
{
	Calc = new MAG.Calculator;
	Calc.initCalculator();
});
