function ajaxRead(file)
{
  updateObj("Status", "Updating Data...");
  var xmlObj = null;
  if(window.XMLHttpRequest)
  {
    xmlObj = new XMLHttpRequest();
  } 
  else if(window.ActiveXObject)
  {
    xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
  } 
  else 
  {
    return;
  }
  xmlObj.onreadystatechange = function()
  {
    if(xmlObj.readyState == 4)
    {
       var value;
       var item;
   
       updateObj("Status", "Running...");

       item = "Ambient_Temp";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[0].firstChild.nodeValue);
       value = ((value*9)/5)+32
       value = value.toFixed(1);
       updateObj('Ambient_Temp', value);
       
       item = "Panel_Temp";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[1].firstChild.nodeValue);
       value = ((value*9)/5)+32
       value = value.toFixed(1);
       updateObj('Panel_Temp', value);

       item = "Building_Light";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[2].firstChild.nodeValue);
       totalpc = parseFloat(value);
       value = value.toFixed(1);
       updateObj(item, value);

       item = "Building_Light_Img";
       if (value == 0) speed = "0";
       else if (value < 3 ) speed = "1";
       else if (value < 5 ) speed = "2";
       else if (value < 7 ) speed = "3";
       else if (value < 8 ) speed = "4";
       else if (value < 10 ) speed = "5";
       else if (value < 13 ) speed = "6";
       else if (value < 15 ) speed = "7";
       else speed = "8"; 
       updateObjSrc(item, "windows"+speed+".jpg");      

       item = "Building_Heat";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[3].firstChild.nodeValue);
       totalpc = totalpc + parseFloat(value);
       value = value.toFixed(1);
       updateObj(item, value);
       
       item = "Building_Heat_Img";
       if (value == 0) speed = "no_heat";
       else speed = "neo_heat";
       updateObjSrc(item, speed+".gif");

       item = "Light_Intensity";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[4].firstChild.nodeValue);
       value = Math.round(value);
       updateObj(item, value);

       if (value > 2) image="sun_smile.jpg";
       else image="sun_sad.jpg";
       item = "Sun_Img";
       updateObjSrc(item, image);

       if (value == 0) speed = "0";
       else if (value < 100) speed = "1";
       else if (value < 200 ) speed = "2";
       else speed = "3"; 
       item = "Sunrays_Img";
       updateObjSrc(item, "sunrays"+speed+".gif");

       if (value == 0) speed = "0";
       else if (value < 150 ) speed = "1";
       else if (value < 200 ) speed = "2";
       else if (value < 250 ) speed = "3";
       else if (value < 600 ) speed = "4";
       else speed = "5"; 
       item = "Solar_Img";
       updateObjSrc(item, "solar_power"+speed+".gif");

       item = "Sun_Power";
       value = ((value * 8.75095)/1000);
       value = value.toFixed(2);
       updateObj(item, value);

       item = "Solar_Production";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[5].firstChild.nodeValue);
       value = value / 1000;
       value = value.toFixed(2);
       totalpp = parseFloat(value);
       updateObj(item, value);

       item = "Wind_Speed";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[6].firstChild.nodeValue);
       value = Math.round(value);
       updateObj(item, value);

       if (value < 1) speed = "0";
       else if (value < 6 ) speed = "1";
       else if (value < 12 ) speed = "2"; 
       else if (value < 18 ) speed = "3"; 
       else if (value < 24 ) speed = "4"; 
       else speed = "5"; 

       item = "Wind_Speed_Img";
       updateObjSrc(item, "wind_speed"+speed+".gif");

       windspeed = value;

       item = "Wind_Power";
       value = value;
       value = value.toFixed(2)/5;
       updateObj(item, value);

       item = "Wind_Production";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[8].firstChild.nodeValue);
       value = value / 1000;
       if (value < 0) value = 0;
       value = value.toFixed(2);
       totalpp = totalpp + parseFloat(value);
       updateObj(item, value);

       windproduction = value;

       if ((windspeed < 8) && (windproduction < 0.01)) speed = "0";
       else if (windspeed < 10 ) speed = "1";
       else if (windspeed < 15 ) speed = "2"; 
       else if (windspeed < 20 ) speed = "3"; 
       else if (windspeed < 25 ) speed = "4"; 
       else speed = "5"; 

       item = "Wind_Generator_Img";
       updateObjSrc(item, "wind_generator"+speed+".gif");

       item = "Wind_Direction";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[7].firstChild.nodeValue);
       value = Math.round(value);
       if (value <45) value = "N";
       else if (value <90) value = "NE";
       else if (value <135) value = "E";
       else if (value <180) value = "SE";
       else if (value <225) value = "S";
       else if (value <270) value = "SW";
       else if (value <315) value = "W";
       else if (value <360) value = "NW";
       updateObj(item, value);
       
       item = "Wind_Direction_Img";
       updateObjSrc(item, "compass_"+value+".jpg");

       item = "Solar_Production_Month";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[9].firstChild.nodeValue);
       value = value.toFixed(2);
       value = addCommas(value);
       updateObj(item, value);

       item = "Solar_Production_Year";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[10].firstChild.nodeValue);
       totalyp = parseFloat(value);
       value = value.toFixed(2);
       value = addCommas(value);
       updateObj(item, value);

       item = "Wind_Production_Month";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[11].firstChild.nodeValue);
       value = addCommas(value);
       updateObj(item, value);

       item = "Wind_Production_Year";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[12].firstChild.nodeValue);
       totalyp = totalyp + parseFloat(value);
       value = value.toFixed(2);
       value = addCommas(value);
       updateObj(item, value);

       item = "Building_Light_Month";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[13].firstChild.nodeValue);
       value = value / 1000;
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);

       item = "Building_Light_Year";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[14].firstChild.nodeValue);
       value = value / 1000;
       totalyc = parseFloat(value);
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);
       
       item = "Building_Heat_Month";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[15].firstChild.nodeValue);
       value = value / 1000;
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);

       item = "Building_Heat_Year";
       value = Number(xmlObj.responseXML.getElementsByTagName('value')[16].firstChild.nodeValue);
       value = value / 1000;
       totalyc = totalyc + parseFloat(value);
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);

       item = "Total_Year_Consumption";
       value = totalyc;
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);       

       item = "Total_CO2_Produced";
       value = parseFloat(totalyc);
       value = value * 1.839;
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);       

       item = "Total_Year_Produced";
       value = totalyp;
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);       

       item = "Total_CO2_Saved";
       value = parseFloat(totalyp);
       value = value * 1.839;
       value = value.toFixed(0);
       value = addCommas(value);
       updateObj(item, value);       

       item = "Total_Power_Consumption";
       value = totalpc;
       if (value < 0) value = 0;
       value = value.toFixed(2);
       value = addCommas(value);
       updateObj(item, value);       

       item = "Total_Power_Produced";
       value = totalpp;
       value = value.toFixed(2);
       value = addCommas(value);
       updateObj(item, value);       

       item = "Stoplight_Img";
       value = totalpp - totalpc;
       if (value > 0) file = "light_green";
       if (value > -5) file = "light_yellow";
       else file = "light_red"; 
       updateObjSrc(item, file+".jpg");

    }
  }
  xmlObj.open ('GET', file, true);
  xmlObj.setRequestHeader("Cache-Control", "no-cache");
  xmlObj.setRequestHeader("If-Modified-Since", "Wed, 31 Dec 1980 00:00:00 GMT");
  xmlObj.setRequestHeader("Expires", "Wed, 31 Dec 1980 00:00:00 GMT");
  xmlObj.setRequestHeader("Connection", "close"); 
  xmlObj.send ('');
  setTimeout(refreshData,30000);
}

function updateObj(obj, data)
{
  if(document.getElementById(obj)) document.getElementById(obj).firstChild.data = data;
}

function updateObjSrc(obj, src)
{
  if(document.getElementById(obj)) document.getElementById(obj).src = src;
}

function addCommas(nStr)
{
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) 
  {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1 + x2;
}

  function refreshData()
  {
        ajaxRead('/cgi-bin/wolf-ridge/wr_feed.xml');
  }


