<?php
// Great Circe Distance calculation from RJM Programming  
// November 2013
// Thanks to:
//   http://en.wikipedia.org/wiki/Great-circle_distance (formulae)
//   http://stackoverflow.com/questions/11832914/round-up-to-2-decimal-places-in-javascript (rounding)
//   http://www.mredkj.com/javascript/nfbasic.html (commas for thousands)
//   https://www.google.com.au/search?q=%22katmandu%22&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:official&client=firefox-a&gfe_rd=ctrl&ei=hk-QUriHM8qN8QeQzIDoDQ&gws_rd=cr#q=%22katmandu+latitude%22&rls=org.mozilla:en-US%3Aofficial (Katmandu positioning)
$ilatd = "<select onclick='ca();' id='latd'><option value='+27.9861'>+27.9861 Degrees</option>";
$ilatm = "<select onclick='ca();' id='latm'><option value='0.0'>Minutes</option>";
$ilats = "<select onclick='ca();' id='lats'><option value='0.0'>Seconds</option>";
$ilongd = "<select onclick='ca();' id='longd'><option value='+86.9230'>+86.9230 Degrees</option>";
$ilongm = "<select onclick='ca();' id='longm'><option value='0.0'>Minutes</option>";
$ilongs = "<select onclick='ca();' id='longs'><option value='0.0'>Seconds</option>";
$jlatd = "<select onclick='ca();' id='tald'><option value='+27.9861'>+27.9861 Degrees</option>";
$jlatm = "<select onclick='ca();' id='talm'><option value='0.0'>Minutes</option>";
$jlats = "<select onclick='ca();' id='tals'><option value='0.0'>Seconds</option>";
$jlongd = "<select onclick='ca();' id='gnold'><option value='+86.9230'>+86.9230 Degrees</option>";
$jlongm = "<select onclick='ca();' id='gnolm'><option value='0.0'>Minutes</option>";
$jlongs = "<select onclick='ca();' id='gnols'><option value='0.0'>Seconds</option>";
for ($ilat=-90; $ilat <= -1; $ilat++) {
   $ilatd .= "<option value='" . $ilat . ".0'>" . $ilat . "</option>";
   $jlatd .= "<option value='" . $ilat . ".0'>" . $ilat . "</option>";
}
for ($ilat=0; $ilat <= 90; $ilat++) {
   $ilatd .= "<option value='+" . $ilat . ".0'>+" . $ilat . "</option>";
   $jlatd .= "<option value='+" . $ilat . ".0'>+" . $ilat . "</option>";
   if ($ilat <= 59) {
    $ilatm .= "<option value='" . $ilat . ".0'>" . $ilat . "</option>";
    $ilats .= "<option value='" . $ilat . ".0'>" . $ilat . "</option>";
    $jlatm .= "<option value='" . $ilat . ".0'>" . $ilat . "</option>";
    $jlats .= "<option value='" . $ilat . ".0'>" . $ilat . "</option>";
   }
}
for ($ilong=-180; $ilong <= -1; $ilong++) {
   $ilongd .= "<option value='" . $ilong . ".0'>" . $ilong . "</option>";
   $jlongd .= "<option value='" . $ilong . ".0'>" . $ilong . "</option>";
}
for ($ilong=0; $ilong <= 180; $ilong++) {
   $ilongd .= "<option value='+" . $ilong . ".0'>+" . $ilong . "</option>";
   $jlongd .= "<option value='+" . $ilong . ".0'>+" . $ilong . "</option>";
   if ($ilong <= 59) {
    $ilongm .= "<option value='" . $ilong . ".0'>" . $ilong . "</option>";
    $ilongs .= "<option value='" . $ilong . ".0'>" . $ilong . "</option>";
    $jlongm .= "<option value='" . $ilong . ".0'>" . $ilong . "</option>";
    $jlongs .= "<option value='" . $ilong . ".0'>" . $ilong . "</option>";
   }
}
$ilatd .= "</select>";
$ilongd .= "</select>";
$ilatm .= "</select>";
$ilongm .= "</select>";
$ilats .= "</select>";
$ilongs .= "</select>";
$jlatd .= "</select>";
$jlongd .= "</select>";
$jlatm .= "</select>";
$jlongm .= "</select>";
$jlats .= "</select>";
$jlongs .= "</select>";

?>
<html>
<head>
<title>Distance on Earth via Latitude and Longitude via RJM Programming</title>
<meta name="viewport" content="width=device-width; initial-scale=1; maximum-scale=1" />
<script>
function ca() {
  var mya=document.getElementById("mya");
  mya.innerHTML = "Calculate this Earth Distance";
  mya.style.borderColor = "red";
  mya.style.backgroundColor = "yellow";
}

function anothergo() {
  var latd=document.getElementById("latd");
  var latm=document.getElementById("latm");
  var lats=document.getElementById("lats");
  var longd=document.getElementById("longd");
  var longm=document.getElementById("longm");
  var longs=document.getElementById("longs");

  var tald=document.getElementById("tald");
  var talm=document.getElementById("talm");
  var tals=document.getElementById("tals");
  var gnold=document.getElementById("gnold");
  var gnolm=document.getElementById("gnolm");
  var gnols=document.getElementById("gnols");


  var latsign = "+";
  if (latd.value.replace("-", "") != latd.value) latsign = "-";
  var longsign = "+";
  if (longd.value.replace("-", "") != longd.value) longsign = "-";
  var alat = eval(latd.value);
  alat = Math.abs(alat);
  var alatsuffix = 0;
  var along = eval(longd.value);
  along = Math.abs(along);
  var alongsuffix = 0;
  if (latm.value != "0" || lats.value != "0") {
    alatsuffix = eval((latm.value) / 60.0);
    alatsuffix = eval(alatsuffix + (lats.value) / 3600.0);
  } else if (latd.value.replace(".", "") != latd.value) {
    alatsuffix = 0;
  }
  if (longm.value != "0" || longs.value != "0") {
    alongsuffix = eval((longm.value) / 60.0);
    alongsuffix = eval(alongsuffix + (longs.value) / 3600.0);
  } else if (longd.value.replace(".", "") != longd.value) {
    alongsuffix = 0;
  }
  
  var lata = eval(alatsuffix + alat);
  var latis=prompt("Please enter decimal degrees of Latitude 1", latsign + lata);
  var xlatis = latis.replace("-", "").replace("+", "");
  if (xlatis == latis) latis = "+" + latis;
  var longa = eval(alongsuffix + along);
  var longis=prompt("Please enter decimal degrees of Longitude 1", longsign + longa);
  var xlongis = longis.replace("-", "").replace("+", "");
  if (xlongis == longis) longis = "+" + longis;
  

  latsign = "+";
  if (tald.value.replace("-", "") != tald.value) latsign = "-";
  longsign = "+";
  if (gnold.value.replace("-", "") != gnold.value) longsign = "-";
  alat = eval(tald.value);
  alat = Math.abs(alat);
  alatsuffix = 0;
  along = eval(gnold.value);
  along = Math.abs(along);
  alongsuffix = 0;
  if (talm.value != "0" || tals.value != "0") {
    alatsuffix = eval((talm.value) / 60.0);
    alatsuffix = eval(alatsuffix + (tals.value) / 3600.0);
  } else if (tald.value.replace(".", "") != tald.value) {
    alatsuffix = 0;
  }
  if (gnolm.value != "0" || gnols.value != "0") {
    alongsuffix = eval((gnolm.value) / 60.0);
    alongsuffix = eval(alongsuffix + (gnols.value) / 3600.0);
  } else if (gnold.value.replace(".", "") != gnold.value) {
    alongsuffix = 0;
  }
  
  var tala = eval(alatsuffix + alat);
  var talis=prompt("Please enter decimal degrees of Latitude 2", latsign + tala);
  var xtalis = talis.replace("-", "").replace("+", "");
  if (xtalis == talis) talis = "+" + talis;
  var gnola = eval(alongsuffix + along);
  var gnolis=prompt("Please enter decimal degrees of Longitude 2", longsign + gnola);
  var xgnolis = gnolis.replace("-", "").replace("+", "");
  if (xgnolis == gnolis) gnolis = "+" + gnolis;
  
  var ourdist=0.0;
  //alert(1);
  var rgnol=eval((gnolis)*Math.PI/180.0);
  var rtal=eval((talis)*Math.PI/180.0);
  var rlong=eval((longis)*Math.PI/180.0);
  var rlat=eval((latis)*Math.PI/180.0);
  //alert(rtal);
  
  var deltalong = Math.abs(eval(((gnolis)-(longis))*Math.PI/180.0));
  //alert(rlat);
  var acof = Math.sin(rtal)*Math.sin(rlat)+Math.cos(rtal)*Math.cos(rlat)*Math.cos(deltalong); // via http://en.wikipedia.org/wiki/Great-circle_distance ... thanks
  //alert(Math.sin(rtal)*Math.sin(rlat));
  ourdist = (Math.round((Math.acos(acof) * 6371000.0) + 0.00001) * 100) / 100;
  //alert(Math.acos(Math.sin(rtal)*Math.sin(rlat)));
  var mya=document.getElementById("mya");
  //alert(111111);
  mya.innerHTML = "Earth Distance Calculated is " + addInCommas(ourdist) + "m";

  var oif=document.getElementById("oif");
  var latbitmore = "";
  var longbitmore = "";
  if (xlatis.replace(".", "") == xlatis) latbitmore = ".0";
  if (xlongis.replace(".", "") == xlongis) longbitmore = ".0";
  //alert("https://maps.google.com/maps?saddr=" + latis + "," + longis + "&daddr=" + talis + "," + gnolis);
  //oif.innerHTML = '<iframe width="940px;" height="550px;" id="if" src="' + "https://maps.google.com/maps?saddr=" + latis + "," + longis + "&daddr=" + talis + "," + gnolis + '" title="Thanks Google Maps"></iframe>';
  window.open("https://maps.google.com/maps?saddr=" + latis + "," + longis + "&daddr=" + talis + "," + gnolis, "_blank", "left=0,top=300,width=950,height=460");
}


function addInCommas(nStrIn) { // thanks to http://www.mredkj.com/javascript/nfbasic.html
	nStrIn += '';
	var ox = nStrIn.split('.');
	var ox1 = ox[0];
	var ox2 = ox.length > 1 ? '.' + ox[1] : '';
	var orgx = /(\d+)(\d{3})/;
	while (orgx.test(ox1)) {
		ox1 = ox1.replace(orgx, '$1' + ',' + '$2');
	}
	return ox1 + ox2;
}
</script>
</head>
<body>
<table style="background-color: lightblue;">
<tr><td style="border: solid 3px green; padding: 3px 3px 3px 3px;">
<a id='mya' style="border: solid 2px white; padding: 2px 2px 2px 2px;" onclick='anothergo();' title='Another distance calculation?' href='#'>Another distance calculation?  </a><br>
<hr></hr> Latitude 1: <?php echo $ilatd; ?><?php echo $ilatm; ?><?php echo $ilats; ?> Longitude 1: <?php echo $ilongd; ?></select><?php echo $ilongm; ?><?php echo $ilongs; ?> 
<br> Latitude 2: <?php echo $jlatd; ?><?php echo $jlatm; ?><?php echo $jlats; ?> Longitude 2: <?php echo $jlongd; ?></select><?php echo $jlongm; ?><?php echo $jlongs; ?> 
</td></tr><tr><td id="oif">
</td></tr></table>
</body>
</html>
