/*    Space gravity Pull Calculator
 *      Carlton Corbitt
 *     carltonsara.com     ccccrnr@gmail.com
 *   This is to take a distance in space from major celestrial bodies and give the force pulling from each
 */

var Earth_mas = 5.94918E24; // kg
var Earth_rad = 6360000;    // m
var Earth_orb = 149597887500; // m
var Earth_vel = 29783;     // m/s
var Moon_vel  = 1023000;   // m/s
var Moon_orb  = 384748000  // m
var Moon_mas  = 7.37E22 ;  // kg
var Moon_rad  = 1737100;   // m
var Mars_mas  = 6.4185E23; // kg
var Mars_rad  = 3389500;   // m
var Mars_orb  = 227939100000; // m
var Mars_vel  = 24130;     // m/s
var Venus_vel = 35020;     // m/s
var Venus_orb = 108210000000; // m
var Venus_mas = 4.8685E24; // kg
var Venus_rad = 6051800;   // m
var Sun_mas   = 1.9891E30; // kg
var Sun_rad   = 695500000; // m
var Merc_mas  = 3.3022E23; // kg      
var Merc_rad  = 2439700;   // m        
var Merc_orb  = 57909100000; // m
var Merc_vel  = 47870;     //  m/s
var G         = 6.67428E-11;   // gravity constant  N*m^2 /kg^2 

var cel_body_list = [ 'Sun', 'Mercury', 'Venus', 'Earth', 'Mars', 'Moon/Luna' ];



function sgsetup() {   //  SpaceGrav Setup  - front end input display
 document.write("<p><center><table><tr align='center'><td colspan='2'>Units in SI(metric) except angles are selected below");
 document.write("<tr><td>Distance from the Earth <td><input name='setin' type='text'>");
 document.write("<tr><td> The mass of the Object   <td><input name='setin' type='text'> ");
 document.write("<tr><td>Angle Mercury is around Sun <td><input name='setin' type='text'> ");
 document.write("<tr><td>Angle Venus is around Sun from Earth <td><input name='setin' type='text'> ");
 document.write("<tr><td>Angle Object is around Earth from Sun in Ecliptic <td><input name='setin' type='text'> ");
 document.write("<tr><td>Angle Mars is around Sun from Earth <td><input id='setin' type='text'> ");
 document.write("<tr><td>Angle moon is around Earth from Sun <td><input id='setin' type='text'> ");
 document.write("<tr><td>Are angles in Degrees or Radians <td><select name='setin'><option value='degrees'> ");
   document.write("degrees<option value='radians'>radians</select> ");
 document.write("<tr align='center'><td colspan='2'><input type='button' value='Calculate pull to Each Celestial Body' onClick='gravpull()'> ");
 document.write("</table><br><img src='InnerPlanetsAng.JPG'></center> ");
}

      //   --------------   calculate the gravity pull for the inner planets
function gravpull() {
 var input = document.getElementsByName("setin");
 var lenin = input.length;
 if (input[lenin-1].value == 'degrees') {
   for(var i=2; i < (lenin-1); i++) {
      input[i].value = rad(input[i].value);
      if(input[i].value == NaN) { input[i].value = 0; }
   }                         //  input[lenin-1].value = "radians";
 }
 var ppull = new Array(5);
 var daa = new Array(5);
 for(var i=0; i<6; i++) {
    daa[i] = dist_bo_pl(input[0].value, i,input[4].value,input[i+1].value);
    ppull[i] = cbpull(daa[i][0], input[1].value, i);
 }
 var tain = input[lenin-1].value;
 document.close();
 document.write("<html><head><title>Space Gravity Pull</title><script src='/jscript/spacegrav.js'></script></head><body> ");
 sgsetup();
 document.write("<center><p><table boarder='2'><tr><td> Celestial Body <td> Distance <td> Angle to " + tain + " <td> Gravity Pull(Newton) ");
 for(var kk=0; kk<6; kk++) {
    if (tain == 'degrees'){ daa[kk][1] = degre(daa[kk][1]);  }
    document.write("<tr><td> " + cel_body_list[kk]+ " <td> "+ daa[kk][0] +" <td> " + daa[kk][1] +" <td> " + ppull[kk]); 
 }
 document.write("</table>  </center> " );
}
 
   // ----------------------   take degrees angle return radians
function rad(deg) {
   deg = deg * Math.PI / 180;
   return deg;
}

   //  ---------------------    tade radians return degrees
function degre(r) {
   r = r * 180 / Math.PI;
   if (r < 0) { r += 360; }
   r = Math.round(r * 10) / 10;
   return r;
}

   //   ------------------         take distance, mass, planet # return force of gravity
function cbpull( dis, weight, cbp ) {
  dis = eval(dis);
  switch (cbp) {
   case 0: var mas = Sun_mas;  var radius = Sun_rad  + dis; break;
   case 1: var mas = Merc_mas; var radius = Merc_rad + dis; break;
   case 2: var mas = Venus_mas; var radius= Venus_rad + dis; break;
   case 3: var mas = Earth_mas; var radius= Earth_rad + dis; break;
   case 4: var mas = Mars_mas; var radius = Mars_rad + dis;  break;
   case 5: var mas = Moon_mas; var radius = Moon_rad + dis;  break;
   default: return NaN;
  }
  weight = G * mas * weight / Math.pow(radius, 2);
  return weight;
}

    //     ---------------------    take distance, planet#, earth angle to body, and planet angle to sun
function dist_bo_pl(dis, cbp, eang, pang) {   // return of distance body from planet reference the earth in meter
  switch(cbp) {
    case 0: var dista = Math.sqrt(Math.pow(Earth_orb - dis*Math.cos(eang),2) + Math.pow(dis*Math.sin(eang),2));
            pang = Math.atan2(dis*Math.sin(eang), Earth_orb - dis*Math.cos(eang));
              return [dista, pang];
    case 1: var dista = Math.sqrt(Math.pow(Earth_orb-dis*Math.cos(eang)-Merc_orb*Math.cos(pang),2) + Math.pow(dis*Math.sin(eang)+Merc_orb*Math.sin(pang),2));
            pang = Math.atan2(dis*Math.sin(eang)+Merc_orb*Math.sin(pang), Earth_orb-dis*Math.cos(eang)-Merc_orb*Math.cos(pang));
              return [dista, pang];
    case 2: var dista = Math.sqrt(Math.pow(Earth_orb-dis*Math.cos(eang)-Venus_orb*Math.cos(pang),2) + Math.pow(dis*Math.sin(eang)+Venus_orb*Math.sin(pang),2));
            pang = Math.atan2(dis*Math.sin(eang)+Venus_orb*Math.sin(pang), Earth_orb-dis*Math.cos(eang)-Venus_orb*Math.cos(pang));
              return [dista, pang];
    case 3: return [dis, eang];
    case 4: var dista = Math.sqrt(Math.pow(Earth_orb-dis*Math.cos(eang)-Mars_orb*Math.cos(pang),2) + Math.pow(dis*Math.sin(eang)+Mars_orb*Math.sin(pang),2));
            pang = Math.atan2(dis*Math.sin(eang)+Mars_orb*Math.sin(pang), Earth_orb-dis*Math.cos(eang)-Mars_orb*Math.cos(pang));
              return [ dista, pang];
    case 5: var dista = dis = Math.sqrt(Math.pow(Moon_orb*Math.cos(pang) - dis*Math.cos(eang),2) + Math.pow(Moon_orb*Math.sin(pang)-dis*Math.sin(eang),2));
            pang = Math.atan2(Moon_orb*Math.sin(pang)-dis*Math.sin(eang), Moon_orb*Math.cos(pang) - dis*Math.cos(eang));
              return [ dista, pang];
  }
}
