/* --------------------------------------------------
Author: Anastasios Pallas / tcpallas@gmail.com
Version 1.0
Last Update: 2024-04-29
-------------------------------------------------- */


// LAB 1
// -------------------------------------------

function lab1_init(element) {

	// reset element
	$('#name_' + element).val('');
	$('#atomic_' + element).val('');
	$('#atomic_' + element).prop('readonly', false);
	$('#mass_' + element).val('');
	$('#mass_' + element).prop('readonly', false);
	$('#protons_' + element).val('');
	$('#protons_' + element).prop('readonly', false);
	$('#electrons_' + element).val('');
	$('#electrons_' + element).prop('readonly', false);
	$('#neutrons_' + element).val('');
	$('#neutrons_' + element).prop('readonly', false);
	$('#result_' + element).html('');

	var r = Math.floor(Math.random() * 8);

	if (r == 0) {
		$('#atomic_' + element).val(lab1_element[element][1]);
		$('#atomic_' + element).prop('readonly', true);
		$('#mass_' + element).val(lab1_element[element][2]);
		$('#mass_' + element).prop('readonly', true);
		return true;
	}
	if (r == 1) {
		$('#atomic_' + element).val(lab1_element[element][1]);
		$('#atomic_' + element).prop('readonly', true);
		$('#protons_' + element).val(lab1_element[element][3]);
		$('#protons_' + element).prop('readonly', true);	
		return true;
	}
	if (r == 2) {
		$('#atomic_' + element).val(lab1_element[element][1]);
		$('#atomic_' + element).prop('readonly', true);
		$('#neutrons_' + element).val(lab1_element[element][5]);
		$('#neutrons_' + element).prop('readonly', true);		
		return true;
	}
	if (r == 3) {
		$('#mass_' + element).val(lab1_element[element][2]);
		$('#mass_' + element).prop('readonly', true);
		$('#protons_' + element).val(lab1_element[element][3]);
		$('#protons_' + element).prop('readonly', true);
		return true;
	}
	if (r == 4) {
		$('#mass_' + element).val(lab1_element[element][2]);
		$('#mass_' + element).prop('readonly', true);
		$('#electrons_' + element).val(lab1_element[element][4]);
		$('#electrons_' + element).prop('readonly', true);
		return true;
	}
	if (r == 5) {
		$('#mass_' + element).val(lab1_element[element][2]);
		$('#mass_' + element).prop('readonly', true);
		$('#neutrons_' + element).val(lab1_element[element][5]);
		$('#neutrons_' + element).prop('readonly', true);
		return true;
	}
	if (r == 6) {
		$('#protons_' + element).val(lab1_element[element][3]);
		$('#protons_' + element).prop('readonly', true);
		$('#electrons_' + element).val(lab1_element[element][4]);
		$('#electrons_' + element).prop('readonly', true);
		return true;
	}
	if (r == 7) {
		$('#protons_' + element).val(lab1_element[element][3]);
		$('#protons_' + element).prop('readonly', true);
		$('#electrons_' + element).val(lab1_element[element][5]);
		$('#electrons_' + element).prop('readonly', true);
		return true;
	}	
	if (r == 8) {
		$('#electrons_' + element).val(lab1_element[element][4]);
		$('#electrons_' + element).prop('readonly', true);
		$('#neutrons_' + element).val(lab1_element[element][5]);
		$('#neutrons_' + element).prop('readonly', true);
		return true;
	}

}

function lab1_check(element) {
	var ret = true;

	if (lab1_element[element][0].toLowerCase() == $('#name_' + element).val().toLowerCase()) {
		$('#name_' + element).val(lab1_element[element][0]);
	} else {
		ret = false;
	}
	if (lab1_element[element][1] != parseInt($('#atomic_' + element).val())) { ret = false;	}
	if (lab1_element[element][2] != parseInt($('#mass_' + element).val())) { ret = false; }
	if (lab1_element[element][3] != parseInt($('#protons_' + element).val())) { ret = false; }
	if (lab1_element[element][4] != parseInt($('#electrons_' + element).val())) { ret = false; }
	if (lab1_element[element][5] != parseInt($('#neutrons_' + element).val())) { ret = false; }
	
	if (ret) {
		$('#result_' + element).html('<i class="fas fa-check"></i>');
	} else {
		$('#result_' + element).html('<i class="fas fa-bell bounce"></i>');
	}

	lab1_calc_score();

	return ret;
}


function lab1_calc_score() {

	var score = 0;

	if ($('#result_cl').html() == '<i class="fas fa-check"></i>') score += 14.28;
	if ($('#result_n').html() == '<i class="fas fa-check"></i>') score += 14.28;
	if ($('#result_mg').html() == '<i class="fas fa-check"></i>') score += 14.28;
	if ($('#result_al').html() == '<i class="fas fa-check"></i>') score += 14.28;
	if ($('#result_si').html() == '<i class="fas fa-check"></i>') score += 14.28;
	if ($('#result_fe').html() == '<i class="fas fa-check"></i>') score += 14.28;
	if ($('#result_br').html() == '<i class="fas fa-check"></i>') score += 14.32;

	score = Math.round(score);

	if (score == 0) {
		$('#progressbar_lab1').css('width', '10%');
	} else {
		$('#progressbar_lab1').css('width', String(score) + '%');
	}
	$('#progressbar_lab1').data('aria-valuenow', String(score));
	$('#progressbar_lab1').html(String(score) + '%');

	if (score == 100) {
		$('#lab1 input').prop('readonly', true);
		$('#award_lab1').show();
	}

	return true;
	
}


function lab1_reload() {

	// reset elements
	lab1_init('cl');
	lab1_init('n');
	lab1_init('mg');
	lab1_init('al');
	lab1_init('si');
	lab1_init('fe');
	lab1_init('br');

	// reset progress bar
	lab1_calc_score();

	// reset award
	$('#award_lab1').hide();

}


// LAB 2
// -------------------------------------------

function lab2_init(element) {

	// reset element
	$('#name2_' + element).val('');
	$('#name2_' + element).prop('readonly', false);
	$('#atomic2_' + element).val('');
	$('#atomic2_' + element).prop('readonly', false);
	$('#layerk_' + element).val('');
	$('#layerk_' + element).prop('readonly', false);
	$('#layerl_' + element).val('');
	$('#layerl_' + element).prop('readonly', false);
	$('#layerm_' + element).val('');
	$('#layerm_' + element).prop('readonly', false);
	$('#layern_' + element).val('');
	$('#layern_' + element).prop('readonly', false);	
	$('#result2_' + element).html('');

	var r = Math.floor(Math.random() * 10);

	if (r < 5) {
		$('#atomic2_' + element).val(lab2_element[element][1]);
		$('#atomic2_' + element).prop('readonly', true);
		return true;
	}
	if (r >= 5) {
		$('#layerk_' + element).val(lab2_element[element][2]);
		$('#layerk_' + element).prop('readonly', true);
		$('#layerl_' + element).val(lab2_element[element][3]);
		$('#layerl_' + element).prop('readonly', true);
		$('#layerm_' + element).val(lab2_element[element][4]);
		$('#layerm_' + element).prop('readonly', true);
		$('#layern_' + element).val(lab2_element[element][5]);
		$('#layern_' + element).prop('readonly', true);
		return true;
	}
}


function lab2_check(element) {
	var ret = true;

	if (lab2_element[element][0].toLowerCase() == $('#name2_' + element).val().toLowerCase()) {
		$('#name2_' + element).val(lab2_element[element][0]);
	} else {
		ret = false;
	}
	
	if (lab2_element[element][1] != parseInt($('#atomic2_' + element).val())) { ret = false; }
	if (lab2_element[element][2] == 0 && $('#layerk_' + element).val() == '') {} else if (lab2_element[element][2] != parseInt($('#layerk_' + element).val())) { ret = false;}
	if (lab2_element[element][3] == 0 && $('#layerl_' + element).val() == '') {} else if (lab2_element[element][3] != parseInt($('#layerl_' + element).val())) { ret = false; }
	if (lab2_element[element][4] == 0 && $('#layerm_' + element).val() == '') {} else if (lab2_element[element][4] != parseInt($('#layerm_' + element).val())) { ret = false; }
	if (lab2_element[element][5] == 0 && $('#layern_' + element).val() == '') {} else if (lab2_element[element][5] != parseInt($('#layern_' + element).val())) { ret = false; }
	
	if (ret) {
		$('#result2_' + element).html('<i class="fas fa-check"></i>');
	} else {
		$('#result2_' + element).html('<i class="fas fa-bell bounce"></i>');
	}

	lab2_calc_score();

	return ret;
}


function lab2_calc_score() {

	var score = 0;

	if ($('#result2_h').html()  == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_ne').html() == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_li').html() == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_na').html() == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_mg').html() == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_c').html()  == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_n').html()  == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_s').html()  == '<i class="fas fa-check"></i>') score += 11.11;
	if ($('#result2_cl').html() == '<i class="fas fa-check"></i>') score += 11.12;

	score = Math.round(score);

	if (score == 0) {
		$('#progressbar_lab2').css('width', '10%');
	} else {
		$('#progressbar_lab2').css('width', String(score) + '%');
	}
	$('#progressbar_lab2').data('aria-valuenow', String(score));
	$('#progressbar_lab2').html(String(score) + '%');

	if (score == 100) {
		$('#lab2 input').prop('readonly', true);
		$('#award_lab2').show();
	}

	return true;
	
}


function lab2_reload() {

	// reset elements
	lab2_init('h');
	lab2_init('ne');
	lab2_init('li');
	lab2_init('na');
	lab2_init('mg');
	lab2_init('c');
	lab2_init('n');
	lab2_init('s');
	lab2_init('cl');

	// reset progress bar
	lab2_calc_score();

	// reset award
	$('#award_lab2').hide();
	
}



// LAB 3
// -------------------------------------------

// Update stage will render next frame
createjs.Ticker.framerate = 30;
createjs.Ticker.addEventListener("tick", tickHandler);

function tickHandler(e) {
	
	if ($("#animation_switch").prop("checked")) {
		stage.update();

		/*
		// scale proton
		if (proton.scaleX >= 1) {
			proton.scaleX = proton.scaleY = 0;
		} else {
			proton.x = config.center_x - (74 * proton.scaleX) - 100;
			proton.y = config.center_y - (74 * proton.scaleY * 0.5);
			proton.scaleX += 0.01;
			proton.scaleY += 0.01;
		}
		
		// scale neutron
		if (neutron.scaleX >= 1) {
			neutron.scaleX = neutron.scaleY = 0;
		} else {
			neutron.x = config.center_x - 100 + (neutron.scaleX * 0.5);
			neutron.y = config.center_y - (74 * neutron.scaleY * 0.5);
			neutron.scaleX += 0.01;
			neutron.scaleY += 0.01;
		}
		*/

		// rotate electrons
		for (let idx = 0; idx < 24; idx++) {
			if (electron[idx].rotation >= 360) {
				electron[idx].rotation = 0;
			} else {
				electron[idx].rotation += 1;
			}

			if (electron[idx].rotation >= 360) {
				electron[idx].rotation = 0;
			} else {
				electron[idx].rotation += 1;
			}
		}

	}
	
}

function check_atom() {

	// Άζωτο (N)
	if ($('#element').val() == 'N' && config.protons == 7 && config.neutrons == 7 && config.electrons_k == 2 && config.electrons_l == 5 && config.electrons_m == 0) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Άνθρακας (C)
	if ($('#element').val() == 'C' && config.protons == 6 && config.neutrons == 0 && config.electrons_k == 2 && config.electrons_l == 4 && config.electrons_m == 0) {
		$('#help_step').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Θείο (S)
	if ($('#element').val() == 'S' && config.protons == 16 && config.neutrons == 16 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 6) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Λίθιο (Li)
	if ($('#element').val() == 'Li' && config.protons == 3 && config.neutrons == 4 && config.electrons_k == 2 && config.electrons_l == 1 && config.electrons_m == 0) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Μαγνήσιο (Mg)
	if ($('#element').val() == 'Mg' && config.protons == 12 && config.neutrons == 12 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 2) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Νάτριο (Na)
	if ($('#element').val() == 'Na' && config.protons == 11 && config.neutrons == 12 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 1) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Νέον (Ne)
	if ($('#element').val() == 'Ne' && config.protons == 10 && config.neutrons == 10 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 0) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Υδρογόνο (H)
	if ($('#element').val() == 'H' && config.protons == 1 && config.neutrons == 0 && config.electrons_k == 1 && config.electrons_l == 0 && config.electrons_m == 0) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Χλώριο (Cl)
	if ($('#element').val() == 'Cl' && config.protons == 17 && config.neutrons == 18 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 7) {
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// Na+
	if ($('#element').val() == 'Na+' && config.protons == 11 && config.neutrons == 12 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 0) {
		$('#award_lab3 span').html('ιόντος');
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}
	
	// Mg2+
	if ($('#element').val() == 'Mg2+' && config.protons == 12 && config.neutrons == 12 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 0) {
		$('#award_lab3 span').html('ιόντος');
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// O2-
	if ($('#element').val() == 'O2-' && config.protons == 8 && config.neutrons == 8 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 0) {
		$('#award_lab3 span').html('ιόντος');
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	// F-
	if ($('#element').val() == 'F-' && config.protons == 9 && config.neutrons == 10 && config.electrons_k == 2 && config.electrons_l == 8 && config.electrons_m == 0) {
		$('#award_lab3 span').html('ιόντος');
		$('#award_lab3').show();
		$('#element').prop('disabled', true);
		$('#protons').prop('readonly', true);
		$('#neutrons').prop('readonly', true);
		$('#electrons_k').prop('readonly', true);
		$('#electrons_l').prop('readonly', true);
		$('#electrons_m').prop('readonly', true);
		return true;
	}

	return false;

}


function lab3_reload() {

	// display a random element
	var rnd = Math.floor(Math.random() * 13);	// 0 to 12
	$('#element option:eq(' + rnd + ')').prop('selected', true);
	$('#element').trigger('change');

	$('#protons').val('0');
	$('#neutrons').val('0');
	$('#electrons_k').val('0');
	$('#electrons_l').val('0');
	$('#electrons_m').val('0');

	$('#protons').trigger('change');
	$('#neutrons').trigger('change');
	$('#electrons_k').trigger('change');
	$('#electrons_l').trigger('change');
	$('#electrons_m').trigger('change');

	$('#element').prop('disabled', false);
	$('#protons').prop('readonly', false);
	$('#neutrons').prop('readonly', false);
	$('#electrons_k').prop('readonly', false);
	$('#electrons_l').prop('readonly', false);
	$('#electrons_m').prop('readonly', false);

	check_atom();

	stage.update();

	$('#award_lab3').hide();

}

