var tmp;
var planes = new Array();
var upgrades = new Array();
var installed_upgrades = new Array();

var plane_id;
var upgrade_id;

var reduced_display = false;

var cc = 1;

var plane_tradein_rate = 0.9;
var upgrade_tradein_rate = 0.6;

function loadPlane() {
	plane_id = $F('plane_select');
	installed_upgrades = new Array();
	updateInstalled();
	if (plane_id > 0) {

		if (upgrade_id>0) {
			// if an upgrade is already open, update that suckah
			$('upgrade_notes').update(makeUpgradeDesc(upgrade_id));
		}

		$('plane_img').update('<img src="images/' + (planes[plane_id][1].toLowerCase()) + '.png">');
		if (!reduced_display) {
			$('arc_img').update('<img src="images/' + (planes[plane_id][1].toLowerCase()) + '_arc.png">');
			$('side_img').update('<img src="images/' + (planes[plane_id][1].toLowerCase()) + '_side.png">');
			$('link_panel').update('<a href="' + planes[plane_id][i('skybrary_url')] + '">See the ' + planes[plane_id][i('name')] + ' at the Skybrary</a>');
			$('info_more').show();
		}
		var price = planes[plane_id][i('price')];
		$('plane_price').update(formatNumber(price));
		$('upgrades_price').update(0);
		$('total_price').update(formatNumber(price));

		var tradein = Math.round(price * plane_tradein_rate);

		$('tradein').update(formatNumber(tradein));

		if (planes[plane_id][i('name')]=='CR-4P') $('loss').update('-9,000');
		else $('loss').update(formatNumber(price - tradein));

		$('total_weight').update(planes[plane_id][i('upgrade_weight')]);

		$('total_engine_slots').update(planes[plane_id][i('engine_upgrades')]);
		$('total_gun_slots').update(planes[plane_id][i('gun_upgrades')]);
		$('total_wing_slots').update(planes[plane_id][i('wing_upgrades')]);
		$('total_hull_slots').update(planes[plane_id][i('hull_upgrades')]);

		$('max_speed').update(planes[plane_id][i('max_speed')]);
		$('stall_speed').update(planes[plane_id][i('stall_speed')]);
		$('acceleration').update(planes[plane_id][i('acceleration')]);
		$('cargo').update(planes[plane_id][i('cargo')]);
		$('range').update(planes[plane_id][i('range')]);
		$('maneuver').update(planes[plane_id][i('maneuver')]);
		$('firepower').update(planes[plane_id][i('firepower')]);
		$('armor').update(planes[plane_id][i('armor')]);
		$('ammo').update(planes[plane_id][i('ammo')]);
		$('crew').update(planes[plane_id][i('crew')]);

		if ($('availability')) $('availability').update(planes[plane_id][i('availability')]);

		if ($('compare_panel'))	$('compare_panel').show();
		if ($('save_btn_panel')) $('save_btn_panel').show();

		if (!reduced_display) {
			$('design_select_all').hide();
			for (var j = 1; j < planes.length; j++)	 {
				if (j == plane_id) {
					//$('design_select_' + j).value = 0;
					$('design_select_' + j).show();
				}
				else $('design_select_' + j).hide();
			}
		}


	} else {
		$('plane_img').update('');

		if (!reduced_display) {
			hideInfo();
			$('info_more').hide();
			$('arc_img').update('');
			$('side_img').update('');
			$('link_panel').update('');
		}

		$('total_weight').update(0);
		$('total_engine_slots').update(0);
		$('total_gun_slots').update(0);
		$('total_wing_slots').update(0);
		$('total_hull_slots').update(0);
		$('plane_price').update(0);
		$('upgrades_price').update(0);
		$('total_price').update(0);
		$('tradein').update(0);
		$('loss').update(0);
		$('max_speed').update(0);
		$('stall_speed').update(0);
		$('acceleration').update(0);
		$('cargo').update(0);
		$('range').update(0);
		$('maneuver').update(0);
		$('firepower').update(0);
		$('armor').update(0);
		$('ammo').update(0);
		$('crew').update(0);

		if ($('compare_panel')) $('compare_panel').hide();
		if ($('save_btn_panel')) $('save_btn_panel').hide();

		if (!reduced_display) {
			for (var j = 1; j < planes.length; j++)	 {
				$('design_select_' + j).value = 0;
				$('design_select_' + j).hide();
			}
			$('design_select_all').value = 0;
			$('design_select_all').show();
		}
	}
	updateValues();
}

function updateValues() {
	var current_weight = 0;
	var plane_price = 0;
	if (plane_id>0) plane_price = planes[plane_id][i('price')];

	var eu = 0;
	var gu = 0;
	var wu = 0;
	var hu = 0;
	var upgrade_price_total = 0;
	var upgrade_percent_total = 0;
	for(var j=0; j < installed_upgrades.length; j++) {
		id = installed_upgrades[j];
		if (id > 0) {
			current_weight += upgrades[id][ui('weight')];
			if (upgrades[id][ui('type')] == 'engine') eu++;
			if (upgrades[id][ui('type')] == 'gun') gu++;
			if (upgrades[id][ui('type')] == 'wing') wu++;
			if (upgrades[id][ui('type')] == 'hull') hu++;

			upgrade_percent_total += upgrades[id][ui('price')];
			upgrade_price_total += Math.round(plane_price * (upgrades[id][ui('price')]/100));
		}
	}


	$('leftover').removeClassName('rt');
	$('current_weight').removeClassName('rt');
	if (plane_id > 0 && current_weight > planes[plane_id][i('upgrade_weight')]) {
		$('leftover').addClassName('rt');
		$('current_weight').addClassName('rt');
	}


	$('current_weight').update(current_weight);
	if (plane_id > 0) $('leftover').update(planes[plane_id][i('upgrade_weight')] - current_weight);
	else $('leftover').update(0);


	$('current_engine_slots').removeClassName('rt');
	$('current_gun_slots').removeClassName('rt');
	$('current_wing_slots').removeClassName('rt');
	$('current_hull_slots').removeClassName('rt');
	if (plane_id>0) {
		if (eu > planes[plane_id][i('engine_upgrades')]) $('current_engine_slots').addClassName('rt');
		if (gu > planes[plane_id][i('gun_upgrades')]) $('current_gun_slots').addClassName('rt');
		if (wu > planes[plane_id][i('wing_upgrades')]) $('current_wing_slots').addClassName('rt');
		if (hu > planes[plane_id][i('hull_upgrades')]) $('current_hull_slots').addClassName('rt');
	}
	$('current_engine_slots').update(eu);
	$('current_gun_slots').update(gu);
	$('current_wing_slots').update(wu);
	$('current_hull_slots').update(hu);

	if (upgrade_percent_total > 0) $('upgrades_price').update(formatNumber(upgrade_price_total) + ' (' + upgrade_percent_total + '%)');
	else $('upgrades_price').update(upgrade_price_total);
	$('total_price').update( formatNumber(plane_price + upgrade_price_total) );

	var plane_tradein = Math.round(plane_price * plane_tradein_rate);
	var upgrade_tradein= Math.round(upgrade_price_total * upgrade_tradein_rate);
	$('tradein').update(formatNumber(plane_tradein + upgrade_tradein));

	var loss = 0;
	if (plane_id > 0 && planes[plane_id][i('name')]=='CR-4P') loss = upgrade_price_total - (plane_tradein + upgrade_tradein);
	else loss = (plane_price + upgrade_price_total) - (plane_tradein + upgrade_tradein);
	$('loss').update(formatNumber(loss));

	updateValue('max_speed');
	updateValue('stall_speed');
	updateValue('acceleration');
	updateValue('cargo');
	updateValue('range');
	updateValue('maneuver');
	updateValue('firepower');
	updateValue('armor');
	updateValue('ammo');

	$('ckph').update(parseInt($('cargo_total').innerHTML) * parseInt($('max_speed_total').innerHTML) );
}

function updateValue(name) {
	if (plane_id > 0) {

		var mt = calcModTotal(name);
		var total = calcTotal(name, mt);
		var clss = '';

		if (mt < 0) clss = 'rt';
		else if (mt > 0) clss = 'gt';

		if (mt>=0) mt = '+ ' + mt;
		if (percentOrFlat(name) == 'p') mt = mt + '%';

		$(name + '_mod').removeClassName('gt');
		$(name + '_mod').removeClassName('rt');
		$(name + '_total').removeClassName('gt');
		$(name + '_total').removeClassName('rt');

		if (name == 'stall_speed') {
			if (clss == 'rt') clss = 'gt';
			else if (clss == 'gt') clss = 'rt';
		}

		if (clss) {
			$(name + '_mod').addClassName(clss);
			$(name + '_total').addClassName(clss);
		}
		$(name + '_mod').update(mt);
		$(name + '_total').update(total);

	} else {
		$(name + '_mod').update('');
		$(name + '_total').update(0);
	}
}

function calcModTotal(name) {
	var id = 0;
	var total = 0;
	for(var j=0; j < installed_upgrades.length; j++) {
		id = installed_upgrades[j];
		if (id > 0) {
			if (upgrades[id][ui(name)] != 0) {
				total += upgrades[id][ui(name)];
			}
		}
	}
	return total;
}

function calcTotal(name, mod) {
	var total;
	if (percentOrFlat(name) == 'p') {
		var percentage = 1 + (mod/100);
		total = Math.round(planes[plane_id][i(name)] * percentage);

		var skill_extra = 0;
		if (name == 'cargo') {
			skill_extra = (7 * parseInt($F('cargo_skill')));
		} else if (name == 'range') {
			skill_extra += (5 * parseInt($F('range_skill')));
		}
		if (skill_extra > 0) {
			var extra_percent = 1 + (skill_extra/100);
			total = Math.round( total * extra_percent );
		}

	} else {
		total = planes[plane_id][i(name)] + mod;
	}

	return total;
}

function percentOrFlat(name) {
	switch(name) {
		case 'max_speed':
		case 'max_speed_percent':
		case 'stall_speed':
		case 'stall_speed_percent':
		case 'cargo':
		case 'cargo_percent':
		case 'range':
		case 'range_percent':
		return 'p';
		case 'acceleration':
		case 'acceleration_flat':
		case 'maneuver':
		case 'maneuver_flat':
		case 'firepower':
		case 'firepower_flat':
		case 'armor':
		case 'armor_flat':
		case 'ammo':
		case 'ammo_flat':
		return 'f';
	}
}

function i(key) {
	switch(key) {
		case 'plane_id': return 0;
		case 'name': return 1;
		case 'tier': return 2;
		case 'class': return 3;
		case 'firepower': return 4;
		case 'armor': return 5;
		case 'maneuver': return 6;
		case 'ammo': return 7;
		case 'cargo': return 8;
		case 'fuel_cap': return 9;
		case 'range': return 10;
		case 'max_speed': return 11;
		case 'stall_speed': return 12;
		case 'acceleration': return 13;
		case 'crew': return 14;
		case 'gun_upgrades': return 15;
		case 'engine_upgrades': return 16;
		case 'wing_upgrades': return 17;
		case 'hull_upgrades': return 18;
		case 'upgrade_weight': return 19;
		case 'price': return 20;
		case 'skybrary_url': return 21;
		case 'availability': return 22; // note that this must always be last
	}
}

function ui(key) {
	switch(key) {
		case 'upgrade_id': return 0;
		case 'name': return 1;
		case 'type': return 2;
		case 'weight': return 3;
		case 'max_speed_percent': return 4;
		case 'max_speed': return 4;
		case 'stall_speed_percent': return 5;
		case 'stall_speed': return 5;
		case 'acceleration_flat': return 6;
		case 'acceleration': return 6;
		case 'armor_flat': return 7;
		case 'armor': return 7;
		case 'firepower_flat': return 8;
		case 'firepower': return 8;
		case 'ammo_flat': return 9;
		case 'ammo': return 9;
		case 'range_percent': return 10;
		case 'range': return 10;
		case 'cargo_percent': return 11;
		case 'cargo': return 11;
		case 'maneuver_flat': return 12;
		case 'maneuver': return 12;
		case 'price': return 13;
		case 'availability': return 14; // note that this must always be last
	}
}

function className(abbr) {
	switch(abbr) {
		case 'c': return 'Combat';
		case 'p': return 'Performance';
		case 't': return 'Trading';
		case 'ct': return 'Combat/Trading';
		case 'cp': return 'Combat/Performance';
		case 'pt': return 'Performance/Trading';
		default: return '';
	}
}

function showModFloat(id, e) {
	var tempX = 0;
	var tempY = 0;
	if (document.all) {
		tempX = event.clientX + document.body.scrollLeft;
		tempY = event.clientY + document.body.scrollTop;
	} else {
		tempX = e.pageX;
		tempY = e.pageY;
	}

	if ( (tempX + 300) > (document.body.clientWidth-50) ) {
		tempX = document.body.clientWidth - 350;
	}

	$('mod_float_' + id).show();
	$('mod_float_' + id).setStyle({top: tempY + 20, left: tempX + 5});
}

function hideModFloat(id) {
	$('mod_float_' + id).hide();
}

function selectMod(id) {
	upgrade_id = id;

	var u = upgrades[id];

	var img = '';
	if (u[ui('type')]=='engine') img = 'engine.png';
	if (u[ui('type')]=='gun') img = 'guns.png';
	if (u[ui('type')]=='wing') img = 'wings.png';
	if (u[ui('type')]=='hull') img = 'hull.png';

	$('img_box').update('<img src="images/'+img+'">');
	$('img_box').removeClassName('empty');

	$('upgrade_notes').update(makeUpgradeDesc(id));

	var installed = false;
	for(var j=0; j < installed_upgrades.length; j++) {
		if (id == installed_upgrades[j]) installed = true;
	}

	if (installed) {
		$('new_buttons').hide();
		$('existing_buttons').show();
	} else {
		$('new_buttons').show();
		$('existing_buttons').hide();
	}
}

function makeUpgradeDesc(id) {
	var u = upgrades[id];
	var price = 0;

	if (plane_id > 0) {
		price = Math.round(planes[plane_id][i('price')] * (u[ui('price')]/100));
	}

	var t = '<b>' + u[ui('name')] + '</b><br />';

	t += '<b>Weight:</b> ' + u[ui('weight')] + '<br />';
	t += '<b>Price:</b> ' + formatNumber(price) + ' (' + u[ui('price')] + '%)';

	if (plane_id>0) {
		var tradein = Math.round(price * upgrade_tradein_rate);
		t += '<br />(Trade in: '+ formatNumber(tradein) + ')';
	}
	t += '<br /><br />';

	if (u[ui('max_speed_percent')]) t += '<b>Max Speed:</b> ' + u[ui('max_speed_percent')] + '%<br />';

	if (u[ui('stall_speed_percent')]) t += '<b>Stall Speed:</b> ' + u[ui('stall_speed_percent')] + '%<br />';
	if (u[ui('acceleration_flat')]) t += '<b>Acceleration:</b> ' + u[ui('acceleration_flat')] + '<br />';

	if (u[ui('range_percent')]) t += '<b>Range:</b> ' + u[ui('range_percent')] + '%<br />';
	if (u[ui('cargo_percent')]) t += '<b>Cargo:</b> ' + u[ui('cargo_percent')] + '%<br />';

	if (u[ui('armor_flat')]) t += '<b>Armor:</b> ' + u[ui('armor_flat')] + '<br />';
	if (u[ui('firepower_flat')]) t += '<b>Firepower:</b> ' + u[ui('firepower_flat')] + '<br />';
	if (u[ui('ammo_flat')]) t += '<b>Ammo:</b> ' + u[ui('ammo_flat')] + '<br />';
	if (u[ui('maneuver_flat')]) t += '<b>Maneuver:</b> ' + u[ui('maneuver_flat')] + '<br />';

	if (u[ui('availability')]) t += '<b>Availability:</b> ' + u[ui('availability')] + '<br />';

	t += '<br />';
	return t;
}

function addUpgrade() {
	if (upgrade_id>0 && plane_id > 0) {
		installed_upgrades.push(upgrade_id);
		updateValues();
		updateInstalled();
		if (!reduced_display) clearUpgrade();
	}
}

function removeUpgrade() {
	for(var j=0; j < installed_upgrades.length; j++) {
		if (installed_upgrades[j] == upgrade_id) {
			installed_upgrades.splice(j, 1);
		}
	}
	updateValues();
	updateInstalled();
	clearUpgrade();
}

function clearUpgrade() {
	upgrade_id = 0;
	$('img_box').update('');
	$('img_box').addClassName('empty');
	$('upgrade_notes').update('');
}

function updateInstalled() {
	if ($('installed_engine_list')) {
		var e_code = '';
		var g_code = '';
		var w_code = '';
		var h_code = '';

		for( var j = 0; j < installed_upgrades.length; j++) {
			var id = installed_upgrades[j];
			switch(upgrades[id][ui('type')]) {
				case 'engine':
				e_code += '<li><img src="images/engine.png" onmouseover="showModFloat(' + id + ', event);" onmouseout="hideModFloat(' + id + ');" onclick="selectMod(' + id + ');"></li>';
				break;
				case 'gun':
				g_code += '<li><img src="images/guns.png" onmouseover="showModFloat(' + id + ', event);" onmouseout="hideModFloat(' + id + ');" onclick="selectMod(' + id + ');"></li>';
				break;
				case 'wing':
				w_code += '<li><img src="images/wings.png" onmouseover="showModFloat(' + id + ', event);" onmouseout="hideModFloat(' + id + ');" onclick="selectMod(' + id + ');"></li>';
				break;
				case 'hull':
				h_code += '<li><img src="images/hull.png" onmouseover="showModFloat(' + id + ', event);" onmouseout="hideModFloat(' + id + ');" onclick="selectMod(' + id + ');"></li>';
				break;
			}
		}

		$('installed_engine_list').update(e_code);
		$('installed_gun_list').update(g_code);
		$('installed_wing_list').update(w_code);
		$('installed_hull_list').update(h_code);
	}
}

function formatNumber(n) {

	var s = n.toString();
	var r = '';
	var c = 0;

	for (j = s.length - 1; j >= 0; j--) {
		c++;
		r = s.charAt(j) + r;
		if (c == 3) {
			c = 0;
			if (j > 0) r = ',' + r;
		}
	}

	return r;
}

function loadDesign(source) {
	var id = $F(source.id);
	if (id > 0) {
		new Ajax.Request('index.php?action=fetch_design&id=' + id, {method: 'get'});
	} else {

	}
}

function openCompare(e) {
	if (plane_id > 0) {
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			myWidth = window.innerWidth;
			myHeight = window.innerHeight;
		} else {
			myWidth = document.body.clientWidth;
			myHeight = document.body.clientHeight;
		}

		var us = '';
		for(var j = 0; j < installed_upgrades.length; j++) {
			if (us == '') us += installed_upgrades[j];
			else us += ',' + installed_upgrades[j];
		}

		window.open('compare.php?p=' + plane_id + '&u=' + us + '&s_c=' + $F('cargo_skill') + '&s_r=' + $F('range_skill'), 'comparewindow' + cc, 'width=300,height='+(myHeight+60)+',resizable=yes');
		cc++;
	}
}

function switchSavePanels() {
	$('save_btn_panel').toggle();
	$('save_form_panel').toggle();

}

function saveDesign() {
	var design = $F('design_name').strip().stripScripts().stripTags().escapeHTML();

	var ul = '';

	installed_upgrades.each(function(item){
		if (ul == '') ul += item;
		else ul += ',' + item;
	});

	if (design.length > 0 && ul.length > 0) {
		$('save_result_panel').update('');

		var options = {
			method: 'get',
			parameters: {p: plane_id, u: ul, n: design},
			onSuccess: function(transport) {
				if (transport.responseText.include('Error')) {
					$('save_result_panel').show();
					$('save_result_panel').update(transport.responseText);
				} else {
					$('save_result_panel').show();
					$('save_result_panel').update(transport.responseText);
					$('save_form_panel').hide();
					updateDesigns();
				}

			}
		}

		new Ajax.Request('save.php', options);
	}

}

function updateDesigns() {
	// this is turned off while I make the new design menu
	//new Ajax.Updater('design_select', 'index.php', {parameters: {action: 'reload_designs'}});
}

function showInfo() {
	$('info_extra').show();
	$('info_more').hide();
	$('info_less').show();
}

function hideInfo() {
	$('info_extra').hide();
	$('info_less').hide();
	$('info_more').show();

}