﻿/*--------------------------------------------------------------------------
 * Copyright (c) 2006, drk<drk7jp@gmail.com>(http://www.drk7.jp/)
 *
 * License :
 *   Articstic License 2.0
 *
 * Drk7jpWeather.js :
 *   This library is a utility for Japan Weather Forecast XML (JWFX) (http://www.drk7.jp/weather/)
 *
 *--------------------------------------------------------------------------*/
var DEFAULT_ID    = '43';
var DEFAULT_XML   = '12';
var DEFAULT_AREA  = '千葉県';
var LOCATION_XML  = '12';
var LOCATION_AREA = '千葉県';
var JWFX_MENU_ID  = 'jwfx_menu';
var COOKIE_NAME   = 'jwfx_locationid';
var JWFX_LOCATION_IDS = 
[
	{'id':1  ,'pref':'北海道' ,   'xml':'01',  'area':'宗谷地方'},
	{'id':2  ,'pref':'北海道' ,   'xml':'01',  'area':'上川地方'},
	{'id':3  ,'pref':'北海道' ,   'xml':'01',  'area':'留萌地方'},
	{'id':4  ,'pref':'北海道' ,   'xml':'01',  'area':'網走地方'},
	{'id':5  ,'pref':'北海道' ,   'xml':'01',  'area':'北見地方'},
	{'id':6  ,'pref':'北海道' ,   'xml':'01',  'area':'紋別地方'},
	{'id':7  ,'pref':'北海道' ,   'xml':'01',  'area':'釧路地方'},
	{'id':8  ,'pref':'北海道' ,   'xml':'01',  'area':'根室地方'},
	{'id':9  ,'pref':'北海道' ,   'xml':'01',  'area':'十勝地方'},
	{'id':10 ,'pref':'北海道' ,   'xml':'01',  'area':'胆振地方'},
	{'id':11 ,'pref':'北海道' ,   'xml':'01',  'area':'日高地方'},
	{'id':12 ,'pref':'北海道' ,   'xml':'01',  'area':'石狩地方'},
	{'id':13 ,'pref':'北海道' ,   'xml':'01',  'area':'空知地方'},
	{'id':14 ,'pref':'北海道' ,   'xml':'01',  'area':'後志地方'},
	{'id':15 ,'pref':'北海道' ,   'xml':'01',  'area':'渡島地方'},
	{'id':16 ,'pref':'北海道' ,   'xml':'01',  'area':'檜山地方'},

	{'id':17 ,'pref':'青森県' ,   'xml':'02',  'area':'津軽'},
	{'id':18 ,'pref':'青森県' ,   'xml':'02',  'area':'下北'},
	{'id':19 ,'pref':'青森県' ,   'xml':'02',  'area':'三八上北'},

	{'id':20 ,'pref':'岩手県' ,   'xml':'03',  'area':'内陸'},
	{'id':21 ,'pref':'岩手県' ,   'xml':'03',  'area':'沿岸北部'},
	{'id':22 ,'pref':'岩手県' ,   'xml':'03',  'area':'沿岸南部'},

	{'id':23 ,'pref':'宮城県' ,   'xml':'04',  'area':'東部'},
	{'id':24 ,'pref':'宮城県' ,   'xml':'04',  'area':'西部'},

	{'id':25 ,'pref':'秋田県' ,   'xml':'05',  'area':'沿岸'},
	{'id':26 ,'pref':'秋田県' ,   'xml':'05',  'area':'内陸'},

	{'id':27 ,'pref':'山形県' ,   'xml':'06',  'area':'村山'},
	{'id':28 ,'pref':'山形県' ,   'xml':'06',  'area':'置賜'},
	{'id':29 ,'pref':'山形県' ,   'xml':'06',  'area':'庄内'},
	{'id':30 ,'pref':'山形県' ,   'xml':'06',  'area':'最上'},

	{'id':31 ,'pref':'福島県' ,   'xml':'07',  'area':'中通り'},
	{'id':32 ,'pref':'福島県' ,   'xml':'07',  'area':'浜通り'},
	{'id':33 ,'pref':'福島県' ,   'xml':'07',  'area':'会津'},

	{'id':34 ,'pref':'茨城県' ,   'xml':'08',  'area':'南部'},
	{'id':35 ,'pref':'茨城県' ,   'xml':'08',  'area':'北部'},

	{'id':36 ,'pref':'栃木県' ,   'xml':'09',  'area':'南部'},
	{'id':37 ,'pref':'栃木県' ,   'xml':'09',  'area':'北部'},

	{'id':38 ,'pref':'群馬県' ,   'xml':'10',  'area':'南部'},
	{'id':39 ,'pref':'群馬県' ,   'xml':'10',  'area':'北部'},

	{'id':40 ,'pref':'埼玉県' ,   'xml':'11',  'area':'南部'},
	{'id':41 ,'pref':'埼玉県' ,   'xml':'11',  'area':'北部'},
	{'id':42 ,'pref':'埼玉県' ,   'xml':'11',  'area':'秩父地方'},

	{'id':43 ,'pref':'千葉県' ,   'xml':'12',  'area':'北西部'},
	{'id':44 ,'pref':'千葉県' ,   'xml':'12',  'area':'北東部'},
	{'id':45 ,'pref':'千葉県' ,   'xml':'12',  'area':'南部'},

	{'id':46 ,'pref':'東京都' ,   'xml':'13',  'area':'東京地方'},
	{'id':47 ,'pref':'東京都' ,   'xml':'13',  'area':'伊豆諸島北部'},
	{'id':48 ,'pref':'東京都' ,   'xml':'13',  'area':'伊豆諸島南部'},
	{'id':49 ,'pref':'東京都' ,   'xml':'13',  'area':'小笠原諸島'},

	{'id':50 ,'pref':'神奈川県' , 'xml':'14',  'area':'東部'},
	{'id':51 ,'pref':'神奈川県' , 'xml':'14',  'area':'西部'},

	{'id':52 ,'pref':'新潟県' ,   'xml':'15',  'area':'下越'},
	{'id':53 ,'pref':'新潟県' ,   'xml':'15',  'area':'中越'},
	{'id':54 ,'pref':'新潟県' ,   'xml':'15',  'area':'上越'},
	{'id':55 ,'pref':'新潟県' ,   'xml':'15',  'area':'佐渡'},

	{'id':56 ,'pref':'富山県' ,   'xml':'16',  'area':'東部'},
	{'id':57 ,'pref':'富山県' ,   'xml':'16',  'area':'西部'},

	{'id':58 ,'pref':'石川県' ,   'xml':'17',  'area':'加賀'},
	{'id':59 ,'pref':'石川県' ,   'xml':'17',  'area':'能登'},

	{'id':60 ,'pref':'福井県' ,   'xml':'18',  'area':'嶺北'},
	{'id':61 ,'pref':'福井県' ,   'xml':'18',  'area':'嶺南'},

	{'id':62 ,'pref':'山梨県' ,   'xml':'19',  'area':'中・西部'},
	{'id':63 ,'pref':'山梨県' ,   'xml':'19',  'area':'東部・富士五湖'},

	{'id':64 ,'pref':'長野県' ,   'xml':'20',  'area':'北部'},
	{'id':65 ,'pref':'長野県' ,   'xml':'20',  'area':'中部'},
	{'id':66 ,'pref':'長野県' ,   'xml':'20',  'area':'南部'},

	{'id':67 ,'pref':'岐阜県' ,   'xml':'21',  'area':'美濃地方'},
	{'id':68 ,'pref':'岐阜県' ,   'xml':'21',  'area':'飛騨地方'},

	{'id':69 ,'pref':'静岡県' ,   'xml':'22',  'area':'中部'},
	{'id':70 ,'pref':'静岡県' ,   'xml':'22',  'area':'伊豆'},
	{'id':71 ,'pref':'静岡県' ,   'xml':'22',  'area':'東部'},
	{'id':72 ,'pref':'静岡県' ,   'xml':'22',  'area':'西部'},

	{'id':73 ,'pref':'愛知県' ,   'xml':'23',  'area':'西部'},
	{'id':74 ,'pref':'愛知県' ,   'xml':'23',  'area':'東部'},

	{'id':75 ,'pref':'三重県' ,   'xml':'24',  'area':'北中部'},
	{'id':76 ,'pref':'三重県' ,   'xml':'24',  'area':'南部'},

	{'id':77 ,'pref':'滋賀県' ,   'xml':'25',  'area':'南部'},
	{'id':78 ,'pref':'滋賀県' ,   'xml':'25',  'area':'北部'},

	{'id':79 ,'pref':'京都府' ,   'xml':'26',  'area':'南部'},
	{'id':80 ,'pref':'京都府' ,   'xml':'26',  'area':'北部'},

	{'id':81 ,'pref':'奈良県' ,   'xml':'29',  'area':'北部'},
	{'id':82 ,'pref':'奈良県' ,   'xml':'29',  'area':'南部'},

	{'id':83 ,'pref':'大阪府' ,   'xml':'27',  'area':'大阪府'},

	{'id':84 ,'pref':'兵庫県' ,   'xml':'28',  'area':'南部'},
	{'id':85 ,'pref':'兵庫県' ,   'xml':'28',  'area':'北部'},

	{'id':86 ,'pref':'和歌山県' , 'xml':'30',  'area':'南部'},
	{'id':87 ,'pref':'和歌山県' , 'xml':'30',  'area':'北部'},

	{'id':88 ,'pref':'鳥取県' ,   'xml':'31',  'area':'東部'},
	{'id':89 ,'pref':'鳥取県' ,   'xml':'31',  'area':'中・西部'},

	{'id':90 ,'pref':'島根県' ,   'xml':'32',  'area':'東部'},
	{'id':91 ,'pref':'島根県' ,   'xml':'32',  'area':'西部'},
	{'id':92 ,'pref':'島根県' ,   'xml':'32',  'area':'隠岐'},

	{'id':93 ,'pref':'岡山県' ,   'xml':'33',  'area':'南部'},
	{'id':94 ,'pref':'岡山県' ,   'xml':'33',  'area':'北部'},

	{'id':95 ,'pref':'広島県' ,   'xml':'34',  'area':'北部'},
	{'id':96 ,'pref':'広島県' ,   'xml':'34',  'area':'南部'},

	{'id':97 ,'pref':'山口県' ,   'xml':'35',  'area':'中部'},
	{'id':98 ,'pref':'山口県' ,   'xml':'35',  'area':'東部'},
	{'id':99 ,'pref':'山口県' ,   'xml':'35',  'area':'西部'},
	{'id':100,'pref':'山口県' ,   'xml':'35',  'area':'北部'},

	{'id':101,'pref':'徳島県' ,   'xml':'36',  'area':'北部'},
	{'id':102,'pref':'徳島県' ,   'xml':'36',  'area':'南部'},

	{'id':103,'pref':'香川県' ,   'xml':'37',  'area':'香川県'},

	{'id':104,'pref':'愛媛県' ,   'xml':'38',  'area':'中予'},
	{'id':105,'pref':'愛媛県' ,   'xml':'38',  'area':'東予'},
	{'id':106,'pref':'愛媛県' ,   'xml':'38',  'area':'南予'},

	{'id':107,'pref':'高知県' ,   'xml':'39',  'area':'中部'},
	{'id':108,'pref':'高知県' ,   'xml':'39',  'area':'東部'},
	{'id':109,'pref':'高知県' ,   'xml':'39',  'area':'西部'},

	{'id':110,'pref':'福岡県' ,   'xml':'40',  'area':'福岡地方'},
	{'id':111,'pref':'福岡県' ,   'xml':'40',  'area':'北九州地方'},
	{'id':112,'pref':'福岡県' ,   'xml':'40',  'area':'筑豊地方'},
	{'id':113,'pref':'福岡県' ,   'xml':'40',  'area':'筑後地方'},

	{'id':114,'pref':'佐賀県' ,   'xml':'41',  'area':'南部'},
	{'id':115,'pref':'佐賀県' ,   'xml':'41',  'area':'北部'},

	{'id':116,'pref':'長崎県' ,   'xml':'42',  'area':'南部'},
	{'id':117,'pref':'長崎県' ,   'xml':'42',  'area':'北部'},
	{'id':118,'pref':'長崎県' ,   'xml':'42',  'area':'壱岐・対馬'},
	{'id':119,'pref':'長崎県' ,   'xml':'42',  'area':'五島'},

	{'id':120,'pref':'熊本県' ,   'xml':'43',  'area':'熊本地方'},
	{'id':121,'pref':'熊本県' ,   'xml':'43',  'area':'阿蘇地方'},
	{'id':122,'pref':'熊本県' ,   'xml':'43',  'area':'天草・芦北地方'},
	{'id':123,'pref':'熊本県' ,   'xml':'43',  'area':'球磨地方'},

	{'id':124,'pref':'大分県' ,   'xml':'44',  'area':'中部'},
	{'id':125,'pref':'大分県' ,   'xml':'44',  'area':'北部'},
	{'id':126,'pref':'大分県' ,   'xml':'44',  'area':'西部'},
	{'id':127,'pref':'大分県' ,   'xml':'44',  'area':'南部'},

	{'id':128,'pref':'宮崎県' ,   'xml':'45',  'area':'南部平野部'},
	{'id':129,'pref':'宮崎県' ,   'xml':'45',  'area':'北部平野部'},
	{'id':130,'pref':'宮崎県' ,   'xml':'45',  'area':'南部山沿い'},
	{'id':131,'pref':'宮崎県' ,   'xml':'45',  'area':'北部山沿い'},

	{'id':132,'pref':'鹿児島県' , 'xml':'46',  'area':'薩摩地方'},
	{'id':133,'pref':'鹿児島県' , 'xml':'46',  'area':'大隅地方'},
	{'id':134,'pref':'鹿児島県' , 'xml':'46',  'area':'奄美地方'},

	{'id':135,'pref':'沖縄県' ,   'xml':'47',  'area':'本島中南部'},
	{'id':136,'pref':'沖縄県' ,   'xml':'47',  'area':'本島北部'},
	{'id':137,'pref':'沖縄県' ,   'xml':'47',  'area':'久米島'},
	{'id':138,'pref':'沖縄県' ,   'xml':'47',  'area':'大東島地方'},
	{'id':139,'pref':'沖縄県' ,   'xml':'47',  'area':'宮古島地方'},
	{'id':140,'pref':'沖縄県' ,   'xml':'47',  'area':'石垣島地方'},
	{'id':141,'pref':'沖縄県' ,   'xml':'47',  'area':'与那国島地方'}
];


/*--------------------------------------------------------------------------
 * JWFX_Selecter
 *--------------------------------------------------------------------------*/
var JWFX_Selecter = Class.create();
JWFX_Selecter.prototype={

	initialize: function(container){
		this.container=$(container);
		this.t_select = document.createElement('select');

		var selected_value = getCookie(COOKIE_NAME);
		if(!selected_value) {
			selected_value= DEFAULT_ID;
			LOCATION_XML  = DEFAULT_XML;
			LOCATION_AREA = DEFAULT_AREA;
		} else {
			LOCATION_XML  = JWFX_LOCATION_IDS[selected_value-1].xml;
			LOCATION_AREA = JWFX_LOCATION_IDS[selected_value-1].area;
		}
		new XML2JSON('http://www.drk7.jp/weather/xml/' + LOCATION_XML + '.xml' , {container:"jwfx", template:this.template, id:0});

		for(var i=0;i<JWFX_LOCATION_IDS.length;i++){
			this.t_select.options[i]
				= new Option(JWFX_LOCATION_IDS[i].pref + '(' + JWFX_LOCATION_IDS[i].area + ')'
							,JWFX_LOCATION_IDS[i].id
							,false,false);
		}
		this.t_select.options[selected_value-1].selected=true;
		this.container.appendChild(this.t_select);
		Event.observe(this.t_select,'change', this.t_onchange.bindAsEventListener(this), false);
		Event.observe(this.t_select,'keydown',this.t_onchange.bindAsEventListener(this), false);
		Event.observe(this.t_select,'keyup',  this.t_onchange.bindAsEventListener(this), false);
	},
	template: function(context) {
		var html = '<table summary="" border="0" cellspacing="2" cellpadding="0">'
		+ '<tbody>'
		+ '<tr>'
		+ '<td width="30" align="right">　</td>'
		+ '<td width="50" align="center">天気</td>'
		+ '<td width="65" align="center">気温</td>'
		+ '<td width="60" align="center">降水</td>'
		+ '<tr><td colspan="4" bgcolor="#808080"></td></tr>';

			var min = new Array(7);
			var max = new Array(7);
			var day = new Array(7);
			var p_max = new Array(7);
			var p_min = new Array(7);
			var elem = context.pref.area[LOCATION_AREA];
			    if(!elem) elem = context.pref.area;
		    for(var i=0, length=elem.info.length; i<length; i++) {
		        day[i]=elem.info[i].date.substr(8,10) + '日';
		        min[i]='?'; if(elem.info[i].temperature.range[1].content!='[object Object]') {min[i]=elem.info[i].temperature.range[1].content;}
		        max[i]='?'; if(elem.info[i].temperature.range[0].content!='[object Object]') {max[i]=elem.info[i].temperature.range[0].content;}

		        if(String(min[i])=='undefined') {min[i]='?';}
		        if(String(max[i])=='undefined') {max[i]='?';}

		        p_max[i]='?';
		        p_min[i]='?';
		        if(i<2) {
		            for(var j=0; j<4; j++) {
		                if(elem.info[i].rainfallchance.period[j].content!='[object Object]' && elem.info[i].rainfallchance.period[j].content!='--') {
		                    if(p_max[i]=='?' || p_max[i]<elem.info[i].rainfallchance.period[j].content) {
		                        p_max[i] = elem.info[i].rainfallchance.period[j].content;
		                    }
		                    if(p_min[i]=='?' || p_min[i]>elem.info[i].rainfallchance.period[j].content) {
		                        p_min[i] = elem.info[i].rainfallchance.period[j].content;
		                    }
		                }
		            }
		            if(String(p_max[i])=='undefined') {p_max[i]='?';}
		            if(String(p_min[i])=='undefined') {p_min[i]='?';}
		        }
		    }

		html += '<tr><td width="30">' + day[0] + '</td>'
		+ '<td width="50" align="center"><img src="' + elem.info[0].img + '" width="50" title="' + elem.info[0].weather_detail + '" /></td>'
		+ '<td width="65" align="center"><font color="#0050F0">' + min[0] + '</font>～<font color="#FF0055">' + max[0] + '</font>℃</td>'
		+ '<td width="60" align="center"><font color="#0050F0">' + p_min[0] + '～' + p_max[0] + '%</font></td></tr>'
		+ '<tr><td width="30">' + day[1] + '</td>'
		+ '<td width="50" align="center"><img src="' + elem.info[1].img + '" width="50" title="' + elem.info[1].weather_detail + '" /></td>'
		+ '<td width="65" align="center"><font color="#0050F0">' + min[1] + '</font>～<font color="#FF0055">' + max[1] + '</font>℃</td>'
		+ '<td width="60" align="center"><font color="#0050F0">' + p_min[0] + '～' + p_max[1] + '%</font></td></tr>'
		+ '</table>';

		return html;
	},
	t_onchange :function() {
		var selected_value = $F(this.t_select);

		if(LOCATION_XML == selected_value) { return; }
		LOCATION_XML  = JWFX_LOCATION_IDS[selected_value-1].xml;
		LOCATION_AREA = JWFX_LOCATION_IDS[selected_value-1].area;

		var expire = new Date('2010','01', '01');
		setCookie(COOKIE_NAME, selected_value, expire);
		var d = $('jwfx');
		$("jwfx").innerHTML = 'now loading...';
		new XML2JSON('http://www.drk7.jp/weather/xml/' + LOCATION_XML+ '.xml' , {container:"jwfx", template:this.template, id:0});
	}
};


/*--------------------------------------------------------------------------
 * Event
 *--------------------------------------------------------------------------*/
Event.observe(window, "load", function(){
	var d = $('jwfx');
	$("jwfx").innerHTML = 'now loading...';

	new JWFX_Selecter(JWFX_MENU_ID);
});




/*--------------------------------------------------------------------------
 * Cookie
 *--------------------------------------------------------------------------*/
function setCookie(name,value,expire){
	document.cookie = name + '=' + escape(value) + ((expire==null)?'':('; expires='+expire.toGMTString()));
}

function getCookie(name){
	var search = name + '=';
	if(document.cookie.length>0) {
		offset = document.cookie.indexOf(search);
		if(offset != -1) {
			offset += search.length;
			end     = document.cookie.indexOf(';',offset);
			if(end == -1) {
				end = document.cookie.length;
			}
			return unescape(document.cookie.substring(offset,end));
		}
	}
	return null;
}

