var dices=[2,3,4,6,8,10,12,20,'%'];
var operations=['','','','+','-','',String.fromCharCode(215),String.fromCharCode(247),''];
var steps=[];
var typing=false;

var messages={
	step0:"Quanti dadi vuoi lanciare?",
	step1:"Quante facce hanno i dadi che vuoi lanciare?",
	step2:"Che operazione vuoi eseguire?",
	loading:"Lancio dadi in corso...",
	"":""
}
function stsMsg(q){
	statusMessage.innerHTML=(typeof messages[q]!="undefined")?messages[q]:q;
}

var expression,arrowRight,arrowSkip,spiegazione,roll,loading,rollResult,allResults,allResultsContainer,NoD,statusMessage,blockClick,UI,openpar,closedpar,opzioni,logLanci,logLanciText,preferiti;
document.observe("dom:loaded",function(){
	NoD=$("NoD");
	expression=$("expression");
	arrowRight=$("arrowRight");
	arrowSkip=$("arrowSkip");
	spiegazione=$('spiegazione');
	roll=$('roll');
	rollResult=$('rollResult');
	allResultsContainer=$('allResultsContainer');
	allResults=$('allResults');
	loading=$('loading');
	statusMessage=$('statusMessage');
	blockClick=$('blockClick');
	UI=$('UI');
	openpar=$('openpar');
	closedpar=$('closedpar');
	opzioni=$('opzioni');
	logLanci=$('logLanci');
	logLanciText=$('logLanciText');
	preferiti=$('preferiti');
	
	mostra_current=UI
	stsMsg("step0");
});

var mostra_current;
function mostra(q){
	mostra_current.hide();
	switch(q){
		case'help':
			spiegazione.show();
			mostra_current=spiegazione;
		break;
		case'ui':
			UI.show();
			mostra_current=UI;
		break;
		case'options':
			opzioni.show();
			mostra_current=opzioni;
		break;
		case'log':
			logLanci.show();
			mostra_current=logLanci;
		break;
		case'preferiti':
			preferiti.show();
			mostra_current=preferiti;
		break;
	}
}
function resetta(){
	roll.hide();
	expression.innerHTML="";
}
function step0(){
	var i=1;
	$$(".dice").each(function(a){
		a.removeClassName('ope').removeClassName('NoD').removeClassName('ToD').addClassName('NoD');
		a.innerHTML=i;i++;
	});
	NoD.removeClassName("bgDadi");
	$$(".arrow").each(function(a){
		a.setStyle({visibility:'visible'});
	});
	arrowRight.show();
	arrowSkip.hide();
	openpar.setStyle({visibility:'visible'});
	closedpar.setStyle({visibility:'hidden'});
	stsMsg("step0");
}
function step1(n){
	var i=0;
	$$(".dice").each(function(a){
		a.removeClassName('ope').removeClassName('NoD').removeClassName('ToD').addClassName('ToD');
		a.innerHTML=dices[i];i++;
	});
	NoD.addClassName("bgDadi");
	$$(".arrow").each(function(a){
		a.setStyle({visibility:'hidden'});
	});
	arrowRight.hide();
	arrowSkip.show();
	openpar.setStyle({visibility:'hidden'});
	closedpar.setStyle({visibility:'hidden'});
	stsMsg("step1");
}
function step2(n){
	var i=0;
	$$(".dice").each(function(a){
		a.removeClassName('ope').removeClassName('NoD').removeClassName('ToD').addClassName('ope');
		a.innerHTML=operations[i];i++;
	});
	NoD.removeClassName("bgDadi");
	arrowRight.show();
	arrowSkip.hide();
	openpar.setStyle({visibility:'hidden'});
	closedpar.setStyle({visibility:'visible'});
	stsMsg("step2");
}

// set Number of Dices
function lastStep(){
	return steps.length>0?steps.last():"";
}

function setNoD(q){
	if(q=="salta"){
		var n='';
		var d='';
	}else{
		var n=q.innerHTML;
		var d='d';
	}
	if(roll.style.display!="none"){
		resetta();
	}
	if(lastStep()==""||lastStep().indexOf("step0")!=-1){
		addToExpression(n,"NoD");
/*		expression.value=expression.value+n;
*/		step1(n);
		steps.push("step1('"+n+"')");
	}else if(lastStep().indexOf("step1")!=-1){
		addToExpression(d,"d");
		addToExpression(n,"ToD");
/*		expression.value=expression.value+'d'+n;
*/		step2(n);
		steps.push("step2('"+n+"')");
	}else{
		addToExpression(n);
/*		expression.value=expression.value+n;
*/		switch(n.charCodeAt(0)){
			// +-×÷
			case 43:case 45:case 215:case 247:
				step0();
				steps.push("step0()");
			break;
		}
	}
}

function addToExpression(q){
	if(!typing)resetta();
	var c=arguments.length>1?arguments[1]:"ope";
	expression.insert(
		'<span class="'+c+'">'+q+'</span>'
	);
	typing=true;
}
function canc(){
	if(roll.style.display!="none"){
		resetta();	
	}
	var SPANs=expression.select("SPAN");
	if(SPANs.length>0){
		var last=SPANs.length-1;
		SPANs[last].remove();
		if( SPANs[last].innerHTML!="(" && SPANs[last].innerHTML!=")" ){
			if(SPANs[last].hasClassName("ToD")){
				SPANs[last-1].remove();
			}
			steps.splice(steps.length-1,1);
			if(typeof steps[steps.length-1] != "undefined"){
				eval(steps[steps.length-1]);
			}else{
				step0();
			}
		}
	}else{
		step0();
	}
}
function ugual(){
	step0();
	steps=[];
	typing=false;
	MephitQuanticRoller();
}
function add9(q){
	var NoDs=$$(".NoD");
	var m=NoDs[8].innerHTML*1;
	if( (q<0&&m-9>-99) || (q>0&&m+9*q<100) ){
		for(var i=0;i<9;i++){
			NoDs[i].innerHTML=NoDs[i].innerHTML*1+9*q;
		}
	}
}
