// Magic Trikes USA
// Specifications and Performance Calculation
// Imported by products.html

var maxwt = 518;   // M.A.U.W, lb
var trikewt = 81;  // Trike without wing, engine, instruments

area = new Array (2);  // Wing area, ft^2
  area[0] = "";  // Without wing
  area[1] = 151; // Spirit
  area[2] = 140; // Laser

span = new Array (2);  // Wing span, ft
  span[0] = "";   // Without wing
  span[1] = 32.2; // Spirit
  span[2] = 32.4; // Laser

dblsurface = new Array (2);  // Wing double surface, %
  dblsurface[0] = ""; // Without wing
  dblsurface[1] = 35; // Spirit
  dblsurface[2] = 90; // Laser

wingwt = new Array (2); // Wing weight, lb
  wingwt[0] =  0; // Without wing
  wingwt[1] = 74; // Spirit
  wingwt[2] = 79; // Laser

stall = new Array (2);  // Stall speed, mph
  stall[1] = 24; // Spirit
  stall[2] = 26; // Laser

sink = new Array (2);  // Power off sink, fpm
  sink[1] = 438; // Spirit
  sink[2] = 427; // Laser

wt0 = new Array (2);  // weight at which sink was measured
  wt0[1] = 398; // Spirit
  wt0[2] = 403; // Laser

wingpix = new Array (2);   // wing option pictures
  wingpix[0] = "not_including_wing";
  wingpix[1] = "DSC_0178"; // Spirit
  wingpix[2] = "DSCF0371"; // Laser

maxspeed = new Array (2); // Max level speed, mph
  maxspeed[0] = "";
  maxspeed[1] = 50; // Spirit
  maxspeed[2] = 63; // Laser

takeofft = new Array (2); // Takeoff distance, ft
  takeofft[1] = 80;  // Spirit
  takeofft[2] = 145; // Laser

hp = new Array (6);  // Engine power output, hp
  hp[0] = "";
  hp[1] = 28; // Mini 2 Plus
  hp[2] = 33; // Mini 3
  hp[3] = 40; // Rotax 447
  hp[4] = 44; // Victor 1
  hp[5] = 48; // Victor 1 Plus

burn = new Array (6);  // Fuel Burn at cruise, gph
  burn[1] = 1.7; // Mini 2 Plus
  burn[2] = 1.7; // Mini 3
  burn[3] = 2.9; // Rotax 447
  burn[4] = 2.1; // Victor 1
  burn[5] = 2.1; // Victor 1 Plus

enginewt = new Array (6);  // Trike weight, lb
  enginewt[0] =  0; // Without engine
  enginewt[1] = 34; // Mini 2 Plus
  enginewt[2] = 44; // Mini 3
  enginewt[3] = 91; // Rotax 447
  enginewt[4] = 71; // Victor 1
  enginewt[5] = 71; // Victor 1 Plus

enginepix = new Array (6);  // Engine option pictures
  enginepix[0] = "not_including_engine";
  enginepix[1] = "DSCN3697"; // Mini 2 Plus
  enginepix[2] = "DSCN3697"; // Mini 3
  enginepix[3] = "DSCF0426"; // Rotax 447
  enginepix[4] = "DSCN3675"; // Victor 1
  enginepix[5] = "DSCN3675"; // Victor 1 Plus

cruise = new Array (12); // cruise speed, mph
  cruise[7]  = 36; // Spirit, Mini 2 Plus
  cruise[8]  = 38; // Spirit, Mini 3
  cruise[9]  = 38; // Spirit, Rotax 447
  cruise[10] = 38; // Spirit, Victor 1
  cruise[11] = 38; // Spirit, Victor 1 Plus
  cruise[13] = 38; // Laser, Mini 2 Plus
  cruise[14] = 40; // Laser, Mini 3
  cruise[15] = 42; // Laser, Rotax 447
  cruise[16] = 42; // Laser, Victor 1
  cruise[17] = 42; // Laser, Victor 1 Plus

propwt = new Array (18); // propeller weight
  propwt[7]  = 3; // 2-blade wood, Mini 2 Plus
  propwt[8]  = 4; // 2-blade wood, Mini 3
  propwt[9]  = 5; // 2-blade wood, Rotax 447
  propwt[10] = 5; // 2-blade wood, Victor 1
  propwt[11] = 5; // 2-blade wood, Victor 1 Plus
  propwt[13] = 4; // 3-blade carbon, Mini 2 Plus
  propwt[14] = 5; // 3-blade carbon, Mini 3
  propwt[15] = 6; // 3-blade carbon, Rotax 447
  propwt[16] = 6; // 3-blade carbon, Victor 1
  propwt[17] = 6; // 3-blade carbon, Victor 1 Plus

propeff = new Array (18); // propeller efficiency
  propeff[7] = 0.486; // 2-blade wood, Mini 2 Plus
  propeff[8] = 0.49;  // 2-blade wood, Mini 3
  propeff[9] = 0.5;  // 2-blade wood, Rotax 447
  propeff[10] = 0.5;  // 2-blade wood, Victor 1
  propeff[11] = 0.5;  // 2-blade wood, Victor 1 Plus
  propeff[13] = 0.54; // 3-blade carbon, Mini 2 Plus
  propeff[14] = 0.54; // 3-blade carbon, Mini 3
  propeff[15] = 0.55; // 3-blade carbon, Rotax 447
  propeff[16] = 0.55; // 3-blade carbon, Victor 1
  propeff[17] = 0.55; // 3-blade carbon, Victor 1 Plus

instrumentwt = new Array (3);   // instrument weight
  instrumentwt[0] = 0; // No instruments
  instrumentwt[1] = 0; // Analog instruments
  instrumentwt[2] = 1; // Digital instruments

instrumentpix = new Array (3);   // instrument option pictures
  instrumentpix[0] = "not_including_instruments";
  instrumentpix[1] = "DSCN3701"; // Analog instruments
  instrumentpix[2] = "DSCN3684"; // Digital instruments

function emptywt(w,e,i) {
  return trikewt + wingwt[w] + enginewt[e] + propwt[6*p1+1*e1] + instrumentwt[i];
}

function Rankine (T) { // Rankine temperature
  return 1*T+459.67; }
  // T = air temperature, degrees F

function SP(pb,alt) { // Static air pressure, inHg
  return pb*Math.pow((1-alt/145441),5.256)
  }
  // pb = Barometer pressure setting, inHg
  // alt = True Altitude, ft

function RD(p,t) { // Relative Density
  return p/29.92*Rankine(59)/Rankine(t);
  }

function DA(rd) { // Density Altitude, ft
  return 145426*(1-Math.pow(rd,0.235));
  }
  
function climb(eff,hp,wt,wt0,sink,rd) { // rate of climb, ft/min
  var rd0=0.4; //relative density where power reaches zero (guess)
  return 33000*eff*hp/wt*(rd-rd0)/(1-rd0)-sink*Math.sqrt(wt/(wt0*rd));
  }
  // eff = propeller efficiency = 0.4785 for Mini 2 Plus
  // sink = power off sink at RD=1 and measured conditions = 438 ft/min for Spirit

function takeoff(climb,td,rd) { // takeoff distance, ft
  var ct = 970;    // climb at test conditions 
  var rd0 = 0.945; // relative density at test conditions
  if (climb<30) {return "---";}
  return Math.round(td*(ct/climb)*(rd0/rd));
  }
// climb = rate of climb, ft/min

// global variables not included in price.js
  var ewt1;    // empty weight
  var hp1;     // engine horsepower

function calc_perf() { // Calculate performance and print results
  var pform=document.perf;

// Calculate the results

  ewt1=emptywt(w1,e1,i1);	// empty weight
  hp1=hp[e1];			// engine horsepower

  var p2=pform.pilot.value;       // pilot weight, lb
  var a2=pform.altitude.value;    // altitude, ft
  var t2=pform.temperature.value; // temperature, F
  var b2=pform.barometer.value;   // Barometric Pressure reduced to SL, inHg

  var sp = SP(b2,a2);    // Static air pressure, inHg
  var rd = RD(sp,t2);    // Relative Density
  var densalt = DA(rd);  // Density Altitude, ft
  var propeff2 = propeff[6*p1+1*e1];
  var twt = ewt1+30+1*p2; // total weight

  var stall1 = stall[w1]*Math.sqrt(twt/wt0[w1]);
  var cruise1 = cruise[6*w1+1*e1]*Math.sqrt(twt/wt0[w1]);

  var climb2 = climb(propeff2,hp1,twt,wt0[w1],sink[w1],rd);
  var takeoff2 = takeoff(climb2,takeofft[w1],rd);
  var burn2 = burn[e1];
  var duration = 5/burn2;
  var range = duration*cruise1;

// Print the results
  pform.densalt.value=Math.round(densalt);    
  pform.twt.value=twt;    
  pform.stall.value=Math.round(stall1);    
  pform.cruise.value=Math.round(cruise1);    
  pform.climb.value=Math.round(climb2);    
  pform.takeoff.value=takeoff2;    
  pform.cons.value=burn2;    
  pform.duration.value=round(duration,0.1);    
  pform.range.value=Math.round(range);    
}

