// livedoor版
var lwws1 = { };
lwws1.init = function() {
	var city = '63';
	var day  = 'tomorrow';
	var name = 'lwws1';
	var proxy  = 'http://app.drk7.jp/xml2json/';
	
	var script = document.createElement('script');
	script.charset = 'UTF-8';
	script.src = proxy + 'var=' + name + '&url=' + 
				 escape('http://weather.livedoor.com/forecast/webservice/rest/v1?city=' + city + '&day=' + day);
	document.body.appendChild(script);
};

lwws1.onload = function(data) {
	var d = document.getElementById('weather');
	d.innerHTML = "<small>明日の"+data["location"]["city"]+'の天気は</small><br/>'+
				  '<img src="' + data["image"]["url"] + '"/><br/>'+
				  data["telop"];
};

// drk7.jp版
var lwws2 = { };
lwws2.init = function() {
	// 6:00頃にXMLが更新されることと、キャッシュを考慮
	var t = new Date();
	t.setTime(t.getTime()-(6*60+1)*60*1000);
	t = (t.getYear()+1900)+"-"+(t.getMonth()+1)+"-"+(t.getDate());
	
	var name = 'lwws2';
	var proxy  = 'http://app.drk7.jp/xml2json/';
	
	var script = document.createElement('script');
	script.charset = 'UTF-8';
	script.src = proxy + 'var=' + name + '&url=' + 
				 escape('http://www.drk7.jp/weather/xml/13.xml?t='+t);
	document.body.appendChild(script);
};

lwws2.onload = function(data) {
	var byClass = function(t) {
		var c = { };
		var tags = t.getElementsByTagName('*');
		for(var i=0 ; i<tags.length ; i++) {
			if(tags[i].className) {
				var cnames = tags[i].className.split(/ /);
				for(var j=0; j<cnames.length ; j++) {
					if(!c[cnames[j]]) {
						c[cnames[j]] = tags[i];
					}
				}
			}
		}
		return c;
	};
	var setAttribute = function(o, a, d) {
		if(o && (typeof o[a]) != undefined) {
			o[a] = d;
		}
	};
	var today = byClass(document.getElementById('today'));
	var frame = [ today ];
	var weeks = document.getElementById('week').childNodes;
	for(var i=0 ; i<weeks.length ; i++) {
		if(weeks[i].tagName == 'DIV') {
			frame.push(byClass(weeks[i]));
		}
	}
	var days = data.pref.area['東京地方'].info;
	var buf = "";
	for(var idx in days) {
		var dayInfo = days[idx];
		var weather = dayInfo.weather_detail || dayInfo.weather || '';
		var temp = [ ];
		for(var i=0 ; i<dayInfo.temperature.range.length ; i++) {
			temp[dayInfo.temperature.range[i].centigrade] = dayInfo.temperature.range[i].content;
		}
		var rain = '';
		if(dayInfo.rainfallchance) {
			if(dayInfo.rainfallchance.period[2].content != '--') {
				rain = dayInfo.rainfallchance.period[2].content + "%";
			}
		}
		
		var f = frame[0];
		setAttribute(f['date'], 'innerHTML', dayInfo.date);
		setAttribute(f['day'], 'innerHTML', dayInfo.date.split('/').pop()*1 + '日');
		setAttribute(f['weatherDetail'], 'innerHTML', weather);
		setAttribute(f['wave'], 'innerHTML', dayInfo.wave || '');
		setAttribute(f['min'], 'innerHTML', temp['min'] ? temp['min']+'℃' : '-');
		setAttribute(f['max'], 'innerHTML',  temp['max'] ? temp['max']+'℃' : '-');
		setAttribute(f['rainfall'], 'innerHTML', rain || '-');
		setAttribute(f['weatherImg'].getElementsByTagName('IMG').item(0), 'src', dayInfo.img);
		
		var ymd = dayInfo.date.split('/');
		var d = new Date(ymd[0], ymd[1]*1-1, ymd[2]*1);
		var dow = d.getDay();
		if(dow == 0 || dow == 6) {
			// さすがに祝日を赤色にするのは(外部からカレンダーを取得しないと)無理...
			var color = (dow==0) ? 'red' : 'blue';
			setAttribute(f['date'] && f['date'].style, 'color', color);
			setAttribute(f['day'] && f['day'].style, 'color', color);
		}
		
		frame.shift();
	}
};

var lwws3 = { };
lwws3.init = function() {
	var xml2json = function(r, debug) {
		var result = { };
		var types = { };
		for(var i=0 ; i<r.attributes.length ; i++) {
			result[r.attributes[i].name] = r.attributes[i].value;
		}
		if(r.childNodes.length == 1 && r.childNodes[0].nodeType == 3) {
			if(0 < r.attributes.length) {
				result['content'] = r.childNodes[0].data;
			} else {
				result = r.childNodes[0].data;
			}
		}
		for(var i=0 ; i<r.childNodes.length ; i++) {
			if(r.childNodes[i].nodeType != 1) {
				continue;
			}
			var tag = r.childNodes[i].tagName;
			if((typeof result[tag]) == 'undefined') {
				result[tag] = xml2json(r.childNodes[i]);
			} else {
				if((typeof types[tag]) == 'undefined') {
					var old = result[tag];
					if((typeof old.id) == 'undefined') {
						types[tag] = 'array';
						result[tag] = [ old ];
					} else {
						types[tag] = 'hash';
						result[tag] = { };
						result[tag][old.id] = old;
					}
				}
				if(types[tag] == 'array') {
					result[tag].push(xml2json(r.childNodes[i]));
				} else if(types[tag] == 'hash') {
					result[tag][r.childNodes[i].getAttribute('id')] = xml2json(r.childNodes[i]);
				}
			}
		}
		return result;
	};
	
	// 6:00頃にXMLが更新されることと、キャッシュを考慮
	var t = new Date();
	t.setTime(t.getTime()-(6*60+1)*60*1000);
	t = (t.getYear()+1900)+"-"+(t.getMonth()+1)+"-"+(t.getDate());
	jQuery.get('/api/weather.xml?t'+t, '', function(r) {
		for(var i=0 ; i<r.childNodes.length ; i++) {
			if(r.childNodes[i].nodeType != 1) {
				continue;
			}
			var j = xml2json(r.childNodes[i], true);
			lwws2.onload(j);
			break;
		}
	});
};

(function() {
	var init = lwws3.init;
//	init = function() { document.getElementById('weatherBox').style.display = 'none'; };
	var saved = window.onload;
	window.onload = (typeof saved != 'function') ? init
		: function(e) { saved(e); return init(e); };
})();

