$(document).ready(function() {
	$('#numbers').click(function(event) {
		var $tgt = $(event.target);
		var $step = getCurrentStep();
		if ($tgt.is('a') && !$tgt.is('.used') && acceptsSymbol($step,'number')) {
			var $newLi = $('<li class="stepvalue number" id="sub'+$tgt.attr('id')+'">' + $tgt.text() + '</li>');
			$step.append($newLi);
			$tgt.addClass('used');
			showSubResult($step);
		}
		return false;
	});
	
	$('#operators').click(function(event) {
		var $tgt = $(event.target);
		var $step = getCurrentStep();
		if ($tgt.is('a') && acceptsSymbol($step,'operator')) {
			var $newLi = $('<li class="stepvalue operator" title="' + $tgt.attr('id') + '">' + $tgt.text() + '</li>');
			$step.append($newLi);
		}
		return false;
	});
	
	//delete
	$('#steps').click(function(event) {
		var $tgt = $(event.target);
		if ($tgt.is('.delete a')) {
			var $row = $tgt.parent().parent();
			
			//revert
			$row_id = $row.attr('id');
			$('#'+$row_id+' li').each(function(i){
				if ($(this).is('.number')){
					$tgt_id = $(this).attr('id').substring(3);
					$('#'+$tgt_id).removeClass('used');
				} else if ($(this).is('.sub')){
					$tgt_id = $(this).attr('id').substring(3);
					$('#'+$tgt_id).parent().remove();
				}
			});
			
			//delete row
			$row.remove();
			
			//add delete button to previous step
			$('#steps ul:last').append($('<li class="stepvalue delete"><a href="#">&oslash;</a></li>'));
		}
		return false;
	});
	
	getCurrentStep = function(){
		var $steps = $('#steps').children('ul');
      var $len = $steps.length;
		if ($len == 0 || $('#steps ul:last').children('li').length > 3) {
			$('#steps').append('<ul class="step" id="step'+$len+'"></ul>');
			
			//move delete button
			$('.delete').remove();
			$('#step'+$len).append($('<li class="stepvalue delete"><a href="#">&oslash;</a></li>'));
		}
		
		return $('#steps ul:last');
	};
	
	showSubResult = function($step){
		var $tokens = $step.children('li');
		var $len = $tokens.length;
		if ($len == 4){
			var $left = parseFloat($($tokens[1]).text());
			var $op = $tokens[2].getAttribute('title');
			var $right = parseFloat($($tokens[3]).text());
			var $result;
			
			if ($op == "plus"){
				$result = $left + $right;
			} else if ($op == "minus"){
				$result = $left - $right;
			} else if ($op == "product"){
				$result = Math.round(100*($left * $right))/100;
			} else if ($op == "division"){
				$result = Math.round(100*($left / $right))/100;
			} else {
				alert('Error');
			}
			
			$step.append($('<li class="stepvalue operator">=</li>'));
			
			
			
			var $new_id_count = parseInt($('#numbers li:last a').attr('id').substring(6)) + 1;
			var $correct = ($result == parseInt($('#result').text()));
			if (lastOperation() || $correct){
				if ($correct) {var $extraclass = 'correct';} else {var $extraclass = ''}
				$step.append($('<li class="stepvalue sub endresult '+$extraclass+'" id="subnumber'+$new_id_count+'">'+$result+'</li>'));
				
				if ($correct){
					$('#youwin').jqm({target: '#youwin div.jqmAlertContent',overlay: 50});
					$('#youwin').jqmShow();
				} else {	//lastoperation -> lost
					$('#youlose').jqm({target: '#youlose div.jqmAlertContent',overlay: 50});
					$('#youlose').jqmShow();
				}
				
			} else {
				$step.append($('<li class="stepvalue sub" id="subnumber'+$new_id_count+'">'+$result+'</li>'));
				$('#numbers').append($('<li><a href="#" id="number'+$new_id_count+'" class="clickblock number sub" title="'+$result+'">'+$result+'</a></li>'));
			}
		}
	};
	
	acceptsSymbol = function($step,$symbol){
		var $len = $step.children('li').length;
		if ($len == 1 && $symbol=='number'){
			return true;
		} else if ($len == 2 && $symbol=='operator'){
			return true;
		} else if ($len == 3 && $symbol=='number'){
			return true;
		}
		return false;
	};
	
	lastOperation = function(){
		lastOperation.$result = true;
		$('#numbers li a').each(function(i){
				if (! $(this).is('.used')){
					lastOperation.$result = false;
				}
			}
		);
		return lastOperation.$result;
	}
});
