/* iAye copyright 2007, Magic Chopstick Games.  Free for personal use.  Do not redistribute.  Thanks! */

/* Oh, and just so we're all perfectly clear about this, my code is hideously, hideously ugly.  I mean, it's all over the place, no rhyme or reason to it.  Horribly inefficient, stuff being done and redone for no reason...parents, don't let your kids write code like this.  It's uncool. */

document.getElementById("loadingMessage").innerHTML = 'Loading main...';

function activateStartScreen() {
	document.getElementById('deadScreen').style.display="none";
	initDB();
	dbLoadGlobals(systemDB, false);
	setTimeout(hideURLbar, 750);
	
	if(navigator.userAgent.search("iPhone") == -1 && navigator.userAgent.search("iPod") == -1)
	{
		alert("Arr!  iAye be designed te work with the iPhone and iPod Touch only.\r\rFeel free to muck about, but I can virtually guarantee ye' that it won't work properly on anything other than an iPhone or iPod Touch, arr.");
//		alert(navigator.userAgent);
//		alert(navigator.userAgent.search("iPhone") + "; " + navigator.userAgent.search("iPod"));
	}

}

function svgLoaded() {
	svgLoadCount = svgLoadCount + 1;
//	alert("svg loaded: " + svgLoadCount);
}

function startNewGame() {
	isContinue = false;
	startingRandomNumberSeed = Math.floor(10000000 * Math.random());
	randomNumberSeed = startingRandomNumberSeed;

	document.getElementById("loadingMessage").innerHTML = 'Creating universe...';
	SwitchWindows('mainMenu', 'loadWindow');
	setTimeout(InitializeGame, 50);
}

function continueGame() {
	isContinue = true;
	
	document.getElementById("loadingMessage").innerHTML = 'Creating universe...';
	SwitchWindows('mainMenu', 'loadWindow');
	dbLoadGlobals(systemDB, true);

}


function gimmeANewUniverseArr() {
	var currentBuyMessageIndex = 0;
	var i;
	
	
	// variables to save
	playerGovernment=-1;
	currentPort = 0;
	portArray = new Array;
	playerShip=null;
	playerCash = 10000;
	currentStardate = 2101000;
	globalCurrentID = 0;
	currentMissions = new Array(7);
	availableShipParts = new Array(4);
	availableShips = new Array(3);
	
	for (i=0; i<governmentNames.length; i++) {
		governmentNames[i] = originalGovernmentNames[i];
		governmentColors[i] = originalGovernmentColors[i];
		governmentAdjective[i] = originalGovernmentAdjective[i];
	}

	startingRandomNumberSeed = Math.floor(1000000000 * Math.random());
	randomNumberSeed = startingRandomNumberSeed;
	
	if (isCrippledFreeVersion == true) {
		// choose one of five universes to use.
		randomNumberSeed = Math.floor(5 * Math.random());
		startingRandomNumberSeed = randomNumberSeed;
	}
	
	shipyardSeed = Math.floor(10000000 * Math.random());
	barCrewmenSeed = Math.floor(10000000 * Math.random());
	
	startingBarCrewmenSeed = 0;
	startingShipyardSeed = 0;
	
	
	
	
	
	
	//non-persistent variables
	
	currentWindowShown = "loadWindow";
	svgLoadCount = 0;
	
	encountersAtArrival = 0;
	encounterTypeAtArrival = "civilian";
	
	baseProfitMargin = 0.03;
	currentlySelectedCrewman=null;
	crewmanIDToSwap = -1;
	mapXOffset = 0;
	mapYOffset = 0;
	barCrewmen = new Array(6);
	portMissions = new Array(3);
	selectedPort = -1;
	selectedShipPartID = -1;
	confirmationAction = "";
	confirmationIndex = -1;
	encounterShip=null;
	encounterType="";
	encounterPaused=1;
	distanceTravelled = 0;
	distanceToTravel = 0;
	inEncounter = 0;
	fullyLoaded = 0;
	victoryCargoAmount = 0;
	victoryCargoType = 0;
	selectedMission = -1;
	selectedShipyardPart = -1;
	startingPort = -1;
	departurePort = -1;
	encounterPort = -1;
	closestPort = -1;
	
	saveDelimiter = "~";
	
	isContinue = false;
	continueExists = false;
	
	// desperately ugly kludge: there are 54 child elements on the original map div.  More get added during the game, but need to be removed and re-added on init.  Therefore, drop all child nodes over 54.  Uuuuugggggly.
	while (document.getElementById('theMapItself').childNodes[53]) {
   	 document.getElementById('theMapItself').removeChild(document.getElementById('theMapItself').childNodes[53]);
	}

	
	document.getElementById("playerStatusBar").style.display = "none";

	SwitchWindows('deadScreen', 'loadWindow');
	setTimeout(InitializeGame, 50);


}


function InitializeGame()
{

	var i;
	var j;
	var tmpPort;
	var tmpPortNames;
	var tmpPortIndex;
	var tmpTimer;
	var tmpDate;
	var tmpDiv;
	var carryOn;
	var tmpMaxNeighbors;
	var tmpRangeToNeighbor;
	var northCapitalIndex;
	var northCapitalWeight;
	var southCapitalIndex;
	var southCapitalWeight;
	var northGovernment;
	var southGovernment;
	
	var thirdCapitalIndex;
	var thirdGovernment;
	var tmpPortWeight;
	
	var tmpCounter;
	
		
//	alert("starting init");
	document.getElementById("loadingMessage").innerHTML = 'Creating universe...';
	
	playerCash = 10000;
//	playerCash = 100000000;
	currentStardate = 2101000;
	
	
	tmpDate = new Date();
	tmpTimer = tmpDate.getMilliseconds();


	northCapitalIndex = -1;
	southCapitalIndex = -1;
	thirdCapitalIndex = -1;
	playerGovernment = -1;
	northCapitalWeight = 0;
	southCapitalWeight = 0;
	
	northGovernment = SelectRandomIndexFromArray(governmentNames, randomNumberSeed);
	southGovernment = SelectRandomIndexFromArray(governmentNames, randomNumberSeed);
	thirdGovernment = SelectRandomIndexFromArray(governmentNames)

	while (northGovernment == southGovernment)
	{
		southGovernment = SelectRandomIndexFromArray(governmentNames, randomNumberSeed);
	}
	
	while (thirdGovernment == southGovernment || thirdGovernment == northGovernment)
	{
		thirdGovernment = SelectRandomIndexFromArray(governmentNames);
	}
	
	for (i=0; i < governmentAdjective.length; i++) {
		if (northGovernment != i && southGovernment != i && thirdGovernment != i) {
			// mark this government as the player government...
			playerGovernment = i;
		}
	}
	
	governmentNames[playerGovernment] = playerName;
	governmentAdjective[playerGovernment] = playerName + "\'s";
	governmentColors[playerGovernment] = "#FFFFFF";
	
	
	playerName = unescape(ReadCookie("playerName"));
	playerShipName = unescape(ReadCookie("playerShipName"));
	
	if (playerName == null || playerName == "null")
	{
		playerName = "Cap'n Boyle";	
	}

	if (playerShipName == null || playerShipName == "null")
	{
		playerShipName = "Comet";
	}
	
	document.getElementById("playerName").value = playerName;
	document.getElementById("playerShipName").value = playerShipName;

	tmpPortNames = portNames;
//	document.getElementById("theMapItself").innerHTML = '';

//	alert("randomNumberSeed before loops: " + randomNumberSeed);
//	alert("three seeded rands: " + rnd() + "; " + rnd() + "; " + rnd() + "; ");

/*
	var tmpMin = 10000000.0;
	var tmpMax = 0.0;
	for (i=0; i<3000; i++) {
		if (rnd(i) < tmpMin) {
			tmpMin = rnd(i);
		}
		if (rnd(i) > tmpMax) {
			tmpMax = rnd(i);
		}
	}
	
	alert("testing rnd() min/max: " + tmpMin + ", " + tmpMax);
	alert("testing continuous seeds: " + rnd(0) + ", " + rnd(1) + ", " + rnd(2) + ", " + rnd(3) + ", " + rnd(4) + ", " + rnd(5))
*/
//	alert("children on map: " + document.getElementById('theMapItself').childNodes.length);
	for (i=0;i<50;i++)
	{
		carryOn = false;
		tmpPortIndex = SelectRandomIndexFromArray(tmpPortNames);
		portArray.push(new PortOfCall(tmpPortNames[tmpPortIndex], (rnd()*470), (rnd() * 470), -1, rnd(), 0));
//		if (i == 18) {
//			alert("i = 18;");
//		}
		tmpCounter = 0;
		while (carryOn == false)
		{
			tmpCounter = tmpCounter+1;
//			if (tmpCounter % 1000 == 0) {
//				alert("tmpCounter: " + tmpCounter + ", " + portArray[i].x + " x " + portArray[i].y);
//			}
			carryOn = true;
			for (j=0; j < i; j++)
			{
				if ((Math.abs(portArray[j].x - portArray[i].x) + Math.abs(portArray[j].y - portArray[i].y)) < (40 - tmpCounter))
				{
					carryOn = false;
					continue;
				}
			}
			if (carryOn == false)
			{
				portArray[i].x = (Math.random()*470);
				portArray[i].y = (Math.random()*470);
				portArray[i].x = (rnd()*470);
				portArray[i].y = (rnd()*470);
//				alert("port position: " + portArray[i].x + ", " + portArray[i].y);
//			} else {
//				if (i == 18) {
//					alert("carryOn good: " + randomNumberSeed);
//				}
			
			}
		}
		tmpPortNames.splice(tmpPortIndex, 1);
		
		tmpDiv = document.createElement("div");
		tmpDiv.setAttribute('id', ('mapPort' + i));
		tmpDiv.setAttribute('class', 'mapButton');
		tmpDiv.setAttribute('style', 'left:' + (portArray[i].x + mapXOffset) + 'px;top:' + (portArray[i].y + mapYOffset) + 'px;display:none;');
		tmpDiv.setAttribute('onClick', 'SelectPortOnMap(' + i + ');');
		document.getElementById('theMapItself').appendChild(tmpDiv);
	
	}
	
//	alert("randomNumberSeed: after first loop = " + randomNumberSeed);

	for (i = 0; i < portArray.length; i++)
	{
//		var tmpCanvas;
		tmpDiv = document.createElement("canvas");
		tmpDiv.setAttribute('id', ('mapLabel' + i));
		tmpDiv.setAttribute('width', 28);
		tmpDiv.setAttribute('height', 28);
		tmpDiv.setAttribute('class', 'mapButton');
		tmpDiv.setAttribute('style', 'left:' + (portArray[i].x + mapXOffset - 14) + 'px;top:' + (portArray[i].y + mapYOffset - 14) + 'px;');
		tmpDiv.setAttribute('onClick', 'SelectPortOnMap(' + i + ');');
//		tmpCanvas = document.createElement("canvas");
//		tmpCanvas.setAttribute('id', ('mapCanvas' + i));
//		tmpCanvas.setAttribute('style', 'left:' + (portArray[i].x + mapXOffset) + 'px;top:' + (portArray[i].y + mapYOffset + 28) + 'px;');
//		tmpDiv.appendChild(document.createTextNode(portArray[i].portName));
//		document.getElementById('theMapItself').appendChild(tmpCanvas);
		document.getElementById('theMapItself').appendChild(tmpDiv);
		
	
	
	}
	
//	alert("randomNumberSeed after second loop: " + randomNumberSeed);
	// determine neighboring ports and nearest neighbor


	for (i=0;i<portArray.length;i++)
	{
		for (j=i+1;j<portArray.length;j++)
		{
			tmpRangeToNeighbor = GetRangeBetweenPorts(i, j);
			if (tmpRangeToNeighbor <= 50)
			{
				portArray[i].nearNeighbors.push(j);
				portArray[j].nearNeighbors.push(i);
				portArray[i].routeSecurity += .15 + (rnd() * .20);
				portArray[j].routeSecurity += .15 + (rnd() * .20);
			}
			else if (tmpRangeToNeighbor <= 100)
			{
				portArray[i].farNeighbors.push(j);
				portArray[j].farNeighbors.push(i);
				portArray[i].routeSecurity += .05 + (rnd() * .05);
				portArray[j].routeSecurity += .05 + (rnd() * .05);
			}
		}

	}

//	alert("randomNumberSeed after third loop: " + randomNumberSeed);


	tmpMaxNeighbors = 0;
	currentPort = 0;
	for (i=0;i<50;i++)
	{
		if (portArray[i].nearNeighbors.length > 0)
		{
			tmpPortWeight = (portArray[i].nearNeighbors.length * 2) + portArray[i].farNeighbors.length;
			if (tmpPortWeight > tmpMaxNeighbors)
			{
				tmpMaxNeighbors = tmpPortWeight;
				currentPort = i;
			}
		}
		
		if (portArray[i].y < 170)
		{
			if (northCapitalWeight < tmpPortWeight)
			{
				northCapitalIndex = i;
				northCapitalWeight = tmpPortWeight;
			}
		} else if (portArray[i].y > 300) {
			if (southCapitalWeight < tmpPortWeight)
			{
				southCapitalIndex = i;
				southCapitalWeight = tmpPortWeight;
			}
		}
	}
	
	
	
	i=0;
	while (portArray[i].nation != -1) {
		i = i+1;
	}
	
	thirdCapitalIndex = i;
	SetNationality(thirdCapitalIndex, thirdGovernment);

//	alert("here!" + northCapitalIndex + ", " + southCapitalIndex + ", " + thirdCapitalIndex);
//	alert("here!" + northGovernment + ", " + southGovernment + ", " + thirdGovernment);

//	alert("randomNumberSeed after fourth loop: " + randomNumberSeed);

	
	SetNationality(northCapitalIndex, northGovernment);
	SetNationality(southCapitalIndex, southGovernment);
	
	portArray[northCapitalIndex].isCapital = true;
	portArray[southCapitalIndex].isCapital = true;
	portArray[thirdCapitalIndex].isCapital = true;
	portArray[northCapitalIndex].routeSecurity += .75;
	portArray[southCapitalIndex].routeSecurity += .75;
	portArray[thirdCapitalIndex].routeSecurity += .75;
	
//	alert(northGovernment + ", " + southGovernment);
	
	for (i = 0; i<portArray[thirdCapitalIndex].nearNeighbors.length; i++)
	{
		SetNationality(portArray[thirdCapitalIndex].nearNeighbors[i], thirdGovernment);
	}

	for (i = 0; i<portArray[thirdCapitalIndex].farNeighbors.length; i++)
	{
		SetNationality(portArray[thirdCapitalIndex].farNeighbors[i], thirdGovernment);
	}

	for (i = 0; i<portArray[northCapitalIndex].nearNeighbors.length; i++)
	{
		SetNationality(portArray[northCapitalIndex].nearNeighbors[i], northGovernment);
	}
	
	for (i = 0; i<portArray[southCapitalIndex].nearNeighbors.length; i++)
	{
		SetNationality(portArray[southCapitalIndex].nearNeighbors[i], southGovernment);
	}
	
	for (i = 0; i<portArray[northCapitalIndex].farNeighbors.length; i++)
	{
		SetNationality(portArray[northCapitalIndex].farNeighbors[i], northGovernment);
	}
	
	for (i = 0; i<portArray[southCapitalIndex].farNeighbors.length; i++)
	{
		SetNationality(portArray[southCapitalIndex].farNeighbors[i], southGovernment);
	}

	for (i = 0; i<portArray[northCapitalIndex].farNeighbors.length; i++)
	{
		for (j = 0; j<portArray[portArray[northCapitalIndex].farNeighbors[i]].farNeighbors.length; j++)
		{
			SetNationality(portArray[portArray[northCapitalIndex].farNeighbors[i]].farNeighbors[j], northGovernment);
		}
	}
	
	for (i = 0; i<portArray[southCapitalIndex].farNeighbors.length; i++)
	{
		for (j = 0; j<portArray[portArray[southCapitalIndex].farNeighbors[i]].farNeighbors.length; j++)
		{
			SetNationality(portArray[portArray[southCapitalIndex].farNeighbors[i]].farNeighbors[j], southGovernment);
		}
	}

	for (i = 0; i < portArray.length; i++)
	{
	
		if ( portArray[i].nation != -1)
		{
			portArray[i].portLegal = 0;
			portArray[i].routeSecurity += .25;
		} else {
			if ((rnd() * 0.9) < portArray[i].routeSecurity)
			{
				portArray[i].portLegal = 1;
				portArray[i].routeSecurity = portArray[i].routeSecurity - 0.25;
			}
		}
			
		drawPortIcon(i);

	}
	
	calculatePortTerritory();

	
	
	UpdateNeighboringPorts(currentPort);
	SetPortsVisible();
	drawPortPlanet(currentPort, 'planetCanvas');	
	SetCurrentPort(currentPort)
	
	document.getElementById('currentPortName').innerHTML = portArray[currentPort].portName;
	document.getElementById('currentPortName2').innerHTML = portArray[currentPort].portName;
	document.getElementById('primaryDescriptor').innerHTML = primaryPlanetDescriptors[portArray[currentPort].primaryDescriptor];
	document.getElementById('secondaryDescriptor').innerHTML = secondaryPlanetDescriptors[portArray[currentPort].secondaryDescriptor];


//	document.getElementById('mapLoadDot1').style.backgroundImage = 'url(images/mapDot.png);';	
//	document.getElementById('mapLoadDot2').style.setProperty('background-image', 'url(images/mapDotTarget.png)');
//	document.getElementById('mapLoadDot3').style.setProperty('background-image', 'url(images/mapDotCurrent.png)');
	

//ShipPart(shipName, maxSpeed, maxCargo, maxCrew, maxFuel, firepower, maxArmor, x, y, maxAttachments, baseCost)
// set up your ship's frame
	playerShip = new ShipPart(playerShipName, playerShipName, 10, 50, 2, 65, 50, 80, 0, 0, 3, 5000, playerShip, "attack");
	playerShip.baseCost = calculateShipPartValue(playerShip);
	playerShip.adjBaseCost = playerShip.baseCost;
	playerShip.attachments[0] = createNullAttachment();
	playerShip.attachments[1] = createNullAttachment();
	playerShip.attachments[2] = createNullAttachment();

//	playerShip.attachments[0].armor = Math.floor(playerShip.attachments[0].armor / 2);
//	playerShip.attachments[1].armor = Math.floor(playerShip.attachments[1].armor / 3);
//	playerShip.attachments[2].armor = Math.floor(playerShip.attachments[2].armor / 4);
//	playerShip.attachments[3].armor = Math.floor(playerShip.attachments[3].armor / 5);
//	playerShip.attachments[4].armor = 0;
//	playerShip.attachments[4].armor = 30;
//	playerShip.attachments[6].armor = 45;
//	playerShip.attachments[3].armor = 45;

	calculateAdjustedValues(playerShip);

	playerShip.fuel = playerShip.adjMaxFuel;
	SetText("maximumJumpDistance", playerShip.fuel)
	InitializeManageShipScreen();

	RandomizePriceSettings();
	SetPrices();
	SelectGoods(-1);
	createRandomMissions();

	populateShipyard(shipyardSeed);
	populateBarCrewmen(barCrewmenSeed);
	populateWithAutoPirate(playerShip);
	drawShipPart(playerShip);


	tmpDate = new Date();
	tmpTimer = tmpDate.getMilliseconds() - tmpTimer;
	SetPortsVisible();
	SelectPortOnMap(currentPort);
	
	for (i=0; i<8; i++) {
//		document.getElementById("smallCrewmanSVG"+i).getSVGDocument().setScale(0.5, 0.5);
//		document.getElementById("smallCrewmanSVG"+i).style.display = "none";
	}
//	document.getElementById("crewmenSVGs").style.display = "none";
	document.getElementById("crewmenSVGs").style.left = "0px";
	
	
//	SwitchWindows('loadWindow', 'mainMenu');

//	alert(tmpTimer);
//	alert("load complete!");
	if (isContinue == true) {
		dbLoadMainData(systemDB);
	} else {
		
		dbSaveState();
		SwitchWindows('loadWindow', 'setupScreen');
	}

	fullyLoaded = 1;

}



function GetHammered()
{
	var curEvent;
	var i;
	var totalProb;
	
	totalProb = 0;
	for (i=0; i < randomBarEvents.length; i++)
	{
		totalProb += randomBarEvents[i][3];
	}
	
	totalProb = Math.floor(Math.random() * totalProb);

	curEvent = 0;	
	for (i=0; i < randomBarEvents.length; i++)
	{
		totalProb -= randomBarEvents[i][3];
		if (totalProb <= 0)
		{
			curEvent = i;
			break;
		}
	
	}
	
//	curEvent = Math.floor(Math.random() * randomBarEvents.length);
	
	switch(randomBarEvents[curEvent][4])
	{
		case "playerCash":
		{
			AdjustCash(Math.floor(randomBarEvents[curEvent][6] - (Math.random() * (randomBarEvents[curEvent][6] - randomBarEvents[curEvent][5]))));
//			AdjustCash(Math.floor(randomBarEvents[curEvent][6] - (Math.random() * randomBarEvents[curEvent][5])));
			break;
		}
		case "currentPort":
		{
			SetCurrentPort(Math.floor(Math.random() * portArray.length));
			break;
		}
	}
	
	showAlertWindow(randomBarEvents[curEvent][0], randomBarEvents[curEvent][1], randomBarEvents[curEvent][2]);
	document.getElementById("gotoBar").style.display = "none";
	SwitchWindows("barScreen", "portMainScreen");
}	


/* iAye copyright 2007, Magic Chopstick Games.  Free for personal use.  Do not redistribute.  Thanks! */

jsFilesLoaded = jsFilesLoaded + 1;
