var refreshTimeout=120000;

// Initialise data ready flags
var almanacReady=0;
var CRReady =0;
var ECRReady=0;
var HCRReady=0;
var DCRReady=0;
var hr24Ready=0;
var dataReady=0;

// Temporart variables
var lines24hr;

// All weather variables
var stationName;			// Name from clientraw
var time;				// Time of last update from clientraw

var hourOutTemp = new Array(60);	// Last 60 minutes temp
var hourBaro = new Array(60);		// Last 60 minutes baro
var hourMaxWindGust;			// Last 60 minutes max Wind Gust

var dayOutTemp = [];		// Last 24 hours temp
var dayOutWind = [];		// Last 24 hours wind

var actualOutTemp;			// Current outside temperature
var actualWind;				// Current wind
var actualOutHumidity;			// Current outside humidity
var actualBaro;				// Current pressure reading

var dailyMaxWindGust;			// Daily Maximum Wind Gust
var dailyMinOutTemp;			// Daily Minimum outside temperature

var dailyMaxOutTemp;			// Daily maximum outside temperature

var sunrise;				// Local Sunrise
var sunset;				// Local Sunset
var dawn;				// Local Dawn
var dusk;				// Local Dusk


var crExtraTimestamp = [];

function parseClientRaw(rawData){

	var clientRaw = rawData.split(" ");
	if(clientRaw[0]!='12345')
	{
	 getCR();
	}
	else
	{
		var station_time = clientRaw[32].split("-");
        	time = station_time[station_time.length - 1];
        	stationName = station_time[0];
        	actualOutTemp = clientRaw[4];
		actualOutHumidity=clientRaw[5];
		dailyMinOutTemp=clientRaw[47];
		dailyMaxOutTemp=clientRaw[46];
        	actualOutHumidity = clientRaw[5] ;
        	actualBaro = clientRaw[6];
        	actualWind = Math.round(clientRaw[1]*11.5)/10;
        	dailyMaxWindGust = Math.round(clientRaw[71]*11.5)/10;
		hourMaxWindGust = Math.round(clientRaw[133]*11.5)/10;		
		CRReady=1;
}
}

function parseClientRawExtra(rawECR){
	var clientRawExtra = rawECR.split(" ");
	if(clientRawExtra[0]!='12345')
	{
	getECR();
	}
	else
	{
	var ECRCount;
	
	//for(ECRcount=0;ECRcount<20;ECRcount++)
	//{
	//dayOutTemp[ECRcount]=clientRawExtra[21+ECRcount];
	//crExtraTimestamp[ECRcount]=clientRawExtra[459+ECRcount];
	//}
	//for(ECRcount=0;ECRcount<4;ECRcount++)
	//{
	//dayOutTemp[ECRcount+20]=clientRawExtra[566+ECRcount];
	//crExtraTimestamp[ECRcount]=clientRawExtra[578+ECRcount];
	//}
	
		 
	ECRReady=1;
	}
	
}

function parseClientRawHour(rawHCR){
	var clientRawHour = rawHCR.split(" ");
	if(clientRawHour[0]!='12345')
	{
	getHCR();
	}
	else
	{
	
	for(var HCRcount=0;HCRcount<60;HCRcount++)
	{
	hourOutTemp[HCRcount]=clientRawHour[181+HCRcount];
	hourBaro[HCRcount]=clientRawHour[301+HCRcount];
	} 
	HCRReady=1; 
   }
   }
   
   function parseClientRawDaily(rawDCR){
	var clientRawDaily = rawDCR.split(" ");
	if(clientRawDaily[0]!='12345')
	{
	getDCR();
	}
	else
	{
	
	DCRReady=1; 
   }
   }

function parse24hr(raw24hr){

	// raw24hr is now the contents of csv file, how to split into arrays?

	// first split into lines
	lines24hr = raw24hr.split(/\n/g);
	
	// now for each line split into
	// Date, temp, humidity, dewpoint, pressure, wind ,gust ,wind dir, rain
	var get24hrcount=0;
	var dayOutTime= new Date();
	
	var dayOutTimeSplit=[];
	
	for(var hr24Count=0;hr24Count < lines24hr.length;hr24Count++)
	{
	if ((lines24hr[hr24Count].split(",")[1] > -999)&& (lines24hr[hr24Count].split(",")[5] > -999)) {
	// check if line is empty???
		var UTCoffset = dayOutTime.getTimezoneOffset();
		dayOutTimeSplit[get24hrcount] = lines24hr[hr24Count].split(",")[0].split("-");
		dayOutTime.setFullYear(parseInt(dayOutTimeSplit[get24hrcount][0]),dayOutTimeSplit[get24hrcount][1]-1,dayOutTimeSplit[get24hrcount][2]);
		dayOutTime.setHours(parseInt(dayOutTimeSplit[get24hrcount][3],10)-(UTCoffset/60));
		dayOutTime.setMinutes(parseInt(dayOutTimeSplit[get24hrcount][4],10));
		dayOutTime.setSeconds(0);
		dayOutTime.setMilliseconds(0);
		dayOutTemp[get24hrcount] = [ dayOutTime.getTime(),lines24hr[hr24Count].split(",")[1] ];
		dayOutWind[get24hrcount] = [ dayOutTime.getTime(),lines24hr[hr24Count].split(",")[5] ];
		//document.write(dayOutTimeSplit[get24hrcount][0]+"-"+dayOutTimeSplit[get24hrcount][1]+"-"+dayOutTimeSplit[get24hrcount][2]+" "+dayOutTimeSplit[get24hrcount][3]+":"+dayOutTimeSplit[get24hrcount][4]+"  "+dayOutTime+" - "+dayOutTemp[get24hrcount][0]+"<BR>");

		if (hr24Count==0){
		//alert(UTCoffset );			
		}

		if ( dayOutTemp[get24hrcount]<dayOutTemp[get24hrcount-1])
		{
			//alert(dayOutTimeSplit[get24hrcount][0]+"-"+dayOutTimeSplit[get24hrcount][1]+"-"+dayOutTimeSplit[get24hrcount][2]+" "+dayOutTimeSplit[get24hrcount][3]+":"+dayOutTimeSplit[get24hrcount][4]);
			//alert(dayOutTime)
			//alert(parseInt(dayOutTimeSplit[get24hrcount][0]) +" "+parseInt(dayOutTimeSplit[get24hrcount][1])+"-"+parseInt(dayOutTimeSplit[get24hrcount][2])+"-"+parseInt(dayOutTimeSplit[get24hrcount][3])+"-"+parseInt(dayOutTimeSplit[get24hrcount][4]));
			//alert(dayOutTemp[get24hrcount][0]+" "+dayOutTemp[get24hrcount-1][0]);
		}
get24hrcount = get24hrcount +1;

	}
	}

	
	hr24Ready=1;

}
   
   function parseAlmanac(almanacData){
   	
	var almanac = almanacData.split(" ");
	sunrise=almanac[0];
	sunset = almanac[1];
	dawn=almanac[2];
	dusk=almanac[3];

	almanacReady=1;
}

function updateNewCR(){

	if (http.readyState == 4 && http.status == 200) {   
   
		parseClientRaw(http.responseText);
	}
}

function updateNewECR(){
	if (httpECR.readyState == 4 && httpECR.status == 200) {        
		parseClientRawExtra(httpECR.responseText);
	}
}

function updateNewHCR(){
	if (httpHCR.readyState == 4 && httpHCR.status == 200) {        
		parseClientRawHour(httpHCR.responseText);
	}
}

function updateNewDCR(){
	if (httpDCR.readyState == 4 && httpDCR.status == 200) {        
		parseClientRawDaily(httpDCR.responseText);
	}
}

function updateNew24hr(){
	if (http24hr.readyState == 4 && http24hr.status == 200) {        
		parse24hr(http24hr.responseText);
	}
}

function updateNewAlmanac(){
	if (httpAlmanac.readyState == 4 && httpAlmanac.status == 200) {        
		parseAlmanac(httpAlmanac.responseText);
		
	}
}




function getCR(){
	http=new XMLHttpRequest();
	http.open('get',clientrawPath+"clientraw.txt?"+new Date().getTime(),'true');
	http.onreadystatechange = updateNewCR;
	http.send(null);
	
	
}

function getECR(){
	httpECR=new XMLHttpRequest();
	httpECR.open('get',clientrawPath+"clientrawextra.txt?"+new Date().getTime(),'true');
	httpECR.onreadystatechange = updateNewECR;
	httpECR.send(null);
	
	
}

function getHCR(){
	httpHCR=new XMLHttpRequest();
	httpHCR.open('get',clientrawPath+"clientrawhour.txt?"+new Date().getTime(),'true');
	httpHCR.onreadystatechange = updateNewHCR;
	httpHCR.send(null);
	
}
function getDCR(){
	httpDCR=new XMLHttpRequest();
	httpDCR.open('get',clientrawPath+"clientrawdaily.txt?"+new Date().getTime(),'true');
	httpDCR.onreadystatechange = updateNewDCR;
	httpDCR.send(null);
	
}

function get24hr(){
	http24hr=new XMLHttpRequest();
	http24hr.open('get',clientrawPath+"24hrGraphData.txt?"+new Date().getTime(),'true');
	http24hr.onreadystatechange = updateNew24hr;
	http24hr.send(null);
}

function getAlmanac(){
	httpAlmanac=new XMLHttpRequest();
	httpAlmanac.open('get',clientrawPath+"almanac.txt?"+new Date().getTime(),'true');
	httpAlmanac.onreadystatechange = updateNewAlmanac;
	httpAlmanac.send(null);
	
}

function dataCheck() {
//alert(CRReady+" "+ ECRReady+" "+ HCRReady+" "+ almanacReady+" "+ DCRReady)
	 if(CRReady==0 || ECRReady==0 || HCRReady==0|| almanacReady==0 || DCRReady==0 || hr24Ready==0) {
		
	}
	else
	{
	
		// Reset flags now that data has been loaded
		dataReady=1;
		CRReady=0;
		ECRReady=0;
		HCRReady=0;
		DCRReady=0;
		hr24Ready=0;
		almanacReady=0;
		
	}
}

function getWXData () {

getCR();
getECR();
getHCR();
getDCR();
get24hr();
getAlmanac();
startDataUpdate();
}	