function getXMLHttp()
{
  var xmlHttp

  try
  {
    //Firefox, Opera 8.0+, Safari
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    //Internet Explorer
    try
    {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
      try
      {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e)
      {
        // No AJAX
        return false;
      }
    }
  }
  return xmlHttp;
}

function MakeRequest(weather)
{
  var xmlHttp = getXMLHttp();
  var curTime = new Date().getTime();
 
  if (xmlHttp !== false)
    {
    xmlHttp.onreadystatechange = function()
    {
      if(xmlHttp.readyState == 4)
      {
        HandleResponse(xmlHttp.responseText, weather);
      }
    }

    xmlHttp.open("GET", "ajax.php?do=" + weather + "&" + curTime, true);
    xmlHttp.send(null);
  }
}

function HandleResponse(response, weather)
{
  var data = new Array();
  data = response.split(',');

  switch (weather) {

    case 'wind':
      document.getElementById("wind").innerHTML = data[0];
      document.getElementById("windavg").innerHTML = data[2];
      document.getElementById("gust").innerHTML = data[3];
      document.getElementById("windhigh").innerHTML = data[5];
      document.getElementById('direction').innerHTML = data[7];
      if (data[9] != "none")
      {
        document.getElementById("dominant").innerHTML = "<dd>Dominant: <span class=blue>" + data[9] + "</span> degrees";
      } else {
        document.getElementById("dominant").innerHTML = "";
      }

      // wind speed
      if (data[0] != data[1] || data[3] != data[4] || data[5] != data[6])
      {
        document.images['speed'].src = "speed.php?speed=" + data[0] + "&high=" + data[5] + "&gust=" + data[3];
      }

      // wind direction
      if (data[7] != data[8] || data[9] != data[10])
      {
        document.images['direction'].src = "direction.php?direction=" + data[7] + "&dominant=" + data[9];
      }

      break;

    case 'minute':
      document.getElementById("date").innerHTML = data[0];
      document.getElementById("temp").innerHTML = data[1];
      if (data[3] != "")
      {
        document.getElementById("index").innerHTML = "<dd>Heat Index: <span class=normal>" + data[3] + "</span> F";
      }
      if (data[4] != "")
      {
        document.getElementById("index").innerHTML = "<dd>Wind Chill: <span class=normal>" + data[4] + "</span> F";
      }
      if (data[3] == "" && data[4] == "")
      {
        document.getElementById("index").innerHTML = "";
      }
      document.getElementById("high").innerHTML = data[5];
      document.getElementById("low").innerHTML = data[7];
      document.getElementById("hum").innerHTML = data[9];
      document.getElementById("dew").innerHTML = data[11];
      document.getElementById("rain").innerHTML = data[12];
      document.getElementById("rainmonth").innerHTML = data[14];
      document.getElementById("monthlyrain").innerHTML = data[14];
      document.getElementById("rainyear").innerHTML = data[15];
      document.getElementById("bar").innerHTML = data[16];
      document.getElementById("bardelta").innerHTML = data[18];

      // temperature
      if (data[1] != data[2] || data[5] != data[6] || data[7] != data[8])
      {
        document.images['temp'].src = "temp.php?temperature=" + data[1] + "&high=" + data[5] + "&low=" + data[7];
      }

      // humidity
      if (data[9] != data[10])
      {
        document.images['hum'].src = "hum.php?humidity=" + data[9];
      }

      // rain
      if (data[12] != data[13])
      {
        document.images['rain'].src = "rain.php?rain=" + data[12];
      }

      // barometer
      if (data[16] != data[17] || data[18] != data[19])
      {
        document.images['pressure'].src = "pressure.php?pressure=" + data[16] + "&delta=" + data[18];
      }

      // new day?
      if (data[20] == "x")
      {
        MakeRequest("yesterday");
      }

      break;

    case 'forecast':
      document.getElementById("forecast").innerHTML = response;
      break;

    case 'moon':
      document.getElementById("pom").innerHTML = "<dd><span class=normal>" + data[0] + "</span>\n";
      if (data[1] != "")
      {
        document.getElementById("pom").innerHTML += "<dd><span class=normal>(" + data[1] + "</span>\n";
      }
      break;

    case 'yesterday':
      document.getElementById("yd1").innerHTML = data[0];
      document.getElementById("yd2").innerHTML = data[0];
      document.getElementById("yd3").innerHTML = data[0];
      document.getElementById("yd4").innerHTML = data[0];
      document.getElementById("yd5").innerHTML = data[0];
      document.getElementById("yhightemp").innerHTML = data[1];
      document.getElementById("ylowtemp").innerHTML = data[2];
      document.getElementById("yhighhumidity").innerHTML = data[3];
      document.getElementById("ylowhumidity").innerHTML = data[4];
      document.getElementById("yhighpressure").innerHTML = data[5];
      document.getElementById("ylowpressure").innerHTML = data[6];
      document.getElementById("ywind").innerHTML = data[7];
      document.getElementById("yrain").innerHTML = data[8];
      document.getElementById("sun").innerHTML = data[9];
      break;

  }
}

function UpdateGraphs()
{
  var curTime = new Date().getTime();
  document.images['tempgraph'].src = "tempgraph.php" + "?" + curTime;
  document.images['humgraph'].src = "humgraph.php" + "?" + curTime;
  document.images['windgraph'].src = "windgraph.php" + "?" + curTime;
  document.images['directiongraph'].src = "directiongraph.php" + "?" + curTime;
  document.images['raingraph'].src = "raingraph.php" + "?" + curTime;
  document.images['pressuregraph'].src = "pressuregraph.php" + "?" + curTime;
}

function RunUpdates()
{
  // update wind every 10 seconds
  MakeRequest("wind");

  // update the rest of the top stats every minute
  if (count % 6 == 0)
  {
    MakeRequest("minute");
  }

  // update graphs every 5 minutes
  if (count % 30 == 0)
  {
    UpdateGraphs();
  }

  // update forecast every 15 minutes
  if (count % 90 == 0)
  {
    MakeRequest("forecast");
  }

  // update moon every 425.24 minutes
  if (count % 2551 == 0)
  {
    MakeRequest("moon");
  }

  // overflows at 2147483647, 680.5 years
  if (count > 2147355270)
  {
    count = 0;
  }
  count++;
}

function init()
{
  var xmlHttp = getXMLHttp();
 
  if (xmlHttp != false)
  {
    document.getElementById("updatetext").innerHTML = "Weather auto-updates.<br><br>";
    id = setInterval(RunUpdates, 10000);
  }
}

var count = 1;
var id;
window.onload = init;



