﻿// Set Feeds
//*****************************************************************************
var feedtoday = new Array();
//feedtoday[0] = "http://www.hko.gov.hk/textonly/forecast/englishwx.htm";
//feedtoday[1] = "http://www.hko.gov.hk/textonly/forecast/chinesewx.htm";
feedtoday[0] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=textonly/forecast/englishwx.htm";
feedtoday[1] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=textonly/forecast/chinesewx.htm";

var feedtodaylink = new Array();
//feedtodaylink[0] = 'http://www.hko.gov.hk/wxinfo/currwx/current.htm';
//feedtodaylink[1] = 'http://www.hko.gov.hk/wxinfo/currwx/currentc.htm';
feedtodaylink[0] = 'http://widget.tallrice.com/HKForecastLive/bypass.php?file=wxinfo/currwx/current.htm';
feedtodaylink[1] = 'http://widget.tallrice.com/HKForecastLive/bypass.php?file=wxinfo/currwx/currentc.htm';

var feedforecast = new Array();
//feedforecast[0] = "http://www.hko.gov.hk/textonly/forecast/nday.htm";
//feedforecast[1] = "http://www.hko.gov.hk/textonly/forecast/ndayc.htm";
feedforecast[0] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=textonly/forecast/nday.htm";
feedforecast[1] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=textonly/forecast/ndayc.htm";

var feedforecastlink = new Array();
//feedforecastlink[0] = "http://www.hko.gov.hk/wxinfo/currwx/fnd.htm";
//feedforecastlink[1] = "http://www.hko.gov.hk/wxinfo/currwx/fndC.htm";
feedforecastlink[0] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=wxinfo/currwx/fnd.htm";
feedforecastlink[1] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=wxinfo/currwx/fndC.htm";

var warning = new Array();
//warning[0] = "http://www.hko.gov.hk/textonly/warning/detail.htm";
//warning[1] = "http://www.hko.gov.hk/textonly/warning/detailc.htm";
warning[0] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=textonly/warning/detail.htm";
warning[1] = "http://widget.tallrice.com/HKForecastLive/bypass.php?file=textonly/warning/detailc.htm";

// Set Global Variables
//*****************************************************************************
var district = new Array(new Array(),new Array());
var degree = new Array();
var forcastDate = new Array();
var forcastMonth = new Array();
var forecastHi = new Array();
var forecastLow = new Array();
var forcastWeather = new Array();
var forcastWind = new Array();
var forcastDay = new Array();
var forcastImage = new Array();
var forcastWarning = '';
var forecastwarning = new Array();
var selectedLocation = 0;
var selectedLanguage = 0;
var selectedForecast = 1;
var selectedRadar = 1;
var CurrentWeather = new Array();
var CurrentDate;
var CurrentMonth;
var CurrentHumidity;
var CurrentTemp;
var LastUpdated;


// Reload data onshow
//*****************************************************************************
function onshow()  {
	
	getTodayForecast();
	getForecast();
	getRadar();
	setBackground();
}

// Setup Data on install
//*****************************************************************************
function setup() {
	loadPreferences();
	setWidgetDetails();
	getTodayForecast();
	getForecast();
	getRadar();
	setBackground();
	
}
/*
function loadPreferences() {

if(window.widget) {
	var langString = parseInt(widget.preferenceForKey("langString"));
		if (langString) {
			document.getElementById("langform").selectedIndex = langString;
			 selectedLanguage = langString;
			 setLang(selectedLanguage);
		}
	var districtString = parseInt(widget.preferenceForKey("districtString"));
		if (districtString) {
			selectedLocation = districtString;
		}
	var forecastString = parseInt(widget.preferenceForKey("forecastString"));
		if (forecastString) {
			selectedForecast = forecastString;
			
			if (selectedForecast == 1) { 
			document.getElementById("showforecast").checked = true;
			expandContractWidget('EXTENDED_WIDGET','block','210','210');
			}
			
		}
	var radarString = parseInt(widget.preferenceForKey("radarString"));
		if (radarString) {
			selectedRadar = radarString;
			
			if (selectedRadar == 1) { 
			document.getElementById("showradar").checked = true;
				if (selectedForecast == 1) {
				expandContractWidget('EXTENDED_WIDGET2','block','210','420');
				} else {
				expandContractWidget('EXTENDED_WIDGET2','block','210','340');
				}
			}
			
		}
	} 
} 
*/

// HTML load preferences
function loadPreferences() {


	
			document.getElementById("langform").selectedIndex = selectedLanguage;
			
		
	
			
			if (selectedForecast == 1) { 
			document.getElementById("showforecast").checked = true;
			expandContractWidget('EXTENDED_WIDGET','block','210','210');
			}
			
		

			if (selectedRadar == 1) { 
			document.getElementById("showradar").checked = true;
				if (selectedForecast == 1) {
				expandContractWidget('EXTENDED_WIDGET2','block','210','420');
				} else {
				expandContractWidget('EXTENDED_WIDGET2','block','210','340');
				}
			}
			
		
	} 



//*****************************************************************************
function getTodayForecast() {
	var req = new XMLHttpRequest(); 
	req.onload=function(e){loadTodayData(e, req);}
	if (window.widget) req.setRequestHeader("Cache-Control", "no-cache");
	req.open("GET", feedtoday[0], false);
	req.send(null); 
}

//*****************************************************************************
function loadTodayData(e, req) {
	var response = req.responseText;
	
	//Last Update
	response.search(/BULLETIN UPDATED AT\s*(.*?)</gi);
	LastUpdated = RegExp.$1;
	
	//CurrentDate/Month
	response.search(/HKT\s*(.*)/gi);
	CurrentDate = RegExp.$1.substring(0,2);
	CurrentMonth = RegExp.$1.substring(3,6);

	//CurrentTemp
	response.search(/AIR TEMPERATURE :\s*(\d+)/gi);
	CurrentTemp = RegExp.$1;
	
	//CurrentHumidity
	response.search(/RELATIVE HUMIDITY :\s*(\d+)/gi);
	CurrentHumidity = RegExp.$1;
	
	//WeatherCartoon
	response.search(/WEATHER CARTOON : NO.\s*(\d+) - (.*)/gi); 
	CurrentWeather[0] = ucfirst((RegExp.$2).toLowerCase());
	CurrentImg = RegExp.$1;
	
	
	
	// Set Default place
	district[0][0] = "Hong Kong";
	district[1][0] = "香 港";
	degree[0] = parseInt(CurrentTemp);
	
	// Get all districts
	var districtarry = response.match(/(.*?)degrees[.;]/g);
		for(var i=0; i < districtarry.length; i++) {
			district[0][i+1] = districtarry[i].substring(14,0);
			district[1][i+1] = (languagetxt[1][district[0][i+1].replace(/ /g, '')]) ? languagetxt[1][district[0][i+1].replace(/ /g, '')] : district[1][i+1] = district[0][i+1];
			degree[i+1] = parseInt(districtarry[i].slice(18,-9));
		}
		
	districtOptions();
	getChineseLocation();
	getWarnings();
}

//Get Warnings if any
//*****************************************************************************
function getWarnings() {
	var req4 = new XMLHttpRequest(); 
	req4.onload=function(e){loadWarningData(e,req4);}
	if (window.widget) req4.setRequestHeader("Cache-Control", "no-cache");
	req4.open("GET", warning[selectedLanguage], false); 
	req4.send(null);
	
}

function loadWarningData(e, req) {
	response = req.responseText;
	forecastwarning=response.match(/<!--\/(.*?)-->/g);
	forcastWarning = '';
	
	document.getElementById("WARNING0").innerHTML = '';
	document.getElementById("WARNING1").innerHTML = '';
	document.getElementById("WARNING2").innerHTML = '';
	document.getElementById("WARNING3").innerHTML = '';
	
	if (forecastwarning && forecastwarning.length > 0) {
		for(var i=0;i<forecastwarning.length;i++) {
		warningimagename = '';
		forecastwarning[i].search(/<!--\/(.*?)-->/g);
		
			if (selectedLanguage == 1) {
				forcastWarning += RegExp.$1 + " ";
			} else {
				forcastWarning += (i == forecastwarning.length-1) ? RegExp.$1 : RegExp.$1 + "&nbsp; / &nbsp;" ;
			}
			warningimagename = (RegExp.$1).replace(/ |,|-|FORCE/g, '');
			weatherIcon = (languagetxt[selectedLanguage][warningimagename]) ? languagetxt[selectedLanguage][warningimagename] : "ALERT";
			document.getElementById("WARNING"+i).innerHTML = '<img onclick="openURL(\'' + warning[selectedLanguage] + '\');" class="WARNING_IMAGE" src="Images/warnings/' + weatherIcon + '.png" title="' + forecastwarning[i] + '" />';

		}
	} else {
	forcastWarning = '';
	}
	
	
	displayInfo();
}

//Set Language Preference
//*****************************************************************************
function setLang(value) {
	selectedLanguage = parseInt(value);
	getChineseLocation();
	districtOptions();
	document.getElementById("LOCATION").innerHTML = district[selectedLanguage][selectedLocation];
	document.getElementById("LANGUAGE").innerHTML = languagetxt[selectedLanguage]['Language:'];
	document.getElementById("DISTRICT").innerHTML = languagetxt[selectedLanguage]['District:'];
	document.getElementById("SEVEN_DAY_FORECAST").innerHTML = languagetxt[selectedLanguage]['7 Day Forecast'];
	document.getElementById("NOTIFYUPDATE").innerHTML = languagetxt[selectedLanguage]['Data provided by Hong Kong Observatory'] + ' ---- ' + LastUpdated;
	document.getElementById("RADAR_FORECAST").innerHTML = languagetxt[selectedLanguage]['Radar'];
	//if(window.widget) widget.setPreferenceForKey(selectedLanguage, "langString");
	if(window.widget) { 
	widget.setPreferenceForKey(selectedLanguage, "langString");
	}
}

//Display Data
//*****************************************************************************
function displayInfo() {
    document.getElementById("TEMPERATURE").innerHTML = degree[selectedLocation];
    document.getElementById("LOCATION").innerHTML = district[selectedLanguage][selectedLocation].toLowerCase();
    document.getElementById("TEMPERATURE").style.color= setTemperatureColor(degree[selectedLocation]);
    document.getElementById("TEMPERATURE_SYMBOL").style.color= setTemperatureColor(degree[selectedLocation]);
    document.getElementById("WEATHER_IMAGE").innerHTML = '<img class="CURRENT_FORECAST_IMG" src="http://www.hko.gov.hk/images/wxicon/pic' + CurrentImg + '.png" title="' + CurrentWeather[selectedLanguage] + '" onclick="openURL(\''+ feedtodaylink[selectedLanguage] +'\')"/>';
	document.getElementById("TODAY").innerHTML = CurrentDate + ' ' + CurrentMonth;
	document.getElementById("NOTIFYUPDATE").innerHTML = languagetxt[selectedLanguage]['Data provided by Hong Kong Observatory'] + ' ---- ' + LastUpdated;
	var currtime = new Date().getTime();
	document.getElementById("RADAR_IMAGE").src = 'http://www.weather.gov.hk/content_elements/radar6.png?' + currtime;
	
	if (forcastWarning) {
	document.getElementById("WEATHER").innerHTML = '<marquee scrollamount="3" >' + forcastWarning + ' &nbsp; &nbsp; ' + languagetxt[selectedLanguage]['Humidity:'] + CurrentHumidity + '%</marquee>';
	} else {
	document.getElementById("WEATHER").innerHTML = '<div style="text-align:center">' + languagetxt[selectedLanguage]['Humidity:'] + CurrentHumidity + '%</div>';
	}
}

//Set District Preference
//*****************************************************************************
function setDistrict(value) {
	selectedLocation = parseInt(value);
	if(window.widget) {
		widget.setPreferenceForKey(selectedLocation,"districtString");
	}
}

//Set District Drop Down List
//*****************************************************************************
function districtOptions() {
	for(var i =0; i < district[selectedLanguage].length; i++) {
	document.getElementById("districtform").options[i] = new Option(district[selectedLanguage][i],i);
	}
	document.getElementById("districtform").options[selectedLocation].selected = true;
}

//Chinese Names for Locations
//*****************************************************************************
function getChineseLocation() {
	if (selectedLanguage == 1) {
		var req3 = new XMLHttpRequest(); 
		req3.onload = function(e){loadChineseData(e,req3);};
		if (window.widget) req3.setRequestHeader("Cache-Control", "no-cache");
		req3.open("GET", feedtoday[1], false); 
		req3.send(null); 
	}
}

function loadChineseData(e, req) {
	response = req.responseText;
	
	response.search(/天 氣 插 圖： 編 號 (\d+) - (.*)/g); 
	CurrentWeather[1] = RegExp.$2;
}

/* Dont bother reading chinese location names from data source, use language file to translate english names.
If no translation, then use english.
function loadChineseData(e, req) {
	response = req.responseText;
	
	response.search(/天 氣 插 圖： 編 號 (\d+) - (.*)/g); 
	CurrentWeather[1] = RegExp.$2;
	
	degree[0] = parseInt(CurrentTemp);
	var districtarry = response.match(/(.*?)  (\d+) 度 [，|。]/g);

	// always have intermittent problems reading the string - so hardcoded above.
	// not anymore!
	district[1][0] = "香港";
	for (var i=0; i < districtarry.length; i++) {
			districtarry[i] = districtarry[i].replace('&#40050;', '鱲');
			district[1][i+1] = districtarry[i].substring(7,0);
			district[1][i+1] = district[1][i+1].replace(/ /g, '');
	}
}
*/

//Set Background according to time in HK
//*****************************************************************************
function setBackground() {
	var d = new Date();
	var hk = new Date((d.getTime() + (d.getTimezoneOffset() * 60000)) + (3600000*8));
	var hour = hk.getHours();
	if (hour >= 18 || hour < 6) {
	document.getElementById("BACKGROUNDIMAGE").src = 'Images/DefaultNight.png';
	document.getElementById("EXTENDED_WIDGET").style.backgroundImage = "url('Images/ExtensionNight.png')";
	document.getElementById("EXTENDED_WIDGET2").style.backgroundImage = "url('Images/Extension2Night.png')";
	document.getElementById("RADAR_IMAGE").style.backgroundImage = "url('Images/radar_loading_night.gif')";
	} else {
	document.getElementById("BACKGROUNDIMAGE").src = 'Images/Default.png';
	document.getElementById("EXTENDED_WIDGET").style.backgroundImage = "url('Images/Extension.png')";
	document.getElementById("EXTENDED_WIDGET2").style.backgroundImage = "url('Images/Extension2.png')";
	document.getElementById("RADAR_IMAGE").style.backgroundImage = "url('Images/radar_loading.gif')";
	}
}


//Set Color according to Temperature
//*****************************************************************************
function setTemperatureColor(value) {
	var temperatureColorValue;
	if (value <= 10) {
		temperatureColorValue = '#FFFFFF';
	} else if (value > 10 && value <= 19 ) {
		temperatureColorValue = '#CCFFFF';
	} else if (value > 19 && value <= 24) {
		temperatureColorValue = '#FFFF99';
	} else if (value > 24 && value <= 29) {
		temperatureColorValue = '#FFFF66';
	} else if (value > 29) {
		temperatureColorValue = '#C80000';
	}
	return temperatureColorValue;
}

function getForecast() {
	if (selectedForecast == 1) {
		var req2 = new XMLHttpRequest(); 
		req2.onload=function(e){loadForecastData(e,req2);}
		if (window.widget) req2.setRequestHeader("Cache-Control", "no-cache");
		req2.open("GET", feedforecast[selectedLanguage], false); 
		req2.send(null); 
	}
}

function loadForecastData(e,req) {
	response = req.responseText;
	switch(selectedLanguage) {
		case 1:
  		var forecastday = response.match(/(.*?)\)/gi);
		var forecasttemp = response.match(/氣 溫 ： (\d+) 至 (\d+)/gi);
		var forecastweather = response.match(/天 氣 ： (.*[\r\n]+.*)/gi);
		//var forecastwind = response.match(/風 　 ：(.*)。/gi);
		var foreimage = response.match(/天 插 圖 編 號 (.*)/gi);
		var newdiv = "";
		for(var i=0; i < 6; i++) {
			forecastday[i].search(/(.*?)\)/gi);
			//forcastDate[i] = RegExp.$1;
			//forcastMonth[i] = RegExp.$2;
			forcastDay[i] = RegExp.$1.substring(RegExp.$1.indexOf("期") + 1);
 
			forecasttemp[i].search(/氣 溫 ：\s*(\d+) 至 (\d+)/gi);
			forecastHi[i] = RegExp.$2;
			forecastLow[i] = RegExp.$1;
		
			forecastweather[i].search(/天 氣 ：\s*(.*[\r\n]+.*)/gi);
			forcastWeatherx = RegExp.$1.split('氣 溫 ：');
			forcastWeather[i] = forcastWeatherx[0];
		
			//forecastwind[i].search(/風 　 ：\s*(.*)。/gi);
			//forcastWind[i] = languagetxt[selectedLanguage]['Wind:'] + RegExp.$1;
			forcastWind[i] = '';
		
			foreimage[i].search(/天 插 圖 編 號\s*(\d+)/gi);
			forcastImage[i] = RegExp.$1;
			if (i >= 0) {
			newxdiv = '<li><div class="EXTENSION"><div class="DATE_FORECAST">' + forcastDay[i] + '</div><div class="TEMP_FORECAST">' + forecastHi[i]+ '/' +forecastLow[i]+ '</div>'
			+ '<div style="position:absolute; top:0px; left:10px;"><img class="FORECAST_IMG" src="http://www.hko.gov.hk/images/wxicon/pic' + forcastImage[i] + '.png" title="' + forcastWeather[i] + '" onclick="openURL(\'' + feedforecastlink[selectedLanguage] + '\')"/></div></div></li>';
			newdiv = newdiv + " " +newxdiv;
			}
		} 
  		break; 
  		
	default:
  		var forecastday = response.match(/Month\s*(\d+)\/(\d+)\s*(.*)/gi);
		var forecasttemp = response.match(/Temp Range: (\d+) - (\d+)/gi);
		var forecastweather = response.match(/Weather: (.*[\r\n]+.*)/gi);
		var forecastwind = response.match(/Wind: (.*)/gi);
		var foreimage = response.match(/cartoon no. (.*)/gi);
		var todaydate = (CurrentDate >= 10) ? CurrentDate : CurrentDate.substring(1, 2);
		var newdiv = "";
		var showXForecast = 0;
		for(var i =0; i < forecastday.length; i++) {
			forecastday[i].search(/MONTH\s*(\d+)\/(\d+)\s*(.*)/gi);
			forcastDate[i] = RegExp.$1;
			forcastMonth[i] = RegExp.$2;
			forcastDay[i] = RegExp.$3.substring(1,4);

			forecasttemp[i].search(/TEMP RANGE:\s*(\d+) - (\d+)/gi);
			forecastHi[i] = RegExp.$2;
			forecastLow[i] = RegExp.$1;
		
			forecastweather[i].search(/WEATHER:\s*(.*[\r\n]+.*)/gi);
			forcastWeatherx = RegExp.$1.split('Temp');
			forcastWeather[i] = forcastWeatherx[0];
		
			forecastwind[i].search(/WIND:\s*(.*)/gi);
			forcastWind[i] = languagetxt[selectedLanguage]['Wind:'] + RegExp.$1;
		
			foreimage[i].search(/CARTOON NO.\s*(\d+)/gi);
			forcastImage[i] = RegExp.$1;
			
			
			if (todaydate != forcastDate[i] && showXForecast < 6) {
			newxdiv = '<li><div class="EXTENSION"><div class="DATE_FORECAST">' + forcastDay[i] + '</div><div class="TEMP_FORECAST">' + forecastHi[i]+ '/' +forecastLow[i]+ '</div>'
			+ '<div style="position:absolute; top:0px; left:10px;"><img class="FORECAST_IMG" src="http://www.hko.gov.hk/images/wxicon/pic' + forcastImage[i] + '.png" title="' + forcastWeather[i] + ' ' + forcastWind[i] + '" onclick="openURL(\'' + feedforecastlink[selectedLanguage] + '\')"/></div></div></li>';
			newdiv = newdiv + " " +newxdiv;
			showXForecast++;
			}
		}
	}
	document.getElementById("FORECAST_LIST").innerHTML = newdiv;
}

//Set Forecast Preference
//*****************************************************************************
function setForecast() {
	selectedForecast = (selectedForecast == 1) ? 0 : 1 ; 
	if(window.widget) { 
	widget.setPreferenceForKey(selectedForecast, "forecastString");
	}
}

//Get Radar Preference
//*****************************************************************************
function getRadar() {
	if (selectedRadar == 1) {
		document.getElementById("FORECAST_LIST").style.display = 'block';
	}
}

//Set Radar Preference
//*****************************************************************************
function setRadar() {
	selectedRadar = (selectedRadar == 1) ? 0 : 1 ; 
	if(window.widget) { 
	widget.setPreferenceForKey(selectedRadar, "radarString");
	}
}
