﻿var fgData="";
var fgTimerId; // タイマーID
var ajax;      // HTTPオブジェクト
var fgsWeatherUrl     = "http://weather.livedoor.com/forecast/webservice/rest/v1";

var Image1;		//todayのイメージパス
var Telop1;		//       天気文字列
var sDate1;		//       日付
var sMax1;
var sMin1;

/********************************************************************/
//XMLデータを取得する為に、呼び出す関数
// input param : psCallBk=コールバック関数名
//               piCity=地域コード
//               psDay=日付(today,tommorow,dayaftertomorrow)
//
/********************************************************************/
function clickGetJSONP(psCallBk,piCity,psDay){
  var url = fgsWebServiceUrl + "?cb=" + psCallBk + "&url="+fgsWeatherUrl + "?city=" + piCity + "?amp;day=" + psDay;

//alert("url=" + url);

  var sc = document.createElement("script");
  sc.setAttribute("type","text/javascript");
  sc.setAttribute("src", url );
  document.getElementsByTagName("body").item(0).appendChild(sc);
}

/********************************************************************/
// 本日データ取得後のコールバック関数
/********************************************************************/
function CallBk1(myData){
var st_inf = new st_WeatherInf();

	fgData = myData.data;
 
	if (fgData == "") {
	    return;
	}
	getWeatherInf(st_inf,fgData);

	Image1 = st_inf.Image;
	Telop1 = st_inf.Telop;
	sDate1 = DateFormat(st_inf.WeatherDate);

	document.getElementById("today1").innerHTML = convWareki(st_inf.WeatherDate);
	document.getElementById("area1").innerHTML = "今日からのお天気（" + st_inf.AreaName + "／" + st_inf.PrefName + "）";
	document.getElementById("day1").innerHTML =sDate1 + "<br /><img src='" + Image1 + "'><br />" + Telop1;
 
}

/********************************************************************/
// 翌日データ取得後のコールバック関数
/********************************************************************/
function CallBk2(myData){
var st_inf = new st_WeatherInf();

	fgData = myData.data;
 
	if (fgData == "") {
	    return;
	}
	getWeatherInf(st_inf,fgData);

	Image1 = st_inf.Image;
	Telop1 = st_inf.Telop;
	sDate1 = DateFormat(st_inf.WeatherDate);

	document.getElementById("day2").innerHTML =sDate1 + "<br /><img src='" + Image1 + "'><br />" + Telop1;
}

/********************************************************************/
// 明後日データ取得後のコールバック関数
/********************************************************************/
function CallBk3(myData){
var st_inf = new st_WeatherInf();

	fgData = myData.data;
 
	if (fgData == "") {
	    return;
	}
	getWeatherInf(st_inf,fgData);

	Image1 = st_inf.Image;
	Telop1 = st_inf.Telop;
	sDate1 = DateFormat(st_inf.WeatherDate);

	document.getElementById("day3").innerHTML =sDate1 + "<br /><img src='" + Image1 + "'><br />" + Telop1;

}

/************************************************************************/
// 日付変換処理
/************************************************************************/

function DateFormat(psDate){
//	var sDate = "";


	sDate = (new Date(psDate)).getMonth()+1;
	sDate +="/";
	sDate += (new Date(psDate)).getDate();

	return sDate;
}

/************************************************************************/
//    TBODYのクリア
// Input Parameter
//    pData TBODYのID
// Output Parameter
//    なし
/************************************************************************/
function comRowAllClear(pData){
	for (i=pData.rows.length-1;i>=0;i--){
		pData.deleteRow(pData.rows.length-1);
	}
}

/************************************************************************/
//    TDの作成
// Input Parameter
//    pTr 作成するTDの親要素TRのID
// Output Parameter
//    なし
/************************************************************************/
function createTD(pTr) {
    var oTd;
    if (pTr.cells.length == 0) {
        oTd = pTr.insertCell(0);
    } else {
        oTd = pTr.insertCell(pTr.cells.length);
    }
    return oTd;
}

/************************************************************************/
//天気情報取得用
/************************************************************************/
function st_WeatherInf(){
    var WeatherDate="";					//日付
    var AreaName="";					//地域名
    var PrefName="";					//県名
    var CityName="";					//市区町村名？
    var Telop="";						//予報天気文字列
    var Image="";						//予報天気イメージURL
    var Max="";						//最高気温
    var Min="";						//最低気温
}

/************************************************************************/
//    天気情報取得
// Input Parameter
//    pWeatherInf 
//    pXmlStr 
// Output Parameter
//    なし
/************************************************************************/
function getWeatherInf(pWeatherInf,pXmlStr){
var oXML;
var xmltop;
var Nodes;
var Node;
var oLocation;
var NodeImage;
var dpObj;
var NodeTemperature;
var Node

	if (document.implementation.createDocument){
		oXML = document.implementation.createDocument("", "", null);

		dpObj = new DOMParser();
		oXML=dpObj.parseFromString(pXmlStr, "text/xml");

	}else{ 				//IE
		oXML = new ActiveXObject('microsoft.XMLDOM');
		oXML.loadXML(pXmlStr);
	}

	xmltop=oXML.documentElement;
	Nodes = oXML.documentElement;

	for (var j = 0; j < Nodes.childNodes.length; j++) {
		Node = Nodes.childNodes[j];
		switch (Node.tagName){
			case "image":
				for (var k=0;k<Node.childNodes.length;k++){
					NodeImage=Node.childNodes[k];
					switch (NodeImage.tagName){
						case "title":
							pWeatherInf.Telop = NodeImage.childNodes[0].data;
							break;
						case "url":
							pWeatherInf.Image = NodeImage.childNodes[0].data;
							break;
						default:
					}
				}
				break;

			case "location":
                pWeatherInf.AreaName = Node.getAttribute("area");
                pWeatherInf.PrefName = Node.getAttribute("pref");
                pWeatherInf.CityName = Node.getAttribute("city");

				break;
				
			case "forecastdate":
                pWeatherInf.WeatherDate = Node.childNodes[0].data;
				break;
			case "temperature":
				for (var k=0;k<Node.childNodes.length;k++){
					NodeTemperature=Node.childNodes[k];
					switch (NodeTemperature.tagName){
						case "max":
							for (var l=0;l<NodeTemperature.childNodes.length;l++){
								switch (NodeTemperature.childNodes[l].tagName){
									case "celsius":
										pWeatherInf.Max = NodeTemperature.childNodes[l].text;
										break;
								}
							}
							break;
						case "min":
							for (var l=0;l<NodeTemperature.childNodes.length;l++){
								switch (NodeTemperature.childNodes[l].tagName){
									case "celsius":
										pWeatherInf.Min = NodeTemperature.childNodes[l].text;
										break;
								}
							}
							break;
						default:
					}
				}
				break;
		}
	}
}

/************************************************************************/
//    天気情報の表示
// Input Parameter
//    piArea 該当地域のIndex（既定）
// Output Parameter
//    なし
/************************************************************************/
function getWeatherData(piArea){
var newTR;
var newTD;
var st_inf = new st_WeatherInf();
var i=piArea;

	if(piArea==""){
		if (tbl_body.rows.length!=0){
			comRowAllClear(tbl_body);
		}
		return;	
	}

	//----today---------------------------------------
		clickGetJSONP("CallBk1",i,"today");

	//----tomorrow---------------------------------------
		clickGetJSONP("CallBk2",i,"tomorrow");


	//----dayaftertomorrow---------------------------------------
		clickGetJSONP("CallBk3",i,"dayaftertomorrow");

}

/************************************************************************/
//    天気情報の保存
// Input Parameter
//    piArea 該当地域のIndex（既定）
// Output Parameter
//    なし
/************************************************************************/
function setWeatherData(piArea){

	document.cookie = 'piArea=' + encodeURIComponent(piArea)
					+ '; expires=Tue, 1-Jan-2030 00:00:00 GMT'
					+ '; path=/pick-up';
}

/************************************************************************/
//    西暦を和暦に変換する
// Input Parameter
//    pDate 変換元の西暦
// Output Parameter
//    なし
/************************************************************************/
function convWareki(pDate){
var dToday = new Date(pDate);
var sEdtStr = "";
var aWeekDay = new Array( "日","月","火","水","木","金","土" );

	sEdtStr = dToday.getFullYear() + "年";
	sEdtStr += dToday.getMonth() + 1 + "月";
	sEdtStr += dToday.getDate() + "日";
	sEdtStr += "（" + aWeekDay[dToday.getDay()] + "）";
	return sEdtStr;
}
