
function clone(obj) {
    var temp = new obj.constructor(); // changed (twice)

    for(var key in obj)
        temp[key] = obj[key];
    return temp;
};

function statRequest(data, successFunc)
{
	
	$.ajax(
		{
			type: "POST", 
			url: document.location,
			data: data,
			dataType : 'json',
			success : function(data)	
				{		
					if (data && data.debug)
					{
						$('#debug').html(data.debug);	
					}
					if (successFunc)
						successFunc(data);
				},
			error : function (xml, textStatus, errorThrown) 
			{
  				alert('error: ' + textStatus + " " + (errorThrown ? errorThrown.message : 'unknown!'));
  				
			}
		}
		);
	
}

function statTest()
{
	statRequest({command:'getkids',groepID:3}, function (data) { alert(data); } );
}

function statGroepChange(selectObj)
{
	var groepID = selectObj.value;
	
	updateGroepChange(groepID);
}

function statSchooljaarChange(selectObj)
{
	statData.schooljaar = selectObj.value;
	var groepID = $('#groepID').val();
	updateGroepChange(groepID);
}


function updateGroepChange(groepID)
{
	statData.groepID = groepID;
	statData.schooljaar = $('#schooljaar').val();
	statData.kidID = -1;
	$('#kidslijst').empty();
	
	if (groepID == 0)
	{
		return;		
	}
	
	statRequest(	
		{
			command : 'getkids',
			groepID : groepID,
			schooljaar : statData.schooljaar
			
		},
		onReceiveKids);
	//statGroepChange(this);
}

function f2d(n)
{
	if (n < 10)
		return '0' + n;
	else
		return '' + n;	
}
function formatTime(seconds)
{
	
	var minutes = Math.floor(seconds / 60);
	var hours = Math.floor(minutes / 60);
	minutes %= 60;
	seconds = Math.floor(seconds) % 60;
	
	var res = f2d(minutes) + ":" + f2d(seconds);
	if (hours > 0)
		res = f2d(hours) + ":" + res;
	return res;
}

function onStatsReceived(data)
{
	var grafiek = $('#grafiek');
	grafiek.empty();
	
	var items = data.items;
	
	if (items == null)
	{
		grafiek.html("<p>Geen statistieken mogelijk met deze opties.</p>");
	}
	else if (typeof(items) == "string")
	{
		grafiek.html(items);	
	}	
	else
	{
		
		var maxval = -1;
		var totval = 0;
		
		var itemVal;
		for (var i=0;i<items.length;i++)
		{
			itemVal = parseFloat(items[i].value);
			if (itemVal > maxval)
				maxval = itemVal;
			totval += itemVal;
		}
		
			
		var table = $('<table></table>');
		if (data.desc)
			table.append($('<caption></caption>').html(data.desc));
			
		for (var i=0;i<items.length;i++)
		{
			itemVal = parseFloat(items[i].value);
			var row = $('<tr></tr>');
			row.append($('<td class="graphlabel"></td>').text(items[i].label));
			
			
			var td = $('<td class="graphtd"></td>').width(500);
			
			if (itemVal > 0)
			{
				td.append($("<div class='chartleft'></div>"));
				td.append($("<div class='graphbar'></div>").width(itemVal * (500-2*3) / maxval ));
				td.append($("<div class='chartright'></div>"));
			}
			row.append(td);
			
			td =  $('<td></td>');
			var realVal = (statData.hor == "gemduur" || statData.hor == "totduur") ? formatTime(itemVal) : itemVal.toFixed(2);
						
			var sp1 = $('<span class="grval"></span>').text(itemVal == 0 ? '' : realVal);
			var sp2 = $('<span class="grperc"></span>').text(itemVal == 0 ? '' : ((100*itemVal / totval).toFixed(1) + " %"));
			if (statData.absVals)
			{
				sp1.show(); sp2.hide();
			}
			else
			{
				sp1.hide(); sp2.show();
			}
			
			td.append(sp1);
			td.append(sp2);
			row.append(td)
			table.append(row);
			
		}
		
		grafiek.append(table);
	}
	$('#grafiek').fadeTo("fast", 1);
	
}

var statData = 
	{
		kidID : -1, 
		groepID : -1, 
		hor : null, 
		ver : null, 
		actID : -1, 
		absVals : true, 
		periode : null,
		jaar	: -1,
		week	: -1,
		maand	: -1,
		dag		: -1,
		schooljaar : -1,
		isEvalMode : false
	};

function updateValView(newVal)
{
	statData.absVals = newVal;
	if (statData.absVals)
	{
		$('.grperc').hide();$('.grval').show(); 
	}
	else
	{
		$('.grval').hide();$('.grperc').show(); 
	}
			
}

function initStats(evalMode)
{
	if (evalMode)
	{
		statData.isEvalMode = true;
		statData.periode = 'maand';	
		
	}
	statData.maand = $("#periode_maand").val();
	statData.jaar = $("#periode_jaar").val();
}

function updateStats()
{
	$('#grafiek').fadeTo("fast", 0.5);
	
	data = clone(statData);
	data.command = 'getstats';
	
	statRequest(data, onStatsReceived);
}

function statKidChange(selectObj)
{
	statData.kidID = selectObj.value;
	updateStats();
}

function statHorChange(selectObj)
{
	statData.hor = selectObj.value;
	updateStats();
}

function statActChange(selectObj)
{
	statData.actID = selectObj.value;
	updateStats();
}

function statVerChange(selectObj)
{
	statData.ver = selectObj.value;

	if (statData.ver == "kids")
	{
		$('#kidslijst').hide();
		$('#actlijst').show();
		$('#weergave').show();
		$('#meetwaarde').show();
		
	}
	else if (statData.ver == "acts")
	{
		$('#kidslijst').show();
		$('#actlijst').hide();
		$('#weergave').show();
		$('#meetwaarde').show();
	}
	else if (statData.ver == "overlap")
	{
		$('#kidslijst').show();
		$('#actlijst').show();
		$('#weergave').show();
		$('#meetwaarde').show();
	}	
	else if (statData.ver == "matrix")
	{
		$('#kidslijst').hide();
		$('#actlijst').hide();
		$('#weergave').hide();
		$('#meetwaarde').hide();
	}	
	else if (statData.ver == "eval_kid")
	{
		$('#kidslijst').show();
		$('#actlijst').hide();
		$('#weergave').hide();
		$('#meetwaarde').hide();
	}	
	else if (statData.ver == "eval_act")
	{
		$('#kidslijst').hide();
		$('#actlijst').show();
		$('#weergave').hide();
		$('#meetwaarde').hide();
	}	
		
	
	
	updateStats();
}

function onReceiveKids(data)
{
	var sel = $('<select name="kidID"></select>');
	sel.change(function() { statKidChange(this); } );
	sel.append($('<option selected="selected" value="0">-- ' + (statData.isEvalMode ? 'kies een leerling' : 'alle leerlingen') + ' --</option>'));
	for (var i=0;i<data.length;i++)
	{
		sel.append($('<option></option>').attr('value', data[i].id).text(data[i].naam));
	}
	$('#kidslijst').empty();
	$('#kidslijst').append(sel);
	
	updateStats();
}


function refreshWeeks()
{
	if ($('#periode_week').length > 0)
	{
		statRequest({command:'getweeks', jaar:statData.jaar}, onReceiveWeeks);
	}
}
function statJaarChange()
{
	var jaar = $("#periode_jaar").val();
	
	statData.jaar = jaar;
	
	refreshWeeks();
	updateStats();
}



function statWeekChange(selectObj)
{
	statData.week =  selectObj.value;
	updateStats();
}

function statDagChange(textObj)
{
	statData.dag =  textObj.value;
	updateStats();
}

function statMaandChange()
{
	statData.maand = $("#periode_maand").val();
	updateStats();
	
}

function onReceiveWeeks(data)
{
	var sel = $('#periode_week');
	sel.empty();
	sel.append($('<option selected="selected" value="0">--(week)-</option>'));
	for (i=0;i<data.weeks.length;i++)
	{
		sel.append($('<option value="' + (i + 1) + '"></option>').text(data.weeks[i]));	
	}
}


function updatePeriode()
{
	var showJaar = false;
	var showMaand = false;
	var showWeek = false;
	var showDag = false;
	
	
	
	switch(statData.periode)
	{
	case 'jaar':
		showJaar = true;
		break;	
	case 'maand':
		showJaar = true;
		showMaand = true;
		break;
	case 'week':
		showJaar = true;
		showWeek = true;
		break;
	case 'dag':
		showDag = true;
		break;
	}	
	
	if (!showJaar)	$('#periode_jaar')	.hide();
	if (!showMaand)	$('#periode_maand')	.hide();
	if (!showWeek)	$('#periode_week')	.hide();
	if (!showDag)	$('#periode_dag')	.hide();
	
	if (showJaar)	$('#periode_jaar')	.show();
	if (showMaand)	$('#periode_maand')	.show();
	if (showWeek)	$('#periode_week')	.show();
	if (showDag)	$('#periode_dag')	.show();
	updateStats();	
}


function statPeriodeChange(selectObj)
{
	var type = selectObj.value;
	statData.periode = type;
	
	if (type == "week")
		refreshWeeks();
	
	updatePeriode();
}

function editEv(datum, kidID, actID)
{
	var dlgDiv = $("<div id='evaldialog'>Bezig met laden...</div>");

	dlgDiv.dialog( { title : "Beoordeling", width: 500, height: 400, modal : true } );
	dlgDiv.load("beoordelingen",
					{ command : 'editeval',
						kidID : kidID,
						actID : actID,
						datum : datum
					});
	//alert(datum + " " + kidID + " " + actID);	
}


function onSendEvalReply(data)
{
	if (!data)
	{
		alert("Opslaan mislukt");
		return;	
	}
	
	if (data.success == "true")
	{
		$("#evaldialog").dialog("destroy").remove();
		updateStats();
		return;
	}
	
	alert(data.errorMsg ? data.errorMsg : "Onbekende fout bij opslaan");

}
function sendEval()
{
	var formEl = $("form#editeval");
	
	
	var data = {	'save' : '1',
					'command' : 'editeval',
					'actID' : $("input[name=actID]", formEl).val(),
					'kidID' : $("input[name=kidID]", formEl).val(),
					'datum' : $("input[name=datum]", formEl).val(),
					'beoordeling' : $("input[name=beoordeling]:checked", formEl).val(),
					'opmerkingen' : $("textarea[name=opmerkingen]", formEl).val()
			 	};
	statRequest(data, onSendEvalReply)
}
				
$( 	function() 
	{
		$('#ajaxStatus').ajaxStart(function () { $(this).html("<div class='loading'></div> Bezig met ophalen van gegevens...").css('color','blue'); });
		$('#ajaxStatus').ajaxStop(function () { $(this).fadeOut("slow") });
	
		
	}
);



