/* display an element */
function show(id, type) {
	document.getElementById(id).style.display = type;
}
	
/* hide an element */
function hide(id) {
	document.getElementById(id).style.display = "none"
}

// die färbung eines als falsch markierten elementes entfernen
function demarcate(element) {
	element.style.backgroundColor = 'white';
}
	
/* validierung von übergebenen feldern. feld wird ggf. merkiert */
function validateForm(elements,values,types) {
	res = true;
	//form = document.userDataForm;
	var debug = 'pruefen gerufen\n------\n';
	for (var i = 0; i < elements.length; i++){
		
		//e = f.elements[i];
		e = document.getElementById(elements[i]);

		ok = false;
		fileupload = false;
		debug += 'pruefe element '+ i +': ' +  e.name + ': ' + e.id+ '\n';

		for (var j = 0; j < values[i].length; j++){
			error_elements = Array(e);
			switch(types[i]) {
				case 'identical':
					if(e.value == values[i][j]) {
						debug += hideErrorField(error_elements);	
					}
					else {
						res = false;
						debug += displayErrorField(error_elements);	
					}
					
				break;
				
				case 'notEmpty':
					if (e.value != '') {
						debug += hideErrorField(error_elements);
					}
					else {
						res = false;
						debug += displayErrorField(error_elements);
					}
					
				break;
				
				case 'email':
					reg = new RegExp('^([a-zA-Z0-9\-\.\_]+)'+
                   						'(\@)([a-zA-Z0-9\-\.]+)'+
                   						'(\.)([a-zA-Z]{2,4})$');
                   						
                   	// local-part
					c = '!#\$%&\'\*\+\-\/0-9=\?a-z\^_`\{\}\|~';
					string = '['+c+']*(?:\\\\[\x00-\x7F]['+c+']*)*';
					localPart = string+'(?:\.'+string+')*';
		
					// domain
					name = '[a-z0-9](?:[a-z0-9-]*[a-z0-9])?';
					domain = name+'(?:\.'+$name+')*\.[a-z]{2,}';
	
					// mailbox
					mailbox = localPart+'@'+domain;
					reg = new RegExp('^'+mailbox+'$');
                   						
                   	if (reg.test(e.value)) {
						debug += hideErrorField(error_elements);
					}
					else {
						res = false;
						debug += displayErrorField(error_elements);	
						
					}
	
					
				break;
				
				case 'password':
					e2 = document.getElementById('passwordCheck');
					error_elements = Array(e,e2);
					if (e.value != '' && e.value == e2.value) {
						debug += hideErrorField(error_elements);
					}
					else {
						res = false;
						debug += displayErrorField(error_elements);	
					}
					
				break;
				
				case 'file':
					fileupload = true;
					if (e.value.lastIndexOf(values[i][j]) != -1 ) {
						debug += hideErrorBlock(error_elements);
					}
					else {
						res = false;
						debug += displayErrorBlock(error_elements);	
					}
					
				break;
				
				default: 
					res = false;
					debug += 'typ nicht bekannt: ' + types[i] + '\n';
			}
		}
		
		debug += '\n';
		//alert(debug);
	}
	
	//alert(debug);
	return res;
}

/* css fehlerklasse einem feld hinzufügen */
function displayErrorField(elements) {
	var debug = 'displayErrorField: ' + elements + '\n';
	for (var i = 0; i < elements.length; i++) {
		element = elements[i];
		document.getElementById('errorBlock').style.display = 'block';
		if (document.getElementById(element.name + '_error'))	document.getElementById(element.name + '_error').style.display = 'block';
		location.hash="errorBlock";
		debug += 'element fehlerhaft: "' +  element.value + '"\n';		
		debug += 'markiere element: ' + element.name + '\n';
		reg = new RegExp('errorField');
		if (!reg.test(element.className)) {
			element.className = element.className + ' errorField';
			debug += 'add error class\n';
		}
	}
	return debug;
}

/* css fehlerklasse einem feld entfernen */
function hideErrorField(elements) {
	var debug = 'element ok: ' + elements + '\n';	
	for (var i = 0; i < elements.length; i++) {
		element = elements[i];
		debug += 'demarkieren: ' + element.name + '\n';	
		element.className = element.className.replace(/errorField/, '');	
	}
	
	return debug;
}

/*  */
function displayErrorBlock(elements) {
	var debug = 'displayErrorBlock: ' + elements + '\n';
	for (var i = 0; i < elements.length; i++) {
		element = elements[i];
		block_error = document.getElementById(element.id+'_error');
		debug += 'element fehlerhaft: "' +  element.value + '"\n';		
		debug += 'markiere element: ' + block_error.name + '\n';
		reg = new RegExp('errorBlock');
		if (!reg.test(block_error.className)) {
			block_error.className = block_error.className + ' errorBlock';
			debug += 'add error class\n';
		}
	}
	return debug;
}

function hideErrorBlock(elements) {
	var debug = 'hideErrorBlock: ' + elements + '\n';
	for (var i = 0; i < elements.length; i++) {
		element = elements[i];
		block_error = document.getElementById(element.id+'_error');
		debug += 'element ok: "' +  element.value + '"\n';		
		debug += 'demarkiere element: ' + block_error.name + '\n';
		reg = new RegExp('errorBlock');
		block_error.className = block_error.className.replace(/errorBlock/, '');	
	}
	return debug;
}

/* */
function pruefeRadioInput(radioObject, werte) {
	result = false;
	value = '';
	for (var i = 0; i < radioObject.length; i++) {
		if (radioObject[i].checked) {
			for (j = 0; j < werte.length; j++){
				if(radioObject[i].value == werte[j]) {
					result = true;
					value = radioObject[i].value;
				}
			}		
		}
	}	
	return Array(result, value);
}

/* */
function pruefeCheckbox(elementNamen) {
	result = false;
	values = Array();
	for (var i = 0; i < elementNamen.length; i++) {
		e = document.getElementById(elementNamen[i]);
		if (e.checked) {
			for (j = 0; j < elementNamen.length; j++){
				if(e.value == elementNamen[j]) {
					result = true;
					values[values.length] = e.value;
				}
			}		
		}
	}	
	return Array(result, values);
}


/* zum einblenden von textfeldern, wenn man auf bearbeiten drückt (z.b. title) 
	id: die id des elements, wo aus reinem text ein input mit dem text gemacht wird
*/
// TODO: dieses problemID wird nicht verwendet.... testen
function showTextfield(id) {
	spanID = id + '_text';
	inputID = id + '_input';
	var spanElement = document.getElementById(spanID);
	var inputElement = document.getElementById(inputID);
	
	if (typeof(spanElement != 'undefined') && typeof(inputElement != 'undefined')) {
		if (inputElement.style.display == 'none') {
			inputElement.value = trim(spanElement.innerHTML);
			show(inputID, 'inline');
			hide(spanID);
		}
		// elementknoten: input ausblenden
		else {
			show(spanID, 'inline');
			hide(inputID);
		}
	}
}

function showTextarea(value, id) {
		if (value != '') show(id, 'block');
		else hide(id);	
}

function checkKey(event) {
	event = event || window.event;
	
	if (event.keyCode == 13) {
		return true;
	}
	else return false;
}


function reloadPage(URL) {
	//location.reload();// führt dazu, dass neu geladen wird, d.h. wenn zuvor submitted wurde wird noch mal submitted
	location.href = 'index.php?page=' + URL;	
}
	  
/* AJAX STUFF */	  
function callCheckDoubleEntry(name, value, tableName, checkMore) {
	/* AJAX-Request starten */
	var ajax = new AJAX({
					'url':  'https://www.mathekalender.de/php/ajax/util.ajax.php',
					'args': {
						'value': value,
						'name': name,
						'tableName': tableName,
						'action': 'checkDoubleEntry',
						'checkMore': checkMore 
					},
					'type': 2, /* 0 = GET, 2 = POST [default] */
					'call': 'markInputField'
       			});
       ajax.send();
}

function markInputField(http_object) {
	if (http_object.responseText) {
		data = http_object.responseText.split(',');
		name = data[0];
		result = data[1];
		inputField = document.getElementById(name);
		errorElement = document.getElementById(name + '_error');
		elements = Array(inputField);
		if (result == 'error') {
			if ((name == 'nickname') || (name == 'email')){
				show(name + '_error_double','block');
				hide(name + '_error');
			}else{
				show(name + '_error','block');
				displayErrorField(elements);
			}
		}
		else if (result == 'empty') {
			if (name == 'nickname'){
				hide(name + '_error_double');
			}
			hide (name + '_error');
			displayErrorField(elements);
		}
		else if (result == 'ok') {
			if ((name == 'nickname') || (name == 'email')){
				hide(name + '_error_double');
			}
			hide (name + '_error');
			hideErrorField(elements);
		}
		else if (result == 'nomail') {
			show (name + '_error','block');
			hide (name + '_error_double');
		}
		else if (name == 'no_check_for_double') {
			//alert('fehler--!?: '+name);// 
			hide('nickname_error_double');
			hide('email_error_double');
			hide('email_error');
		}
	}
}



function showSelectbox(id, hideSpan) {
	var spanElement = document.getElementById(id + '_text');
	var inputElement = document.getElementById(id + '_input');
	
	if (typeof(spanElement != 'undefined') && typeof(inputElement != 'undefined')) {
		if (inputElement.style.display == 'none') {
			show(id + '_input','inline');
			if (hideSpan) {
				hide(id + '_text');
			}
		}
		else {
			hide(id + '_input');
			show(id + '_text','inline');
		}
	}
}


/* beim ajax bearbeiten der textfelder wurden immer leerzeichen angehängt... */
function trim (String) {
  return String.replace (/^\s+/, '').replace (/\s+$/, '');
}

/* blendet element ein, wenn weg anderfalls aus */
function showPollComment(pollID, problemID) {
	elementID = 'comment_' + pollID;
	// textarea ein oder ausblenden
	var element = document.getElementById(elementID);
	if (typeof(element != 'undefined') && typeof(element != 'null')) {
		if (problemID == 'delete') {
			hide(elementID);
		}
		else {
			show(elementID, 'block');
		}
	}
	
	if (pollID == 1) {
		poll1 = document.problemPoll.poll_1;	
		poll2 = document.problemPoll.poll_2;
		poll3 = document.problemPoll.poll_3;
		for (i = 0; i < poll2.length; i++) {
			if (poll2[i].value != 'delete' && (problemID == poll2[i].value || poll3[i].checked  || poll1[i].checked)) {
				poll2[i].disabled = true;
			}
			else {
				poll2[i].disabled = false;	
			}	
			if (poll3[i].value != 'delete' && (problemID == poll3[i].value || poll2[i].checked || poll1[i].checked)) {
				poll3[i].disabled = true;
			}
			else {
				poll3[i].disabled = false;	
			}
		}
	}
	else if (pollID == 2) {
		poll1 = document.problemPoll.poll_1;
		poll2 = document.problemPoll.poll_2;
		poll3 = document.problemPoll.poll_3;
		for (i = 0; i < poll1.length; i++) {
			if (poll1[i].value != 'delete' && (problemID == poll1[i].value || poll3[i].checked || poll2[i].checked)) {
				poll1[i].disabled = true;
			}
			else {
				poll1[i].disabled = false;	
			}	
			if (poll3[i].value != 'delete' && (problemID == poll3[i].value || poll1[i].checked || poll2[i].checked)) {
				poll3[i].disabled = true;
			}
			else {
				poll3[i].disabled = false;	
			}
		}
	}
	else if (pollID == 3) {
		poll1 = document.problemPoll.poll_1;
		poll2 = document.problemPoll.poll_2;
		poll3 = document.problemPoll.poll_3;
		for (i = 0; i < poll1.length; i++) {
			if (poll1[i].value != 'delete' && (problemID == poll1[i].value || poll2[i].checked || poll3[i].checked)) {
				poll1[i].disabled = true;
			}
			else {
				poll1[i].disabled = false;	
			}	
			if (poll2[i].value != 'delete' && (problemID == poll2[i].value || poll1[i].checked || poll3[i].checked)) {
				poll2[i].disabled = true;
			}
			else {
				poll2[i].disabled = false;	
			}
		}
	}
}

/* blendet element ein, wenn weg anderfalls aus */
function showDiv(id) {
	var element = document.getElementById(id);
	
	if (typeof(element != 'undefined') && typeof(element != 'null')) {
		if (element.style.display == 'none') {
			show(id, 'inline');
		}
		else {
			hide(id);
		}
	}
}
/* blendet element ein, wenn weg anderfalls aus */
function showFieldsets(id,id2) {
	var element = document.getElementById(id);
	var element2 = document.getElementById(id2);
	
	if (typeof(element != 'undefined') && typeof(element2 != 'undefined')) {
		if (element.style.display == 'none') {
			show(id, 'inline');
			element2.style.border = '1px solid #0061a5';
			element2.style.background = '#ffe7cf';
			element2.style.marginBottom = '20px';
		}
		else {
			hide(id);
			element2.style.border= '0px';
			element2.style.background = '#EBD8B7';
			element2.style.marginBottom = '-20px';
		}
	}
}


function showInformedAddon(id, index) {
	if (index == 0 || index == 4 || index == 5) {
		document.getElementById(id).value = '';
		hide(id);	
	}
	else {
		show(id, 'block');
	}
}

/*  */
function htmlEntityDecode(String) {
	var t = document.createElement("textarea");
	t.innerHTML = String;
	return t.value;
}

/*  */
function escapeHTMLEncode(String) {
	var div = document.createElement('div');
	var text = document.createTextNode(String);
	div.appendChild(text);
	return div.innerHTML;	
}

/* */
Array.prototype.in_array = function(needle) {
	for(var i = 0; i < this.length; i++) {
		if (needle === this[i]) return true;
	}
	return false;
}

// prüfen, ob cookie gesetzt ist
function cookieInit () {
	if (document.cookie) {
		data = document.cookie.split(";");
  	for (i = 0; i < data.length; i++) {
	  	entry = data[i].split("=");
	  	if (trim(entry[0]) == 'skipToURL') {
	  		if (trim(entry[1]) == 'dmk') {
	    		if (document.getElementById('skipStart').checked) {
	    			//window.location.href = 'index.php?page=home&skipStart=1';
	    			window.location.href = 'home.html';
	    		}
	    		else {
	    			window.location.href = 'index.php?';
	    		}
	    	}
	    	else if (entry[1] == 'mia') {
	    		window.location.href = 'http://mathekalender.mathe-im-advent.de';	
	    	}
	    }
		}
	}
}
    	
// benutzer fragen ob cookie erwünscht wird und ggf. setzen
function setCookie(id, phpCall) {
	if (!phpCall) {
		element = document.getElementById('skipStart');			
	}
	if (phpCall || (typeof(element) != 'undefined' && element.checked)) {
			//document.cookie = 'skipToURL=' + name + ';';	
			// einen 60 tage cookie setzen
			expireDate = new Date();
			sixtyDays = expireDate.getTime() + (5 * 24 * 60 * 60 * 1000);
			expireDate.setTime(sixtyDays);
			document.cookie = 'skipToURL=' + id + ';expires=' + expireDate.toGMTString() +';';	
			if (!phpCall) {
				cookieInit();
			}
	}
	else if (!phpCall) {
		if (id == 'dmk') {
	  	window.location.href = 'index.php';
	  }
	  else if (id == 'mia') {
	  	window.location.href = 'http://www.mathe-im-advent.de';	
	  }
	}
}
			
function deleteCookie() {
	document.cookie = 'skipToURL=index.html;expires=Thu, 01-Jan-70 00:00:01 GMT;';
}

/**/
function resetStudent() {
	document.getElementById('classLevel').selectedIndex = 0;
	document.getElementById('schoolType').selectedIndex = 0;
	document.getElementById('schoolName').value = '';
	document.getElementById('schoolStreet').value = '';
	document.getElementById('schoolPlz').value = '';
	document.getElementById('schoolCity').value = '';
	document.getElementById('age').value = '';
	markselect('classLevel');
	markselect('schoolType');
	marker('schoolName');
	marker('schoolStreet');
	marker('schoolPlz');
	marker('schoolCity');
	marker('age');
}

function resetAdult() {
	document.getElementById('adultDegree').selectedIndex = 0;
	document.getElementById('adultTitle').selectedIndex = 0;
	document.getElementById('adultJob').value = '';

}

/* blendet hinweise für schweizer und österreicher ein und aus */
function showHint() {
	
	status = document.getElementById('status_student');		
	state = document.getElementById('state');
	//alert(document.userDataForm.state);
	//if (document.userDataForm.state.value == 'a' && status.checked == 1) {
	if (state.value == 'a' && status.checked == 1) {
		show('hint_a', 'inline');	
		show('hint_a2', 'inline');	
	}
	else {
		hide('hint_a');	
		hide('hint_a2');	
	} 
	
	if (state.value == 'ch' && status.checked == 1) {
		show('hint_ch', 'inline');	
		show('hint_ch2', 'inline');	
	}
	else {
		hide('hint_ch');	
		hide('hint_ch2');	
	} 
}

function showStateStatus() {
	
	
	student = document.getElementById('status_student');
	state = document.getElementById('state');
	
	// ausländische schüler brauchen keine klassenstufe, sondern nur eine altersangabe document.userDataForm.
	if (state.value != 'd' && state.value != 'a' && state.value != 'ch' && student.checked == 1) {
		show('age_row', 'block');	
		hide('classLevel_row');
		hide('schoolType_row');
		hide('schoolStreet_row');
		hide('schoolPlz_row');
		hide('schoolCity_row');
		document.getElementById('classLevel').selectedIndex = 0;
		document.getElementById('schoolType').selectedIndex = 0;
		document.getElementById('schoolStreet').value = '';
		document.getElementById('schoolPlz').value = '';
		document.getElementById('schoolCity').value = '';
		document.getElementById('schoolName').value = '';
	}
	// deutsscher schüler
	else if (student.checked == 1) {
		hide('age_row');	
		show('classLevel_row', 'block');
		show('schoolType_row', 'block');
		show('schoolStreet_row', 'block');
		show('schoolPlz_row', 'block');
		show('schoolCity_row', 'block');
		document.getElementById('age').value = '';
		document.getElementById('schoolName').value = '';
	}
}

// weihnachtsmann ausblenden wenn auflösung zu klein ist und scrollbalken forciert
function handleSanta() {
	if(screen.width < 1024 || screen.height < 800) {
 		document.getElementById('santa').style.display = 'none';
	}
}

function marker(id){
	var elem = 	document.getElementById(id);
	if(elem.value != ''){
		elem.style.backgroundColor = '#ffe7cf';
	}else{
		elem.style.backgroundColor = 'orange';
	}
}

function demark(id){
	var elem = 	document.getElementById(id);
	elem.style.backgroundColor = '#ffe7cf';
}

function mark(id){
	var elem = 	document.getElementById(id);
	elem.style.backgroundColor = 'orange';
}

function markselect(id){
	var elem = 	document.getElementById(id);
	if(elem.value == '0'){
		elem.style.backgroundColor = 'orange';
	}else{
		elem.style.backgroundColor = '#ffe7cf';
	}
}

function call_flag(user_id, problem_id, wahl){
/* AJAX-Request starten */
// TODO: hier mal zum test relativer pfad zum php script, weil es benutzer gab, deren firefox probleme gemacht hat. ggf überall anpassen
	var ajax = new AJAX({
					'url':  'php/ajax/util.ajax.php',
					'args': {
						'wahl': wahl,
						'user_id': user_id,
						'problem_id': problem_id,
						'action': 'flag'
					},
					'type': 2, /* 0 = GET, 2 = POST [default] */
					'call': 'change_flag'
       			});
       ajax.send();
}





function change_flag(http_object) {
	if (http_object.responseText) {
		data = http_object.responseText.split(',');
		result = data[0];
		problem_id = data[1];
		wahl = data[2];
		
		var ro = document.getElementById(problem_id + '_ampelrot');
		var ge = document.getElementById(problem_id + '_ampelgelb');
		var gr = document.getElementById(problem_id + '_ampelgruen');
		
		if (result == 'update') {
			if(wahl == 0) {
				ro.style.display = 'inline';
				gr.style.display = 'none';
				ge.style.display = 'none';
			}
			else if(wahl == 1){
				ro.style.display = 'none';
				gr.style.display = 'none';
				ge.style.display = 'inline';
			}
			else {
				ro.style.display = 'none';
				ge.style.display = 'none';
				gr.style.display = 'inline';
			}	
		}
	}
}


//nur Zahleneingabe möglich
function trackKeys(event){
	var keyCode = event.keyCode ? event.keyCode : event.which;
	return keyCode > 36 && keyCode < 41 || keyCode > 47 && keyCode < 58 || keyCode == 8 || keyCode == 46;
}


// voting sternimg wechsel
function handlePoll(problemID, element, action, pollID, pollType) {
	if (action == 'activate') {
		thisPollID = element.id.substring(element.id.indexOf('_poll') + 5);
	}
	else if (action == 'deactivate') {
		thisPollID =  pollID;
	}
	//alert(action + ': ' + thisPollID);
		
	for (i = 1; i <= 5; i++) {
		if (thisPollID > 0 && i <= thisPollID) {
			//alert(problemID + '_' + pollType + '_poll' + i);
			document.getElementById(problemID + '_' + pollType + '_poll' + i).src = 'https://www.mathekalender.de/icon/ratingS.png';
		}
		else if (thisPollID > 0) {
			document.getElementById(problemID + '_' + pollType + '_poll' + i).src = 'https://www.mathekalender.de/icon/noRatingS.png';
		}
	}
}		


function callPoll(userID, problemID, pollID, internal, pollType) {
	/* AJAX-Request starten */
// TODO: hier mal zum test relativer pfad zum php script, weil es benutzer gab, deren firefox probleme gemacht hat. ggf überall anpassen
	if (internal) url = '../php/ajax/util.ajax.php';
	else url= 'php/ajax/util.ajax.php';
	var ajax = new AJAX({
					'url':  url,
					'args': {
						'pollID': pollID,
						'pollType': pollType,
						'userID': userID,
						'problemID': problemID,
						'internal': internal,
						'action': 'poll'
					},
					'type': 2, /* 0 = GET, 2 = POST [default] */
					'call': 'changePollStars'
       			});
       ajax.send();
}	

function changePollStars(http_object) {
	if (http_object.responseText) {
		data = http_object.responseText.split(',');
		result = data[0];
		problemID = data[1];
		pollID = data[2];
		internal = data[4];
		pollType = data[3];
		
		for (i = 1; i <= 5; i++) {
			if (pollID > 0 && i <= pollID) {
				document.getElementById(problemID + '_' + pollType + '_poll' + i).src = 'https://www.mathekalender.de/icon/ratingS.png';
				document.getElementById(problemID + '_' + pollType + '_poll' + i).onmouseover = function() {handlePoll(problemID, this, 'deactivate', i, internal, pollType);}
				//alert(problemID + '_' + pollType + '_poll' + i);
			}
			else if (pollID > 0) {
				document.getElementById(problemID + '_' + pollType + '_poll' + i).src = 'https://www.mathekalender.de/icon/noRatingS.png';
				document.getElementById(problemID + '_' + pollType + '_poll' + i).onmouseover = function() {handlePoll(problemID, this, 'activate', i, internal, pollType);}
			}
			//document.getElementById(problemID + '_' + pollType + '_poll' + i).onmouseover = function() {handlePoll(problemID, this, 'activate', pollID, internal, pollType);}
		}
		document.getElementById(problemID + '_' + pollType + '_poll_mouseout').onmouseout = function() {handlePoll(problemID, this, 'deactivate', pollID, internal, pollType);}
	}
}

function callJoker(userID, problemID, element, internal) {
	/* AJAX-Request starten */
// TODO: hier mal zum test relativer pfad zum php script, weil es benutzer gab, deren firefox probleme gemacht hat. ggf überall anpassen
	if (internal) url = '../php/ajax/util.ajax.php';
	else url= 'php/ajax/util.ajax.php';
	if (element.checked) checked = 1;
	else checked = 0;
	var ajax = new AJAX({
					'url':  url,
					'args': {
						'userID': userID,
						'problemID': problemID,
						'checked': checked,
						'internal': internal,
						'action': 'editJoker'
					},
					'type': 2, /* 0 = GET, 2 = POST [default] */
					'call': 'changeJoker'
       			});
       ajax.send();	
}

function changeJoker(http_object) {
	if (http_object.responseText) {
		data = http_object.responseText.split(',');
		result = data[0];
		changeType = data[1];
		problemID = data[2];
		internal = data[3];
		one = data[4];
		two = data[5];
		three = data[6];
		if (data.length > 7) {
			jokerNumber = data[7];
			problemIDOne = data[8];
			problemIDTwo = data[9];
			problemIDThree = data[10];
		}
		
		//alert(result+'-'+changeType+': problemID-'+problemID);
		//alert(result+'-'+changeType+': problemID-'+problemID+' / one-'+one+' / two-'+two+' / three-'+three+' / jokerNumber-'+jokerNumber);
		
		form = document['form_joker'];
		
		// nix gespeichert, haken ggf entfernen
		if (result == 'no_update_too_much_joker') {
			//alert('Aus einem zur Zeit nicht erkennbaren Grund haben Sie mehr als 3 Joker vergeben. Dieser Joker wird also nicht gewertet.');
			checkbox = form['joker_' + problemID];
			if (checkbox.checked) {
				checkbox.checked = false;
			}
		}
		// joker wurde geändert
		else if (result == 'update') {
			length = form.elements.length;
			elements = form.elements;
			//alert(one+': '+two+': '+three+' => '+(one == 1 && two == 1) +' || '+ (one == 1 && three == 1) +' || '+(two == 1 && three == 1));
			for (var i = 0; i < length; i++) {
				if (elements[i].type == 'checkbox') {
					// joker wurde hinzugefügt: ggf alle leeren checkboxen deaktivieren. 
					if (changeType == 'add') {
						if (document.getElementById('zeitstrafe_' + problemID).innerHTML.match(/^\s*$/)) color = 'transparent';
						else color = 'lightGreen';
						document.getElementById('zeitstrafe_' + problemID).style.backgroundColor = color;
						document.getElementById('jokertd_' + problemID).style.backgroundColor = 'lightGreen';	
						// es gab schon zwei joker vor dem neuen, also alle leeren checkboxen disablen
						if ((one == 1 && two == 1) || (one == 1 && three == 1) || (two == 1 && three == 1)) {
							// aktuelle schleifen checkbox ist nicht gechecked und hat nicht die ID einer aufgabe mit joker
							if (!elements[i].checked && elements[i].id != 'joker_' + problemID && elements[i].id != 'joker_' + problemIDOne && elements[i].id != 'joker_' + problemIDTwo && elements[i].id != 'joker_' + problemIDThree ) {
								elements[i].disabled = 'disabled';
							}
						}
					}
					// joker entfernt. alle checkboxen wieder freigeben
					else if (changeType == 'delete') {
						elements[i].disabled = false;
						// prüfen ob zeitstrafe besteht, wenn nicht, dann keine bg farbe verwenden
						if (document.getElementById('zeitstrafe_' + problemID).innerHTML.match(/^\s*$/)) color = 'transparent';
						else color = 'lightPink';
						document.getElementById('zeitstrafe_' + problemID).style.backgroundColor = color;
						document.getElementById('jokertd_' + problemID).style.backgroundColor = 'transparent';
					}
				} 	
			}
			
		}
	}	
}
