function switch_slot(list)
{
	var new_sel = list.selectedIndex;
	var table = document.getElementById('shiptable');
	if(new_sel > 0)
	{
		table.rows[24].style.display = 'none';
		table.rows[25].style.display = 'none';
	}
	else
	{
		table.rows[24].style.display = '';
		table.rows[25].style.display = '';
	}
	// save old values & show new
	save_data(old_sel);
	load_data(new_sel);
	old_sel = new_sel;
}

function save_data(target_slot)
{
	var val, name, i;
	for(i = 0; i < 22; i++)
	{
		// attacker
		if(i < 14 && i != 10)
		{
			name = "ship_a_" + i + "_b";
			val = document.getElementsByName(name)[0].value;
			ships[0][target_slot][i] = (val == 0 ? "0" : val);
		}
		// defender
		name = "ship_d_" + i + "_b";
		val = document.getElementsByName(name)[0].value;
		if((i == 21 || i == 22) && val > 1)
		{
			val = 1;
			document.getElementsByName(name)[0].value = 1;
		}
		ships[1][target_slot][i] = (val == 0 ? "0" : val);
	}
	// techs & engines
	for(i = 0; i < 3; i++)
	{
		name = "tech_a_" + i;
		val = document.getElementsByName(name)[0].value;
		techs[0][target_slot][i] = (val == 0 ? "0" : val);
		
		name = "tech_d_" + i;
		val = document.getElementsByName(name)[0].value;
		techs[1][target_slot][i] = (val == 0 ? "0" : val);
		
		name = "engine_" + i;
		val = document.getElementsByName(name)[0].value;
		engines[target_slot][i] = (val == 0 ? "0" : val);
	}
	
	//position
	val = document.getElementsByName("start_pos")[0].value;
	start_pos[target_slot] = (val == "" ? " " : val);
}

function load_data(source_slot)
{
	var name, i;
	for(i = 0; i < 22; i++)
	{
		// attacker
		if(i < 14 && i != 10)
		{
			name = "ship_a_" + i + "_b";
			if(ships[0][source_slot][i] > 0)
				document.getElementsByName(name)[0].value = ships[0][source_slot][i];
			else
				document.getElementsByName(name)[0].value = "";
		}
		// defender
		name = "ship_d_" + i + "_b";
		if(ships[1][source_slot][i] > 0 && (source_slot == 0 || i < 14))
		{
			document.getElementsByName(name)[0].value = ships[1][source_slot][i];
			document.getElementsByName(name)[0].disabled = false;
		}
		else if(source_slot > 0 && i >= 14)
		{
			document.getElementsByName(name)[0].value = "";
			document.getElementsByName(name)[0].disabled = true;
		}
		else
		{
			document.getElementsByName(name)[0].value = "";
			document.getElementsByName(name)[0].disabled = false;
		}
		
		// results
		if(i < 14 && i != 10)
		{
			name = "ship_a_" + i + "_e";
			if(ship_res[0][source_slot][i] > 0 || ships[0][source_slot][i] != 0)
				document.getElementById(name).innerHTML = ship_res[0][source_slot][i];
			else
				document.getElementById(name).innerHTML = "";
		}
		
		name = "ship_d_" + i + "_e";
		if(ship_res[1][source_slot][i] > 0 || ships[1][source_slot][i] != 0)
			document.getElementById(name).innerHTML = ship_res[1][source_slot][i];
		else
			document.getElementById(name).innerHTML = "";
	}
	// techs & engines
	for(i = 0; i < 3; i++)
	{
		name = "tech_a_" + i;
		if(techs[0][source_slot][i] > 0)
			document.getElementsByName(name)[0].value = techs[0][source_slot][i];
		else
			document.getElementsByName(name)[0].value = "";
		
		name = "tech_d_" + i;
		if(techs[1][source_slot][i] > 0)
			document.getElementsByName(name)[0].value = techs[1][source_slot][i];
		else
			document.getElementsByName(name)[0].value = "";
		
		name = "engine_" + i;
		if(engines[source_slot][i] > 0)
			document.getElementsByName(name)[0].value = engines[source_slot][i];
		else
			document.getElementsByName(name)[0].value = "";
	}
	
	//positions
	if(start_pos[source_slot].length)
		document.getElementsByName("start_pos")[0].value = start_pos[source_slot];
	else
		document.getElementsByName("start_pos")[0].value = "";
}

function write_data()
{
	save_data(document.getElementById("acs").selectedIndex);
	document.getElementsByName("ships")[0].value = ships;
	document.getElementsByName("techs")[0].value = techs;
	document.getElementsByName("engines")[0].value = engines;
	document.getElementsByName("start_positions")[0].value = start_pos;
	return true;
}


function send_data()
{
	// make table fully visible again
	document.getElementById('result_table').getElementsByTagName("tr")[0].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[1].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[2].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[3].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[6].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[7].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[8].style.display = '';
	document.getElementById('result_table').getElementsByTagName("tr")[9].style.display = '';
	
	document.getElementById("nxt_wave").disabled = false;
	
	var s, t, e, p;
	write_data();
	s = document.getElementsByName("ships")[0].value;
	t = document.getElementsByName("techs")[0].value;
	e = document.getElementsByName("engines")[0].value
	p = document.getElementsByName("start_positions")[0].value;
	l = document.getElementsByName("lang")[0].value;
	var nsim = document.getElementsByName("num_sim")[0].value;
	var target_name = document.getElementsByName("enemy_name")[0].value;
	var target_pos = document.getElementsByName("enemy_pos")[0].value;
	var target_met = document.getElementsByName("enemy_metal")[0].value;
	var target_crystal = document.getElementsByName("enemy_crystal")[0].value;
	var target_deut = document.getElementsByName("enemy_deut")[0].value;
	var def_to_df = document.getElementById("def_to_df").checked == true ? "1" : "0";
	var rf = document.getElementById("rf").checked == true ? "1" : "0";
    
    var gen_cr;
    var gen_bwc;
    var el1 = document.getElementById("gen_cr");
    if(el1)
        gen_cr = el1.checked == true ? "1" : "0";
    else
        gen_cr = "0";
    var el2 = document.getElementById("gen_bwc");
    if(el2)
        gen_bwc = el2.checked == true ? "1" : "0";
    else
        gen_bwc = "0";
    
    if(gen_cr == "0" && el1)
        document.getElementById("show_cr").style.display = "none";
    else if(el1)
        document.getElementById("show_cr").style.display = "";
        
    if(gen_bwc == "0" && el2)
        document.getElementById("show_bwc").style.display = "none";
    else if(el2)
        document.getElementById("show_bwc").style.display = "";

	advAJAX.post(
	{
	url: "ajax_sim.php",
	parameters: {
		"ships" : s,
		"techs" : t,
		"engines" : e,
		"start_positions" : p,
		"lang" : l,
		"num_sim" : nsim,
		"enemy_name" : target_name,
		"enemy_pos" : target_pos,
		"enemy_metal" : target_met,
		"enemy_crystal" : target_crystal,
		"enemy_deut" : target_deut,
		"def_to_df" : def_to_df,
		"rf" : rf,
		"gen_cr" : gen_cr,
		"gen_bwc" : gen_bwc
	},
	onInitialization: function()
	{
		// show simulation box
        document.getElementById("acs").style.display = "none";
		document.getElementById("overlay").style.display = "block";
		center("simbox");
    },
	timeout: 40000,
	onTimeout: function()
	{
		document.getElementById("overlay").style.display = "none";
		document.getElementById("acs").style.display = "inline";
		alert(msg_timeout);
	},
	onSuccess: function(obj)
	{
		parse_ajax_answer(obj.responseText);
	},
	onFinalization: function() 
	{
		// hide simulation box
		document.getElementById("overlay").style.display = "none";
		document.getElementById("acs").style.display = "inline";
        // disable checkboxes for report generation
        var el2 = document.getElementById("gen_cr");
        if(el2)
            el2.checked = false;
        el2 = document.getElementById("gen_bwc");
        if(el2)
            el2.checked = false;
	}
	});
	return false;
}

function parse_ajax_answer(txt)
{
	var res = get_section(txt, "sim_return");
	switch(res)
	{
	case "-1":
		alert(msg_bigfleet);
		break;
	case "-2":
		alert(msg_noships);
		break;
	case "1":
		res_table = get_section(txt, "res_table");
		document.getElementById("result_table").innerHTML = res_table;
		parse_ships(txt);
		parse_plunder(get_section(txt, "plunder"));
		load_data(document.getElementById("acs").selectedIndex);
		balance = get_section(txt, "balance");
		break;
	}
	res = get_section(txt, "info");
	if(res.length != 0)
		alert(res);
	last_combat = true;
}

function parse_ships(txt)
{
	var i, j, att_sec, def_sec;
	var n;
	var cur_att, cur_def;
	att_sec = get_section(txt, "res_att");
	def_sec = get_section(txt, "res_def");
	for(i = 0; i < 16; i++)
	{
		cur_att = get_section(att_sec, "att_" + i);
		cur_def = get_section(def_sec, "def_" + i);
		for(j = 0; j < 22; j++)
		{
			if(j < 14)
			{
				n = parseInt(get_section(cur_att, "ship_" + j));
				ship_res[0][i][j] = (isNaN(n) ? 0 : n);
			}
			n = parseInt(get_section(cur_def, "ship_" + j));
			ship_res[1][i][j] = (isNaN(n) ? 0 : n);
		}
	}
}

function parse_plunder(txt)
{
	last_plundered_res[0] = parseInt(get_section(txt, "metal"));
	last_plundered_res[1] = parseInt(get_section(txt, "crystal"));
	last_plundered_res[2] = parseInt(get_section(txt, "deut"));
}

function get_section(txt, sec)
{
	var p1, p2, start, end;
	start = "<" + sec + ">";
	end = "</" + sec + ">";
	p1 = txt.indexOf(start);
	if(p1 != -1)
	{
		p1 += start.length;
		p2 = txt.indexOf(end, p1);
		if(p2 != -1)
			return txt.substr(p1, p2 - p1);
	}
	return "";
}

function str_erase(str, pos0, npos)
{
	// take out old string
	var newstr = str.substr(0, pos0);
	// put together again
	newstr += str.substr(pos0 + npos);
	return newstr;
}

// removes unneccessary stuff (like things copied from irc) client from text
function cleanup_report(r)
{
	var p = 0, p2 = 0;
	while(p != -1)
	{
		if((p = r.indexOf("<")) != -1)
		{
			p2 = r.indexOf(">", p);
			if(p2 != -1)
				r = str_erase(r, p, p2 - p);
			else
				r = str_erase(r, p, 1);
		}
		else if((p = r.indexOf("(")) != -1 && !ignore_backets)
		{
			p2 = r.indexOf(")", p);
			if(p2 != -1)
				r = str_erase(r, p, p2 - p);
			else
				r = str_erase(r, p, 1);
		}
		else if((p = r.indexOf("[")) != -1)
		{
			p2 = r.indexOf("]", p);
			if(p2 != -1)
				r = str_erase(r, p, p2 - p);
			else
				r = str_erase(r, p, 1);
		}
		 else if((p = r.indexOf("|")) != -1)
		{
			p2 = r.indexOf("|", p + 1);
			if(p2 != -1)
				r = str_erase(r, p, p2 - p);
			else
				r = str_erase(r, p, 1);
		}
		else if((p = r.indexOf(".")) != -1)
		{
			r = str_erase(r, p, 1);
		}
    }
	return r;
}

function read_text()
{
	var txt = document.getElementById("read_field").value;
	var p, p1, def;
	p = txt.indexOf(ress[0]);
	// check for defence
	def = false;
	for(i = 14; i < 22; i++)
	{
		var name = ship_names[i];
		p1 = txt.indexOf(name);
		if(p1 != -1)
		{
			def = true;
			break;
		}
	}

	if(p != -1 || def == true)
	{
		read_esp_report(txt);
		last_report = txt;
	}
	else
		read_own_fleet(txt);
}

function read_esp_report(report)
{
	var p, p2;
	var coords = "", name = "";
	var metal = 0, crystal = 0, deut = 0;
	var slot = document.getElementById("acs").selectedIndex;
	// coords & name available?
	p = report.indexOf(esp_str[0]);
	p2 = report.indexOf(esp_str[1]);
	// update resources for waves
	cur_res[0] = 0;
	cur_res[1] = 0;
	cur_res[2] = 0;
	
	// found coords / name
	if(p != -1 && p2 != -1)
	{
		// get the name + coords and remove it from report
		var tmp = report.substr(p + esp_str[0].length, p2 - p - esp_str[0].length);
		report = report.substr(p2 + esp_str[1].length);
		// seperate name and coords
		p = tmp.indexOf('[');
		coords = tmp.substr(p + 1);
		name = tmp.substr(0, p - 1);
	}
	document.getElementsByName("enemy_pos")[0].value = coords;
	document.getElementsByName("enemy_name")[0].value = name;
	
	report = cleanup_report(report);
	// get resources
	// -> metal
	p = report.indexOf(ress[0]);
	if(p != -1)
	{
		metal = parseInt(report.substr(p + ress[0].length, 9));
		if(metal < 0)
			metal = 0;
		document.getElementsByName("enemy_metal")[0].value = metal;
		cur_res[0] = metal;
	}
	else
		document.getElementsByName("enemy_metal")[0].value = "";
	// -> crystal
	p = report.indexOf(ress[1]);
	if(p != -1)
	{
		crystal = parseInt(report.substr(p + ress[1].length, 9));
		if(crystal < 0)
			crystal = 0;
		document.getElementsByName("enemy_crystal")[0].value = crystal;
		cur_res[1] = crystal;
	}
	else
		document.getElementsByName("enemy_crystal")[0].value = "";
	// -> deuterium
	p = report.indexOf(ress[2]);
	if(p != -1)
	{
		deut = parseInt(report.substr(p + ress[2].length, 9));
		if(deut < 0)
			deut = 0;
		document.getElementsByName("enemy_deut")[0].value = deut;
		cur_res[2] = deut;
	}
	else
		document.getElementsByName("enemy_deut")[0].value = "";
	// ships
	p2 = 0;
	for(i = 0; i < 22; i++)
	{
		if(slot > 0 && i >= 14)
			break;
		var name = ship_names[i];
		p = report.indexOf(name, p2);
		if(p != -1)
		{
			num = parseInt(report.substr(p + name.length, 9));
			document.getElementsByName("ship_d_" + i + "_b")[0].value = num;
			p2 = p;
		}
		else
			document.getElementsByName("ship_d_" + i + "_b")[0].value = "";
	}
	// techs
	// search for defenders techs and delete attackers, if none found and option checked
	var techs = false;
	for(i = 0; i < 3; i++)
	{
		p = report.indexOf(tech_names[i]);
		if(p != -1)
		{
			num = parseInt(report.substr(p + tech_names[i].length, 9));
			document.getElementsByName("tech_d_" + i)[0].value = num;
			techs = true;
		}
		else
			document.getElementsByName("tech_d_" + i)[0].value = "";
	}
	// delete own techs, if wished
	if(!techs && document.getElementsByName("del_techs")[0].checked)
	{
		for(i = 0; i < 3; i++)
		{
			document.getElementsByName("tech_a_" + i)[0].value = "";
		}
	}
	
	// load own techs, if defenders techs available and none own techs set
	var techs_set = false;
	for(i = 0; i < 3; i++)
	{
		if(document.getElementsByName("tech_a_" + i)[0].value != "")
		{
			techs_set = true;
			break;
		}
	}
	if(!techs_set && techs)
	{
		for(i = 0; i < 3; i++)
		{
			if(own_techs[i])
				document.getElementsByName("tech_a_" + i)[0].value = own_techs[i];
			else
				document.getElementsByName("tech_a_" + i)[0].value = "";
		}
	}
	
	document.getElementById("nxt_wave").disabled = false;
}

function read_own_fleet(txt)
{
	var i, p;
	// read own fleet
	for(i = 0; i < 14; i++)
	{
		if(i == 10)
			continue;
		var name = ship_names[i];
		p = txt.indexOf(name);
		if(p != -1)
		{
			num = get_next_num(txt.substr(p), 0);
			if(num > 0)
				document.getElementsByName("ship_a_" + i + "_b")[0].value = num;
			else
				document.getElementsByName("ship_a_" + i + "_b")[0].value = "";
			p2 = p;
		}
		else
			document.getElementsByName("ship_a_" + i + "_b")[0].value = "";
	}
}

function get_next_num(str, start_p)
{
	if(start_p > str.length)
		return -1;
	var i = start_p;
	
	while(i < str.length)
	{
		if(str.charAt(i) > '0' && str.charAt(i) <= '9')
		{
			return parseInt(str.substr(i));
		}
		i++;
	}
	return -1;
}

function get_all_nums(str)
{
	var i = 0;
	var nums = new Array();
	while(i < str.length)
	{
		if(str.charAt(i) > '0' && str.charAt(i) <= '9')
		{
			// add to array
			nums.push(parseInt(str.substr(i)));
			i += String(nums[nums.length - 1]).length;
			continue;
		}
		i++;
	}
	return nums;
}

function add_coord(str)
{
	// document.getElementsByName("new_coord")[0].value
	var coord = get_all_nums(str), i;
	var name = "" + coord[0] + ":" + coord[1] + ":" + coord[2];
	var entry = new Option(name, name);
	var list = document.getElementsByName("coords")[0];
	if(!list)
		return;
	
	// valid coord?
	if(coord.length != 3)
		return;
	if(coord[0] > 19 || coord[1] > 499 || coord[2] > 15)
		return;
	
	// check, if this entry already available
	for(i = 0; i < list.length; i++)
	{
		if(list.options[i].text == name)
			return;
	}
	list.options[list.length] = entry;
	
	// delete content of input (ucp only)
	var input = document.getElementsByName("new_coord")[0];
	if(input)
		input.value = "";
}

function del_sel_coord()
{
	var list = document.getElementsByName("coords")[0];
	if(!list)
		return;
	list.options[list.selectedIndex] = null;
}

function del_all_coords()
{
	var list = document.getElementsByName("coords")[0];
	if(!list)
		return;
	var l = list.length;
	for(i = list.length - 1; i >= 0; i--)
	{
		list.options[i] = null;
	}
}

function save_coords()
{
	var list = document.getElementsByName("coords")[0];
	if(!list)
		return;
	if(!list.length)
	{
		document.getElementsByName("saved_coords")[0].value = "";
		return;
	}
	var val = list.options[0].text;
	for(i = 1; i < list.length; i++)
	{
		val += ", " + list.options[i].text;
	}
	document.getElementsByName("saved_coords")[0].value = val;
}

function load_coords()
{
	del_all_coords();
	// split out the coords (are seperated by comma)
	var i = 0;
	while(i != -1)
	{
		i = coords.indexOf(",");
		if(i != -1)
		{
			add_coord(coords.substr(0, i));
			coords = str_erase(coords, 0, i + 1);
		}
		else
		{
			add_coord(coords);
		}
	}
}

// sets selected coord as current start position
function set_coord()
{
	var list = document.getElementsByName("coords")[0];
	var input = document.getElementsByName("start_pos")[0];
	input.value = list.options[list.selectedIndex].value;
}

function delete_data(att_def)
{
	var el;
	var ad = att_def == 0 ? "a" : "d";
	for(i = 0; i < 22; i++)
	{
		name = "ship_" + ad + "_" + i + "_b";
		el = document.getElementsByName(name)[0];
		if(el)
			el.value = "";
	}
}

function center(element)
{
    element = document.getElementById(element);
    if(!element)
		return;
	
    var my_width = 0;
    var my_height = 0;

    if (typeof(window.innerWidth) == 'number')
	{
        my_width = window.innerWidth;
        my_height = window.innerHeight;
    } 
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
	{
        my_width  = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }
    else if (document.body && (document.body.clientWidth || document.body.clientHeight))
	{
        my_width  = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }

    element.style.position = 'absolute';
    element.style.zIndex = 1000;

    var scrollY = 0;

    if (document.documentElement && document.documentElement.scrollTop)
        scrollY = document.documentElement.scrollTop;
    else if (document.body && document.body.scrollTop)
        scrollY = document.body.scrollTop;
    else if (window.pageYOffset)
        scrollY = window.pageYOffset;
    else if (window.scrollY)
        scrollY = window.scrollY;
    
    var setX = (my_width - element.offsetWidth) / 2;
    var setY = (my_height - element.offsetHeight) / 2;

    setX = setX < 0 ? 0 : setX;
    setY = setY < 0 ? 0 : setY;

    element.style.left = setX + "px";
    element.style.top = setY + "px";

    element.style.display = 'block';
}

function show_report(type)
{
	var win = window.open("getreport.php?type=" + type, "_blank", "resizable=yes,scrollbars=yes,menubar=no");
	win.focus();
}

function new_wnd(loc)
{
	var win = window.open(loc, "_blank", "resizable=yes,scrollbars=yes,menubar=no,toolbar=no,width=550,height=350,top=50,left=50");
	win.focus();
}

function next_wave()
{
	if(last_combat == true)
	{
		// resources
		var val;
		val = cur_res[0] -= last_plundered_res[0];
		document.getElementsByName("enemy_metal")[0].value = (val != 0) ? val : "";
		val = cur_res[1] -= last_plundered_res[1];
		document.getElementsByName("enemy_crystal")[0].value = (val != 0) ? val : "";
		val = cur_res[2] -= last_plundered_res[2];
		document.getElementsByName("enemy_deut")[0].value = (val != 0) ? val : "";
	}
	// ships
	var i;
	for(i = 0; i < 22; i++)
	{
		// ignore ships, if IPM-Attack
		if(last_combat == false && i < 14)
			continue;
		ships[0][0][i] = ship_res[0][0][i];
		if(i < 14 || last_combat == false)
			ships[1][0][i] = ship_res[1][0][i];
		else
			ships[1][0][i] = (ships[1][0][i] - ship_res[1][0][i]) * 0.8 + ship_res[1][0][i];
	}
	
	if(document.getElementById("acs").selectedIndex == 0)
		load_data(0);
	document.getElementById("nxt_wave").disabled = true;
}

function reset_waves()
{
	read_esp_report(last_report);
}

function ipm_check(el)
{
	var i;
	for(i = 0; i < 8; i++)
	{
		var e = document.getElementById('ipm_check_' + i);
		if(e && e != el)
			e.checked = false;
	}
}

function get_def_cost(def_id)
{
	switch(def_id)
	{
	case 0:
		return Array(2000, 0, 0);
	case 1:
		return Array(1500, 500, 0);
	case 2:
		return Array(6000, 2000, 0);
	case 3:
		return Array(20000, 15000, 2000);
	case 4:
		return Array(2000, 6000, 0);
	case 5:
		return Array(50000, 50000, 30000);
	case 6:
		return Array(10000, 10000, 0);
	case 7:
		return Array(50000, 50000, 0);
	}
}

function sim_ip_attack()
{
	var i, j, abm, ipm;
	var el;
	var pri_target = 0;
	var life_fac;
	var worth_ipm = Array(12500, 2500, 10000);
	var worth_abm = Array(8000, 0, 2000);
	var loss_a = Array(12500, 2500, 10000);
	var loss_d = Array(0, 0, 0);
	var res_ship = Array(8);
	
	if(document.getElementById('ipm_b').value != '')
		ipm = parseInt(document.getElementById('ipm_b').value);
	else
		ipm = 0;
	if(document.getElementById('abm_b').value != '')
		abm = parseInt(document.getElementById('abm_b').value);
	else
		abm = 0;
	
	save_data(0);
	
	life_fac = techs[1][0][2] / 10 + 1;
	
	var needed_dam = 0, needed_miss = 0;
	// calculate needed damage
	for(i = 0; i < 8; i++)
	{
		
		var e = document.getElementById('ipm_check_' + i);
		if(e.checked)
			pri_target = i;
		// get needed dam
		cost = get_def_cost(i);
		needed_dam += (cost[0] + cost[1]) / 10 * ships[1][0][i + 14] * life_fac;
	}
	life_fac_a = 12000 * (techs[0][0][0] / 10 + 1);

	needed_miss = Math.ceil(needed_dam / life_fac_a) + abm;
	document.getElementById('needed_ipm').innerHTML = '[' + needed_miss + ']';
	
	//alert("needed miss: " + needed_miss);
	// losses attcker
	for(i = 0; i < 3; i++)
		loss_a[i] *= ipm;
	// simulate
	if(ipm <= abm)
	{
		for(i = 0; i < 3; i++)
			loss_d[i] = worth_abm[i] * ipm;
		abm -= ipm;
		ipm = 0;
	}
	else
	{
		ipm -= abm;
		for(i = 0; i < 3; i++)
			loss_d[i] = worth_abm[i] * abm;
		abm = 0;
		var max_dam = ipm * life_fac_a;
		i = 0;
		for(i = 0; i < 8; i++)
		{
			var target;
			
			if(i == 0)
				target = pri_target;
			else if(i <= pri_target)
				target = i - 1;
			else
				target = i;
			
			var p = target + 14;
			cost = get_def_cost(target);
			var Dam = max_dam - (cost[0] + cost[1]) / 10 * ships[1][0][p] * life_fac;
			var dest = 0;
			if(Dam > 0)
			{
				dest = ships[1][0][p];
				ship_res[1][0][p] = 0;
			}
			else
			{
				// not enough damage for all items
				dest = Math.floor(max_dam / ((cost[0] + cost[1]) / 10 * life_fac));
				ship_res[1][0][p] = ships[1][0][p] - dest;
			}
			max_dam -= dest * Math.round((cost[0] + cost[1]) / 10 * life_fac);
			for(j = 0; j < 3; j++)
				loss_d[j] += cost[j] * dest;
			//alert
			// output result
			
			el = document.getElementById('ship_d_' + p + '_e');
			if(ships[1][0][p] != 0)
				el.innerHTML = ship_res[1][0][p];
			else
				el.innerHTML = '';
		}
	}
	// hide useless stuff
	document.getElementById('result_table').getElementsByTagName("tr")[0].style.display = 'none';
	document.getElementById('result_table').getElementsByTagName("tr")[1].style.display = 'none';
	document.getElementById('result_table').getElementsByTagName("tr")[2].style.display = 'none';
	document.getElementById('result_table').getElementsByTagName("tr")[3].style.display = 'none';
	document.getElementById('result_table').getElementsByTagName("tr")[6].style.display = 'none';
	document.getElementById('result_table').getElementsByTagName("tr")[7].style.display = 'none';
	document.getElementById('result_table').getElementsByTagName("tr")[8].style.display = 'none';
	
	document.getElementById('ipm_e').innerHTML = '0';
	document.getElementById('abm_e').innerHTML = abm;
	last_combat = false;
	// losses attacker / defender...
	txt = sprintf(res_txt, loss_a[0], loss_a[1], loss_a[2]);
	document.getElementById('result_table').getElementsByTagName("td")[9].innerHTML = txt;
	txt = sprintf(res_txt, loss_d[0], loss_d[1], loss_d[2]);
	document.getElementById('result_table').getElementsByTagName("td")[11].innerHTML = txt;
	
	// get system difference
	var start_p, end_p, diff;
	var display_time = false;
	var str = document.getElementById('start_pos').value;
	start_p = get_all_nums(str);
	str = document.getElementById('enemy_pos').value;
	end_p = get_all_nums(str);
	if(start_p.length == 3 && end_p.length == 3)
	{
		el = document.getElementById('result_table').getElementsByTagName("tr")[9].lastChild;
		if(start_p[0] - end_p[0] == 0)
		{
			var s, m, h;
			diff = Math.abs(start_p[1] - end_p[1]);
			display_time = true;
			s = 30 + (60 * diff);
			h = Math.floor(s / 3600);
			s -= h * 3600;
			m = Math.floor(s / 60);
			s -= m * 60;
			el.innerHTML = sprintf("%02d:%02d:%02d h", h, m, s);
		}
		else
			el.innerHTML = "00:00:00 h";
	}
	else
		document.getElementById('result_table').getElementsByTagName("tr")[9].style.display = 'none';
	//alert(txt);
}

function add_dots(num)
{
	
}
