function convert(degree)
{
return (isNaN(degree)?0:((degree - 32) / 1.8).toFixed(0));
}
function toChineseDay(day)
{
var retVal = day;
switch(day)
{
case ("Sunday"):
retVal = "星期天";
break;
case ("Monday"):
retVal = "星期一";
break;
case ("Tuesday"):
retVal = "星期二";
break;
case ("Wednesday"):
retVal = "星期三";
break;
case ("Thursday"):
retVal = "星期四";
break;
case ("Friday"):
retVal = "星期五";
break;
case ("Saturday"):
retVal = "星期六";
break;
default:
break;
}
return retVal;
}
function toChineseString(str)
{
var retVal = str;
switch (str)
{
case ("Clear"): case ("Fair"): case ("AM Sun"): case ("PM Sun"):
retVal = "晴";
break;
case ("Cloudy"): case ("PM Clouds"): case ("AM Clouds"):
retVal = "阴";
break;
case ("Mostly Cloudy"): case ("Partly Cloudy"):
retVal = "多云";
break;
case ("Showers"):
retVal = "阵雨";
break;
case ("Sprinkles"): case ("PM Rain"): case ("AM Rain"):
retVal = "小雨";
break;
case ("Cloudy / PM Sun"): case ("Cloudy / AM Sun"):
retVal = "阴转晴";
break;
case ("Showers / Clear"):
retVal = "小雨转晴";
break;
case ("Scattered Flurries"):
retVal = "分散小雪";
break;
case ("Not Available"):
retVal = "没有信息";
break;
default:
break;
}
return retVal;
}
function ForeCastData()
{
var SkyCode;
var SkyText;
var High;
var Low;
var Date;
var Day;
}
function ForeCastArray(n)
{
for(var i = 0; i < n; i++)
this[i] = new ForeCastData();
}
function WeatherData()
{
var RetCode = 0;
var Latitude;
var Longitude;
var SkyCode;
var RequestPending;
var Location;
var SkyText;
var Temperature;
var Attribution2;
var Url;
var ForeCastA = new ForeCastArray(5);
var Count = 0;
this.item = function(i) {
return this;
}
this.makeForeCast = function(i, c, t, h, l, dt, dy) {
ForeCastA[i].SkyCode = c;
ForeCastA[i].SkyText = t;
ForeCastA[i].High = h;
ForeCastA[i].Low = l;
ForeCastA[i].Date = dt;
ForeCastA[i].Day = dy;
}
this.ForeCast = function(i) {
return ForeCastA[i];
}
}
function MSNWeather(){
var RequestPending = false;
var RefreshInterval = 60;
var Celsius = true;
}
MSNWeather.prototype={
SearchByCode:function(locCode){
var self = this;
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=true;
xmlDoc.onreadystatechange = function() {
if (xmlDoc.readyState == 4)
{
if(xmlDoc.parseError.errorCode != 0)
{
}
else
{
var wdata = new WeatherData();
wdata.Latitude = parseFloat(xmlDoc.selectSingleNode("/weatherdata/weather/@lat").value);
wdata.Longitude = parseFloat(xmlDoc.selectSingleNode("/weatherdata/weather/@long").value);
wdata.Location = xmlDoc.selectSingleNode("/weatherdata/weather/@weatherlocationname").value;
wdata.Attribution = xmlDoc.selectSingleNode("/weatherdata/weather/@attribution").value;
wdata.Attribution2= xmlDoc.selectSingleNode("/weatherdata/weather/@attribution2").value;
wdata.Url = xmlDoc.selectSingleNode("/weatherdata/weather/@url").value;
wdata.SkyCode = parseInt(xmlDoc.selectSingleNode("/weatherdata/weather/current/@skycode").value);
wdata.SkyText = toChineseString(xmlDoc.selectSingleNode("/weatherdata/weather/current/@skytext").value);
wdata.Temperature = parseInt(xmlDoc.selectSingleNode("/weatherdata/weather/current/@temperature").value);
wdata.Temperature = isNaN(wdata.Temperature)?0:wdata.Temperature;
if (self.Celsius)
wdata.Temperature = convert(wdata.Temperature);
for (var i = 1; i <= 5; i++)
{
var node = xmlDoc.documentElement.childNodes[0].childNodes[i];
var SkyCode = parseInt(node.getAttribute("skycodeday"));
var SkyText = toChineseString(node.getAttribute("skytextday"));
var High = node.getAttribute("high");
if (self.Celsius)
High = convert(parseInt(High));
var Low = node.getAttribute("low");
if (self.Celsius)
Low = convert(parseInt(Low));
var Date = node.getAttribute("date");
var Day = toChineseDay(node.getAttribute("day"));
wdata.makeForeCast(i-1, SkyCode, SkyText, High, Low, Date, Day);
}
wdata.RetCode = 200;
wdata.Count = 1;
self.OnDataReady(wdata);
}
}
};
xmlDoc.load("http://weather.service.msn.com/data.aspx?src=vista&wealocations="+locCode);
},
OnDataReady:function(data){}
}