var BUILDSECTORID = 0;
var OLDSELECTION = "";
var OLDNAME = "";

function canBuild(sectorId) {
	var stockpile = getAvailableRU(sectorId);
	var buildables = getBuildableShipList(stockpile);
	var rv = !isEmpty(buildables);
	return rv;
}

function createBuildRow(buildId, rowId) {
	var num = 0;
	var shipclassId = 0;
	var shipclassName = "Select class";
	var name = "";
	var cost = 0;

	if (buildId > 0) {
		var build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
		num = build.num;
		shipclassId = build.shipclass;
		shipclass = shipclasses[shipclassId];
		shipclassName = formatShipClass(shipclass);
		name = build.name;
		cost = build.cost;
	}
	var row = "<tr class='build-row' buildid='"
			+ buildId
			+ "'><td>" + rowId + "</td>"
			+ " <td><select class='build-classes'><option value='"
			+ shipclassId
			+ "'>"
			+ shipclassName
			+ "</option></select></td>"
			+ " <td><select class='build-num'><option value='"
			+ num
			+ "'>"
			+ num
			+ "</option></select></td><td class='centertext'>" + cost + "</td>"
			+ " <td><input class='build-name' type='text' size='12' maxlength='20' value='"
			+ name
			+ "'></td>"
			+ " <td><input type='image' class='build-delete' src='cancel.png'></td></tr>";
	return row;
}

function populateBuildOrderRows() {
	var rows = "";
	var builds = getOrders(BUILDSECTORID, ordertypes.build);
	var rowId = 1;
	for (var buildId in builds) {
		var row = createBuildRow(buildId, rowId++);
		rows += row;
	}
	$("#build-table > tbody > tr:first").after(rows);
}

function populateBlankBuildRow() {
	var buildables = getBuildableClasses(0);
	if (!isEmpty(buildables)) {
		var row = createBuildRow(0, "");
		$("#build-table > tbody > tr:last").after(row);
		$("#build-table > tbody > tr:last").find(".build-delete").hide();
	}
}

function updateBuildRULabel() {
	var available = getAvailableRU(BUILDSECTORID);
	$('#build-label').text(available);
}

function rebuildShipList() {
	$("#build-table").find("tr:gt(0)").remove();
	populateBlankBuildRow();
	populateBuildOrderRows();
	updateBuildRULabel();
}

function deleteBuild(row) {
	var buildId = $(row).attr('buildid');
	deleteOrder(BUILDSECTORID, ordertypes.build, buildId);
	$(row).fadeOut('slow', function() {
		rebuildShipList();
	});
}

function formatShipClass(shipclass) {
	var name = shipclass.name;
	var cost = shipclass.cost;
	var guns = shipclass.guns;
	var engines = shipclass.engines;
	var scan = shipclass.scan;
	var racks = shipclass.racks;
	var rv = name + " [" + guns + "/" + engines + "/" + scan + "/" + racks
			+ "] (" + cost + ")";
	return rv;
}

function getBuildableShipList(available) {
	var rv = {};
	for (var shipclassId in shipclasses) {
		var shipclass = shipclasses[shipclassId];
		if (!shipclass.unknown) {
			if (shipclass.cost <= available) {
				rv[shipclassId] = formatShipClass(shipclass);
			}
		}
	}
	return rv;
}

function getBuildableClasses(buildId) {
	var available = getAvailableRU(BUILDSECTORID);
	if (buildId > 0) {
		var cost = getOrderCost(BUILDSECTORID, ordertypes.build, buildId);
		available += cost;
	}

	var rv = getBuildableShipList(available);
	return rv;
}

function updateShipClassList(classList) {
	var row = $(classList).parents('tr');
	var buildId = $(row).attr('buildid');
	var selected = null;
    OLDSELECTION = $(classList).val();
    OLDNAME = "";
    if (buildId > 0) {
		var build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
    	var name = build.name;
    	var shipclassId = build.shipclass;
    	var classname = shipclasses[shipclassId].name;
    	if (name == classname) {
    		var nameField = $(row).find("[class*='build-name']");
    		$(nameField).val("");
    	}
    }
	var opts = getBuildableClasses(buildId);
	$(classList).empty();
	$(classList).append($("<option></option>").attr("value", '0').text("Select class").attr("disabled", true));
	addSelectOptions(classList, opts);
}

function selectedShipClass(classList) {
	var row = $(classList).parents('tr');
	var buildId = $(row).attr('buildid');
	var selectedClassId = $(classList).val();
	var nameField = $(row).find("[class*='build-name']");
	if (selectedClassId > 0) {
		var selectedclass = shipclasses[selectedClassId];
		var numSelectList = $(row).find("[class*='build-num']");
		var name = $(nameField).val();
		var numBuild = 1;
		var cost = selectedclass.cost;
		if (name == "") {
			name = selectedclass.name;
		}
		var build;
		if (buildId > 0) {
			build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
			var available = getAvailableRU(BUILDSECTORID) + build.cost;
			var maxCanBuild = Math.floor(available / cost);
			numBuild = Math.min(maxCanBuild, build.num);
			var newCost = cost * numBuild;
			var diffCost = build.cost - newCost;
			var values = {
					"shipclass" : selectedClassId,
					"num" : numBuild,
					"cost" : cost * numBuild,
					"name" : name
				};
			updateOrder(BUILDSECTORID, ordertypes.build, buildId, values);
		} else {
			build = {
				"shipclass" : selectedClassId,
				"num" : numBuild,
				"cost" : cost,
				"name" : name
			};
			buildId = addOrder(BUILDSECTORID, ordertypes.build, build);
		}
		rebuildShipList();
		$(numSelectList).empty();
		addSelectOptions(numSelectList, {
			numBuild : numBuild
		});
	}
	else {
		$(classList).val(OLDSELECTION);
		if ($(nameField).val() == "" && buildId > 0) {
			var build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
			$(nameField).val(build.name);
		}
	}
}

function updateNumList(numList) {
	var buildId = $(numList).parents('tr').attr('buildid');
	if (buildId > 0) {
		OLDSELECTION = $(numList).val();
		var build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
		var shipclassId = build.shipclass;
		var cost = shipclasses[shipclassId].cost;
		var available = getAvailableRU(BUILDSECTORID) + build.cost;
		var maxCanBuild = Math.floor(available / cost);
		var opts = {};
		for (var i = 1; i <= maxCanBuild; i++) {
			opts[i] = i;
		}
		$(numList).empty();
		$(numList).append(
				$("<option></option>").attr("value", '0').text("0").attr("disabled", true));
		addSelectOptions(numList, opts);
	}
}

function selectedNum(numList) {
	var buildId = $(numList).parents('tr').attr('buildid');
	var build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
	var shipclassId = build.shipclass;
	var cost = shipclasses[shipclassId].cost;
	var num = $(numList).val();
	if (num > 0) {
		var totalCost = cost * num;
		updateOrder(BUILDSECTORID, ordertypes.build, buildId,
				{ "num" : num, "cost": totalCost }
				);
		rebuildShipList();
	}
	else {
		$(numList).val(OLDSELECTION);
	}
}

function updateBuildName(nameField) {
	var buildId = $(nameField).parents('tr').attr('buildid');
	if (buildId > 0) {
		var name = $(nameField).val();
		var build = getOrder(BUILDSECTORID, ordertypes.build, buildId);
		if (name == "") {
			var shipclassId = build.shipclass;
			name = shipclasses[shipclassId].name;
			$(nameField).val(name);
		}
		updateOrder(BUILDSECTORID, ordertypes.build, buildId,
				{ "name" : name }
				);
	}
}

function showBuildShipsDialog(sectorId) {
	BUILDSECTORID = sectorId;
	rebuildShipList();
	$(".build-delete").live('click', function(event) {
			var row = $(this).parents('tr');
			deleteBuild(row);
			event.preventDefault();
	});
	$(".build-classes").live('mousedown', function() {
		updateShipClassList(this);
	});
	$(".build-classes").live('mouseup', function() {
		selectedShipClass(this);
	});
	$(".build-num").live('mousedown', function() {
		updateNumList(this);
	});
	$(".build-num").live('mouseup', function() {
		selectedNum(this);
	});
	$(".build-name").live('change keyup', function() {
		updateBuildName(this);
	});

	$('#build-dialog').dialog('option', 'title',
			"Build Ships " + getTitle(sectorId));
	$('#build-dialog').dialog('open');
}

