Planets.nu - improved Ship List View

Miscellaneous Improvements to the Ship List View

// ==UserScript==
// @name           Planets.nu - improved Ship List View
// @description    Miscellaneous Improvements to the Ship List View
// @include        http://planets.nu/home
// @include        http://play.planets.nu/*
// @include        http://planets.nu/*
// @include	   http://test.planets.nu/*
// @include        https://planets.nu/*
// @include	   https://test.planets.nu/*
// @version 2.92

// @namespace https://greasyfork.org/users/2860
// ==/UserScript==
// 0.1 - Adds back Ship Name. Color codes HYPing ship names depending on travel distance and fc set.
// 0.2 - Adds destination field. Now can activate/deactivate in the settings screen.
// 0.3 - Checks for local warp well being in first leg of multi-leg journey. Displays what Planet's Warpwell its going to
// 0.4 - Checks for ships moving long distances at warp 1. fixes check for HYP so it looks at first destination, not just final. 
// 0.5 - Trying out ToUpper function to avoid case sensitivity. Add check for NTP and BDM code
// 0.6 - Corrects Fleet view bug. Adds color coded cloaking status to ship name
// 0.7 - Checks for ships that are just outside the Warp Well (3 to 5 LY from planet)
// 0.8 - Looks for ships going warp 7 or warp 8, but think they're going like a warp 9 engine
// 0.9 - Updated for new site. New message for HYP ships with FC set, but no movement
// 1.0 - Updated for v3 API.
// 1.1 - New total ship view
// 1.21 - Adds current location, dynamic filters, can jump to owned ship
// 1.22 - Buttons are now dynamic as well (display Show or Hide depending on current state)
// 1.3 - Added new set fleet destination button in Ship/Fleet view.
// 1.31 - Changed Fleet to Fleet/Command. Added in ability to change FC from F/C view.
// 1.32 - Added in Checkbox control in F/C
// 1.33 - Adds listing in all views of what the current ship mission is
// 1.4 - Can now select ship mission from dropdown in Fleet/Command view. Adds Total Ship View to play.planets.nu (v3 API) client.
// 1.41 - Minor fixes for play.planets.nu client
// 1.42 - Fleet commands now sets all waypoints and updates destination text. Will no longer allow cloak to be set improperly. Can click on left side of Fleet/Commmand view to jump to ship
// 1.5 - Renamed Fleet/Command to Commmand. Command view applies to all ships at location, and will popup how many ships are low on fuel. New fleet view added (v2 only in 1.5.0)
// 1.6 - Fleet view now mirrors all functionality of command view. Will display fleet/flagship only, and can click on a fleet to show members. Clicking on fleet member will jump to that ship.
// 1.7 - Fleet view's set destination command only effect ships in that fleet. Fixed Fleet headers. Fleet lines are now bolded (ship lines regular font)
// 1.8 - Checks pillage and RGA missions for potential problems
// 1.81 - Added fleet view to v3 client
// 1.82 - added new check for warp well dance problems, adjusted distances for Warp 7/8 movement checks
// 1.9 - Adds "Whats interesting view" (only in new client currently)
// 2.0 - Adds "Whats interesting view" to all clients. Checks for gravitonic acceleration for speed/distancec
// 2.1 - Checks now for towing unfueled enemy ships to planets set to NUK
// 2.2 - Checks for ships running out of fuel - engine highlighted in orange (or red - if also too slow for destination)
// 2.3 - Improved fleet view/added integration for location based fleets
// 2.4 - Checks for Interception of Enemy ships without PE set
// 2.51 - Better distance checks (should go to 0.5 beyond the official distance), will check for warp 9 at just above limit (going 81.51 to 88 ly)
// 2.6 - Added new check for cloaked ships with PE set. This defaults to off, and can be activated under Settings.
// 2.7 - Misc fixes. New destination focused view.
// 2.8 - removes old planets.nu code
// 2.9 - improves HYP handling. Adds Orange coloring for HYPing with less than 50 fuel. Also removed false positives for standard move checks that picked up HYPing ships
// 2.9.1 - Fix logic for intercept to remove false positive cases
// 2.9.2 - Updated to work with new urls

function wrapper () { // wrapper for injection
    
    var modShipList = true;
	var modShipListCloakPE = false;
    var showShip = [true,true,true,true,true,true,true,true,true,true,true,true];
    
    oldShowShips =  vgapDashboard.prototype.showShips;
 
	var fleetNames2=new Array();
	var fleetFlagships2=new Array();
	var fleetSizes2=new Array();
	var showFleet=new Array();
	
	var showDestination = 0;
	
    vgapDashboard.prototype.showShips = function (view) {
        
        if (modShipList==false)
            oldShowShips.apply(this,arguments);
        //alert("working");
        else if (vgaPlanets.prototype.version>=3)
        {
			showDestination = get_cookie("showDestination");
			//alert(showDestination);
			if (showDestination==null) showDestination=0;
			modShipListCloakPE=get_cookie("modShipListCloakPE");
            vgap.playSound("button");
            vgap.closeSecond();
            
            this.content.empty();
            
            //filter messages
            var html = "";
            
            if (!view)
                view = 0;
            
            var filterMenu = $("<ul class='FilterMenu'></ul>").appendTo(this.content);
            $("<li " + (view == 0 ? "class='SelectedFilter'" : "") + ">Status</li>").tclick(function() { vgap.dash.showShips(0); }).appendTo(filterMenu);
            $("<li " + (view == 1 ? "class='SelectedFilter'" : "") + ">Cargo View</li>").tclick(function() { vgap.dash.showShips(1); }).appendTo(filterMenu);
            $("<li " + (view == 2 ? "class='SelectedFilter'" : "") + ">Command View</li>").tclick(function() { vgap.dash.showShips(2); }).appendTo(filterMenu);
            $("<li " + (view == 3 ? "class='SelectedFilter'" : "") + ">Notes View</li>").tclick(function() { vgap.dash.showShips(3); }).appendTo(filterMenu);
            //---------------START NEW CODE-----------------------
            $("<li " + (view == 4 ? "class='SelectedFilter'" : "") + ">Complete Ship List</li>").tclick(function() { vgap.dash.showShips(4); }).appendTo(filterMenu);
			$("<li " + (view == 5 ? "class='SelectedFilter'" : "") + ">Fleet View (experimental) </li>").tclick(function() { vgap.dash.showShips(5); }).appendTo(filterMenu);
			$("<li " + (view == 6 ? "class='SelectedFilter'" : "") + ">What's Interesting </li>").tclick(function() { vgap.dash.showShips(6); }).appendTo(filterMenu);
		    //---------------END NEW CODE-----------------------
            
            
            //loop through all ships and show the ones owned by this player
            html += "<div class='DashPane' style='height:" + ($("#DashboardContent").height() - 30) + "px;'>";
            //---------------START NEW CODE-----------------------
            if (view==5) 
			{
				html += "<tr><td><button type='button' class='TestButton' onClick='setShowDestination(1);vgap.dash.showShips(5);'> Shows Ships with Same Destination </button></td><td><button type='button' class='TestButton' onClick='setShowDestination(0);vgap.dash.showShips(5);'> Show Ships at Current Location </button></td></tr>";
			}
			if (view==4)
            {
                //html += "<button type='button' class='TestButton' onClick='changeOne();'> Display 1 </button>";
               "<table rules='all' border='1' width='100%'>";	
                if(showShip[0]==true)
                    html += "<tr><td><button type='button' class='TestButton' onClick='changeShow(0);'> Hide Unknown </button></td>"
				else
					html += "<tr><td><button type='button' class='TestButton' onClick='changeShow(0);'> Display Unknown </button></td>"
				for (var i=1;i<12;i++)
					{
						if(showShip[i]==true)
							html += "<td><button type='button' class='TestButton' onClick='changeShow("+i+");'> Hide " + i + " </button></td>"
							else
								html += "<td><button type='button' class='TestButton' onClick='changeShow("+i+");'> Display " + i + " </button></td>"
					}
            }


			 html += "</tr></table>";
			//---------------END NEW CODE-----------------------
			 html += "<table id='ShipTable' align='left' border='0' width='100%' style='cursor:pointer;'><thead>";
            
            //---------------START NEW CODE-----------------------
			if (view==5)
			{
				
				//html += "<th align='left'>Fleet Name</th><th align='left'>Fleet Size</th><th align='left'> Flagship Hull</th><th align='left'> Flagship Id</th><th align='left'>Flagship Hull</th><th align='left'>Flagship Name</th><th title='Destination' align='left'>Destination</th><th title='Current Coordinates' align='left'>X-Y</th><th title='Distance to Target' align='left'>D</th><th title='Warp Speed'  align='left'>W</th>";
				 html+="<th align='left'>Fleet Name</th><th align='left'>Fleet Size</th><th align='left'>FS Destination</th><th align='left'>Hull</th><th align='left'>ID</th><th align='left'>Shipname</th><th align='left'>Mission</th>";
				  html += "<th title='Battle value' align='left'>Battle Value</th><th title = 'Primary Enemy' align='left'>PE</th><th title='Current Coordinates' align='left'>X-Y</th><th title='Distance to Target' align='left'>D</th><th title='Warp Speed'  align='left'>W</th><th title='Neutronium Fuel' align='left'>N</th>";
                //---------------START NEW CODE-----------------------
                html += "<th title='Friendly Code' align='left'>FC</th>";
                html += "<th title='Set Fleets Destination to This Ships Destination' align='left'>Set Fleet Dest</th>";
                html += "<th title='Ready Checkbox Status' align='left'>R</th>";	
			}
			else if (view==4)
                html += "<th align='left'>Race ID</th><th align='left'>Race Name</th><th align='left'>Id</th><th align='left'>Hull</th><th title='Ship Name' align='left'>Ship Name</th><th title='Destination' align='left'>Destination</th>";
            else if (modShipList)
                html += "<th align='left'>Hull</th><th align='left'>Id</th><th title='Ship Name' align='left'>Ship Name</th><th title='Destination' align='left'>Destination</th><th title='Ship Mission' align='left'>Mission</th>";
            else	//original code
                //---------------END NEW CODE-----------------------
                html += "<th align='left'>Hull</th><th align=left>Id</th>";	
            
            if (view == 1)
                html += "<th title='Megacredits' align='left'>MC</th><th title='Supplies' align='left'>S</th><th title='Neutronium' align='left'>N</th><th title='Duranium' align='left'>D</th><th title='Tritanium' align='left'>T</th><th title='Molybdenum' align='left'>M</th><th title='Torpedos or Fighters' align='left'>Ammo</th>";
            if ((view == 0)||(view==6)) {
                
                html += "<th title='Hull' align='left'>Hull</th><th title='Engine' align='left'>Engine</th><th title='Beams' align='left'>Beams</th><th align='left'>Torps/Bays [Ammo]</th><th title='Damage' align='left'>Dam</th><th title='Crew' align='left'>Crew</th><th title='Friendly Code' align='left'>FC</th><th title='Ready Checkbox Status' align='left'>R</th>";
                
            }
            
            if (view == 2)
            {
                html += "<th title='Battle value' align='left'>Battle Value</th><th title='Current Coordinates' align='left'>X-Y</th><th title='Target Coordinates' align='left'>Tx-Ty</th><th title='Distance to Target' align='left'>D</th><th title='Warp Speed'  align='left'>W</th><th title='Neutronium Fuel' align='left'>N</th>";
                //---------------START NEW CODE-----------------------
                html += "<th title='Friendly Code' align='left'>FC</th>";
                html += "<th title='Set Fleets Destination to This Ships Destination' align='left'>Set Fleet Dest</th>";
                html += "<th title='Ready Checkbox Status' align='left'>R</th>";
                //---------------END NEW CODE------------------
            }
            if (view == 3)
                html += "<th title='Notes' align='left'>Notes</th><th title='Ready Checkbox Status' align='left'>R</th>";
            //---------------START NEW CODE-----------------------
            if (view==4)
                html += "<th title='Current Location' align='left'>Location</th><th title='Hull' align='left'>Hull</th><th title='Speed'  align='left'>Speed</th><th title='Friendly Code' align='left'>FC</th>";
            //html += "<th title='Damage' align='left'>Dam</th><th title='Crew' align='left'>Crew</th><th title='Loaded Torps or Fighters' align='left'>Ammo</th";
            //---------------END NEW CODE-----------------------
            
                     
            
            html += "</thead><tbody id='ShipRows' align=left  >";
            html += "</tbody></table>";
            html += "</div>";
            this.pane = $(html).appendTo(this.content);
            for (var i = 0; i < vgap.myships.length; i++) 
            {
                var ship = vgap.myships[i];
                var hull = vgap.getHull(ship.hullid);
                var dam = (ship.damage > 0 ? "<span class='WarnText'>" + ship.damage + "%</span>" : ship.damage + "%");
                var crew = (ship.crew < hull.crew ? "<span class='WarnText'>" + ship.crew + "</span>" : ship.crew);
                
				var show=0;
				var temphtml = "";
                var html = "";
                //-----------------START NEW CODE------------------
                if ((view!=4)&&(view!=5))
                { 
                    if (modShipList)
                    {
                        var hyp=0;//0=none, 1=yellow, 2=red, 3=green, 4=blue
                        var cloak=0;//0=none, 1=yellow, 2=red, 3=green, 4=blue
                        var destination="Deep Space";
                        var dest = vgap.getDest(ship);
                        var distance = Math.dist(ship.x, ship.y, ship.targetx,ship.targety);
                        
						if (view==2)
							temphtml += '<tr><td onclick="vgap.map.selectShip(' + ship.id + ');"><img class="TinyIcon" src="' + hullImg(ship.hullid) + '"/></td><td onclick="vgap.map.selectShip(' + ship.id + ');">' + ship.id + '</td>';
						else
							temphtml += '<tr><td><img class="TinyIcon" src="' + hullImg(ship.hullid) + '"/></td><td>' + ship.id + '</td>';
                        
                        
                        if (hull.cancloak)
                        {
                            if (ship.iscloaked)
                            {
                                if (ship.mission == 9 || (vgap.player.raceid == 3 && ship.mission == 8))
                                cloak=3 //cloaked now, will be cloaked.
                                else 
                                    cloak=1 //cloaked now, but won't be cloaked.
                            }
                            else if (ship.mission == 9 || (vgap.player.raceid == 3 && ship.mission == 8))
                            cloak=4; //not cloaked now, but will be cloaked
                            else
                                cloak=2; //not cloaked now, won't be cloaking
                        }
                        
						if ((hull.cancloak)&&(ship.mission == 9 || (vgap.player.raceid == 3 && ship.mission == 8))&&ship.enemy&&(modShipListCloakPE==true)) cloak=5;
                        
                        if ((ship.hullid==87)||(ship.hullid==77)||(ship.hullid==51))
                        {
                            if ((ship.friendlycode=="HYP")||(ship.friendlycode=="hyp")||(ship.friendlycode.toUpperCase()=="HYP"))
                            {
                                if (distance==0) hyp=5;
                                else if ((distance<20) && (ship.neutronium>=50)) hyp=1;
                                else if (((distance<340) || (distance>360))&&(ship.neutronium>=50)) hyp=2;
                                else if ((distance>=340) && (ship.neutronium<50)) hyp=6
                                else hyp=3;
                            }
                            else
                            {
                                if ((distance>=340)&&(distance<=360))
                                   hyp=2;
                                else 
                                    hyp=4;			
                            }	
                        }
                        
                        if (hyp>0) switch (hyp)
                        {
                            case 1: temphtml+="<td style='color:yellow' title='FC is HYP and destination less than 20 LY'>";
							show=1;
                                break;
                            case 2: temphtml+="<td style='color:red' title='Warning: Check Friendly Code and Destination Distance'>";
							show=1;
                                break;
                            case 3: temphtml+="<td style='color:green' title='No HYP problems seen'>";
                                break;
                            case 4: temphtml+="<td style='color:lightblue' title='Ship not set to HYP'>";
                                break;
                            case 5: temphtml+="<td style='color:aqua' title='Ship set to HYP, no destination set'>";
                                break;
                            case 6: temphtml+="<td style='color:orange' title='Ship set to HYP with valid destination, but not enough fuel'>";
                             show=1;
                                break;
                                default: temphtml+="<td>";
                        }
                        else if (cloak>0) switch (cloak)
                        {
                            case 1: temphtml+="<td style='color:yellow' title='Ship is cloaked now. No cloak mission set for next turn'>";
                                break;
                            case 2: temphtml+="<td style='color:red' title='Ship is uncloaked now. No cloak mission set for next turn'>";
                                break;
                            case 3: temphtml+="<td style='color:green' title='Ship is cloaked now. Cloak mission is set for next turn'>";
                                break;
                            case 4: temphtml+="<td style='color:lightblue' title='Ship is uncloaked now. Cloak mission set for next turn'>";
                                break;
							case 5: temphtml+="<td style='color:orange' title='Ship is set to cloak, and PE is set'>";
								show=1;
								break;
                                default: temphtml+="<td>";        
                        }
                        else temphtml+="<td>";  
                        
                        
                        temphtml += ship.name+"</td>";
                        
                        
                        var output=betterWarpWell(dest.x,dest.y);
						                        
                        if (output!="0")
                            destination = output;
                        
                        if (ship.target != null)
                            destination = ship.target.name.substr(0, 20);	   
                        
                        var hypCheck=0;
                         if (((ship.hullid==87)||(ship.hullid==77)||(ship.hullid==51)) && (ship.friendlycode.toUpperCase()=="HYP")) hypCheck=1;
                        
                        if (output.search("Outside ")!=-1)
							{
                            temphtml+="<td style='color:orange' title='Destination is outside the Warp Well'>" + destination + "</td>";
							show=1;
							}
                        else if (ship.waypoints.length>0)
                        {
                            if ((vgap.warpWell(ship.targetx,ship.targety))&&(distance<=3))
								{
								temphtml+="<td style='color:red' title='First waypoint of multi-leg journey is local warpwell'>" + destination + "</td>";
								show=1;
								}
							else if ((distance>3)&&(ship.warp==1)&&(hypCheck==0))
								{
								temphtml+="<td style='color:yellow' title='Ship is trying to go more than 3 LY at warp 1 '>" + destination + "</td>";
								show=1;
								}
							else if ((output.search("Warpwell")!=-1)&&(ship.warp>1)&&(distance<2) && (hypCheck==0))
								{
								temphtml+="<td style='color:orange' title='Ship is trying to move 1 LY in a warpwell at greater than warp 1 '>" + destination + "</td>";
								show=1;
								}
							else
                                temphtml+= "<td>" + destination + "</td>";
                        }
                        else if ((distance>3)&&(ship.warp==1)&& (hypCheck==0))
							{
							temphtml+="<td style='color:yellow' title='Ship is trying to go more than 3 LY at warp 1 '>" + destination + "</td>";
							show=1;
							}
						else if ((output.search("Warpwell")!=-1)&&(ship.warp>1)&&(distance<2)&& (hypCheck==0)){
							temphtml+="<td style='color:orange' title='Ship is trying to move 1 LY in a warpwell at greater than warp 1 '>" + destination + "</td>";
							show=1;
							}
						else	
                            temphtml+= "<td>" + destination + "</td>";
                        
						var SelfAssault=0;
						if ((vgap.player.raceid==4) || (vgap.player.raceid==10))
							if (ship.mission == 8) 
								{
									var AssaultTarget=idWarpWell(dest.x,dest.y);
									var targetPlanet;
									if (AssaultTarget!=-1)
										targetPlanet = vgap.getPlanet(AssaultTarget);
									
									if ((targetPlanet != null) && (targetPlanet.ownerid == ship.ownerid))
											SelfAssault=1;
									else if ((targetPlanet != null) && vgap.allied(targetPlanet.ownerid))
											SelfAssault=2;
									else if (targetPlanet != null)
											SelfAssault=3;
								}
							
						var towproblem=0;

						if (ship.mission == 6 && ship.mission1target != 0)
							{
							var towship = vgap.getShip(ship.mission1target);
							var AssaultTarget=idWarpWell(dest.x,dest.y);
							if ((towship.neutronium==0)&& (AssaultTarget!=-1))
								{
								var targetPlanet= vgap.getPlanet(AssaultTarget);
								var friendlycode=targetPlanet.friendlycode;
								if (friendlycode.toUpperCase()=="NUK")
									towproblem=1;
								}
							}
						var interceptProblem=0;
						if (ship.mission == 7 && ship.mission1target != 0)
							{
							var missionTarget = vgap.getShip(ship.mission1target);
							if (ship.enemy != missionTarget.ownerid) interceptProblem=1;
							if (vgap.allied(missionTarget.ownerid)) interceptProblem=0;
                            if (missionTarget.ownerid==ship.ownerid) interceptProblem=0;
							}

							
                        if (view!=2)
                        {              
                            var mission_list=returnMissionArray(ship);
							if  (SelfAssault==1) 
								{
								temphtml+="<td style='color:red' title='Your ship is set to RGA/Pillage your own planet'>";
								show=1;
								}
							else if  (SelfAssault==2) 
								{
								temphtml+="<td style='color:yellow' title='Your ship is set to RGA/Pillage an ally. Is that the best way to treat a friend?'>";
								show=1;
								}
							else if  (SelfAssault==3) temphtml+="<td style='color:green' title='Your ship is set to RGA/Pillage an enemy planet.'>";
							else if (towproblem==1) 
							{
							temphtml+="<td style='color:red' title='You are about to tow an unfueled ship to a planet set to NUK'>";
							show=1;
							}
							else if (interceptProblem==1)
							{
							temphtml+="<td style='color:orange' title='You are intercepting an enemy ship without PE set'>";
							show=1;
							}
							else temphtml +="<td>";
                            temphtml += mission_list[ship.mission] + "</td>";
                        }
                        
                    }	
                    //---------------END NEW CODE-----------------------
                    else	//original code
                        temphtml += '<tr class="RowSelect" title="' + ship.name + '"><td><img class="TinyIcon" src="' + hullImg(ship.hullid) + '"/></td><td>' + ship.id + '</td>';
                }
                
                if (view == 1)
                    temphtml += "<td>" + ship.megacredits + "</td><td>" + ship.supplies + "</td><td>" + ship.neutronium + "</td><td>" + ship.duranium + "</td><td>" + ship.tritanium + "</td><td>" + ship.molybdenum + "</td><td>" + ship.ammo + "</td></tr>";
                if ((view == 0)||(view == 6)) {
                    var hull = vgap.getHull(ship.hullid);
                    
                    //---------------START NEW CODE-----------------------
                    if (modShipList)
                    {
                        var distance = Math.dist(ship.x, ship.y, ship.targetx,ship.targety);
                        var speed=vgap.getSpeed(ship.warp, ship.hullid);
						
                        var warp7=49;
						var warp8=64;
						var warp9=81;
						if (ship.hullid == 44 || ship.hullid == 45 || ship.hullid == 46)
						{
							warp7=98;warp8=128;warp9=162;
						}
						var fuelCheck=0;
						var speedCheck=0;
                        var hypCheck=0;
						if (ship.neutronium<checkFuel(ship)) fuelCheck=1;
						//if distance==(warp7+0.5)||(warp8+0.5)||(warp9+0.5) distance-=0.1;
						if (((speed==warp8)&&((distance>(warp8+0.5))&&(distance<(warp9+0.5))))||((speed==warp7)&&((distance>(warp7+0.5))&&(distance<(warp9+0.5))))||((speed==warp9)&&((distance>(warp9+0.5))&&(distance<(warp9+8)))))	 speedCheck=1;
						 if (((ship.hullid==87)||(ship.hullid==77)||(ship.hullid==51)) && (ship.friendlycode.toUpperCase()=="HYP")) hypCheck=1;
                                              
                        
						if (fuelCheck==1 && speedCheck==1 && hypCheck==0)
							{
							temphtml += "<td>" + hull.name + "</td><td style='color:red' title='Ship does not have enough fuel to reach destination AND is moving too slow to reach destination in one turn. Check Speed/Destination and fuel'>" + vgap.getEngine(ship.engineid).name + "</td>"    ;   
							show=1;
							}
						else if (fuelCheck==1 && hypCheck==0)
							{
							temphtml += "<td>" + hull.name + "</td><td style='color:orange' title='Ship does not have enough fuel to reach destination'>" + vgap.getEngine(ship.engineid).name + "</td>"    ;   
							show=1;
							}
						else
                        if 	(speedCheck==1 && hypCheck==0)				
							{
							temphtml += "<td>" + hull.name + "</td><td style='color:yellow' title='Ship moving too slow to reach destination in one turn, check speed/destination'>" + vgap.getEngine(ship.engineid).name + "</td>"    ;   
							show=1;
							}
						else
                            temphtml += "<td>" + hull.name + "</td><td>" + vgap.getEngine(ship.engineid).name + "</td>";
                        
                        if ((ship.friendlycode.toUpperCase()=="NTP") || (ship.friendlycode.toUpperCase()=="BDM"))
							temphtml += "<td>" +(ship.beams > 0 ? vgap.getBeam(ship.beamid).name + " x" + ship.beams : "") + "</td><td>" + (ship.torps > 0 ? vgap.getTorpedo(ship.torpedoid).name + " x" + ship.torps : "") + (ship.bays > 0 ? " Bays x" + ship.bays : "") + (ship.bays > 0 || ship.torps > 0 ? " [" + ship.ammo + "]" : "") + "</td><td>" + dam + "</td><td>" + crew + "</td><td style='color:orange' title='Potentially Dangerous Friendly Code'>" + ship.friendlycode + "</td><td>" + (ship.readystatus > 0 ? (ship.readystatus == 1 ? "-" : "+") : "") + "</td>";
                        else
                            temphtml += "<td>" +(ship.beams > 0 ? vgap.getBeam(ship.beamid).name + " x" + ship.beams : "") + "</td><td>" + (ship.torps > 0 ? vgap.getTorpedo(ship.torpedoid).name + " x" + ship.torps : "") + (ship.bays > 0 ? " Bays x" + ship.bays : "") + (ship.bays > 0 || ship.torps > 0 ? " [" + ship.ammo + "]" : "") + "</td><td>" + dam + "</td><td>" + crew + "</td><td>" + ship.friendlycode + "</td><td>" + (ship.readystatus > 0 ? (ship.readystatus == 1 ? "-" : "+") : "") + "</td>";
                        
                    }
                    else
                        //---------------END NEW CODE-----------------------
                        temphtml += "<td>" + hull.name + "</td><td>" + vgap.getEngine(ship.engineid).name + "</td><td>" + (ship.beams > 0 ? vgap.getBeam(ship.beamid).name + " x" + ship.beams : "") + "</td><td>" + (ship.torps > 0 ? vgap.getTorpedo(ship.torpedoid).name + " x" + ship.torps : "") + (ship.bays > 0 ? " Bays x" + ship.bays : "") + (ship.bays > 0 || ship.torps > 0 ? " [" + ship.ammo + "]" : "") + "</td><td>" + dam + "</td><td>" + crew + "</td><td>" + ship.friendlycode + "</td><td>" + (ship.readystatus > 0 ? (ship.readystatus == 1 ? "-" : "+") : "") + "</td>";
                }
                if (view == 2) {
                    var dest = vgap.getDest(ship);
                    var mission_list=returnMissionArray(ship);
						temphtml += "<td><select id='Dropdown" + i + "' onChange='setMission(this)'>";//<option value='" + ship.mission + "'>" + mission_list[ship.mission]  + "</option>";
                    for (var k=0;k<17;k++)
                    {
                        if (ship.mission==k)
                            temphtml+= "<option value='" + k + "' selected=>" + mission_list[k] + "</option>"
                            else
                                temphtml+= "<option value='" + k + "'>" + mission_list[k] + "</option>"
                    }
                    temphtml += "</select></td>";
                    //html += "<td>" + mission_list[ship.mission] + "</td>";
                    
                    temphtml += "<td>" + vgap.getBattleValue(ship) + "</td><td>" + ship.x + "-" + ship.y + "</td><td>" + dest.x + "-" + dest.y + "</td><td>" + vgap.getTravelDist(ship).toFixed(1) + "</td><td>" + ship.warp + "</td><td>" + ship.neutronium + "</td>";
                    temphtml += "<td><input type='text' size='3' maxlength='3' id='Input"+i+"' onchange='setFC(this);' value='" + ship.friendlycode +"'/></td>";
                    temphtml += "<td><button type='button' id='Button"+i +"' onClick='setFleetDest(this);'>Set Flt Dest</button></td>";
                    if (ship.readystatus>0)	
                        temphtml += "<td><input type='checkbox' id='Check"+i+"' checked='checked' onchange='setCB(this);'/></td>";
                    else
                        temphtml += "<td><input type='checkbox' id='Check"+i+"' onchange='setCB(this);'/></td>";
                    
                    
                }
                if (view == 3) {
                    var note = vgap.getNote(ship.id, 2);
                    if (note != null) {
                        temphtml += '<td>' + note.body.replace(/\n/g, "<br/>") + '</td>';
                    }
                    else {
                        temphtml += '<td></td>';
                    }
					temphtml+="<td>" + (ship.readystatus > 0 ? (ship.readystatus == 1 ? "-" : "+") : "") + "</td>";
                }
                    temphtml += "</tr>";
			if ((view!=6) || (show==1))
				html+=temphtml;
            var select;
            if (view==2||view==4||view==5)
                select = function(id) { return function() {};};
            else
                select = function(id) { return function() { vgap.map.selectShip(id); }; };
            $(html).click(select(ship.id)).appendTo("#ShipRows");
            }
            //---------------START NEW CODE-----------------------
            if (view==4)
            {
                var colorsA =["#F0F8FF","#32CD32","#CD5C5C","#FFC0CB","#98FB98","#C0C0C0","#FFFF00","#EE82EE","#D3D3D3","#B0E0E6","#87CEFA","#7B68EE","#F4A460","#D2B48C","#FF6347","#F5DEB3","#F08080","#2F4F4F","#008080","#B22222","#808000","#9370DB","#00FF00","#4B0082","#D2B48C","#9ACD32", "#DAA520","#F0F8FF","#6B8E23","#FF4500"];
                var colorsA2 =["#FFFFFF","#006400","#FF0000","#FF69B4","#00FA9A","#6A5ACD","#FFD700","#9400D3","#808080","#00CED1","#4169E1","#7B68EE","#A0522D","#87CEEB","#FF6347","#F5DEB3","#F08080","#2F4F4F","#008080","#B22222","#808000","#9370DB","#00FF00","#4B0082","#D2B48C","#9ACD32", "#DAA520","#F0F8FF","#6B8E23","#FF4500"];
                var checkColor=null;
				
                for (var m=0;m<30;m++)
                {
                    var String="Race"+(m+1);
                    checkColor=get_cookie(String);
                    if (checkColor) 
                        colorsA[m]=checkColor;
                    checkColor=null;
                    checkColor=get_cookie(String+"A");
                    if (checkColor) 
                        colorsA2[m]=checkColor;
                    checkColor=null;
                }
                
                for (var j = 0; j < vgap.ships.length; j++) 
                {
                    //vgap.inspace
                    var ship = vgap.ships[j];
                    var hull = vgap.getHull(ship.hullid);	
                    var player = vgap.getPlayer(ship.ownerid);
                    var race = vgap.getRace(player.raceid);
                    var color=colorsA[player.raceid-1];
                    var speed=vgap.getSpeed(ship.warp, ship.hullid);
                    var destination="Deep Space";
                    var location="Deep Space";
                    var dest = vgap.getDest(ship);
                    var damage="?";		
                    var crew="?";
                    var ammo="?";
                    
                    var locOutput=betterWarpWell(ship.x,ship.y);
                    var output=betterWarpWell(dest.x,dest.y);
                    if (output!="0")
                        destination = output;
                    if (ship.target != null)
                        destination = ship.target.name.substr(0, 20);	
                    
                    if (locOutput!="0")
                        location = locOutput;
                    
                    if (ship.damage!=-1)
                        damage=ship.damage;
                    if (ship.crew!=-1)
                        crew=ship.crew;	
                    if (ship.ammo!=-1)
                        ammo=ship.ammo;
                    
                    if (showShip[player.raceid]==true)
                    {		
                        if (player.raceid==vgap.player.id)
                            html += '<tr onclick="vgap.map.selectShip(' + ship.id + ');">';
                        else 
                            html += "<tr>";
                        html += "<td style='color:"+ color +"'>" + player.raceid + "</td>";
                        html += "<td style='color:"+ color +"'>" + race.name + "</td>";
                        html += "<td style='color:"+ color +"'>" + ship.id + "</td>";
                        html += '<td><img class="TinyIcon" src="' + hullImg(ship.hullid) + '"/></td>'
                        html += "<td style='color:"+ color +"'>" + ship.name + "</td>";
                        html += "<td style='color:"+ color +"'>" + destination + "</td>";
                        html += "<td style='color:"+ color +"'>" + location + "(" + ship.x + "," + ship.y + ")" +  "</td>";
                        html += "<td style='color:"+ color +"'>" + hull.name + "</td>";
                        html += "<td style='color:"+ color +"'>" + speed + "</td>";
                        //html += "<td style='color:"+ color +"'>" + damage + "</td>";
                        //html += "<td style='color:"+ color +"'>" + crew + "</td>";
                        //html += "<td style='color:"+ color +"'>" + ammo + "</td>";
                        //html += "<td style='color:"+ color +"'>" +ship.beams + "</td>";
                        html += "<td style='color:"+ color +"'>" +ship.friendlycode + "</td>";
                        html += "</tr>";
                    }
                }
            var select;
            if (view==2||view==4)
                select = function(id) { return function() {};};
            else
                select = function(id) { return function() { vgap.map.selectShip(id); }; };
            $(html).click(select(ship.id)).appendTo("#ShipRows");
            }
			if (view==5)
			{
				var ShipID;
				ShipID=get_cookie("currentShipID");
				//html += "Ship ID to use as temporary fleet flagship (will show all ships in same location as fleet)";
				html += "<tr><td><input type='text' id='InputID' title='Ship ID to use as temporary fleet flagship (will show all ships in same location as fleet)' onChange='setShipID(this);ShipID=this.value;vgap.dash.showShips(5);' value='" + ShipID +"'></td>";
				
				var enteredShip=vgap.getShip(ShipID);
				var player;
				if (enteredShip!=null) 
					{
					player = vgap.getPlayer(enteredShip.ownerid);
					if (enteredShip.ownerid==vgap.player.id)
					for (var count=0;count<vgap.myships.length;count++)
					{
					if((showDestination==0)&&(vgap.myships[count].x==enteredShip.x)&&(vgap.myships[count].y==enteredShip.y))
						{
							//alert("match");
							var ship = vgap.myships[count];
							var hull = vgap.getHull(ship.hullid);
							var destination="Deep Space";
							var dest = vgap.getDest(ship);
							var output=betterWarpWell(dest.x,dest.y);
							if (output!="0")
								 destination = output;
							if (ship.target != null)
								destination = ship.target.name.substr(0, 20);	 
							var distance = Math.dist(ship.x, ship.y, ship.targetx,ship.targety);
							var speed=vgap.getSpeed(ship.warp, ship.hullid);
							var location="Deep Space";
							
							//html+='<tr class="RowSelect" title="' + ship.name + '" onClick="changeShowFleet('+i+');" style="vertical-align:top; font-weight:bold;">';
							//html += "<td style='width:10%'>" +  "adHoc" + "</td><td style='width:5%'>" +  "N/A" + "</td><td style='width:10%'>"+destination+"</td>";
							//----------
							var ship2 = vgap.myships[count];
							var destination2="Deep Space";
							var dest2 = vgap.getDest(ship2);
							var output2=betterWarpWell(dest2.x,dest2.y);
							if (output2!="0")
								destination2 = output2;
							if (ship2.target != null)
								destination2 = ship2.target.name.substr(0, 20);	
							var mission_list=returnMissionArray(ship2);
							html+='<tr class="RowSelect" title="' + ship2.name + '" style="vertical-align:top;">';
							html += "<td style='width:10%'>" +  "" + "</td><td style='width:5%'>" +  "" + "</td><td style='width:10%'>"+destination2+"</td>";
							html+="<td style='width:5%' onclick='vgap.map.selectShip(" + ship2.id + ");'><img class='TinyIcon' src='" + hullImg(ship2.hullid)+ "'/></td><td onclick='vgap.map.selectShip(" + ship2.id + ");' style='width:5%'>"+ship2.id+"</td><td onclick='vgap.map.selectShip(" + ship2.id + ");'>"+ship2.name+"</td>";
							html += "<td><select id='DropdownA" + j + "' onChange='setMission(this)'>";
								for (var k=0;k<17;k++)
										{
										if (ship2.mission==k)
											html+= "<option value='" + k + "' selected=>" + mission_list[k] + "</option>"
										else
											html+= "<option value='" + k + "'>" + mission_list[k] + "</option>"
										}
									html += "</select></td>";
									
									html += "<td>" + vgap.getBattleValue(ship2) + "</td><td>" + ship2.enemy+ "</td><td>" + ship2.x + "-" + ship2.y + "</td><td>" + vgap.getTravelDist(ship2).toFixed(1) + "</td><td>" + ship2.warp + "</td><td>" + ship2.neutronium + "</td>";
							
							//---------------START NEW CODE-----------------------
							html += "<td><input type='text' id='InputA"+j+"' size='3' maxlength='3' onchange='setFC(this);' value='" + ship2.friendlycode +"'/></td>";
							html += "<td><button type='button' id='ButtonA"+j +"' onClick='setFleetDest(this);'>Set Flt Dest</button></td>";
							if (ship2.readystatus>0)	
								html += "<td><input type='checkbox' id='CheckA"+j+"' checked='checked' onchange='setCB(this);'/></td>";
							else
								html += "<td><input type='checkbox' id='CheckA"+j+"' onchange='setCB(this);'/></td>";
							
							//---------------END NEW CODE-----------------------
							html+="</tr>";
						}
						//else alert("no match "+ showDestination + count + vgap.myships[count].x + enteredShip.x + vgap.myships[count].y +  enteredShip.y);
						if((showDestination==1)&&(vgap.myships[count].targetx==enteredShip.targetx)&&(vgap.myships[count].targety==enteredShip.targety))
						{
							var ship = vgap.myships[count];
							var hull = vgap.getHull(ship.hullid);
							var destination="Deep Space";
							var dest = vgap.getDest(ship);
							var output=betterWarpWell(dest.x,dest.y);
							if (output!="0")
								 destination = output;
							if (ship.target != null)
								destination = ship.target.name.substr(0, 20);	 
							var distance = Math.dist(ship.x, ship.y, ship.targetx,ship.targety);
							var speed=vgap.getSpeed(ship.warp, ship.hullid);
							var location="Deep Space";
							
							//html+='<tr class="RowSelect" title="' + ship.name + '" onClick="changeShowFleet('+i+');" style="vertical-align:top; font-weight:bold;">';
							//html += "<td style='width:10%'>" +  "adHoc" + "</td><td style='width:5%'>" +  "N/A" + "</td><td style='width:10%'>"+destination+"</td>";
							//----------
							var ship2 = vgap.myships[count];
							var destination2="Deep Space";
							var dest2 = vgap.getDest(ship2);
							var output2=betterWarpWell(dest2.x,dest2.y);
							if (output2!="0")
								destination2 = output2;
							if (ship2.target != null)
								destination2 = ship2.target.name.substr(0, 20);	
							var mission_list=returnMissionArray(ship2);
							html+='<tr class="RowSelect" title="' + ship2.name + '" style="vertical-align:top;">';
							html += "<td style='width:10%'>" +  "" + "</td><td style='width:5%'>" +  "" + "</td><td style='width:10%'>"+destination2+"</td>";
							html+="<td style='width:5%' onclick='vgap.map.selectShip(" + ship2.id + ");'><img class='TinyIcon' src='" + hullImg(ship2.hullid)+ "'/></td><td onclick='vgap.map.selectShip(" + ship2.id + ");' style='width:5%'>"+ship2.id+"</td><td onclick='vgap.map.selectShip(" + ship2.id + ");'>"+ship2.name+"</td>";
							html += "<td><select id='DropdownA" + j + "' onChange='setMission(this)'>";
								for (var k=0;k<17;k++)
										{
										if (ship2.mission==k)
											html+= "<option value='" + k + "' selected=>" + mission_list[k] + "</option>"
										else
											html+= "<option value='" + k + "'>" + mission_list[k] + "</option>"
										}
									html += "</select></td>";
									
									html += "<td>" + vgap.getBattleValue(ship2) + "</td><td>" + ship2.enemy+ "</td><td>" + ship2.x + "-" + ship2.y + "</td><td>" + vgap.getTravelDist(ship2).toFixed(1) + "</td><td>" + ship2.warp + "</td><td>" + ship2.neutronium + "</td>";
							
							//---------------START NEW CODE-----------------------
							html += "<td><input type='text' size='3' maxlength='3' id='InputA"+j+"' onchange='setFC(this);' value='" + ship2.friendlycode +"'/></td>";
							html += "<td><button type='button' id='ButtonA"+j +"' onClick='setFleetDest(this);'>Set Flt Dest</button></td>";
							if (ship2.readystatus>0)	
								html += "<td><input type='checkbox' id='CheckA"+j+"' checked='checked' onchange='setCB(this);'/></td>";
							else
								html += "<td><input type='checkbox' id='CheckA"+j+"' onchange='setCB(this);'/></td>";
							
							//---------------END NEW CODE-----------------------
							html+="</tr>";
						}
					}
				}
				for (var i = 0; i < fleetNames2.length; i++) 
				{
				//	html += "<th align='left'>Fleet Name</th><th align='left'>Fleet Size</th><th align='left'> Flagship Hull</th><th align='left'> Flagship Id</th><th align='left'>Flagship Hull</th><th align='left'>Flagship Name</th><th title='Destination' align='left'>Destination</th><th title='Current Coordinates' align='left'>X-Y</th><th title='Distance to Target' align='left'>D</th><th title='Warp Speed'  align='left'>W</th>";

			    var ship = vgap.getShip(fleetFlagships2[i]);
				//alert(ship.name);
                var hull = vgap.getHull(ship.hullid);
				var destination="Deep Space";
				var dest = vgap.getDest(ship);
				var output=betterWarpWell(dest.x,dest.y);
				if (output!="0")
                     destination = output;
                if (ship.target != null)
                    destination = ship.target.name.substr(0, 20);	
                var distance = Math.dist(ship.x, ship.y, ship.targetx,ship.targety);
                var speed=vgap.getSpeed(ship.warp, ship.hullid);
                var location="Deep Space";
				var fleetName=returnFleetName2(ship);
				html+='<tr title="' + ship.name + '" onClick="changeShowFleet('+i+');" style="vertical-align:top; font-weight:bold;">';
				html += "<td style='width:10%'>" +  fleetNames2[i] + "</td><td style='width:5%'>" +  fleetSizes2[i] + "</td><td style='width:10%'>"+destination+"</td>";
				if (showFleet[i]==true)
				{
					html+="</tr>";
					for (var j=0;j<vgap.myships.length;j++)
					{
						var ship2 = vgap.myships[j];
						var fleetName2=returnFleetName2(ship2);
						if (fleetName!=-1)
							if (fleetName2==fleetName)
							{
							var destination2="Deep Space";
							var dest2 = vgap.getDest(ship2);
							var output2=betterWarpWell(dest2.x,dest2.y);
							if (output2!="0")
								destination2 = output2;
							if (ship2.target != null)
								destination2 = ship2.target.name.substr(0, 20);	
							var mission_list=returnMissionArray(ship2);
							html+='<tr class="RowSelect" title="' + ship2.name + '" style="vertical-align:top;">';
							html += "<td style='width:10%'>" +  fleetNames2[i] + "</td><td style='width:5%'>" +  fleetSizes2[i] + "</td><td style='width:10%'>"+destination2+"</td>";
							html+="<td style='width:5%' onclick='vgap.map.selectShip(" + ship2.id + ");'><img class='TinyIcon' src='" + hullImg(ship2.hullid)+ "'/></td><td onclick='vgap.map.selectShip(" + ship2.id + ");' style='width:5%'>"+ship2.id+"</td><td onclick='vgap.map.selectShip(" + ship2.id + ");'>"+ship2.name+"</td>";
							html += "<td><select id='DropdownA" + j + "' onChange='setMission(this)'>";
							for (var k=0;k<17;k++)
								{
								if (ship2.mission==k)
									html+= "<option value='" + k + "' selected=>" + mission_list[k] + "</option>"
								else
									html+= "<option value='" + k + "'>" + mission_list[k] + "</option>"
								}
							html += "</select></td>";
							
							html += "<td>" + vgap.getBattleValue(ship2) + "</td><td>"+ ship2.enemy +"</td><td>" + ship2.x + "-" + ship2.y + "</td><td>" + vgap.getTravelDist(ship2).toFixed(1) + "</td><td>" + ship2.warp + "</td><td>" + ship2.neutronium + "</td>";
                    
                    //---------------START NEW CODE-----------------------
                    html += "<td><input type='text' id='InputA"+j+"' size='3' maxlength='3' onchange='setFC(this);' value='" + ship2.friendlycode +"'/></td>";
                    html += "<td><button type='button' id='ButtonA"+j +"' onClick='setFleetDest(this);'>Set Flt Dest</button></td>";
                    if (ship2.readystatus>0)	
                        html += "<td><input type='checkbox' id='CheckA"+j+"' checked='checked' onchange='setCB(this);'/></td>";
                    else
                        html += "<td><input type='checkbox' id='CheckA"+j+"' onchange='setCB(this);'/></td>";
                    
                    //---------------END NEW CODE-----------------------

 
							html+="</tr>";
							}
					}
				}
				 else
				html+="<td style='width:5%'><img class='TinyIcon' src='" + hullImg(ship.hullid)+ "'/></td><td style='width:5%'>"+ship.id+"</td><td>"+ship.name+"</td>";
				 //html+="<td><img class='TinyIcon' src='" + hullImg(ship.hullid)+ "'/></td><td>"+ship.id+"</td><td>"+hull.name+"</td><td>"+ship.name+"</td><td>" + ship.x + "-" + ship.y + "</td><td>" + vgap.getTravelDist(ship).toFixed(1) + "</td><td>" + ship.warp + "</td><td>" + (ship.readystatus > 0 ? (ship.readystatus == 1 ? "-" : "+") : "") + "</td>";

				 html+="</tr>";
				//alert(i+" "+ fleetNames2.length);
				}
				//html+="</tbody></table>";
				var select;
            if (view==2||view==4||view==5)
                select = function(id) { return function() {};};
            else
                select = function(id) { return function() { vgap.map.selectShip(id); }; };
            $(html).click(select(ship.id)).appendTo("#ShipRows");
			}
            //---------------END NEW CODE-----------------------

                   

            
            
            $("#ShipTable").tablesorter();
            this.pane.jScrollPane();
            
            
            // vgap.action added for the assistant (Alex):
            vgap.showShipsViewed = 1;
            vgap.action(); 
            
        }
        
    };
	
//==========================================Utility Functions==========================================	
    betterWarpWell = function (x, y) {
        var output="0";
        for (var i = 0; i < vgap.planets.length; i++) {
            var planet = vgap.planets[i];
            var dist;
            if (vgaPlanets.prototype.version>=3)
                dist=Math.dist(x, y, planet.x, planet.y);
            else //if (vgaPlanets.prototype.version<3)
                dist=vgap.map.getDist(x, y, planet.x, planet.y);
            
            if (dist==0)
            {
                output=planet.name;
                return(output);            
            }
            else if (dist <= 3 && dist > 0)
            {
                output=planet.name;
                return(output+" Warpwell");
            }
            else if (dist>3 && dist<6)
            {
                output="Outside "+planet.name;
                return(output+" Warpwell");
            }
        }
        return(output);
    };
	
	idWarpWell = function (x, y) {
	var output=-1;
	for (var i = 0; i < vgap.planets.length; i++) {
            var planet = vgap.planets[i];
            var dist;
            if (vgaPlanets.prototype.version>=3)
                dist=Math.dist(x, y, planet.x, planet.y);
            else //if (vgaPlanets.prototype.version<3)
                dist=vgap.map.getDist(x, y, planet.x, planet.y);
            if (dist==0)
            {
                return(planet.id);            
            }
            else if (dist <= 3 && dist > 0)
            {
                return(planet.id);
            }
        }
        return(output);
    };
	
    
    var oldShowSettings = vgapDashboard.prototype.showSettings;
    
    vgapDashboard.prototype.showSettings = function () {
        
        //oldShowSettings.apply(this,arguments);
        var new_html="";
		modShipListCloakPE=get_cookie("modShipListCloakPE");
        new_html += "<br><h3>Custom Settings for Improved Ship List Mod</h3>";
        new_html += "<div style='width:250px;'></div>";
        new_html += "<div id='ShipListModTable'><table>";
        new_html += "<td><div id='LaunchSim' onclick='changeShipListMod();' title='Default is: Active.'>Activate or Deactivate Mod</div></td>";
		new_html += "<td><div id='LaunchSim' onclick='changeCloakPE();' title='Default is: InActive.'>Warn on Cloaked Ship with PE</div></td></tr></table>";
        
        if (vgaPlanets.prototype.version>=3)
        {
            this.customSettingsContent.push(new_html);
        }
        oldShowSettings.apply(this,arguments);
        
        if (vgaPlanets.prototype.version<3)
        {
            $('[onclick="vgap.resetTurn();"]').after(new_html);
            this.pane.jScrollPane();
        }
        if (vgaPlanets.prototype.version>=3)
        {
            this.customSettingsContent.pop();
        }
        
    };
    
    changeShipListMod = function()
    {
        if (modShipList==true) 
        {
            modShipList=false;
            alert("The Improved Ship List Mod is now Deactivated.");
        }
        else 
        {
            modShipList=true;
            alert("The Improved Ship List Mod is now Active.");
        }
    };
    
	changeCloakPE = function()
    {
        if (modShipListCloakPE==true) 
        {
            modShipListCloakPE=false;
			set_cookie("modShipListCloakPE",0,2099,1,1);
            alert("No longer warning on cloaked ships with PE set. Setting saved.");
        }
        else 
        {
			modShipListCloakPE=true;
            set_cookie("modShipListCloakPE",1,2099,1,1);
            alert("Now warning on cloaked ships with PE set. Setting saved.");
        }
    };
    setFleetDest= function(ship__ship)
    {
        var ship_length=ship__ship.id.length;
        var ship_output=ship__ship.id.substring(6,ship_length);
		var command=0;
		var fleetName;


        if (ship_output.charAt(0)=='A')
			{
			ship_output=ship_output.substring(1,ship_length);
			command=1;
			}
        else
			{
			command=2;
			}
		var ship_num=Number(ship_output);
        var ship=vgap.myships[ship_num];
		if (command==1) fleetName=returnFleetName(ship);
        var count=0;
		var lowFuel=0;
		if (command==1) //in a labeled fleet
			for (var i = 0; i < vgap.myships.length; i++)
			{
				if (returnFleetName(vgap.myships[i])==fleetName)
					{
					count++;
					if (vgap.myships[i].neutronium<checkFuel(vgap.myships[i])) lowFuel++;
					vgap.myships[i].targetx = ship.targetx;
						vgap.myships[i].targety = ship.targety;
						vgap.myships[i].waypoints = ship.waypoints;
						var dest = vgap.getDest(vgap.myships[i]);
						vgap.myships[i].target = vgap.getTarget(dest.x, dest.y);
						}
			}
		else //unlabeled group at location
			for (var i = 0; i < vgap.myships.length; i++) 
			{
				//alert("its "+ i);
				if((vgap.myships[i].x==ship.x)&&(vgap.myships[i].y==ship.y))
				{
					//alert("hi!");
					count++;
					vgap.myships[i].targetx = ship.targetx;
					vgap.myships[i].targety = ship.targety;
					vgap.myships[i].waypoints = ship.waypoints;
					var dest = vgap.getDest(vgap.myships[i]);
					vgap.myships[i].target = vgap.getTarget(dest.x, dest.y);
					if (vgap.myships[i].neutronium<checkFuel(vgap.myships[i])) lowFuel++;
				} 
			}
		if (lowFuel>0) alert ("Updated destination for " + count + " ships. " + lowFuel + " ships have insufficient fuel!");
			else
		alert("Updated destination for " + count + " ships");

		if (command==2)
			vgap.dash.showShips(2);
		else 
			vgap.dash.showShips(5);
        if (vgaPlanets.prototype.version<3)
            vgap.map.updateZoom();
        else
        {	
            vgap.loadWaypoints();
            vgap.shipScreen.screen.refresh();
        }
        vgap.map.draw();
        
    };
    
    setFC= function(fc__fc)
    {
        var fc_length=fc__fc.id.length;
        var fc_ID=fc__fc.id.substring(5,fc_length);
		var command=0;
		//alert(fc_ID);
        if (fc_ID.charAt(0)=='A')
			{
			fc_ID=fc_ID.substring(1,fc_length);
			command=1;
			//alert(fc_ID+" "+fc__fc.value);
			}
        vgap.myships[fc_ID].friendlycode=fc__fc.value;
		if (command==0)
			vgap.dash.showShips(2);
		else 
			vgap.dash.showShips(5);
        if (vgaPlanets.prototype.version<3)
            vgap.map.updateZoom();
        vgap.map.draw();
    };
	    
    setMission=function(ms__ms)
    {
        var ms_length=ms__ms.id.length;
        var ms_ID=ms__ms.id.substring(8,ms_length);
		var command=0;
        if (ms_ID.charAt(0)=='A')
			{
			ms_ID=ms_ID.substring(1,ms_length);
			command=1;
			}
        var ship=vgap.myships[ms_ID];
        var dest = vgap.getDest(ship);
        var mission_list=returnMissionArray(ship);
        if (mission_list[ms__ms.value]=="Invalid") 
            alert ("Invalid Mission Selected");
        else
            vgap.myships[ms_ID].mission=ms__ms.value;
		if (command==0)
			vgap.dash.showShips(2);
		else 
			vgap.dash.showShips(5);
        if (vgaPlanets.prototype.version<3)
            vgap.map.updateZoom();
        vgap.map.draw();
    };
    
    setCB=function(cb__cb)
    {
        var cb_length=cb__cb.id.length;
        var cb_ID=cb__cb.id.substring(5,cb_length);
		var command=0;
        if (cb_ID.charAt(0)=='A')
			{
			cb_ID=cb_ID.substring(1,cb_length);
			command=1;
			}
        if (vgap.myships[cb_ID].readystatus>0) vgap.myships[cb_ID].readystatus=0;
        else vgap.myships[cb_ID].readystatus=1;
		if (command==0)
			vgap.dash.showShips(2);
		else 
			vgap.dash.showShips(5);
        if (vgaPlanets.prototype.version<3)
            vgap.map.updateZoom();
        vgap.map.draw();
    };
    
	setShipID=function(passed)
	{
	//alert(passed.value);
	set_cookie("currentShipID",passed.value,2099,1,1);
	};
	
	setShowDestination=function(passed)
	{
	showDestination=passed;
	set_cookie("showDestination",passed,2099,1,1);
	};
	
	
    changeShow = function(race)
    {	
        if (showShip[race]==false)
            showShip[race]=true;
        else
            showShip[race]=false;
        vgap.dash.showShips(4);
    };	
    
	
    changeShowFleet = function(index)
    {	
		//alert("hi");
        if (showFleet[index]==false)
            showFleet[index]=true;
        else
            showFleet[index]=false;
        vgap.dash.showShips(5);
    };	
	
    returnMissionArray = function (ship) 
    {
        var missions = new Array();
        
        missions.push("Exploration");
        missions.push("Mine Sweep");
        if (ship.torps > 0)
            missions.push("Lay Mines");
        else
            missions.push("Invalid");
        
        missions.push("Kill!!");
        if (ship.hullid == 84 || ship.hullid == 96 || ship.hullid == 9)
            missions.push("Bio Scan");
        else
            missions.push("Sensor Sweep");
        missions.push("Land and Disassemble");
        missions.push("Try to Tow");
        missions.push("Try to Intercept");
        
        //special race missions
        if (vgap.player.raceid == 1)
            missions.push("Super Refit");
        else if (vgap.player.raceid == 2 && ship.beams > 0)
            missions.push("Hisssss!");
        else if (vgap.player.raceid == 2)
            missions.push("Invalid");
        else if (vgap.player.raceid == 3)
            missions.push("Super Spy");
        else if (vgap.player.raceid == 4 && ship.beams > 0)
            missions.push("Pillage Planet");
        else if (vgap.player.raceid == 4)
            missions.push("Invalid");		
        else if (vgap.player.raceid == 5)
            missions.push("Rob Ship");
        else if (vgap.player.raceid == 6)
            missions.push("Self Repair");
        else if (vgap.player.raceid == 7 && ship.torps > 0)
            missions.push("Lay Web Mines");
        else if (vgap.player.raceid == 7)
            missions.push("Invalid");
        else if (vgap.player.raceid == 8)
            missions.push("Dark Sense");
        else if ((vgap.player.raceid == 9 || vgap.player.raceid == 11) && ship.bays > 0)
            missions.push("Build Fighters");
        else if ((vgap.player.raceid == 9 || vgap.player.raceid == 11))
            missions.push("Invalid");
        else if (vgap.player.raceid == 10)
            missions.push("Rebel Ground Attack");
         
		var hull = vgap.getHull(ship.hullid);	
		if (hull.cancloak)
			missions.push("Cloak");
		else
			missions.push("Invalid");
        
        missions.push("Beam up Fuel");
        missions.push("Beam up Duranium");
        missions.push("Beam up Tritanium");
        missions.push("Beam up Molybdenum");
        missions.push("Beam up Supplies");
        
        if (ship.hullid == 1090)
            missions.push("Repair Ship");
        else
            missions.push("Invalid");
        
        if (ship.hullid == 70 && vgap.advActive(44))
        missions.push("Destroy Planet");
        else
            missions.push("Invalid");
        
        return missions;
        
    };
    
	set_cookie=function( name, value, exp_y, exp_m, exp_d, path, domain, secure )
//name=cookie name (required)
//value=cookie value (required)
//exp_y,M,d is expiration year, month, day (if blank cookie will delete when browser closes)
//path=path within site this applies to (can be blank)
//domain=apply only to websites in this domain (can be blank)
//secure=use SSL (leave blank)	

{
  var cookie_string = name + "=" + escape ( value );

  if ( exp_y )
  {
    var expires = new Date ( exp_y, exp_m, exp_d );
    cookie_string += "; expires=" + expires.toGMTString();
  }

  if ( path )
        cookie_string += "; path=" + escape ( path );

  if ( domain )
        cookie_string += "; domain=" + escape ( domain );
  
  if ( secure )
        cookie_string += "; secure";
  
  document.cookie = cookie_string;
};
	
    get_cookie =function( cookie_name )
    {
        var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
        
        if ( results )
            return ( unescape ( results[2] ) );
        else
            return null;
    };
 //====================FLEET FUNCTIONS=================================
buildFleetList2=function()
{
fleetNames2.length=0;
fleetFlagships2.length=0;
fleetSizes2.length=0;
showFleet.length=0;

for (var i = 0; i < vgap.myships.length; i++) 
	{
	if (vgap.myships[i].name.charAt(0)=='[')
		if 	(vgap.myships[i].name.indexOf(']')!=-1)
		{
			var name=vgap.myships[i].name.substring(1,vgap.myships[i].name.indexOf(']'));
			var position=fleetNames2.indexOf(name);
			if (position==-1) //fleet is new
				{
				fleetNames2.push(name);
				fleetFlagships2.push(vgap.myships[i].id);
				fleetSizes2.push(1);
				showFleet.push(false);
//				position=(fleetNames2.length)-1;//for testing only
				}
			else
				fleetSizes2[position]++;
			
			//alert(name+' '+fleetSizes2[position]);
		}
		//alert(vgap.myships[i].name.charAt(1));
	}
};

returnFleetName2 = function(ship)
{
if (ship.name.charAt(0)=='[')
	if 	(ship.name.indexOf(']')!=-1)
		return(ship.name.substring(1,ship.name.indexOf(']')));
return(-1)
};

returnFlagshipID2 = function(fleet_name)
{
var index=fleetNames2.indexOf(fleet_name);
return(fleetFlagships2[index]);
};

returnFleetSize2 = function(fleet_name)
{
var index=fleetNames2.indexOf(fleet_name);
return (fleetSizes2[index]);
};

var oldchangeShipName=vgapShipScreen.prototype.changeShipName;

vgapShipScreen.prototype.changeShipName =  function () {
oldchangeShipName.apply(this, arguments); 
buildFleetList2();
};

var oldprocessLoad=vgaPlanets.prototype.processLoad;

vgaPlanets.prototype.processLoad = function (result){
oldprocessLoad.apply(this,arguments);
buildFleetList2();
};


//================END FLEET FUNCTIONS=================================
    //====================FUEL FUNCTIONS==================================
checkFuel = function(ship)
{
var fuel=0;
var path = vgap.getPath(ship);
for (var i = 0; i < path.length; i++) {
	if (vgaPlanets.prototype.version<3)
            fuel += getFuelUsage2(ship,path[i].x1, path[i].y1, path[i].x2, path[i].y2);
	else 	
			fuel += getFuelUsage3(ship,path[i].x1, path[i].y1, path[i].x2, path[i].y2);
       }
        if (fuel == 0)
            fuel += cloakedFuel(ship);
return(fuel);
};

cloakedFuel = function (ship) {
        var hull = vgap.getHull(ship.hullid);
        if ((ship.mission == 9 || (vgap.player.raceid == 3 && ship.mission == 8 && hull.cancloak)) && ship.hullid != 29 && ship.hullid != 31)
            return Math.max(5, Math.floor((hull.mass / 100) * 5));
        else
            return 0;
    };

turnFuel2 = function (distance, mass, xv, turndistance,ship) {
        return Math.floor(xv * Math.floor(mass / 10) * ((Math.floor(distance) / turndistance) / 10000)) + cloakedFuel(ship);
    },
	
	
getFuelUsage2 =  function (ship, x1, y1, x2, y2) {
        var engine = vgap.getEngine(ship.engineid);
        var distance = vgap.map.getDist(x1, y1, x2, y2);

        if (ship.warp == 0)
            return 0;

        var xv = 0;
        switch (ship.warp) {
            case 1:
                xv = engine.warp1;
                break;
            case 2:
                xv = engine.warp2;
                break;
            case 3:
                xv = engine.warp3;
                break;
            case 4:
                xv = engine.warp4;
                break;
            case 5:
                xv = engine.warp5;
                break;
            case 6:
                xv = engine.warp6;
                break;
            case 7:
                xv = engine.warp7;
                break;
            case 8:
                xv = engine.warp8;
                break;
            case 9:
                xv = engine.warp9;
                break;
        }
        //Save fuel value to update during the calculation
        var currentfuel = ship.neutronium;

        var fuel = 0;
        var turndistance = vgap.getSpeed(ship.warp, ship.hullid);

        var distanceremaining = distance;
        var mass = vgapShipScreen.prototype.getMass(ship, true);

        //tow
        if (ship.mission == 6 && ship.mission1target != 0) {
            var towship = vgap.getShip(ship.mission1target);
            if (towship != null)
                mass += vgapShipScreen.prototype.getMass(towship, true);
        }

        var warp = ship.warp;
        while (distanceremaining > turndistance) {
            distanceremaining -= turndistance;
            var turnfuel = turnFuel2(turndistance, mass, xv, turndistance,ship);
            fuel += turnfuel;
            ship.neutronium -= turnfuel;
            if (ship.neutronium < 0) {
                turnfuel = ship.neutronium;
                ship.neutronium = 0;
            }
            mass -= turnfuel;
            var pa = vgap.planetAt(x2, y2);
            if (distanceremaining < 3 && pa != null) {
                distanceremaining = 0;
            }
        }
        if (distanceremaining > 0)
            fuel += turnFuel2(distanceremaining, mass, xv, turndistance,ship);

        //Return fuel back to correct value
        ship.neutronium = currentfuel;

        return fuel;
    }
	
	getFuelUsage3 =  function (ship, x1, y1, x2, y2) {
        var engine = vgap.getEngine(ship.engineid);
        var distance = Math.dist(x1, y1, x2, y2);

        if (ship.warp == 0)
            return 0;

        if (vgap.isHyping(ship))
            return 50;

        var xv = vgap.getXV(engine, ship.warp);

        //Save fuel value to update during the calculation
        var currentfuel = ship.neutronium;

        var fuel = 0;
        var turndistance = vgap.getSpeed(ship.warp, ship.hullid);

        var distanceremaining = distance;
        var mass = vgap.getMass(ship, true);

        //tow
        if (ship.mission == 6 && ship.mission1target != 0) {
            var towship = vgap.getShip(ship.mission1target);
            if (towship != null)
                mass += vgap.getMass(towship, true);
        }

        var warp = ship.warp;
        while (distanceremaining > turndistance) {
            distanceremaining -= turndistance;
            var turnfuel = vgap.turnFuel(turndistance, mass, xv, turndistance, vgap.cloakFuel(ship));
            fuel += turnfuel;
            ship.neutronium -= turnfuel;
            if (ship.neutronium < 0) {
                turnfuel = ship.neutronium;
                ship.neutronium = 0;
            }
            mass -= turnfuel;
            var pa = vgap.planetAt(x2, y2);
            if (distanceremaining < 3 && pa != null) {
                distanceremaining = 0;
            }
        }
        if (distanceremaining > 0)
            fuel += vgap.turnFuel(distanceremaining, mass, xv, turndistance, vgap.cloakFuel(ship));

        //Return fuel back to correct value
        ship.neutronium = currentfuel;

        return fuel;
    }
//==========================END FUEL FUNCTIONS=======================================
    
} //wrapper for injection

var script = document.createElement("script");
script.type = "application/javascript";
script.textContent = "(" + wrapper + ")();";

document.body.appendChild(script);