// <![CDATA[

// Special thanks to: Kevin Reed http://www.tnetweather.com/
// Kevin was the first to decode the clientraw in PHP
// Special thanks to: Pinto http://www.joske-online.be/
// Pinto wrote the basic AJAX code for this page!
// Cheerfully borrowed from Tom at CarterLake.org and adapted by
// Ken True - Saratoga-weather.org  21-May-2006
// --- added flash-green on data update functions - Ken True  24-Nov-2006
//
// --- Version 2.00 - 13-Dec-2006 -- Ken True -repackaged AJAX function, added metric/english units
//     also included Mike Challis' counter script to display seconds since last update and error
//     handling for the fetch to fix to fix random error: NS_ERROR_NOT_AVAILABLE
//     Mike's site: http://www.carmosaic.com/weather/index.php
//     Thanks to FourOhFour on wxforum.net ( http://skigod.us/ ) for replacing all the
//     x.responseText.split(' ')[n] calls with a simple array lookup.. much better speed and
//     for his streamlined version of getUVrange.
// --- Version 2.01 - 17-Dec-2006 -- Corrected cloud height calculation
// --- Version 2.02 - 20-Dec-2006 -- added unescape to set_ajax_obs comparison for lastobs
// --- Version 2.03 - 07-Jan-2006 -- added wind m/s or km/h for metric variables
// --- Version 2.04 - 08-Jan-2006 -- use epoch time for get (thanks to johnnywx on WD forum)
//                                   so a numeric time without HTMLencoded characters is used
// --- Version 2.05a - 30-Jan-2006 -- added new 'anti-NaN' check from johnnywx to make sure full
//                                   clientraw.txt is read by looking for
//                                   '12345' at start and '!!' at end of record
// --- Version 2.06 - 24-Jun-2007 -- added '/' as delimiter for currentcond
// --- Version 2.07 - 21-Sep-2007 -- added support for dynamic thermometer.php display refresh
//
// for updates to this script, see http://saratoga-weather.org/scripts-WD-AJAX.php
// announcements of new versions will be on weather-watch.com and wxforum.net

// -- begin settings --------------------------------------------------------------------------
var flashcolor = '#00CC00'; // color to flash for changed observations RGB
var flashtime  = 2000;    // miliseconds to keep flash color on (2000 = 2 seconds);
var reloadTime = 5000;      // reload AJAX conditions every 5 seconds (= 5000 ms)
var reloadTime2 = 5000;
var reloadTime3 = 5000;
var clientrawFile = 'http://www.meteofan.eu/clientraw.txt'; // location of clientraw.txt relative to this page on website
var clientrawExtraFile = 'http://www.meteofan.eu/clientrawextra.txt'; // location of clientrawextra.txt relative to this page on website
var customrawFile = 'http://www.meteofan.eu/alex_custom.txt'; // location of 
var ajaxLoaderInBody = false; // set to true if you have <body onload="ajaxLoader(..."
var ajaxLoaderExtraInBody = false; // set to true if you have <body onload="ajaxLoader(..."
var ajaxLoadercustomInBody = false; // set to true if you have <body onload="ajaxLoader(..."
var imagedir = 'http://www.meteofan.eu/ajax-images';  // place for wind arrows, rising/falling arrows, etc.
var webcamimagedir = 'http://www.meteofan.eu';
var useunits = 'M';         // 'E'=USA(English) or 'M'=Metric
var useKnots = true;       // set to true to use wind speed in Knots (otherwise 
							// wind in km/hr for Metric or mph for English will be used.
var useMPS   = false;       // set to true for meters/second for metric wind speeds, false= km/h
var showUnits = true;       //  set to false if no units are to be displayed

// -- end of settings -------------------------------------------------------------------------

// --- you don't need to customize the stuff below, the actions are controlled by the 
//  settings above.  

var ie4=document.all;
var browser = navigator.appName;
var counterSecs = 0;  // for MCHALLIS counter script from weather-watch.com (adapted by K. True)
var lastajaxtimeformat = 'unknown'; //used to reset the counter when a real update is done

// handle setup options for units-of-measure and whether to show them at all
var uomTemp = '&deg;F';
var uomWind = ' mph';
var uomBaro = ' inHg';
var uomRain = ' in';
var uomHeight = ' ft';
var dpBaro = 2;
var dpRain = 2;

// var thermometer = 'http://www.meteofan.eu/thermometer.php'; // script for dynamic thermometer PNG image
var beaufortphp = 'http://www.meteofan.eu/jpgraph/src/Examples/Beaufort_realtime.php';


// strips off illegal chars &%$
String.prototype.stripOffIllegalChars = function() {
 return this.replace(/[^-+. 0-9]+/g,'');
}



function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function ajax_set_units( units ) {
  useunits = units;
  if (useunits != 'E') { // set to metric
	uomTemp = ' &deg;C';
	uomWind = ' km/h';
	if(useMPS)   { uomWind = ' m/s'; }
	uomBaro = ' hPa';
	uomRain = ' mm';
	uomHeight = ' m';
	dpBaro = 1;
	dpRain = 1;
  }
  if(useKnots) { uomWind = ' kts'; }
  if (! showUnits) {
	uomTemp = '';
	uomWind = '';
	uomBaro = '';
	uomRain = '';
	uomHeight = '';
  }
}

ajax_set_units(useunits);

// utility functions to navigate the HTML tags in the page
function get_ajax_tags ( ) {
// search all the span tags and return the list with class="ajax" in it
//
  if (ie4 && browser != "Opera") {
    var elem = document.body.getElementsByTagName('span');
	var lookfor = 'className';
  } else {
    var elem = document.getElementsByTagName('span');
	var lookfor = 'class';
  }
     var arr = new Array();
     for(i = 0,iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute(lookfor);
          if(att == 'ajax') {
               arr[iarr] = elem[i];
               iarr++;
          }
     }

     return arr;
}

function reset_ajax_color( usecolor ) {
// reset all the <span class="ajax"...> styles to have no color override
      var elements = get_ajax_tags();
	  var numelements = elements.length;
	  for (var index=0;index!=numelements;index++) {
         var element = elements[index];
	     element.style.color=usecolor;
 
      }
}

function set_ajax_obs( name, value ) {
// store away the current value in both the doc and the span as lastobs="value"
// change color if value != lastobs

		var element = document.getElementById(name);
		if (! element ) { return; } // V1.04 -- don't set if missing the <span id=name> tag
		var lastobs = element.getAttribute("lastobs");
		element.setAttribute("lastobs",value);
		if (value != unescape(lastobs)) {
          element.style.color=flashcolor;
		}
		element.innerHTML =  value;
}

function set_ajax_uom( name, onoroff ) {
// this function will set an ID= to visible or hidden by setting the style="display: "
// from 'inline' or 'none'

		var element = document.getElementById(name);
		if (! element ) { return; } 
		if (onoroff) {
          element.style.display='inline';
		} else {
          element.style.display='none';
		}
}

// --- end of flash-green functions

function windDir ($winddir)
// Take wind direction value, return the
// text label based upon 16 point compass -- function by beeker425
//  see http://www.weather-watch.com/smf/index.php/topic,20097.0.html
{
   $windlabel = new Array("N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW");
   return $windlabel[Math.floor(((parseInt($winddir) + 11) / 22.5) % 16 )];
}

function windDirImage ($winddirgif)
// Take wind direction value, return the
// image based upon 16 point compass -- function by alex
{
   $windimagelabel = new Array(
     "WIND_N", 
     "WIND_NNE", 
     "WIND_NE", 
     "WIND_ENE", 
     "WIND_E", 
     "WIND_ESE", 
     "WIND_SE", 
     "WIND_SSE", 
     "WIND_S", 
     "WIND_SSW", 
     "WIND_SW", 
     "WIND_WSW", 
     "WIND_W", 
     "WIND_WNW", 
     "WIND_NW", 
     "WIND_NNW");
   return $windimagelabel[Math.floor(((parseInt($winddirgif) + 11) / 22.5) % 16 )];
}

function ajax_wxIcon ( iconWD ) { 
// perform a lookup and return the graphic for the condition icon (using anole's
// wxsticker icon names
  $iconList = new Array(
	"day_clear.gif",           //  0 imagesunny.visible           Sunny
	"night_clear.gif",         //  1 imageclearnight.visible      Clear Night
	"day_cloudy2.gif",          //  2 imagecloudy.visible          Cloudy
	"day_cloudy3.gif",          //  3 imagecloudy.visible          Cloudy
	"night_cloudy.gif",        //  4 imagecloudynight.visible     Cloudy Night
	"day_partly_cloudy.gif",   //  5 imagedry.visible             Dry Clear           Partly cloudy
	"fog.gif",                 //  6 imagefog.visible             Fog
	"haze.gif",                //  7 imagehaze.visible            Hazy
	"day_heavy_rain.gif",      //  8 imageheavyrain.visible       Heavy Rain
	"day_mostly_sunny.gif",    //  9 imagemainlyfine.visible      Mainly Fine
	"mist.gif",                // 10 imagemist.visible            Misty
	"night_fog.gif",                 // 11 imagenightfog.visible        Night Fog
	"night_heavy_rain.gif",    // 12 imagenightheavyrain.visible  Night Heavy Rain
	"night_overcast.gif",        // 13 imagenightovercast.visible   Night Overcast
	"night_rain.gif",          // 14 imagenightrain.visible       Night Rain
	"night_light_rain.gif",    // 15 imagenightshowers.visible    Night Showers
	"night_snow.gif",          // 16 imagenightsnow.visible       Night Snow
	"night_tstorm.gif",        // 17 imagenightthunder.visible    Night Thunder
	"day_overcast.gif",        // 18 imageovercast.visible        Overcast
	"day_cloudy.gif",          // 19 imagepartlycloudy.visible    Partly Cloudy       Mainly cloudy
	"day_rain.gif",            // 20 imagerain.visible            Rain
	"day_heavy_rain.gif",      // 21 imagerain2.visible           Hard Rain
	"day_light_rain.gif",      // 22 imageshowers2.visible        Showers
	"day_sleet.gif",           // 23 imagesleet.visible           Sleet
	"day_sleet.gif",           // 24 imagesleetshowers.visible    Sleet Showers
	"day_snow.gif",            // 25 imagesnow.visible            Snowing
	"day_snow.gif",            // 26 imagesnowmelt.visible        Snow Melt
	"day_snow.gif",            // 27 imagesnowshowers2.visible    Snow Showers
	"day_clear.gif",           // 28 imagesunny.visible           Sunny
	"day_tstorm.gif",          // 29 imagethundershowers.visible  Thunder Showers
	"day_tstorm.gif",          // 30 imagethundershowers2.visible Thunder Showers
	"day_tstorm.gif",          // 31 imagethunderstorms.visible   Thunderstorms
	"tornado.gif",             // 32 imagetornado.visible         Tornado Warning
	"windy.gif",               // 33 imagewindy.visible           Windy
	"day_cloudy_stop_rainning.gif"           // 34 stopped rainning             Stopped Raining
	);					

  if (iconWD >= 0 && iconWD <= 34) { 
    return ("<img src=\"" + imagedir + "/" + $iconList[iconWD] + "\" " +
				"width=\"90\" height=\"72\" alt=\"Current condition icon\" />" );
  } else {
	return '';
  }

}



function ajax_ForecastIcon ( FCicon ) { 
// perform a lookup and return the graphic for the condition icon (using anole's
// FCsticker icon names
  $FCiconList = new Array(
	"day_clear.gif",           //  0 imageheavyrain.visible
	"day_mostly_sunny.gif",    //  1 imagemainlyfine.visible
	"day_mostly_sunny.gif",    //  2 imagemist.visible
	"fog.gif",                 //  3 imagenightfog.visible
	"night_heavy_rain.gif",    //  4 imagenightheavyrain.visible
	"night_cloudy.gif",        //  5 imagenightovercast.visible
	"night_rain.gif",          //  6 imagenightrain.visible
	"night_light_rain.gif",    //  7 imagenightshowers.visible
	"night_snow.gif",          //  8 imagenightsnow.visible
	"night_tstorm.gif",        //  9 imagenightthunder.visible
	"day_cloudy.gif",          // 10 imageovercast.visible
	"day_partly_cloudy.gif",   // 11 imagepartlycloudy.visible
	"day_rain.gif",            // 12 imagerain.visible
	"day_heavy_rain.gif",      // 13 imageheavyrain.visible
	"day_light_rain.gif",      // 14 imageshowers.visible
	"day_sleet.gif",           // 15 imagesleet.visible
	"day_sleet.gif",           // 16 imagesleetshowers.visible
	"day_snow.gif",            // 17 imagesnowing.visible
	"day_snow.gif",            // 18 imagesnowshowers.visible
	"day_snow.gif",            // 19 imagesnowmelt.visible
	"day_clear.gif",           // 20 imagesunny.visible
	"day_tstorm.gif",          // 21 imagethundershowers.visible
	"day_tstorm.gif",          // 22 imagethundershowers2.visible
	"day_tstorm.gif",          // 23 imagethunderstorms.visible
	"tornado.gif",             // 24 imagetornado.visible
	"windy.gif",               // 25 imagewindy.visible
	"day_partly_cloudy.gif"    // 26 stopped rainning
	);					

  if (FCicon >= 0 && FCicon <= 26) { 
    return ("<img src=\"" + imagedir + "/" + $FCiconList[FCicon] + "\" " +
				"width=\"45\" height=\"36\" alt=\"Current condition icon\" />" );
  } else {
	return '';
  }

}

// utility functions to handle conversions from clientraw data to desired units-of-measure
function convertTemp ( rawtemp ) {
	if (useunits == 'E') { // convert C to F
		return( (1.8 * rawtemp) + 32.0);
	} else {  // leave as C
		return (rawtemp * 1.0);
	}
}

function convertWind  ( rawwind ) {
	if (useKnots) { return(rawwind * 1.0); } //force usage of knots for speed
	if (useunits == 'E') { // convert knots to mph
		return(rawwind * 1.1507794);
	} else {  
	    if (useMPS) { // convert knots to m/s
		  return (rawwind * 0.514444444);
		} else { // convert knots to km/hr
		  return (rawwind * 1.852);
		}
	}
}

function convertWindKm  ( rawwind ) 
      { // convert knots to km/hr
	  return (rawwind * 1.852); }

function convertBaro ( rawpress ) {
	if (useunits == 'E') { // convert hPa to inHg
	   return (rawpress  / 33.86388158);
	} else {
	   return (rawpress * 1.0); // leave in hPa
	}
}

function convertRain ( rawrain ) {
	if (useunits == 'E') { // convert mm to inches
	   return (rawrain * .0393700787);
	} else {
	   return (rawrain * 1.0); // leave in mm
	}
}

function convertHeight ( rawheight ) {
	if (useunits == 'E') { // convert feet to meters if metric
	   return (Math.round(rawheight * 1.0).toFixed(0)); // leave in feet
	} else {
	   return (Math.round(rawheight / 3.2808399).toFixed(0));
	}
}

function ajax_get_beaufort ( wind ) { 
// return a phrase for the beaufort scale based on wind knots (native WD format)
  if (wind < 1 ) {return("0"); }
  if (wind < 4 ) {return("1"); }
  if (wind < 7 ) {return("2"); }
  if (wind < 11 ) {return("3"); }
  if (wind < 17 ) {return("4"); }
  if (wind < 22 ) {return("5"); }
  if (wind < 28 ) {return("6"); }
  if (wind < 34 ) {return("7"); }
  if (wind < 41 ) {return("8"); }
  if (wind < 48 ) {return("9"); }
  if (wind < 56 ) {return("10"); }
  if (wind < 64 ) {return("11"); }
  if (wind >= 64 ) {return("12"); }
  return("unknown " + wind);
}

// Warnings -------------------------------------------------------- Warnings -----------

function ajax_FWI_photo ( firephoto ) { 
// return a phrase for the beaufort scale based on wind knots (native WD format)
  if (firephoto < 8) {return("<img src=\"" + imagedir + "/" + "FWI_1.gif" + "\" /> "); }
  if (firephoto < 16) {return("<img src=\"" + imagedir + "/" + "FWI_2.gif" + "\" /> "); }
  if (firephoto < 24) {return("<img src=\"" + imagedir + "/" + "FWI_3.gif" + "\" /> "); }
  if (firephoto < 32) {return("<img src=\"" + imagedir + "/" + "FWI_4.gif" + "\" /> "); }
  if (firephoto >= 32) {return("<img src=\"" + imagedir + "/" + "FWI_5.gif" + "\" /> "); }
  return(" " + firephoto);
}

function ajax_temp_alert ( tempalert ) { 
// return a phrase for the temp alert
   if (tempalert < 3 ) {return("ice alert"); }
   return("-");
}

function ajax_temprate_alert (tempnow,tempbefore) { 
// return a phrase for the temp trend
  if ((tempnow - tempbefore) >= 1 ) {return("rising slowly"); }   
  if ((tempnow - tempbefore) >= 3 ) {return("rising rapidly"); }
  if ((tempbefore - tempnow) >= 1 ) {return("falling slowly"); }
  if ((tempbefore - tempnow) >= 3 ) {return("falling rapidly"); }
  return("-");
}


function ajax_hum_alert ( humalert ) { 
// return a phrase for the humidity alert
  if (humalert > 70 ) {return("wet"); }
  if (humalert < 40 ) {return("dry"); }
  return("-");
}

function ajax_baro_alert ( baroalert ) { 
// return a phrase for the temp alert
   if ((baroalert >= -0.7) && (baroalert <= 0.7)) { return("-"); }
   if ((baroalert > 0.7) && (baroalert < 2.0)) { return("Rising Slowly"); }
   if (baroalert >= 2.0) { return("Rising Rapidly"); }
   if ((baroalert < -0.7) && (baroalert > -2.0)) { return("Falling Slowly"); }
   if (baroalert <= -2.0) { return("Falling Rapidly"); }
   if (baroalert >= 4.0) {return("storm alert"); }
   if (baroalert <= -4.0) {return("storm alert"); }
}

function ajax_wind_alert ( windalert ) { 
// return a phrase for the wind alert
  if (windalert > 22 ) {return("windy"); }
  if (windalert < 1 ) {return("calm"); }
  return("-");
}

function ajax_rain_alert ( rainalert ) { 
// return a phrase for the rain alert
  if (rainalert > 0 ) {return("light rain"); }
  if (rainalert > 4 ) {return("rain"); }
  if (rainalert > 20 ) {return("heavy rain"); }
  return("-");
}

function ajax_uv_alert ( uvalert ) { 
// return a phrase for the uv alert
  if (uvalert > 0 && uvalert <= 2 ) {return("Minimal exposure"); }
  if (uvalert > 2 && uvalert <= 4 ) {return("Low exposure"); }
  if (uvalert > 4 && uvalert <= 6 ) {return("Moderate exposure"); }
  if (uvalert > 6 && uvalert <= 9 ) {return("High exposure"); }
  if (uvalert > 9) {return("Very High exposure"); }
  return("-");
}

function ajax_UV_photo ( UVphoto ) { 
// return a phrase for the uv photo
  if (UVphoto < 0.5) {return("<img src=\"" + imagedir + "/" + "C_UV00(cmyk).gif" + "\" /> "); }
  if (UVphoto >= 0.5 && UVphoto <= 1.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV01(cmyk).gif" + "\" /> "); }
  if (UVphoto > 1.5 && UVphoto <= 2.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV02(cmyk).gif" + "\" /> "); }
  if (UVphoto > 2.5 && UVphoto <= 3.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV03(cmyk).gif" + "\" /> "); }
  if (UVphoto > 3.5 && UVphoto <= 4.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV04(cmyk).gif" + "\" /> "); }
  if (UVphoto > 4.5 && UVphoto <= 5.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV05(cmyk).gif" + "\" /> "); }
  if (UVphoto > 5.5 && UVphoto <= 6.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV06(cmyk).gif" + "\" /> "); }
  if (UVphoto > 6.5 && UVphoto <= 7.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV07(cmyk).gif" + "\" /> "); }
  if (UVphoto > 7.5 && UVphoto <= 8.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV08(cmyk).gif" + "\" /> "); }
  if (UVphoto > 8.5 && UVphoto <= 9.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV09(cmyk).gif" + "\" /> "); }
  if (UVphoto > 9.5 && UVphoto <= 10.5 ) {return("<img src=\"" + imagedir + "/" + "C_UV10(cmyk).gif" + "\" /> "); }
  if (UVphoto > 10) {return("<img src=\"" + imagedir + "/" + "C_UV11(cmyk).gif" + "\" /> "); }
  return("-");
}

function ajax_solar_alert ( solaralert ) { 
// return a phrase for the solar alert
  if (solaralert >= 80 ) {return("-"); }
  if (solaralert >= 65 && solaralert <= 80) {return("some clouds"); }
  if (solaralert >= 45 && solaralert <= 64) {return("clouds"); }
  if (solaralert >= 11 && solaralert <= 44) {return("many clouds"); }
  if (solaralert > 0 && solaralert <= 10) {return("overcast"); }
  return("-");
}

function ajax_get_beaufort_max ( maxwind ) { 
// return a phrase for the beaufort scale based on wind knots (native WD format)
  if (maxwind < 1 ) {return("<img src=\"" + imagedir + "/" + "0_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 4 ) {return("<img src=\"" + imagedir + "/" + "1_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 7 ) {return("<img src=\"" + imagedir + "/" + "2_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 11 ) {return("<img src=\"" + imagedir + "/" + "3_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 17 ) {return("<img src=\"" + imagedir + "/" + "4_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 22 ) {return("<img src=\"" + imagedir + "/" + "5_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 28 ) {return("<img src=\"" + imagedir + "/" + "6_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 34 ) {return("<img src=\"" + imagedir + "/" + "7_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 41 ) {return("<img src=\"" + imagedir + "/" + "8_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 48 ) {return("<img src=\"" + imagedir + "/" + "9_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 56 ) {return("<img src=\"" + imagedir + "/" + "10_BFT_MAX.gif" + "\" /> "); }
  if (maxwind < 64 ) {return("<img src=\"" + imagedir + "/" + "11_BFT_MAX.gif" + "\" /> "); }
  if (maxwind >= 64 ) {return("<img src=\"" + imagedir + "/" + "12_BFT_MAX.gif" + "\" /> "); }
  return("unknown " + maxwind);
}


function ajax_beaufort_image ( wnd ) { 
// return beaufort scale image based on wind knots (native WD format)
  $BFiconList = new Array(
	"0_BEAUFURT.gif",
	"1_BEAUFURT.gif",
	"2_BEAUFURT.gif",
	"3_BEAUFURT.gif",
	"4_BEAUFURT.gif",
	"5_BEAUFURT.gif",
	"6_BEAUFURT.gif",
	"7_BEAUFURT.gif",
	"8_BEAUFURT.gif",
	"9_BEAUFURT.gif",
       "10_BEAUFURT.gif",
       "11_BEAUFURT.gif",
       "12_BEAUFURT.gif"
	);					
  if (wnd >= 0 && wnd <= 12) { 
    return ("<img src=\"" + imagedir + "/" + $BFiconList[wnd] + "\" /> ");
  } else {
	return '';
  }

}

function ajax_beaufort_sea ( wd ) { 
// return beaufort scale image based on wind knots (native WD format)
  $BSiconList = new Array(
	"0_sea.gif",
	"1_sea.gif",
	"2_sea.gif",
	"3_sea.gif",
	"4_sea.gif",
	"5_sea.gif",
	"6_sea.gif",
	"7_sea.gif",
	"8_sea.gif",
	"9_sea.gif",
	"10_sea.gif",
	"11_sea.gif"
	);					
  if (wd >= 0 && wd <= 11) { 
    return ("<img src=\"" + imagedir + "/" + $BSiconList[wd] + "\" /> ");
  } else {
	return '';
  }

}


function ajax_get_barotrend(btrnd) {
// routine from Anole's wxsticker PHP (adapted to JS by Ken True)
// input: trend in hPa or millibars
//   Barometric Trend(3 hour)

// Change Rates
// Rapidly: =.06 inHg; 1.5 mm Hg; 2 hPa; 2 mb
// Slowly: =.02 inHg; 0.5 mm Hg; 0.7 hPa; 0.7 mb

// 5 conditions
// Rising Rapidly
// Rising Slowly
// Steady
// Falling Slowly
// Falling Rapidly

// Page 52 of the PDF Manual
// http://www.davisnet.com/product_documents/weather/manuals/07395.234-VP2_Manual.pdf
// figure out a text value for barometric pressure trend
   if ((btrnd >= -0.7) && (btrnd <= 0.7)) { return("Steady"); }
   if ((btrnd > 0.7) && (btrnd < 2.0)) { return("Rising Slowly"); }
   if (btrnd >= 2.0) { return("Rising Rapidly"); }
   if ((btrnd < -0.7) && (btrnd > -2.0)) { return("Falling Slowly"); }
   if (btrnd <= -2.0) { return("Falling Rapidly"); }
  return(btrnd);
}

function ajax_getUVrange ( uv ) { // code simplified by FourOhFour on wxforum.net
   var uvword = "Unspec.";
   if (uv <= 0) {
       uvword = "None";
   } else if (uv < 3) {
       uvword = "<span style=\"border: solid 1px; background-color: #A4CE6a;\">&nbsp;Low&nbsp;</span>";
   } else if (uv < 6) {
       uvword = "<span style=\"border: solid 1px; background-color: #FBEE09;\">&nbsp;Medium&nbsp;</span>";
   } else if (uv < 8) {
       uvword =  "<span style=\"border: solid 1px; background-color: #FD9125;\">&nbsp;High&nbsp;</span>";
   } else if (uv < 11) {
       uvword =  "<span style=\"border: solid 1px; color: #FFFFFF; background-color: #F63F37;\">&nbsp;Very&nbsp;High&nbsp;</span>";
   } else {
       uvword =  "<span style=\"border: solid 1px; color: #FFFF00; background-color: #807780;\">&nbsp;Extreme&nbsp;</span>";
   }
   return uvword;
} // end ajax_getUVrange function

function ajax_genarrow( nowTemp, yesterTemp, Legend, textUP, textDN, numDp) {
// generate an <img> tag with alt= and title= for rising/falling values	
	
  var diff = nowTemp.toFixed(3) - yesterTemp.toFixed(3);
  var absDiff = Math.abs(diff);
  var diffStr = '' + diff.toFixed(numDp);  // sprintf("%01.0f",$diff);
  var absDiffStr = '' + absDiff.toFixed(numDp); // sprintf("%01.0f",$absDiff);
  var image = '';
  var msg = '';
  
  if (diff == 0) {
 // no change
    image = '&nbsp;'; 
  } else if (diff > 0) {
// today is greater 
//    msg = textUP + " by " + diff.toFixed(1); // sprintf($textDN,$absDiff); 
	msg = textUP.replace(/\%s/,absDiffStr);
    image = "<img src=\"" + imagedir + "/rising.gif\" alt=\"" + msg + 
	"\" title=\""+ msg + 
	"\" width=\"7\" height=\"8\" style=\"border: 0; margin: 1px 3px;\" />";
  } else {
// today is lesser
    msg = textDN.replace(/\%s/,absDiffStr); // sprintf($textDN,$absDiff); 
//	msg = textDN.replace(/\%s/,absDiffStr);
    image = "<img src=\"" + imagedir + "/falling.gif\" alt=\"" + msg + 
	"\" title=\""+ msg + 
	"\" width=\"7\" height=\"8\" style=\"border: 0; margin: 1px 3px;\" />";
   
  }

   if (Legend) {
       return (diff + Legend + image);
	} else {
	   return image;
	}
} // end genarrow function

// Mike Challis' counter function (adapted by Ken True)
//
function ajax_countup() {
 element = document.getElementById("ajaxcounter");
 if (element) {
  element.innerHTML = counterSecs;
  counterSecs++;
 }
}

// ------------------------------------------------------------------------------------------
//  main function.. read clientraw.txt and format <span class="ajax" id="ajax..."></span> areas
// ------------------------------------------------------------------------------------------
function ajaxLoader(url) {
  if (document.getElementById) {
    var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(url);
  }
  if (x) { // got something back
    x.onreadystatechange = function() {
    try { if (x.readyState == 4 && x.status == 200) { // Mike Challis added fix to fix random error: NS_ERROR_NOT_AVAILABLE 
    var clientraw = x.responseText.split(' ');
	// now make sure we got the entire clientraw.txt  -- thanks to Johnnywx
	// valid clientraw.txt has '12345' at start and '!!' at end of record
	var wdpattern=/\d+\.\d+.*!!/; // looks for '!!nn.nn!!' version string 
	if(clientraw[0] == '12345' && wdpattern.test(x.responseText) ) { // got it.. process clientraw.txt

       	//Temperature


                set_ajax_obs("ajaxbeaufortphp", "<img src=\"" + beaufortphp + "\" " + "/>" );
                tempin = convertTemp(clientraw[12]);
      		set_ajax_obs("ajaxtempin", tempin.toFixed(1));

		temp = convertTemp(clientraw[4]);
		set_ajax_obs("ajaxtemp", temp.toFixed(1));

		set_ajax_obs("ajaxbigtemp",temp.toFixed(0));

//                set_ajax_obs("ajaxthermometer",
//					"<img src=\"" + thermometer + "?t=" + temp.toFixed(1) + "\" " +
//				"width=\"110\" height=\"360\" alt=\"Current Temp is " + temp.toFixed(1) + uomTemp + "\" " + 
//                                "title=\"Current Temp is " + temp.toFixed(1) + uomTemp + "\" [//>" );


		templast = convertTemp(clientraw[90]);
		set_ajax_obs("ajaxtemparrow", 
		   ajax_genarrow(temp, templast, '', 
			 'Warmer %s'+uomTemp+' than last hour.',
			 'Colder %s'+uomTemp+' than last hour.',1)
		   );	
	    temprate = temp - templast;
		temprate = temprate.toFixed(1);
		if (temprate > 0.0) { temprate = '+' + temprate;} // add '+' for positive rates
		set_ajax_obs("ajaxtemprate",temprate);

		tempmax = convertTemp(clientraw[46]);
		set_ajax_obs("ajaxtempmax",tempmax.toFixed(1));

		tempmin = convertTemp(clientraw[47]);
		set_ajax_obs("ajaxtempmin",tempmin.toFixed(1));


		//Humidity ...
		humidity = clientraw[5];
		set_ajax_obs("ajaxhumidity",humidity);
                hum = clientraw[5];
		set_ajax_obs("ajaxhum",hum);
                indoorhum = clientraw[13];
		set_ajax_obs("ajaxindoorhum",indoorhum);
		// sorry.. no min/max data for humidity in clientraw
		
		//Dewpoint ...
		dew = convertTemp(clientraw[72]);
		set_ajax_obs("ajaxdew",dew.toFixed(1));

		//  WindChill
		windchill = convertTemp(clientraw[44]);
		set_ajax_obs("ajaxwindchill",windchill.toFixed(0));
		windchillmin = convertTemp(clientraw[78]);
		set_ajax_obs("ajaxwindchillmin",windchillmin.toFixed(1));
		windchillmax = convertTemp(clientraw[77]);
		set_ajax_obs("ajaxwindchillmax",windchillmax.toFixed(1));

		// FeelsLike
		temp = clientraw[4]; // note.. temp in C
        if (temp < 16.0 ) {
		  feelslike = clientraw[44]; //use WindChill
		} else {
		  feelslike = clientraw[112];   // use temperature
		}
		feelslike  = Math.round(convertTemp(feelslike));
        set_ajax_obs("ajaxfeelslike",feelslike + uomTemp);

		// Time
                hour = clientraw[29];
                min = clientraw[30];
                sec = clientraw[31];
                day = clientraw[35];
                month = clientraw[36];
                year = clientraw[141];
                date = clientraw[74];
		set_ajax_obs("ajaxhour",hour);
		set_ajax_obs("ajaxmin",min);
		set_ajax_obs("ajaxsec",sec);
		set_ajax_obs("ajaxday",day);
		set_ajax_obs("ajaxyear",year);
		set_ajax_obs("ajaxdate",date);
		
		// Apparent temperature
                apparenttemp = clientraw[130];
		set_ajax_obs("ajaxapparenttemp",apparenttemp);

		// Humidex
                humidex = clientraw[45];
		set_ajax_obs("ajaxhumidex",humidex);

                monthlyrain = clientraw[8];
		set_ajax_obs("ajaxmonthlyrain",monthlyrain);
                yearlyrain = clientraw[9];
		set_ajax_obs("ajaxyearlyrain",yearlyrain);
		
		//Pressure...
		pressure = convertBaro(clientraw[6]);
		set_ajax_obs("ajaxbaro",pressure.toFixed(dpBaro));
		pressuretrend = convertBaro(clientraw[50]);
		pressuretrend = pressuretrend.toFixed(dpBaro);
		if (pressuretrend > 0.0) {pressuretrend = '+' + pressuretrend; } // add '+' to rate
		set_ajax_obs("ajaxbarotrend",pressuretrend);
		set_ajax_obs("ajaxbaroarrow",
		   ajax_genarrow(pressure, pressure-pressuretrend, '', 
			 'Rising %s '+uomBaro+'/hour.',
			 'Falling %s '+uomBaro+'/hour.',2)
			 );	
		
		set_ajax_obs("ajaxbarotrendtext",ajax_get_barotrend(clientraw[50]));

		maxbaro = convertBaro(clientraw[131]);
		set_ajax_obs("ajaxmaxbaro",maxbaro.toFixed(dpBaro));
		minbaro = convertBaro(clientraw[132]);
		set_ajax_obs("ajaxminbaro",minbaro.toFixed(dpBaro));


        //Wind gust
		gust    = convertWind(clientraw[134]);
                maxwind = convertWindKm(clientraw[113]);
                set_ajax_obs("ajaxmaxwind",maxwind.toFixed(1));
		maxgust = convertWind(clientraw[113]);
		if (maxgust > 0.0 ) {
		  set_ajax_obs("ajaxmaxgust",maxgust.toFixed(1));
		} else {
		  set_ajax_obs("ajaxmaxgust",'None');
		}

		//Windspeed ...
		wind = convertWindKm(clientraw[1]);
		beaufort = ajax_get_beaufort(clientraw[1]);
		set_ajax_obs("ajaxbeaufort",beaufort);

		beaufortmax = ajax_get_beaufort_max(maxgust);
		set_ajax_obs("ajaxbeaufortmax",beaufortmax);

                beaufortimage = ajax_beaufort_image(beaufort);
                set_ajax_obs("ajaxbeaufortimage",beaufortimage);
                beaufortsea = ajax_beaufort_sea(beaufort);
                set_ajax_obs("ajaxbeaufortsea",beaufortsea);


       //WIND DIRECTION ...
        val = windDir(clientraw[3]);
        valwindimage = windDirImage(clientraw[3]);

		set_ajax_obs("ajaxwind",wind.toFixed(1));
		set_ajax_uom("ajaxwinduom",true);
	   
	   if (gust > 0.0) {
		set_ajax_obs("ajaxgust",gust.toFixed(1));
		set_ajax_uom("ajaxgustuom",true);
	   } else {
		set_ajax_obs("ajaxgust","None");
		set_ajax_uom("ajaxgustuom",false);
	   }
	   
   	   if (gust > 0.0 || wind > 0.0) {
 		set_ajax_obs("ajaxwindicon","<img src=\"" + imagedir + "/" +  val + ".gif\" width=\"14\" height=\"14\" alt=\"Wind from" + 
		val + "\" title=\"Wind from " + val + "\" /> ");
		set_ajax_obs("ajaxwinddir",val);
	   } else {
 		set_ajax_obs("ajaxwindicon","");
		set_ajax_obs("ajaxwinddir","");
	   }

		windmaxavg = convertWind(clientraw[113]);
		set_ajax_obs("ajaxwindmaxavg",windmaxavg.toFixed(1) + uomWind);

           set_ajax_obs("ajaxwinddirimage","<img src=\"" + imagedir + "/" +  valwindimage + ".gif"  + "\" /> ");

		//  Solar Radiation
		solar    = clientraw[127] * 1.0;
		set_ajax_obs("ajaxsolar",solar.toFixed(0));

        solarpct = clientraw[34];
		set_ajax_obs("ajaxsolarpct",solarpct);

	
		// UV Index		
		uv       = clientraw[79];
		set_ajax_obs("ajaxuv",uv) ;

		uvword = ajax_getUVrange(uv);
		set_ajax_obs("ajaxuvword",uvword);

		//Rain ...
		rain = convertRain(clientraw[7]);
		set_ajax_obs("ajaxrain",rain.toFixed(dpRain));

		rainydy = convertRain(clientraw[19]);
		set_ajax_obs("ajaxrainydy",rainydy.toFixed(dpRain));

		rainratehr = convertRain(clientraw[10]) * 60; // make per hour rate.
		set_ajax_obs("ajaxrainratehr",rainratehr.toFixed(dpRain));

		rainratemax = convertRain(clientraw[11]);
		set_ajax_obs("ajaxrainratemax",rainratemax.toFixed(dpRain));

		// current date and time of observation in clientraw.txt
		ajaxtimeformat = clientraw[32];
		ajaxdateformat = clientraw[74];
		ajaxtimeformat = ajaxtimeformat.split('-')[1];
		ajaxtimeformat = ajaxtimeformat.replace( "_" , "");
		ajaxtimeformat = ajaxtimeformat.toLowerCase();

		set_ajax_obs("ajaxdatetime",ajaxdateformat + " " +ajaxtimeformat);
		set_ajax_obs("ajaxdate",ajaxdateformat);
		set_ajax_obs("ajaxtime",ajaxtimeformat);
		
		if (lastajaxtimeformat != ajaxtimeformat) {
			counterSecs = 0;                      // reset timer
			lastajaxtimeformat = ajaxtimeformat; // remember this time
		}

		// Forecast condition icon and description
		set_ajax_obs("ajaxForecasticon",
			ajax_ForecastIcon(clientraw[15])
			);
                set_ajax_obs("ajaxForecasticonnumber",(clientraw[15]));

		
		// current condition icon and description
		set_ajax_obs("ajaxconditionicon",
			ajax_wxIcon(clientraw[48])
			);


		currentcond = clientraw[49];
		currentcond = currentcond.replace(/_/g,' ');
		currentcond = currentcond.replace(/\\/g,', ');
		currentcond = currentcond.replace(/\//g,', ');
		set_ajax_obs("ajaxcurrentcond",currentcond);
		
		// cloud height
		cloudheight = clientraw[73];
		set_ajax_obs("ajaxcloudheight",convertHeight(cloudheight) + uomHeight)

                iconalex = clientraw[48];
                set_ajax_obs("ajaxiconalex",iconalex);
                weatherde = clientraw[49];
                set_ajax_obs("ajaxweatherde",weatherde);

       	// Warnings --------------------------------------------------------- Warnings

		tempwarning = ajax_temp_alert(clientraw[4]);
		set_ajax_obs("ajaxtempwarning",tempwarning);

		tempratewarning = ajax_temprate_alert(convertTemp(clientraw[4]),convertTemp(clientraw[90]));
		set_ajax_obs("ajaxtempratewarning",tempratewarning);

		humwarning = ajax_hum_alert(clientraw[5]);
		set_ajax_obs("ajaxhumwarning",humwarning);

		barowarning = ajax_baro_alert(clientraw[50]);
		set_ajax_obs("ajaxbarowarning",barowarning);

		windwarning = ajax_wind_alert(gust);
		set_ajax_obs("ajaxwindwarning",windwarning);

		rainwarning = ajax_rain_alert(rainratehr);
		set_ajax_obs("ajaxrainwarning",rainwarning);

		uvwarning = ajax_uv_alert(uv);
		set_ajax_obs("ajaxuvwarning",uvwarning);
                 
                set_ajax_obs("ajaxUVphoto",ajax_UV_photo(uv));

		solarpctwarning = ajax_solar_alert(solarpct);
		set_ajax_obs("ajaxsolarpctwarning",solarpctwarning);

	
		// now ensure that the indicator flashes on every AJAX fetch
        element = document.getElementById("ajaxindicator");
		if (element) {
          element.style.color = flashcolor;
		}

 	  } // END if(clientraw[0] = '12345' and '!!' at end)

	 } // END if (x.readyState == 4 && x.status == 200)

    } // END try

   	catch(e){}  // Mike Challis added fix to fix random error: NS_ERROR_NOT_AVAILABLE

    } // END x.onreadystatechange = function() {
    x.open("GET", url, true);
    x.send(null);

//get all of them every minute = 5000 milliseconds
//edit the location of your clienraw.txt twice!! (here and in the body onload)
	setTimeout("reset_ajax_color('')",flashtime); // change text back to default color 
    setTimeout("ajaxLoader(clientrawFile + '?' + new Date().getTime())", reloadTime); // get new data after 5 secs
  }
} // end ajaxLoader function






// ------------------------------------------------------------------------------------------
//  main function.. read clientrawextra.txt and format <span class="ajax" id="ajax..."></span> areas
// ------------------------------------------------------------------------------------------
function ajaxLoaderExtra(url) {
  if (document.getElementById) {
    var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(url);
  }
  if (x) { // got something back
    x.onreadystatechange = function() {
    try { if (x.readyState == 4 && x.status == 200) { // Mike Challis added fix to fix random error: NS_ERROR_NOT_AVAILABLE
    var clientrawextra = x.responseText.split(' ');
   // now make sure we got the entire clientrawextra.txt  -- thanks to Johnnywx
   // valid clientrawextra.txt has '12345' at start and '!!' at end of record
   var wdpattern=/\d+\.\d+.*!!/; // looks for '!!nn.nn!!' version string
   if(clientrawextra[0] == '12345' && wdpattern.test(x.responseText) ) { // got it.. process clientrawextra.txt

                SunshineHours = clientrawextra[696];
                set_ajax_obs("ajaxSunshineHours",SunshineHours);
                yesterdayrain = clientrawextra[534];
                set_ajax_obs("ajaxyesterdayrain",yesterdayrain);
		daysnorain = clientrawextra[482];
                set_ajax_obs("ajaxdaysnorain",daysnorain);
		dayswithrain = clientrawextra[483];
                set_ajax_obs("ajaxdayswithrain",dayswithrain);
                sunrise = clientrawextra[556];
                set_ajax_obs("ajaxsunrise",sunrise);
                sunset = clientrawextra[557];
                set_ajax_obs("ajaxsunset",sunset);
                moonrise = clientrawextra[558];
		set_ajax_obs("ajaxmoonrise",moonrise);
                moonset = clientrawextra[559];
		set_ajax_obs("ajaxmoonset",moonset);	
                moonphase = clientrawextra[560];
		set_ajax_obs("ajaxmoonphase",moonphase);
                moonage = clientrawextra[561];
		set_ajax_obs("ajaxmoonage",moonage);		                
                DavisLabel = clientrawextra[531];
                set_ajax_obs("ajaxDavisLabel",DavisLabel);
                FWI = clientrawextra[635];
                set_ajax_obs("ajaxFWI",FWI);
                set_ajax_obs("ajaxFWIimage",ajax_FWI_photo(FWI));
		RMHT = clientrawextra[61];
                set_ajax_obs("ajaxRMHT",RMHT);
		RMLT = clientrawextra[67];
                set_ajax_obs("ajaxRMLT",RMLT);
      
                MonthHiTemp = clientrawextra[61];
                set_ajax_obs("ajaxMonthHiTemp",MonthHiTemp);
                MonthHiTempHour = clientrawextra[62];
                set_ajax_obs("ajaxMonthHiTempHour",MonthHiTempHour);
                MonthHiTempMin = clientrawextra[63];
                set_ajax_obs("ajaxMonthHiTempMin",MonthHiTempMin);
                MonthHiTempDay = clientrawextra[64];
                set_ajax_obs("ajaxMonthHiTempDay",MonthHiTempDay);
                MonthHiTempMon = clientrawextra[65];
                set_ajax_obs("ajaxMonthHiTempMon",MonthHiTempMon);

                YTDHiTemp = clientrawextra[187];
                set_ajax_obs("ajaxYTDHiTemp",YTDHiTemp);
                YTDHiTempHour = clientrawextra[188];
                set_ajax_obs("ajaxYTDHiTempHour",YTDHiTempHour);
                YTDHiTempMin = clientrawextra[189];
                set_ajax_obs("ajaxYTDHiTempMin",YTDHiTempMin);
                YTDHiTempDay = clientrawextra[190];
                set_ajax_obs("ajaxYTDHiTempDay",YTDHiTempDay);
                YTDHiTempMon = clientrawextra[191];
                set_ajax_obs("ajaxYTDHiTempMon",YTDHiTempMon);

                MonthLoTemp = clientrawextra[67];
                set_ajax_obs("ajaxMonthLoTemp",MonthLoTemp);
                MonthLoTempHour = clientrawextra[68];
                set_ajax_obs("ajaxMonthLoTempHour",MonthLoTempHour);
                MonthLoTempMin = clientrawextra[69];
                set_ajax_obs("ajaxMonthLoTempMin",MonthLoTempMin);
                MonthLoTempDay = clientrawextra[70];
                set_ajax_obs("ajaxMonthLoTempDay",MonthLoTempDay);
                MonthLoTempMon = clientrawextra[71];
                set_ajax_obs("ajaxMonthLoTempMon",MonthLoTempMon);

                YTDLoTemp = clientrawextra[193];
                set_ajax_obs("ajaxYTDLoTemp",YTDLoTemp);
                YTDLoTempHour = clientrawextra[194];
                set_ajax_obs("ajaxYTDLoTempHour",YTDLoTempHour);
                YTDLoTempMin = clientrawextra[195];
                set_ajax_obs("ajaxYTDLoTempMin",YTDLoTempMin);
                YTDLoTempDay = clientrawextra[196];
                set_ajax_obs("ajaxYTDLoTempDay",YTDLoTempDay);
                YTDLoTempMon = clientrawextra[197];
                set_ajax_obs("ajaxYTDLoTempMon",YTDLoTempMon);

                MonthWarmestDay = clientrawextra[151];
                set_ajax_obs("ajaxMonthWarmestDay",MonthWarmestDay);
                MonthWarmestDayDay = clientrawextra[154];
                set_ajax_obs("ajaxMonthWarmestDayDay",MonthWarmestDayDay);
                MonthWarmestDayMon = clientrawextra[155];
                set_ajax_obs("ajaxMonthWarmestDayMon",MonthWarmestDayMon);

                MonthColdestDay = clientrawextra[163];
                set_ajax_obs("ajaxMonthColdestDay",MonthColdestDay);
                MonthColdestDayDay = clientrawextra[166];
                set_ajax_obs("ajaxMonthColdestDayDay",MonthColdestDayDay);
                MonthColdestDayMon = clientrawextra[167];
                set_ajax_obs("ajaxMonthColdestDayMon",MonthColdestDayMon);

                MonthWarmestNight = clientrawextra[169];
                set_ajax_obs("ajaxMonthWarmestNight",MonthWarmestNight);
                MonthWarmestNightDay = clientrawextra[172];
                set_ajax_obs("ajaxMonthWarmestNightDay",MonthWarmestNightDay);
                MonthWarmestNightMon = clientrawextra[173];
                set_ajax_obs("ajaxMonthWarmestNightMon",MonthWarmestNightMon);

                MonthColdestNight = clientrawextra[157];
                set_ajax_obs("ajaxMonthColdestNight",MonthColdestNight);
                MonthColdestNightDay = clientrawextra[160];
                set_ajax_obs("ajaxMonthColdestNightDay",MonthColdestNightDay);
                MonthColdestNightMon = clientrawextra[161];
                set_ajax_obs("ajaxMonthColdestNightMon",MonthColdestNightMon);

                MonthHiSolar = clientrawextra[660];
                set_ajax_obs("ajaxMonthHiSolar",MonthHiSolar);
                MonthHiSolarHour = clientrawextra[661];
                set_ajax_obs("ajaxMonthHiSolarHour",MonthHiSolarHour);
                MonthHiSolarMin = clientrawextra[662];
                set_ajax_obs("ajaxMonthHiSolarMin",MonthHiSolarMin);
                MonthHiSolarDay = clientrawextra[663];
                set_ajax_obs("ajaxMonthHiSolarDay",MonthHiSolarDay);
                MonthHiSolarMon = clientrawextra[664];
                set_ajax_obs("ajaxMonthHiSolarMon",MonthHiSolarMon);

                MonthHiUV = clientrawextra[666];
                set_ajax_obs("ajaxMonthHiUV",MonthHiUV);
                MonthHiUVHour = clientrawextra[667];
                set_ajax_obs("ajaxMonthHiUVHour",MonthHiUVHour);
                MonthHiUVMin = clientrawextra[668];
                set_ajax_obs("ajaxMonthHiUVMin",MonthHiUVMin);
                MonthHiUVDay = clientrawextra[669];
                set_ajax_obs("ajaxMonthHiUVDay",MonthHiUVDay);
                MonthHiUVMon = clientrawextra[670];
                set_ajax_obs("ajaxMonthHiUVMon",MonthHiUVMon);

                MonthLoWindChill = clientrawextra[133];
                set_ajax_obs("ajaxMonthLoWindChill",MonthLoWindChill);
                MonthLoWindChillHour = clientrawextra[134];
                set_ajax_obs("ajaxMonthLoWindChillHour",MonthLoWindChillHour);
                MonthLoWindChillMin = clientrawextra[135];
                set_ajax_obs("ajaxMonthLoWindChillMin",MonthLoWindChillMin);
                MonthLoWindChillDay = clientrawextra[136];
                set_ajax_obs("ajaxMonthLoWindChillDay",MonthLoWindChillDay);
                MonthLoWindChillMon = clientrawextra[137];
                set_ajax_obs("ajaxMonthLoWindChillMon",MonthLoWindChillMon);

                MonthHiHeatIndex = clientrawextra[175];
                set_ajax_obs("ajaxMonthHiHeatIndex",MonthHiHeatIndex);
                MonthHiHeatIndexHour = clientrawextra[176];
                set_ajax_obs("ajaxMonthHiHeatIndexHour",MonthHiHeatIndexHour);
                MonthHiHeatIndexMin = clientrawextra[177];
                set_ajax_obs("ajaxMonthHiHeatIndexMin",MonthHiHeatIndexMin);
                MonthHiHeatIndexDay = clientrawextra[178];
                set_ajax_obs("ajaxMonthHiHeatIndexDay",MonthHiHeatIndexDay);
                MonthHiHeatIndexMon = clientrawextra[179];
                set_ajax_obs("ajaxMonthHiHeatIndexMon",MonthHiHeatIndexMon);

                MonthHiBaro = clientrawextra[91];
                set_ajax_obs("ajaxMonthHiBaro",MonthHiBaro);
                MonthHiBaroHour = clientrawextra[92];
                set_ajax_obs("ajaxMonthHiBaroHour",MonthHiBaroHour);
                MonthHiBaroMin = clientrawextra[93];
                set_ajax_obs("ajaxMonthHiBaroMin",MonthHiBaroMin);
                MonthHiBaroDay = clientrawextra[94];
                set_ajax_obs("ajaxMonthHiBaroDay",MonthHiBaroDay);
                MonthHiBaroMon = clientrawextra[95];
                set_ajax_obs("ajaxMonthHiBaroMon",MonthHiBaroMon);

                YTDHiBaro = clientrawextra[217];
                set_ajax_obs("ajaxYTDHiBaro",YTDHiBaro);
                YTDHiBaroHour = clientrawextra[218];
                set_ajax_obs("ajaxYTDHiBaroHour",YTDHiBaroHour);
                YTDHiBaroMin = clientrawextra[219];
                set_ajax_obs("ajaxYTDHiBaroMin",YTDHiBaroMin);
                YTDHiBaroDay = clientrawextra[220];
                set_ajax_obs("ajaxYTDHiBaroDay",YTDHiBaroDay);
                YTDHiBaroMon = clientrawextra[221];
                set_ajax_obs("ajaxYTDHiBaroMon",YTDHiBaroMon);

                MonthLoBaro = clientrawextra[85];
                set_ajax_obs("ajaxMonthLoBaro",MonthLoBaro);
                MonthLoBaroHour = clientrawextra[86];
                set_ajax_obs("ajaxMonthLoBaroHour",MonthLoBaroHour);
                MonthLoBaroMin = clientrawextra[87];
                set_ajax_obs("ajaxMonthLoBaroMin",MonthLoBaroMin);
                MonthLoBaroDay = clientrawextra[88];
                set_ajax_obs("ajaxMonthLoBaroDay",MonthLoBaroDay);
                MonthLoBaroMon = clientrawextra[89];
                set_ajax_obs("ajaxMonthLoBaroMon",MonthLoBaroMon);

                YTDLoBaro = clientrawextra[211];
                set_ajax_obs("ajaxYTDLoBaro",YTDLoBaro);
                YTDLoBaroHour = clientrawextra[212];
                set_ajax_obs("ajaxYTDLoBaroHour",YTDLoBaroHour);
                YTDLoBaroMin = clientrawextra[213];
                set_ajax_obs("ajaxYTDLoBaroMin",YTDLoBaroMin);
                YTDLoBaroDay = clientrawextra[214];
                set_ajax_obs("ajaxYTDLoBaroDay",YTDLoBaroDay);
                YTDLoBaroMon = clientrawextra[215];
                set_ajax_obs("ajaxYTDLoBaroMon",YTDLoBaroMon);

                MonthRainRate = clientrawextra[79];
                set_ajax_obs("ajaxMonthRainRate",MonthRainRate);
                MonthRainRateHour = clientrawextra[80];
                set_ajax_obs("ajaxMonthRainRateHour",MonthRainRateHour);
                MonthRainRateMin = clientrawextra[81];
                set_ajax_obs("ajaxMonthRainRateMin",MonthRainRateMin);
                MonthRainRateDay = clientrawextra[82];
                set_ajax_obs("ajaxMonthRainRateDay",MonthRainRateDay);
                MonthRainRateMon = clientrawextra[83];
                set_ajax_obs("ajaxMonthRainRateMon",MonthRainRateMon);

                MonthDailyRain = clientrawextra[97];
                set_ajax_obs("ajaxMonthDailyRain",MonthDailyRain);
                MonthDailyRainHour = clientrawextra[98];
                set_ajax_obs("ajaxMonthDailyRainHour",MonthDailyRainHour);
                MonthDailyRainMin = clientrawextra[99];
                set_ajax_obs("ajaxMonthDailyRainMin",MonthDailyRainMin);
                MonthDailyRainDay = clientrawextra[100];
                set_ajax_obs("ajaxMonthDailyRainDay",MonthDailyRainDay);
                MonthDailyRainMon = clientrawextra[101];
                set_ajax_obs("ajaxMonthDailyRainMon",MonthDailyRainMon);

                MonthDailyRainHR = clientrawextra[103];
                set_ajax_obs("ajaxMonthDailyRainHR",MonthDailyRainHR);
                MonthDailyRainHRHour = clientrawextra[104];
                set_ajax_obs("ajaxMonthDailyRainHRHour",MonthDailyRainHRHour);
                MonthDailyRainHRMin = clientrawextra[105];
                set_ajax_obs("ajaxMonthDailyRainHRMin",MonthDailyRainHRMin);
                MonthDailyRainHRDay = clientrawextra[106];
                set_ajax_obs("ajaxMonthDailyRainHRDay",MonthDailyRainHRDay);
                MonthDailyRainHRMon = clientrawextra[107];
                set_ajax_obs("ajaxMonthDailyRainHRMon",MonthDailyRainHRMon);

                MonthAvgSpeedDir = clientrawextra[145];
                set_ajax_obs("ajaxMonthAvgSpeedDir",MonthAvgSpeedDir);
                MonthAvgSpeed = clientrawextra[109];
                set_ajax_obs("ajaxMonthAvgSpeed",MonthAvgSpeed);
                MonthHighGustDir = clientrawextra[139];
                set_ajax_obs("ajaxMonthHighGustDir",MonthHighGustDir);
                MonthGust = clientrawextra[73];
                set_ajax_obs("ajaxMonthGust",MonthGust);

// Trends -------------------------------------------------------------------------- Trends -----------

                TempHour24 = clientrawextra[569];
                set_ajax_obs("ajaxTempHour24",TempHour24);
                TempHour23 = clientrawextra[568];
                set_ajax_obs("ajaxTempHour23",TempHour23);      
                TempHour22 = clientrawextra[567];
                set_ajax_obs("ajaxTempHour22",TempHour22);
                TempHour21 = clientrawextra[566];
                set_ajax_obs("ajaxTempHour21",TempHour21);
                TempHour20 = clientrawextra[40];
                set_ajax_obs("ajaxTempHour20",TempHour20);
                TempHour19 = clientrawextra[39];
                set_ajax_obs("ajaxTempHour19",TempHour19);      
                TempHour18 = clientrawextra[38];
                set_ajax_obs("ajaxTempHour18",TempHour18);
                TempHour17 = clientrawextra[37];
                set_ajax_obs("ajaxTempHour17",TempHour17);
                TempHour16 = clientrawextra[36];
                set_ajax_obs("ajaxTempHour16",TempHour16);
                TempHour15 = clientrawextra[35];
                set_ajax_obs("ajaxTempHour15",TempHour15);      
                TempHour14 = clientrawextra[34];
                set_ajax_obs("ajaxTempHour14",TempHour14);
                TempHour13 = clientrawextra[33];
                set_ajax_obs("ajaxTempHour13",TempHour13);
                TempHour12 = clientrawextra[32];
                set_ajax_obs("ajaxTempHour12",TempHour12);
                TempHour11 = clientrawextra[31];
                set_ajax_obs("ajaxTempHour11",TempHour11);      
                TempHour10 = clientrawextra[30];
                set_ajax_obs("ajaxTempHour10",TempHour10);
                TempHour09 = clientrawextra[29];
                set_ajax_obs("ajaxTempHour09",TempHour09);
                TempHour08 = clientrawextra[28];
                set_ajax_obs("ajaxTempHour08",TempHour08);
                TempHour07 = clientrawextra[27];
                set_ajax_obs("ajaxTempHour07",TempHour07);      
                TempHour06 = clientrawextra[26];
                set_ajax_obs("ajaxTempHour06",TempHour06);
                TempHour05 = clientrawextra[25];
                set_ajax_obs("ajaxTempHour05",TempHour05);
                TempHour04 = clientrawextra[24];
                set_ajax_obs("ajaxTempHour04",TempHour04);
                TempHour03 = clientrawextra[23];
                set_ajax_obs("ajaxTempHour03",TempHour03);      
                TempHour02 = clientrawextra[22];
                set_ajax_obs("ajaxTempHour02",TempHour02);
                TempHour01 = clientrawextra[21];
                set_ajax_obs("ajaxTempHour01",TempHour01);

                UVHour24 = clientrawextra[589];
                set_ajax_obs("ajaxUVHour24",UVHour24);
                UVHour23 = clientrawextra[588];
                set_ajax_obs("ajaxUVHour23",UVHour23);      
                UVHour22 = clientrawextra[587];
                set_ajax_obs("ajaxUVHour22",UVHour22);
                UVHour21 = clientrawextra[586];
                set_ajax_obs("ajaxUVHour21",UVHour21);
                UVHour20 = clientrawextra[530];
                set_ajax_obs("ajaxUVHour20",UVHour20);
                UVHour19 = clientrawextra[529];
                set_ajax_obs("ajaxUVHour19",UVHour19);      
                UVHour18 = clientrawextra[528];
                set_ajax_obs("ajaxUVHour18",UVHour18);
                UVHour17 = clientrawextra[527];
                set_ajax_obs("ajaxUVHour17",UVHour17);
                UVHour16 = clientrawextra[526];
                set_ajax_obs("ajaxUVHour16",UVHour16);
                UVHour15 = clientrawextra[525];
                set_ajax_obs("ajaxUVHour15",UVHour15);      
                UVHour14 = clientrawextra[524];
                set_ajax_obs("ajaxUVHour14",UVHour14);
                UVHour13 = clientrawextra[523];
                set_ajax_obs("ajaxUVHour13",UVHour13);
                UVHour12 = clientrawextra[522];
                set_ajax_obs("ajaxUVHour12",UVHour12);
                UVHour11 = clientrawextra[521];
                set_ajax_obs("ajaxUVHour11",UVHour11);      
                UVHour10 = clientrawextra[520];
                set_ajax_obs("ajaxUVHour10",UVHour10);
                UVHour09 = clientrawextra[519];
                set_ajax_obs("ajaxUVHour09",UVHour09);
                UVHour08 = clientrawextra[518];
                set_ajax_obs("ajaxUVHour08",UVHour08);
                UVHour07 = clientrawextra[517];
                set_ajax_obs("ajaxUVHour07",UVHour07);      
                UVHour06 = clientrawextra[516];
                set_ajax_obs("ajaxUVHour06",UVHour06);
                UVHour05 = clientrawextra[515];
                set_ajax_obs("ajaxUVHour05",UVHour05);
                UVHour04 = clientrawextra[514];
                set_ajax_obs("ajaxUVHour04",UVHour04);
                UVHour03 = clientrawextra[513];
                set_ajax_obs("ajaxUVHour03",UVHour03);      
                UVHour02 = clientrawextra[512];
                set_ajax_obs("ajaxUVHour02",UVHour02);
                UVHour01 = clientrawextra[511];
                set_ajax_obs("ajaxUVHour01",UVHour01);

                SolarHour24 = clientrawextra[585];
                set_ajax_obs("ajaxSolarHour24",SolarHour24);
                SolarHour23 = clientrawextra[584];
                set_ajax_obs("ajaxSolarHour23",SolarHour23);      
                SolarHour22 = clientrawextra[583];
                set_ajax_obs("ajaxSolarHour22",SolarHour22);
                SolarHour21 = clientrawextra[582];
                set_ajax_obs("ajaxSolarHour21",SolarHour21);
                SolarHour20 = clientrawextra[510];
                set_ajax_obs("ajaxSolarHour20",SolarHour20);
                SolarHour19 = clientrawextra[509];
                set_ajax_obs("ajaxSolarHour19",SolarHour19);      
                SolarHour18 = clientrawextra[508];
                set_ajax_obs("ajaxSolarHour18",SolarHour18);
                SolarHour17 = clientrawextra[507];
                set_ajax_obs("ajaxSolarHour17",SolarHour17);
                SolarHour16 = clientrawextra[506];
                set_ajax_obs("ajaxSolarHour16",SolarHour16);
                SolarHour15 = clientrawextra[505];
                set_ajax_obs("ajaxSolarHour15",SolarHour15);      
                SolarHour14 = clientrawextra[504];
                set_ajax_obs("ajaxSolarHour14",SolarHour14);
                SolarHour13 = clientrawextra[503];
                set_ajax_obs("ajaxSolarHour13",SolarHour13);
                SolarHour12 = clientrawextra[502];
                set_ajax_obs("ajaxSolarHour12",SolarHour12);
                SolarHour11 = clientrawextra[501];
                set_ajax_obs("ajaxSolarHour11",SolarHour11);      
                SolarHour10 = clientrawextra[500];
                set_ajax_obs("ajaxSolarHour10",SolarHour10);
                SolarHour09 = clientrawextra[499];
                set_ajax_obs("ajaxSolarHour09",SolarHour09);
                SolarHour08 = clientrawextra[498];
                set_ajax_obs("ajaxSolarHour08",SolarHour08);
                SolarHour07 = clientrawextra[497];
                set_ajax_obs("ajaxSolarHour07",SolarHour07);      
                SolarHour06 = clientrawextra[496];
                set_ajax_obs("ajaxSolarHour06",SolarHour06);
                SolarHour05 = clientrawextra[495];
                set_ajax_obs("ajaxSolarHour05",SolarHour05);
                SolarHour04 = clientrawextra[494];
                set_ajax_obs("ajaxSolarHour04",SolarHour04);
                SolarHour03 = clientrawextra[493];
                set_ajax_obs("ajaxSolarHour03",SolarHour03);      
                SolarHour02 = clientrawextra[492];
                set_ajax_obs("ajaxSolarHour02",SolarHour02);
                SolarHour01 = clientrawextra[491];
                set_ajax_obs("ajaxSolarHour01",SolarHour01);

                DirHour24 = windDir(clientrawextra[593]);
                set_ajax_obs("ajaxDirHour24",DirHour24);
                DirHour23 = windDir(clientrawextra[592]);
                set_ajax_obs("ajaxDirHour23",DirHour23);      
                DirHour22 = windDir(clientrawextra[591]);
                set_ajax_obs("ajaxDirHour22",DirHour22);
                DirHour21 = windDir(clientrawextra[590]);
                set_ajax_obs("ajaxDirHour21",DirHour21);
                DirHour20 = windDir(clientrawextra[555]);
                set_ajax_obs("ajaxDirHour20",DirHour20);
                DirHour19 = windDir(clientrawextra[554]);
                set_ajax_obs("ajaxDirHour19",DirHour19);      
                DirHour18 = windDir(clientrawextra[553]);
                set_ajax_obs("ajaxDirHour18",DirHour18);
                DirHour17 = windDir(clientrawextra[552]);
                set_ajax_obs("ajaxDirHour17",DirHour17);
                DirHour16 = windDir(clientrawextra[551]);
                set_ajax_obs("ajaxDirHour16",DirHour16);
                DirHour15 = windDir(clientrawextra[550]);
                set_ajax_obs("ajaxDirHour15",DirHour15);      
                DirHour14 = windDir(clientrawextra[549]);
                set_ajax_obs("ajaxDirHour14",DirHour14);
                DirHour13 = windDir(clientrawextra[548]);
                set_ajax_obs("ajaxDirHour13",DirHour13);
                DirHour12 = windDir(clientrawextra[547]);
                set_ajax_obs("ajaxDirHour12",DirHour12);
                DirHour11 = windDir(clientrawextra[546]);
                set_ajax_obs("ajaxDirHour11",DirHour11);      
                DirHour10 = windDir(clientrawextra[545]);
                set_ajax_obs("ajaxDirHour10",DirHour10);
                DirHour09 = windDir(clientrawextra[544]);
                set_ajax_obs("ajaxDirHour09",DirHour09);
                DirHour08 = windDir(clientrawextra[543]);
                set_ajax_obs("ajaxDirHour08",DirHour08);
                DirHour07 = windDir(clientrawextra[542]);
                set_ajax_obs("ajaxDirHour07",DirHour07);      
                DirHour06 = windDir(clientrawextra[541]);
                set_ajax_obs("ajaxDirHour06",DirHour06);
                DirHour05 = windDir(clientrawextra[540]);
                set_ajax_obs("ajaxDirHour05",DirHour05);
                DirHour04 = windDir(clientrawextra[539]);
                set_ajax_obs("ajaxDirHour04",DirHour04);
                DirHour03 = windDir(clientrawextra[538]);
                set_ajax_obs("ajaxDirHour03",DirHour03);      
                DirHour02 = windDir(clientrawextra[537]);
                set_ajax_obs("ajaxDirHour02",DirHour02);
                DirHour01 = windDir(clientrawextra[536]);
                set_ajax_obs("ajaxDirHour01",DirHour01);

                WindHour24 = convertWindKm(clientrawextra[565]);
                set_ajax_obs("ajaxWindHour24",WindHour24.toFixed(1));
                WindHour23 = convertWindKm(clientrawextra[564]);
                set_ajax_obs("ajaxWindHour23",WindHour23.toFixed(1));      
                WindHour22 = convertWindKm(clientrawextra[563]);
                set_ajax_obs("ajaxWindHour22",WindHour22.toFixed(1));
                WindHour21 = convertWindKm(clientrawextra[562]);
                set_ajax_obs("ajaxWindHour21",WindHour21.toFixed(1));
                WindHour20 = convertWindKm(clientrawextra[20]);
                set_ajax_obs("ajaxWindHour20",WindHour20.toFixed(1));
                WindHour19 = convertWindKm(clientrawextra[19]);
                set_ajax_obs("ajaxWindHour19",WindHour19.toFixed(1));      
                WindHour18 = convertWindKm(clientrawextra[18]);
                set_ajax_obs("ajaxWindHour18",WindHour18.toFixed(1));
                WindHour17 = convertWindKm(clientrawextra[17]);
                set_ajax_obs("ajaxWindHour17",WindHour17.toFixed(1));
                WindHour16 = convertWindKm(clientrawextra[16]);
                set_ajax_obs("ajaxWindHour16",WindHour16.toFixed(1));
                WindHour15 = convertWindKm(clientrawextra[15]);
                set_ajax_obs("ajaxWindHour15",WindHour15.toFixed(1));      
                WindHour14 = convertWindKm(clientrawextra[14]);
                set_ajax_obs("ajaxWindHour14",WindHour14.toFixed(1));
                WindHour13 = convertWindKm(clientrawextra[13]);
                set_ajax_obs("ajaxWindHour13",WindHour13.toFixed(1));
                WindHour12 = convertWindKm(clientrawextra[12]);
                set_ajax_obs("ajaxWindHour12",WindHour12.toFixed(1));
                WindHour11 = convertWindKm(clientrawextra[11]);
                set_ajax_obs("ajaxWindHour11",WindHour11.toFixed(1));      
                WindHour10 = convertWindKm(clientrawextra[10]);
                set_ajax_obs("ajaxWindHour10",WindHour10.toFixed(1));
                WindHour09 = convertWindKm(clientrawextra[9]);
                set_ajax_obs("ajaxWindHour09",WindHour09.toFixed(1));
                WindHour08 = convertWindKm(clientrawextra[8]);
                set_ajax_obs("ajaxWindHour08",WindHour08.toFixed(1));
                WindHour07 = convertWindKm(clientrawextra[7]);
                set_ajax_obs("ajaxWindHour07",WindHour07.toFixed(1));      
                WindHour06 = convertWindKm(clientrawextra[6]);
                set_ajax_obs("ajaxWindHour06",WindHour06.toFixed(1));
                WindHour05 = convertWindKm(clientrawextra[5]);
                set_ajax_obs("ajaxWindHour05",WindHour05.toFixed(1));
                WindHour04 = convertWindKm(clientrawextra[4]);
                set_ajax_obs("ajaxWindHour04",WindHour04.toFixed(1));
                WindHour03 = convertWindKm(clientrawextra[3]);
                set_ajax_obs("ajaxWindHour03",WindHour03.toFixed(1));      
                WindHour02 = convertWindKm(clientrawextra[2]);
                set_ajax_obs("ajaxWindHour02",WindHour02.toFixed(1));
                WindHour01 = convertWindKm(clientrawextra[1]);
                set_ajax_obs("ajaxWindHour01",WindHour01.toFixed(1));

                RainHour24 = clientrawextra[573];
                set_ajax_obs("ajaxRainHour24",RainHour24);
                RainHour23 = clientrawextra[572];
                set_ajax_obs("ajaxRainHour23",RainHour23);      
                RainHour22 = clientrawextra[571];
                set_ajax_obs("ajaxRainHour22",RainHour22);
                RainHour21 = clientrawextra[570];
                set_ajax_obs("ajaxRainHour21",RainHour21);
                RainHour20 = clientrawextra[60];
                set_ajax_obs("ajaxRainHour20",RainHour20);
                RainHour19 = clientrawextra[59];
                set_ajax_obs("ajaxRainHour19",RainHour19);      
                RainHour18 = clientrawextra[58];
                set_ajax_obs("ajaxRainHour18",RainHour18);
                RainHour17 = clientrawextra[57];
                set_ajax_obs("ajaxRainHour17",RainHour17);
                RainHour16 = clientrawextra[56];
                set_ajax_obs("ajaxRainHour16",RainHour16);
                RainHour15 = clientrawextra[55];
                set_ajax_obs("ajaxRainHour15",RainHour15);      
                RainHour14 = clientrawextra[54];
                set_ajax_obs("ajaxRainHour14",RainHour14);
                RainHour13 = clientrawextra[53];
                set_ajax_obs("ajaxRainHour13",RainHour13);
                RainHour12 = clientrawextra[52];
                set_ajax_obs("ajaxRainHour12",RainHour12);
                RainHour11 = clientrawextra[51];
                set_ajax_obs("ajaxRainHour11",RainHour11);      
                RainHour10 = clientrawextra[50];
                set_ajax_obs("ajaxRainHour10",RainHour10);
                RainHour09 = clientrawextra[49];
                set_ajax_obs("ajaxRainHour09",RainHour09);
                RainHour08 = clientrawextra[48];
                set_ajax_obs("ajaxRainHour08",RainHour08);
                RainHour07 = clientrawextra[47];
                set_ajax_obs("ajaxRainHour07",RainHour07);      
                RainHour06 = clientrawextra[46];
                set_ajax_obs("ajaxRainHour06",RainHour06);
                RainHour05 = clientrawextra[45];
                set_ajax_obs("ajaxRainHour05",RainHour05);
                RainHour04 = clientrawextra[44];
                set_ajax_obs("ajaxRainHour04",RainHour04);
                RainHour03 = clientrawextra[43];
                set_ajax_obs("ajaxRainHour03",RainHour03);      
                RainHour02 = clientrawextra[42];
                set_ajax_obs("ajaxRainHour02",RainHour02);
                RainHour01 = clientrawextra[41];
                set_ajax_obs("ajaxRainHour01",RainHour01);


                BaroHour24 = clientrawextra[577];
                set_ajax_obs("ajaxBaroHour24",BaroHour24);
                BaroHour23 = clientrawextra[576];
                set_ajax_obs("ajaxBaroHour23",BaroHour23);      
                BaroHour22 = clientrawextra[575];
                set_ajax_obs("ajaxBaroHour22",BaroHour22);
                BaroHour21 = clientrawextra[574];
                set_ajax_obs("ajaxBaroHour21",BaroHour21);
                BaroHour20 = clientrawextra[458];
                set_ajax_obs("ajaxBaroHour20",BaroHour20);
                BaroHour19 = clientrawextra[457];
                set_ajax_obs("ajaxBaroHour19",BaroHour19);      
                BaroHour18 = clientrawextra[456];
                set_ajax_obs("ajaxBaroHour18",BaroHour18);
                BaroHour17 = clientrawextra[455];
                set_ajax_obs("ajaxBaroHour17",BaroHour17);
                BaroHour16 = clientrawextra[454];
                set_ajax_obs("ajaxBaroHour16",BaroHour16);
                BaroHour15 = clientrawextra[453];
                set_ajax_obs("ajaxBaroHour15",BaroHour15);      
                BaroHour14 = clientrawextra[452];
                set_ajax_obs("ajaxBaroHour14",BaroHour14);
                BaroHour13 = clientrawextra[451];
                set_ajax_obs("ajaxBaroHour13",BaroHour13);
                BaroHour12 = clientrawextra[450];
                set_ajax_obs("ajaxBaroHour12",BaroHour12);
                BaroHour11 = clientrawextra[449];
                set_ajax_obs("ajaxBaroHour11",BaroHour11);      
                BaroHour10 = clientrawextra[448];
                set_ajax_obs("ajaxBaroHour10",BaroHour10);
                BaroHour09 = clientrawextra[447];
                set_ajax_obs("ajaxBaroHour09",BaroHour09);
                BaroHour08 = clientrawextra[446];
                set_ajax_obs("ajaxBaroHour08",BaroHour08);
                BaroHour07 = clientrawextra[445];
                set_ajax_obs("ajaxBaroHour07",BaroHour07);      
                BaroHour06 = clientrawextra[444];
                set_ajax_obs("ajaxBaroHour06",BaroHour06);
                BaroHour05 = clientrawextra[443];
                set_ajax_obs("ajaxBaroHour05",BaroHour05);
                BaroHour04 = clientrawextra[442];
                set_ajax_obs("ajaxBaroHour04",BaroHour04);
                BaroHour03 = clientrawextra[441];
                set_ajax_obs("ajaxBaroHour03",BaroHour03);      
                BaroHour02 = clientrawextra[440];
                set_ajax_obs("ajaxBaroHour02",BaroHour02);
                BaroHour01 = clientrawextra[439];
                set_ajax_obs("ajaxBaroHour01",BaroHour01);

                HumHour24 = clientrawextra[634];
                set_ajax_obs("ajaxHumHour24",HumHour24);
                HumHour23 = clientrawextra[633];
                set_ajax_obs("ajaxHumHour23",HumHour23);      
                HumHour22 = clientrawextra[632];
                set_ajax_obs("ajaxHumHour22",HumHour22);
                HumHour21 = clientrawextra[631];
                set_ajax_obs("ajaxHumHour21",HumHour21);
                HumHour20 = clientrawextra[630];
                set_ajax_obs("ajaxHumHour20",HumHour20);
                HumHour19 = clientrawextra[629];
                set_ajax_obs("ajaxHumHour19",HumHour19);      
                HumHour18 = clientrawextra[628];
                set_ajax_obs("ajaxHumHour18",HumHour18);
                HumHour17 = clientrawextra[627];
                set_ajax_obs("ajaxHumHour17",HumHour17);
                HumHour16 = clientrawextra[626];
                set_ajax_obs("ajaxHumHour16",HumHour16);
                HumHour15 = clientrawextra[625];
                set_ajax_obs("ajaxHumHour15",HumHour15);      
                HumHour14 = clientrawextra[624];
                set_ajax_obs("ajaxHumHour14",HumHour14);
                HumHour13 = clientrawextra[623];
                set_ajax_obs("ajaxHumHour13",HumHour13);
                HumHour12 = clientrawextra[622];
                set_ajax_obs("ajaxHumHour12",HumHour12);
                HumHour11 = clientrawextra[621];
                set_ajax_obs("ajaxHumHour11",HumHour11);      
                HumHour10 = clientrawextra[620];
                set_ajax_obs("ajaxHumHour10",HumHour10);
                HumHour09 = clientrawextra[619];
                set_ajax_obs("ajaxHumHour09",HumHour09);
                HumHour08 = clientrawextra[618];
                set_ajax_obs("ajaxHumHour08",HumHour08);
                HumHour07 = clientrawextra[617];
                set_ajax_obs("ajaxHumHour07",HumHour07);      
                HumHour06 = clientrawextra[616];
                set_ajax_obs("ajaxHumHour06",HumHour06);
                HumHour05 = clientrawextra[615];
                set_ajax_obs("ajaxHumHour05",HumHour05);
                HumHour04 = clientrawextra[614];
                set_ajax_obs("ajaxHumHour04",HumHour04);
                HumHour03 = clientrawextra[613];
                set_ajax_obs("ajaxHumHour03",HumHour03);      
                HumHour02 = clientrawextra[612];
                set_ajax_obs("ajaxHumHour02",HumHour02);
                HumHour01 = clientrawextra[611];
                set_ajax_obs("ajaxHumHour01",HumHour01);


                extrahour = clientrawextra[698];
                set_ajax_obs("ajaxextrahour",extrahour);
                extraminute = clientrawextra[699];
                set_ajax_obs("ajaxextraminute",extraminute);
                extraday = clientrawextra[700];
                set_ajax_obs("ajaxextraday",extraday);

                TimeStampHour24 = clientrawextra[581];
                set_ajax_obs("ajaxTimeStampHour24",TimeStampHour24);
                TimeStampHour23 = clientrawextra[580];
                set_ajax_obs("ajaxTimeStampHour23",TimeStampHour23);      
                TimeStampHour22 = clientrawextra[579];
                set_ajax_obs("ajaxTimeStampHour22",TimeStampHour22);
                TimeStampHour21 = clientrawextra[578];
                set_ajax_obs("ajaxTimeStampHour21",TimeStampHour21);
                TimeStampHour20 = clientrawextra[478];
                set_ajax_obs("ajaxTimeStampHour20",TimeStampHour20);
                TimeStampHour19 = clientrawextra[477];
                set_ajax_obs("ajaxTimeStampHour19",TimeStampHour19);      
                TimeStampHour18 = clientrawextra[476];
                set_ajax_obs("ajaxTimeStampHour18",TimeStampHour18);
                TimeStampHour17 = clientrawextra[475];
                set_ajax_obs("ajaxTimeStampHour17",TimeStampHour17);
                TimeStampHour16 = clientrawextra[474];
                set_ajax_obs("ajaxTimeStampHour16",TimeStampHour16);
                TimeStampHour15 = clientrawextra[473];
                set_ajax_obs("ajaxTimeStampHour15",TimeStampHour15);      
                TimeStampHour14 = clientrawextra[472];
                set_ajax_obs("ajaxTimeStampHour14",TimeStampHour14);
                TimeStampHour13 = clientrawextra[471];
                set_ajax_obs("ajaxTimeStampHour13",TimeStampHour13);
                TimeStampHour12 = clientrawextra[470];
                set_ajax_obs("ajaxTimeStampHour12",TimeStampHour12);
                TimeStampHour11 = clientrawextra[469];
                set_ajax_obs("ajaxTimeStampHour11",TimeStampHour11);      
                TimeStampHour10 = clientrawextra[468];
                set_ajax_obs("ajaxTimeStampHour10",TimeStampHour10);
                TimeStampHour09 = clientrawextra[467];
                set_ajax_obs("ajaxTimeStampHour09",TimeStampHour09);
                TimeStampHour08 = clientrawextra[466];
                set_ajax_obs("ajaxTimeStampHour08",TimeStampHour08);
                TimeStampHour07 = clientrawextra[465];
                set_ajax_obs("ajaxTimeStampHour07",TimeStampHour07);      
                TimeStampHour06 = clientrawextra[464];
                set_ajax_obs("ajaxTimeStampHour06",TimeStampHour06);
                TimeStampHour05 = clientrawextra[463];
                set_ajax_obs("ajaxTimeStampHour05",TimeStampHour05);
                TimeStampHour04 = clientrawextra[462];
                set_ajax_obs("ajaxTimeStampHour04",TimeStampHour04);
                TimeStampHour03 = clientrawextra[461];
                set_ajax_obs("ajaxTimeStampHour03",TimeStampHour03);      
                TimeStampHour02 = clientrawextra[460];
                set_ajax_obs("ajaxTimeStampHour02",TimeStampHour02);
                TimeStampHour01 = clientrawextra[459];
                set_ajax_obs("ajaxTimeStampHour01",TimeStampHour01);



 	  } // END if(clientrawextra[0] = '12345' and '!!' at end)

	 } // END if (x.readyState == 4 && x.status == 200)

    } // END try

   	catch(e){}  // Mike Challis added fix to fix random error: NS_ERROR_NOT_AVAILABLE

    } // END x.onreadystatechange = function() {
    x.open("GET", url, true);
    x.send(null);

//get all of them every minute = 5000 milliseconds
//edit the location of your clienrawextra.txt twice!! (here and in the body onload)
	setTimeout("reset_ajax_color('')",flashtime); // change text back to default color 
    setTimeout("ajaxLoaderExtra(clientrawExtraFile + '?' + new Date().getTime())", reloadTime2); // get new data after 5 secs
  }
} // end ajaxLoaderExtra function




// ------------------------------------------------------------------------------------------
//  main function.. read CUSTOMraw.txt and format <span class="ajax" id="ajax..."></span> areas
// ------------------------------------------------------------------------------------------
function ajaxLoadercustom(url) {
  if (document.getElementById) {
    var x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(url);
  }
  if (x) { // got something back
    x.onreadystatechange = function() {
    try { if (x.readyState == 4 && x.status == 200) { // Mike Challis added fix to fix random error: NS_ERROR_NOT_AVAILABLE 
    var customraw = x.responseText.split('>');
    var wdpattern=/\d+\.\d+.*!!/; // looks for '!!nn.nn!!' version string 
	if(customraw[0] == '12345' && wdpattern.test(x.responseText) ) {

                var dirtyString = customraw[1];
                var HDiff = dirtyString.stripOffIllegalChars();
                set_ajax_obs("ajaxHDiff",HDiff);
                BaroDiff3H = customraw[2];
                set_ajax_obs("ajaxBaroDiff3H",BaroDiff3H)
                SeaCondition = customraw[3];
                set_ajax_obs("ajaxSeaCondition",SeaCondition);
                monthdayswithrain= customraw[4];
                set_ajax_obs("ajaxmonthdayswithrain",monthdayswithrain);
                AvgBft = customraw[5];
                set_ajax_obs("ajaxAvgBft",AvgBft);
                timeoflastrain = customraw[6];
                set_ajax_obs("ajaxtimeoflastrain",timeoflastrain);
                dateoflastrain = customraw[7];
                set_ajax_obs("ajaxdateoflastrain",dateoflastrain);
                sunshinemonth = customraw[8];
                set_ajax_obs("ajaxsunshinemonth",sunshinemonth);
                windruntoday = customraw[9];
                set_ajax_obs("ajaxwindruntoday",windruntoday);
                Evaportranspiration = customraw[10];
                set_ajax_obs("ajaxEvaportranspiration",Evaportranspiration);
                Evaportranspirationmonth = customraw[11];
                set_ajax_obs("ajaxEvaportranspirationmonth",Evaportranspirationmonth);
                airdensity = customraw[12];
                set_ajax_obs("ajaxairdensity",airdensity);
                abshum = customraw[13];
                set_ajax_obs("ajaxabshum",abshum);
                wetbulb = customraw[14];
                set_ajax_obs("ajaxwetbulb",wetbulb);
                dewdep = customraw[15];
                set_ajax_obs("ajaxdewdep",dewdep);
                currentwdet = customraw[16];
                set_ajax_obs("currentwdet",currentwdet);
                burntime = customraw[17];
                set_ajax_obs("ajaxburntime",burntime);
                vapourpressure = customraw[18];
                set_ajax_obs("ajaxvapourpressure",vapourpressure);
                rainduration = customraw[19];
                set_ajax_obs("ajaxrainduration",rainduration);
                wetbulbdiff = customraw[20];
                set_ajax_obs("ajaxwetbulbdiff",wetbulbdiff);
                hoursoffrost = customraw[21];
                set_ajax_obs("ajaxhoursoffrost",hoursoffrost);
                dewchangelasthour = customraw[22];
                set_ajax_obs("ajaxdewchangelasthour",dewchangelasthour);
                humchangelasthour = customraw[23];
                set_ajax_obs("ajaxhumchangelasthour",humchangelasthour);
                curdir10minutelabel = customraw[24];
                set_ajax_obs("ajaxcurdir10minutelabel",curdir10minutelabel);
                forecasticonword = customraw[25];
                set_ajax_obs("ajaxforecasticonword",forecasticonword);

                VPforecasttext = customraw[26];
                set_ajax_obs("ajaxVPforecasttext",VPforecasttext);
                highbaro = customraw[27];
                set_ajax_obs("ajaxhighbaro",highbaro);
                highbarotime = customraw[28];
                set_ajax_obs("ajaxhighbarotime",highbarotime);
                lowbaro = customraw[29];
                set_ajax_obs("ajaxlowbaro",lowbaro);
                lowbarotime = customraw[30];
                set_ajax_obs("ajaxlowbarotime",lowbarotime);
                highsolar = customraw[31];
                set_ajax_obs("ajaxhighsolar",highsolar);
                highsolartime = customraw[32];
                set_ajax_obs("ajaxhighsolartime",highsolartime);
                highhum = customraw[33];
                set_ajax_obs("ajaxhighhum",highhum);
                highhumtime = customraw[34];
                set_ajax_obs("ajaxhighhumtime",highhumtime);
                lowhum = customraw[35];
                set_ajax_obs("ajaxlowhum",lowhum);
                lowhumtime = customraw[36];
                set_ajax_obs("ajaxlowhumtime",lowhumtime);
                hightemp = customraw[37];
                set_ajax_obs("ajaxhightemp",hightemp);

                set_ajax_obs("ajaxhightemptoday",hightemp);
                hightempyesterday = customraw[64];           
                set_ajax_obs("ajaxhightempyesterday",hightempyesterday);

                var dirtyString = customraw[66];
                var hightemp1yearago = dirtyString.stripOffIllegalChars();      
                set_ajax_obs("ajaxhightemp1yearago",hightemp1yearago);

                hightemprecords = customraw[68];           
                set_ajax_obs("ajaxhightemprecords",hightemprecords);
                timeofhightemprecords = customraw[70];           
                set_ajax_obs("ajaxtimeofhightemprecords",timeofhightemprecords);

                hightemptime = customraw[38];
                set_ajax_obs("ajaxhightemptime",hightemptime);
                lowtemp = customraw[39];
                set_ajax_obs("ajaxlowtemp",lowtemp);

                set_ajax_obs("ajaxlowtemptoday",lowtemp);
                lowtempyesterday = customraw[65];           
                set_ajax_obs("ajaxlowtempyesterday",lowtempyesterday);

                var dirtyString = customraw[67];
                var lowtemp1yearago = dirtyString.stripOffIllegalChars();      
                set_ajax_obs("ajaxlowtemp1yearago",lowtemp1yearago);
                lowtemprecords = customraw[69];           
                set_ajax_obs("ajaxlowtemprecords",lowtemprecords);
                timeoflowtemprecords = customraw[71];           
                set_ajax_obs("ajaxtimeoflowtemprecords",timeoflowtemprecords);

                lowtemptime = customraw[40];
                set_ajax_obs("ajaxlowtemptime",lowtemptime);
                humchange24hour = customraw[41];
                set_ajax_obs("ajaxhumchange24hour",humchange24hour + " / 24 hrs");
                highwindtime = customraw[42];
                set_ajax_obs("ajaxhighwindtime",highwindtime);
                highuv = customraw[43];
                set_ajax_obs("ajaxhighuv",highuv);
                highuvtime = customraw[44];
                set_ajax_obs("ajaxhighuvtime",highuvtime);
                vpissstatus = customraw[45];
                set_ajax_obs("ajaxvpissstatus",vpissstatus);
                vpreception = customraw[46];
                set_ajax_obs("ajaxvpreception",vpreception);
                vpconsolebattery = customraw[47];
                set_ajax_obs("ajaxvpconsolebattery",vpconsolebattery);
                dayornight = customraw[50];
                set_ajax_obs("ajaxdayornight",dayornight);
                yesthitemp = customraw[51];
                set_ajax_obs("ajaxyesthitemp",yesthitemp);
                yestlotemp = customraw[52];
                set_ajax_obs("ajaxyestlotemp",yestlotemp);
                baro1hour = customraw[53];
                set_ajax_obs("ajaxbaro1hour",baro1hour);
                baro3hours = customraw[54];
                set_ajax_obs("ajaxbaro3hours",baro3hours);
                baro6hours = customraw[55];
                set_ajax_obs("ajaxbaro6hours",baro6hours);
                baro12hours = customraw[56];
                set_ajax_obs("ajaxbaro12hours",baro12hours);
                baro24hours = customraw[57];
                set_ajax_obs("ajaxbaro24hours",baro24hours);
                daysTmin5C = customraw[58];
                set_ajax_obs("ajaxdaysTmin5C",daysTmin5C);
                daysTmin0C = customraw[59];
                set_ajax_obs("ajaxdaysTmin0C",daysTmin0C);
                daysTmax30C = customraw[60];
                set_ajax_obs("ajaxdaysTmax30C",daysTmax30C);
                daysTmax35C = customraw[61];
                set_ajax_obs("ajaxdaysTmax35C",daysTmax35C);
                maxbaroyest = customraw[62];
                set_ajax_obs("ajaxmaxbaroyest",maxbaroyest);
                minbaroyest = customraw[63];
                set_ajax_obs("ajaxminbaroyest",minbaroyest);

//                set_ajax_obj("ajaxcam1","<img src="http://www.meteofan.eu/ftpcam_1.jpg" />");
               
		// now ensure that the indicator flashes on every AJAX fetch
        element = document.getElementById("ajaxindicator");
		if (element) {
          element.style.color = flashcolor;
		}

 	  } // END if(clientrawextra[0] = '12345' and '!!' at end)

	 } // END if (x.readyState == 4 && x.status == 200)

    } // END try

   	catch(e){}  // Mike Challis added fix to fix random error: NS_ERROR_NOT_AVAILABLE

    } // END x.onreadystatechange = function() {
    x.open("GET", url, true);
    x.send(null);

//get all of them every minute = 5000 milliseconds
//edit the location of your clienraw.txt twice!! (here and in the body onload)
	setTimeout("reset_ajax_color('')",flashtime); // change text back to default color 
    setTimeout("ajaxLoadercustom(customrawFile + '?' + new Date().getTime())", reloadTime3); // get new data after 5 secs
  }
} // end ajaxLoader function




//element = document.getElementById("ajaxcounter");
//if (element) {
  window.setInterval("ajax_countup()", 1000); // run the counter for seconds since update
//}

// invoke when first loaded on page
if (! ajaxLoaderInBody) { ajaxLoader(clientrawFile + '?' + new Date().getTime(),reloadTime); }
if (! ajaxLoaderExtraInBody) { ajaxLoaderExtra(clientrawExtraFile + '?' + new Date().getTime(),reloadTime2); }
if (! ajaxLoadercustomInBody) { ajaxLoadercustom(customrawFile + '?' + new Date().getTime(),reloadTime3); }


// ]]>
