/*---------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------                            ---------------------------------------------------*/
/*--------------------------------------------------      Sonstige Funktionen   ---------------------------------------------------*/
/*--------------------------------------------------                            ---------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

//function move_option (form_name, element_name, option_name, direction)
//{
//	var element_obj = document.forms[form_name].elements[element_name];
//
//	if (direction == "up") {
//		if (element_obj.selectedIndex != 0) {
//			var temp = element_obj.options[Number(element_obj.selectedIndex) - 1];
//			element_obj.options[Number(element_obj.selectedIndex) - 1] = element_obj.options[Number(element_obj.selectedIndex)];
//			element_obj.options[Number(element_obj.selectedIndex)] = temp;
//		} else {
//			// evtl. Fehlermeldung ausgeben dass man dieses Element nicht weiter nach oben verschieben kann
//			// oder einfach nichts tun ;D
//		}
//	} else if (direction == "down") {
//		if (element_obj.selectedIndex != (Number(element_obj.options.length) - 1) {
//			var temp = element_obj.options[Number(element_obj.selectedIndex) + 1];
//			element_obj.options[Number(element_obj.selectedIndex) + 1] = element_obj.options[Number(element_obj.selectedIndex)];
//			element_obj.options[Number(element_obj.selectedIndex)] = temp;
//		} else {
//			// evtl. Fehlermeldung ausgeben dass man dieses Element nicht weiter nach unteb verschieben kann
//			// oder einfach nichts tun ;D
//		}
//	}
//}


/*---------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------                 --------------------------------------------------------*/
/*--------------------------------------------------------     Baumenü     --------------------------------------------------------*/
/*--------------------------------------------------------                 --------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function min_max_arbeiter (building_id, needed, maximal, basetime)
{
	if (document.forms["form_" + building_id].worker.value < needed)
		document.forms["form_" + building_id].worker.value = needed;

	if (document.forms["form_" + building_id].worker.value > maximal)
		document.forms["form_" + building_id].worker.value = maximal;

	bauzeit(building_id, basetime);
}


function bauzeit (building_id, basetime)
{
	var worker = document.forms["form_" + building_id].worker.value;
	build_faktor = worker * (1 / (1 + Math.log(worker)));

	var buildtime = basetime / build_faktor;

	time = sectotime(buildtime);

	if (worker == 0)
		document.forms["form_" + building_id].time.value = "Nicht möglich!";
	else
		document.forms["form_" + building_id].time.value = time;

	if (worker != "")
		document.forms["form_" + building_id].worker.value = Math.floor(worker);

	if (document.forms["form_" + building_id].worker.value == "NaN")
	{
		document.forms["form_" + building_id].worker.value = 0;
		bauzeit (building_id, basetime);
	}
}

function bauzeit_modify (building_id, basetime, current_workers, unfinished_percent)
{
	if (document.forms["form_" + building_id].direction[0].checked == true)
		var worker = current_workers + parseInt(document.forms["form_" + building_id].worker.value);

	if (document.forms["form_" + building_id].direction[1].checked == true)
		var worker = current_workers - parseInt(document.forms["form_" + building_id].worker.value);

	build_faktor = worker * (1 / (1 + Math.log(worker)));
	var buildtime = (basetime / build_faktor) * unfinished_percent;

	time = sectotime(buildtime);

	if (worker <= 0)
		document.forms["form_" + building_id].time.value = "Nicht möglich!";
	else
		document.forms["form_" + building_id].time.value = time;

	if (document.forms["form_" + building_id].worker.value != "")
		document.forms["form_" + building_id].worker.value = Math.floor(document.forms["form_" + building_id].worker.value);
}

/*---------------------------------------------------------------------------------------------------------------------------------*/
/*------------------------------------------------                                -------------------------------------------------*/
/*------------------------------------------------     Arbeiteradministration     -------------------------------------------------*/
/*------------------------------------------------                                -------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function all_workeradmin (workertype,direction,number_worker)
{
	if (direction == "plus")
		{
			if (document.workeradmin.woodcutter[0].checked == true && workertype != 'woodcutter') { number_worker -= document.workeradmin.number_woodcutter.value; }
			if (document.workeradmin.quarryman[0].checked == true && workertype != 'quarryman') { number_worker -= document.workeradmin.number_quarryman.value; }
			if (document.workeradmin.miner[0].checked == true && workertype != 'miner') { number_worker -= document.workeradmin.number_miner.value; }

			if (number_worker < 0)
				number_worker = 0;

			document.workeradmin.elements["number_" + workertype].value = number_worker;
			document.workeradmin.elements[workertype][0].click();
		}
	if (direction == "minus")
		{
			document.workeradmin.elements["number_" + workertype].value = number_worker;
			document.workeradmin.elements[workertype][1].click();
		}
}

/*---------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------                            ---------------------------------------------------*/
/*--------------------------------------------------      Rohstoff-Zählung      ---------------------------------------------------*/
/*--------------------------------------------------                            ---------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

count_ressis_times = 0;

function count_ressis ()
{
	if (rechnen_store() != "true" || count_ressis_times == 0)
		{
			window.setTimeout("count_ressis()",count_ressis_timeout);
			
			count_ressis_times++;
			
			rechnen_ressis("wood");
			rechnen_ressis("stone");
			rechnen_ressis("iron");
			rechnen_ressis("moonsilver");
			rechnen_ressis("aria");
			rechnen_ressis("lenya");
			rechnen_ressis("food");
		}
}

function rechnen_ressis(rohstofftyp)
{
	actual_ressis[rohstofftyp] = Number(start_ressis[rohstofftyp]) + (count_ressis_times * count_ressis_prod_per_timestep[rohstofftyp]);
	document.getElementById("rohstoff_" + rohstofftyp).firstChild.nodeValue = number_format(actual_ressis[rohstofftyp],0,"",".");
}


function rechnen_store()
{
	var in_store = Number(actual_ressis['wood']) + Number(actual_ressis['stone']) + Number(actual_ressis['iron']) + Number(actual_ressis['moonsilver']) + Number(actual_ressis['aria']) + Number(actual_ressis['lenya']) + Number(actual_ressis['food']);
	var proz_store = in_store / storesize * 100;

	if (proz_store >= 100)
		{
			proz_store = 100;
			return "true";
		}

	document.getElementById("rohstoff_store").firstChild.nodeValue = number_format(proz_store,2,',','') + "%";
}


function calc_barack_time(unit_id)
{
	document.getElementById(unit_id).value = sectotime(document.barack.elements["unit[" + unit_id + "]"].value * document.barack.elements["traintime_" + unit_id].value);
	var time_gesamt = 0;
	var elements_by_name = document.getElementsByName("time");
	for (i = 0; i < elements_by_name.length; i++)
		{
			var thiselement = elements_by_name[i];
			var elementid = thiselement.id;
			var time_gesamt = time_gesamt + (document.barack.elements["unit[" + elementid + "]"].value * document.barack.elements["traintime_" + elementid].value)
		}
	document.barack.time_gesamt.value = sectotime(time_gesamt);
}
/*---------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------                            ---------------------------------------------------*/
/*--------------------------------------------------       Ausgabe Funktionen   ---------------------------------------------------*/
/*--------------------------------------------------                            ---------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function countdown (sec,id_name)
{
	sec--;

	if (sec > 0)
		{
			window.setTimeout("countdown(" + sec + ",'" + id_name + "')",1000);
			document.getElementById(id_name).firstChild.nodeValue = sectotime(sec) + " ";
		}
	else
		document.getElementById(id_name).firstChild.nodeValue = "-- ";
}

function unit_percent_ready_init (starttime,time_now,finishtime,row)
{
	var traintime = finishtime - starttime;
	var already_trained = time_now - starttime;
	var trained_percent = (already_trained / traintime) * 100;
	var percent_per_seconds = 100 / traintime;

	unit_percent_ready(percent_per_seconds,trained_percent,row);
}

function unit_percent_ready (percent_per_seconds,trained_percent,row)
{
	var new_trained_percent = trained_percent + percent_per_seconds;
	if (new_trained_percent < 100)
		{
			if (new_trained_percent > 0)
			{ window.setTimeout("unit_percent_ready(" + percent_per_seconds + "," + new_trained_percent + "," + row + ")",980); }
			else
			{ trained_percent += percent_per_seconds; window.setTimeout("unit_percent_ready(" + percent_per_seconds + "," + new_trained_percent + "," + row + ")",2000); }
		}
	if (new_trained_percent > 0)
		{
			document.getElementById("unit_percent_" + row).firstChild.nodeValue = number_format(new_trained_percent,1,',','.') + '%';

			document.getElementById("unit_bar_" + row).style.width = Math.floor(new_trained_percent);
		}
}


/*---------------------------------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------                          ----------------------------------------------------*/
/*---------------------------------------------------     Hilfs Funktionen     ----------------------------------------------------*/
/*---------------------------------------------------                          ----------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function set_checkboxes(check,form_name,element_name)
{
	var boxes = document.forms[form_name].elements[element_name];
	var set_boxes  = boxes.length;

	if ( set_boxes )
		{
			for ( i = 0 ; i < set_boxes ; i++ )
			{
				boxes[i].checked = check;
			}
		}
	else
		{
			boxes.checked = check;
		}

	return true;
}

function write_to_contact()
{
	var contact = document.Formular.contact_list.value;
	document.Formular.an.value = contact;
}

function standart (form_name,element_name,default_value)
{
	document.forms[form_name].elements[element_name].value = default_value;
}

function open_description (pfad)
{
	window.open(pfad,"PopUp","width=500,height=650,dependent=yes,menubar=no,toolbar=no,scrollbars=yes,status=no,resizable=no,left=300,top=10,location=no,hotkeys=no")
}

/*---------------------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------                             ---------------------------------------------------*/
/*-------------------------------------------------    				SELECTOR			    ---------------------------------------------------*/
/*-------------------------------------------------                             ---------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function open_selector (type_id, random)
{
	temp = window.open("selector.php?type=" + type_id + "&rand=" + random,"selector_" + type_id,"width=600,height=650,dependent=yes,menubar=no,toolbar=no,scrollbars=yes,status=no,resizable=no,left=300,top=10,location=no,hotkeys=no")
	return temp;
}

function selector_click_row (row_id)
{
	document.selector.elements['unit_' + row_id].click();
}

function selector_change_box (row_id, row_click)
{
	if (document.selector.elements['unit_' + row_id].checked == true) {
		document.getElementById('row_' + row_id).className = "selector_row_marked";
	} else {
		document.getElementById('row_' + row_id).className = "selector_row_unmarked";
	}
	if (row_click == true) {
		document.getElementById("all").checked = false;
		selector_write_to_form();
	}
}

function selector_write_to_form ()
{
	var checkboxes = document.getElementsByTagName("input");
	var output = new Array();
	var min_speed = 2147483647;
	var akt_speed = 0;
	var unit_id = 0;
	var storage = 0;
	for (var i = 2; i < checkboxes.length; i++) {
		if (checkboxes[i].checked) {
			unit_id = checkboxes[i].name.split("_")[1];
			akt_speed = Number(document.getElementById("speed_" + unit_id).firstChild.nodeValue);

			if (min_speed > akt_speed) {
				min_speed = akt_speed;
			}

			storage += Number(document.getElementById("storage_" + unit_id).firstChild.nodeValue);
			output[output.length] = unit_id;
		}
	}
	if (min_speed == 2147483647) {
		min_speed = 0;
	}
	var temp = window.location.search.split("=")[1].split("&")[0];
	opener.document.armies.elements['amount_' + temp].value = output.length;
	opener.document.armies.elements['choose_' + temp + '_d'].value = output.join(",");
	opener.document.armies.elements['speed_' + temp].value = min_speed;
	opener.document.armies.elements['storage_' + temp].value = storage;

	opener.setTimeout("armies_calculate_start();",0);
}

function selector_all ()
{
	var mark = document.getElementById("all").checked;
	selector_check_boxes(mark);
}

function selector_check_boxes (mark)
{
	var checkboxes = document.getElementsByTagName("input");
	for (var i = 2; i < checkboxes.length; i++) {
		checkboxes[i].checked = mark;
		selector_change_box(checkboxes[i].name.split("_")[1], false)
	}
	selector_write_to_form ();
}

function selector_autoselect (id_name, asc)
{
	var checkboxes = document.getElementsByTagName("input");
	var amount = document.selector.amount.value;
	var data = new Array();
	for (var i = 2; i < checkboxes.length; i++) {
		var unit_id	= checkboxes[i].name.split("_")[1];
		data[i-2]		= Number(document.getElementById(id_name + "_" + unit_id).firstChild.nodeValue);
	}
	data.sort(Numsort);
	if (!asc) {
		data.reverse();
	}
	data = data.slice(0, amount);
	for (var i = 2; i < checkboxes.length; i++) {
		var unit_id	= checkboxes[i].name.split("_")[1];
		var temp = Number(document.getElementById(id_name + "_" + unit_id).firstChild.nodeValue);
		if (in_array(data, temp)) {
			checkboxes[i].checked = true;
			selector_change_box(unit_id, false);
			data = array_remove_elements(data, temp, true);
			if (data.length == 0) {
				break;
			}
		}
	}
	selector_write_to_form();
}

function selector_random (type)
{
	document.selector.amount.value = opener.document.armies.elements['amount_' + type].value;
	selector_autoselect("random", true);
	window.close();
}

function selector_sort (what, asc)
{
	var old_form_action = document.selector.action;
	if (asc) {
		temp = "1";
	} else {
		temp = "0";
	}
	document.selector.action = old_form_action + "&what=" + what + "&asc=" + temp;
	document.selector.submit();
}



/*---------------------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------                             ---------------------------------------------------*/
/*-------------------------------------------------    Kapselungs Funktionen    ---------------------------------------------------*/
/*-------------------------------------------------                             ---------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function number_format(number,laenge,sep,th_sep)
{
	number = Math.round(number * Math.pow(10, laenge)) / Math.pow(10,laenge);
	str_number = number + '';

	arr_int = str_number.split('.');

	if (!arr_int[0]) {
		arr_int[0] = '0';
	}

	if (!arr_int[1]) {
		arr_int[1] = '';
	}

	if (arr_int[1].length < laenge) {
		nachkomma = arr_int[1];
		for (i=arr_int[1].length+1; i <= laenge; i++) {
			nachkomma += '0';
		}
		arr_int[1] = nachkomma;
	}

	if (th_sep != '' && arr_int[0].length > 3) {
		Begriff = arr_int[0];
		arr_int[0] = '';

		for(j = 3; j < Begriff.length ; j+=3)
			{
				Extrakt = Begriff.slice(Begriff.length - j, Begriff.length - j + 3);
				arr_int[0] = th_sep + Extrakt +  arr_int[0] + '';
			}
		str_first = Begriff.substr(0, (Begriff.length % 3 == 0)?3:(Begriff.length % 3));
		arr_int[0] = str_first + arr_int[0];
	}

	var temp = arr_int[0]+sep+arr_int[1]
	if (temp.substr(0,2) == ("-"+th_sep)) {
		temp = "-" + temp.substring(2, temp.length);
	}
	return temp;
}


function number_unformat(number, sep, th_sep)
{
	number = String(number);
	var ret = ""
	for (var i = 0; i < number.length; i++) {
		if (number.charAt(i) == sep) {
			ret += '.';
		} else if (number.charAt(i) == th_sep) {
			ret += '';
		} else {
			ret += number.charAt(i);
		}
	}
	return Number(ret);
}


function sectotime (seconds)
{
	seconds = Math.round(seconds);
	days = Math.floor(seconds / 86400);
	seconds -= 86400 * days;

	hours = Math.floor(seconds / 3600);
	seconds -= 3600 * hours;

	minutes = Math.floor(seconds / 60);
	seconds -= 60 * minutes;

	if (minutes < 10)
		minutes = '0' + minutes;
	if (seconds < 10)
		seconds = '0' + seconds;

	time = hours + ':' + minutes + ':' + seconds;

	if (days != 0)
		{
			if (days == 1)
				time = days + " Tag, " + time;
			else
				time = days + " Tage, " + time;
		}

	return time;
}

function in_array(src_array, needle)
{
	for (var i = 0; i < src_array.length; i++) {
		if (src_array[i] == needle) {
			return true;
		}
	}
	return false;
}

function Numsort (a, b) {
  return a - b;
}

function array_remove_elements (src_array, to_remove, only_one)
{
	var new_array = new Array();
	var found = false;
	for (var i = 0; i < src_array.length; i++)
		{
			if (src_array[i] != to_remove || (found && only_one)) {
				new_array[new_array.length] = src_array[i];
			} else {
				found = true;
			}
		}
	return new_array;
}
	

function id_to_ressi_name (id, lang)
{
	if (lang == "de") {
		switch (id) {
			case 1: return "Holz";
			case 2: return "Stein";
			case 3: return "Eisen";
			case 4: return "Mondsilber";
			case 5: return "Aria";
			case 6: return "Lenya";
			case 7: return "Nahrung";
		}
	}
	if (lang == "en") {
		switch (id) {
			case 1: return "wood";
			case 2: return "stone";
			case 3: return "iron";
			case 4: return "moonsilver";
			case 5: return "aria";
			case 6: return "lenya";
			case 7: return "food";
		}
	}
}


function is_array(test_var)
{
	try {
		if (typeof(test_var.length) == "number" && typeof test_var == "object") {
			return true;
		} else {
			return false;
		}
	} catch (e) { return false; }
}


function array_copy (src_arr)
{
	var return_arr = new Array();
	for (var i = 0; i < src_arr.length; i++) {
		if (is_array(src_arr[i])) {
			return_arr[i] = array_copy(src_arr[i]);
		} else {
			return_arr[i] = src_arr[i];
		}
	}
	return return_arr;
}


function array_copy_assoc (src)
{
	var return_src = new Object();
	for (var item in src) {
		return_src[String(item)] = src[String(item)];
	}
	return return_src;
}


function get_distance (ax, ay, bx, by)
{
	var vx = ax - bx;
	var vy = ay - by;
	return Math.sqrt(Math.pow(vx,2) + Math.pow(vy,2));
}


function kp_to_km (kp, in_frame)
{
	if (in_frame) {
		return (kp * parent.document.config.coord_distance.value) / 1000;
	}
	return (kp * document.config.coord_distance.value) / 1000;
}

/*---------------------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------                             ---------------------------------------------------*/
/*-------------------------------------------------           overlay           ---------------------------------------------------*/
/*-------------------------------------------------                             ---------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------------------------------------*/

function overlay_init()
{
	var overlay_ID = 0;
	do {
		var overlay = document.getElementById("overlay_" + overlay_ID + "_area");
		if (overlay) {
			overlay.style.display = "none";
		}
		overlay_reposition(overlay_ID);

		overlay_ID++;
	} while (overlay);
}

function overlay_reposition(overlay_ID)
{
	var overlay = document.getElementById("overlay_" + overlay_ID + "_area");
	var overlayCommand = document.getElementById("overlay_command_" + overlay_ID + "_");

	if(overlay && overlayCommand)
	{
		if(overlay.style.display == "none") {
			var el = overlayCommand;
			var pL = 0;
			var lastWidth = 0;
			while(el) {
				lastWidth = el.clientWidth;
				pL+=el.offsetLeft;
				el=el.offsetParent;
			}
			overlay.style.position = "absolute";
			overlay.style.left = pL + 'px';
			overlay.style.zIndex = 100;
		}
	}
}

function overlay_toggleID(overlay_ID)
{
	var overlay_ID_ID = 0;
	var open_nothing = false;
	var path_to_logged_in = document.config.PATH_TO_LOGGED_IN.value;
	var logged_in_race = document.config.logged_in_race.value;

	if (document.getElementById("overlay_" + overlay_ID + "_area").style.display == "block") {
		var open_nothing = true;
	}

	do {
		var overlay = document.getElementById("overlay_" + overlay_ID_ID + "_area");
		if (overlay) {
			overlay.style.display = "none";
		}
		if (navigator.appName != "Microsoft Internet Explorer") {
			document.getElementsByName("overlay_image_" + overlay_ID_ID + "_")[0].src = path_to_logged_in + "design/0/images/plus.gif";
		}
		overlay_ID_ID++;
	} while (document.getElementById("overlay_" + overlay_ID_ID + "_area"));

	show = true;
	var overlay = document.getElementById("overlay_" + overlay_ID + "_area");

	if (overlay && !open_nothing) {
		if(show && overlay.style.display == "none") {
			overlay.style.display = "block";
			show = true;
		} else {
			show = false;
			overlay.style.display = "none";
		}

		if (navigator.appName != "Microsoft Internet Explorer") {
			document.getElementsByName("overlay_image_" + overlay_ID + "_")[0].src = path_to_logged_in + "design/0/images/minus.gif";
		}
	}
}

function overlay_toggleALL(show)
{
	var overlay_ID = 0;
	do {
		var overlay = document.getElementById("overlay_" + overlay_ID + "_area");
		if (overlay) {
			if(show && overlay.style.display == "none") {
				overlay.style.display = "block";
				show = true;
			} else {
				show = false;
				overlay.style.display = "none";
			}
		}

		overlay_ID++;
	} while (overlay);
}

