// 天気
var itsmonavi = {};
itsmonavi.weather = function() {
};
itsmonavi.weather.codes = null;
itsmonavi.weather.getCodes = function() {
if (null != itsmonavi.weather.codes) {
return itsmonavi.weather.codes;
}
itsmonavi.weather.codes = {};
var d = [
//['01', '晴れ(昼)', 'fine'],
//['02', '晴れ(夜)', 'star'],
['01', '晴れ', 'fine'],
['02', '晴れ', 'star'],
['03', '曇り', 'cloudy'],
['04', '雪', 'snow'],
['05', '雨', 'rain'],
['101', '晴れ時々曇り', ''],
['100', '晴れ', ''],
['102', '晴れ一時雨', ''],
['103', '晴れ時々雨', ''],
['104', '晴れ一時雪', ''],
['105', '晴れ時々雪', ''],
['111', '晴れのち曇り', ''],
['114', '晴れのち雨', ''],
['117', '晴れのち雪', ''],
['201', '曇り時々晴れ', ''],
['202', '曇り一時雨', ''],
['203', '曇り時々雨', ''],
['204', '曇り一時雪', ''],
['205', '曇り時々雪', ''],
['209', '霧', ''],
['211', '曇りのち晴れ', ''],
['214', '曇りのち雨', ''],
['217', '曇りのち雪', ''],
['301', '雨時々晴れ', ''],
['302', '雨時々やむ', ''],
['303', '雨時々雪', ''],
['304', '雨もしくは雪', ''],
['309', '雨一時雪', ''],
['311', '雨のち晴れ', ''],
['313', '雨のち曇り', ''],
['315', '雨のち雪', ''],
['340', '雪もしくは雨', ''],
['401', '雪時々晴れ', ''],
['402', '雪時々やむ', ''],
['403', '雪時々雨', ''],
['409', '雪一時雨', ''],
['411', '雪のち晴れ', ''],
['413', '雪のち曇り', ''],
['414', '雪のち雨', ''],
['999', '不明', '']
];
$.each(d, function(i, v) {
itsmonavi.weather.codes[v[0]] = {
nm: v[1],
_class: v[2]
};
});
return itsmonavi.weather.codes;
};
itsmonavi.weather.getTenkiHtml = function(code,week_flg) {
var s = itsmonavi.weather.getCodes();
s = s[code];
if (undefined == s || null == s) {
s = '不明';
} else {
var nm = s.nm;
//if ('' == s._class) {
if (week_flg == true) {//週間天気
if(code == '01' || code == '02' || code == '03' || code == '04' || code == '05'){
var week_code = {'01':'100','02':'100','03':'200','04':'400','05':'300'};
code = week_code[code];
}
s = '
' + nm + '';
} else {
s = '';
s += nm;
}
}
return s;
};
itsmonavi.weather.daysNameStr = [ '日', '月', '火', '水', '木', '金', '土' ];
itsmonavi.weather.getDateStr = function(d) {
var s = (d.getMonth() + 1) + '/' + d.getDate() + '(' + itsmonavi.weather.daysNameStr[d.getDay()] + ')';
return s;
};
itsmonavi.weather.get02d = function(n) {
n = '0' + n;
return n.substring(n.length - 2);
};
itsmonavi.weather.eventAddress = function(result) {
if (null != result && 0 == result.status && result.hitCount >= 1) {
result = result.items[0].address;
$('._adrnm').html(result);
}
};
itsmonavi.weather.eventSentaku = function(result) {
if (null != result && 0 == result.status) {
} else {
return;
}
$.each(result.items, function(i, v) {
var n = $.inArray(v.tenkiDate, itsmonavi.weather.days);
if (n < 0 || n >= 2) {
return;
}
if (v.sentaku >= 1 && v.sentaku <= 4) {
// ok.正常な値。
} else {
return;
}
var s = '
' + v.sentakuName;
$('#id_table_' + n + ' tr.wash td').html(s);
});
};
itsmonavi.weather.eventTenki3hour = function(result) {
if (null == result) {
return;
} else if (0 != result.status) {
return;
}
// 発表日時
var s = result.pubDate;
$('#id_pubY').html(s.substring(0, 4));
$('#id_pubM').html(parseInt(s.substring(4, 6), 10) + '');
$('#id_pubD').html(parseInt(s.substring(6, 8), 10) + '');
s = result.pubTime;
$('#id_pubH').html(parseInt(s.substring(0, 2), 10) + '');
$('#id_pubI').html(s.substring(2, 4));
$.each(result.items, function(i, v) {
var n = $.inArray(v.tenkiDate, itsmonavi.weather.days);
if (n < 0 || n >= 2) {
return null;
}
var h = parseInt(v.tenkiTime.substring(0, 2), 10);
if (0 == n) {
h = (h - 6) / 3;
} else {
h /= 3;
}
var id = '#id_table_' + n;
var id2 = 'td:eq(' + h + ')';
if (v.tenkiCode == '') {
s = '-';
} else {
s = itsmonavi.weather.getTenkiHtml(v.tenkiCode);
}
$(id + ' tr:eq(1) ' + id2).html(s);
if (v.tenkiCode == '') {
s = '-';
} else {
s = '' + v.temperature + '℃';
}
$(id + ' tr:eq(2) ' + id2).html(s);
if (v.tenkiCode == '') {
s = '-';
} else {
s = '' + v.rainMm + 'mm';
}
$(id + ' tr:eq(3) ' + id2).html(s);
return null;
});
};
itsmonavi.weather.eventTenkiWeek = function(result) {
if (null != result && 0 == result.status) {
} else {
return;
}
$.each(result.items, function(i, v) {
var n = $.inArray(v.tenkiDate, itsmonavi.weather.days);
if (n < 2) {
return;
}
var id = '#id_table_2';
var id2 = 'td:eq(' + (n - 2) + ')';
var e = $(id + ' tr:eq(2) ' + id2);
e.find('span.highest').html('' + v.maxTemperature);
e.find('span.lowest').html('' + v.minTemperature);
var s = '' + v.rainPercent + '%';
$(id + ' tr:eq(3) ' + id2).html(s);
s = itsmonavi.weather.getTenkiHtml(v.tenkiCode,true);
$(id + ' tr:eq(1) ' + id2).html(s);
});
};
itsmonavi.weather.days = null;
itsmonavi.weather.init = function() {
var s = location.search, i, v;
s = s.split(/\?|&/);
var lat = 0, lon = 0;
$.each(s, function(i, v) {
if (v.indexOf('lat=') == 0) {
i = v.split('=', 2);
lat = parseInt(i[1], 10);
} else if (v.indexOf('lon=') == 0) {
i = v.split('=', 2);
lon = parseInt(i[1], 10);
}
});
if (lat <= 0 || lon <= 0) {
lat = 128441320;
lon = 503169540;
}
// 日付設定。
s = new Date();
itsmonavi.weather.days = [];
for (i = 0; i < 7; ++i) {
$('span.id_daystr_' + i).html(itsmonavi.weather.getDateStr(s));
itsmonavi.weather.days.push(s.getFullYear() + itsmonavi.weather.get02d(s.getMonth() + 1) + itsmonavi.weather.get02d(s.getDate()));
s.setTime(s.getTime() + 1 * 24 * 60 * 60 * 1000);
}
// 住所名称取得。
var opt = new ZdcGetAddressStringGikOptions();
opt.point = new ZdcPoint(lon, lat, 2);
opt.matchLevel = 3;
opt.timeout = 3000;
var gik = new ZdcGetAddressStringGik();
ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventAddress);
gik.search(opt);
// 洗濯情報取得。
opt = new ZdcNearTenkiOptions();
opt.point = new ZdcPoint(lon, lat, 2);
opt.timeout = 3000;
gik = new ZdcNearTenki();
ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventSentaku);
gik.search(opt);
// 3時間毎の天気を取得。
opt = new ZdcNearTenki3HourOptions();
opt.point = new ZdcPoint(lon, lat, 2);
opt.timeout = 3000;
gik = new ZdcNearTenki3Hour();
ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventTenki3hour);
gik.search(opt);
// 週間天気を取得。
opt = new ZdcNearTenkiWeekOptions();
opt.point = new ZdcPoint(lon, lat, 2);
opt.timeout = 3000;
gik = new ZdcNearTenkiWeek();
ZdcEvent.addListener(gik, 'end', itsmonavi.weather.eventTenkiWeek);
gik.search(opt);
};