function randOrd(){
	return (Math.round(Math.random())-0.5);
}

//initialize
function init(num) {
	dishes=[];
	dishes2=[];
	for (var i=0;i<num;i++) {
		dishes[i]=0;
		dishes2[i]=0;
	}
}

function getRandomDraw(mean,stdev) {
	mean=Math.floor(mean);
	stdev=Math.floor(stdev);
	var U = Math.random();
	var V = Math.random();
	var X = Math.sqrt(-2 * Math.log(U)) * Math.cos(2*Math.PI*V);
	return Math.floor(mean + (stdev * X));

}

average = function(a){
	var r = {mean: 0, variance: 0, deviation: 0}, t = a.length;
	for(var m, s = 0, l = t; l--; s += a[l]);
	for(m = r.mean = s / t, l = t, s = 0; l--; s += Math.pow(a[l] - m, 2));
	return r.deviation = Math.sqrt(r.variance = s / t), r;
}

function doDishes() {
	countDays++;
	if (document.forms.inputs.model.checked) {//normal distribution model
		var mean = document.forms.inputs.mean.value;
		var stdev = document.forms.inputs.stdev.value;
		var numUsed = getRandomDraw(mean,stdev);
	}

	else { 		//uniform model
		var numUsed = Math.ceil(Math.random()*numDishes); //uniform model;
	}

	var washed = dishes.splice(0,numUsed).sort(randOrd);
	var washed2 = dishes2.splice(0,numUsed).sort(randOrd);
	for (var k=0;k<washed.length;k++) {
		washed[k]=washed[k]+1;
		washed2[k]=washed2[k]+1;
	}
	newdishes = washed.concat(dishes);
	newdishes2 = dishes2.concat(washed2);
	dishes=newdishes;
	dishes2=newdishes2;
	
	//summary stats
	var a = average(dishes);
	var a2 = average(dishes2);
	$("#topfoot").html("<b>Average:</b> " + parseInt(a.mean) + "<br><b>Stdev: </b>" +  Math.round((a.deviation/a.mean)*100)/100);
	$("#bottomfoot").html("<b>Average:</b> " + parseInt(a2.mean) + "<br><b>Stdev: </b>" +  Math.round((a2.deviation/a.mean)*100)/100);
	
	$("#dishes tbody").html("");
	$("#washes").html(countDays);
	for (k=0;k<dishes.length;k++) {
		var wdth=(200*dishes[k])/countDays;
		var wdth2=(200*dishes2[k])/countDays;
		$("#dishes").append($("<tr><td class='dish'>Dish " + k + "</td><td class='count'>" + dishes[k] + "</td><td class='graph' align='right' width='190'><div style='width:" + wdth + "px; background-color: #666666;'>&nbsp;</td><td class='graph' align='left' width='190'><div style='width:" + wdth2 + "px; background-color: #999999;'>&nbsp;</td><td class='count'>" + dishes2[k] + "</td></tr>"));
	}
	timer = window.setTimeout("doDishes()",10);

}

var dishes = [];
var dishes2 = [];
var numDishes, timer, countDays;
countDays=0;
init(numDishes);

function pause(elm) {
	if (elm.value=="pause") {
		clearTimeout(timer);
		elm.value="continue";
	}
	else {
		elm.value="pause";
		doDishes();
	}
}

function restart() {
	countDays=0;
	numDishes=document.forms.inputs.num.value;
	init(numDishes);
	document.forms.inputs.playpause.value="pause";
	doDishes();
}


