var map = null;
var xmlMapObj = null;
var xmlHotelObj = null;
var arrHotelName = new Object();
var hashHotelMaker = new Object();
var nowZoom;
var minZoom = 8;
var maxZoom = 11;
var prefectureZoom;
var timeHandle1;
var makerFlg = "end";
var arrImgRequestKeyword = new Array("金閣寺","竜安寺","東京タワー","温泉旅館","温泉","ホテル");
var imgDispKeyword = "";

dojo.require("dojox.widget.FisheyeList");
dojo.require("dojo.parser");	// scan page for widgets and instantiate them

var xmlImgObj = null;
var fish1;
var fish2;
var pictureSize = "m"; //s t m
var testHtml = "";
var getPerpageNum = 10;
var getPageNum = 1;

var photos_page = "";
var photos_pages = "";
var photos_perpage = "";
var photos_total = "";

var arrImg = new Array(getPerpageNum);
var arrImgSourceLink = new Array(getPerpageNum);
var arrImgTitle = new Array(getPerpageNum);
var arrImgAuthor = new Array(getPerpageNum);
var arrImgAuthorLink = new Array(getPerpageNum);
var b=navigator.appName.toUpperCase();
var f_tid;
var tid_sl;
var fe;
var min=3;
var intervalTime=5000;
var controlFlg;

var rightSignImgUrl = "<img src=\"http://webservice.kabufuru.net/img/button/rightSign.jpg\" onclick=\"rightSignOnclick();\" />";
var leftSignImgUrl = "<img src=\"http://webservice.kabufuru.net/img/button/leftSign.jpg\" onclick=\"leftSignOnclick();\" />";

dojo.addOnLoad(function(){

	var sURL = "./logic/communicationLogic.php?cache=" + (new Date()).getTime();
	sURL = sURL + "&type=mapdata";
	if( document.searchForm.hiddenSearch.value == "off" ){
		sURL = sURL + "&first=on";
	} else {
		sURL = sURL + "&first=off";
	}
	sURL = sURL + "&LoadPrefectureCord=" + document.searchForm.hiddenPrefecture.value;
	sURL = sURL + "&LoadLargeAreaCord=" + document.searchForm.hiddenLargeArea.value;
//alert(sURL);
	new Ajax.Request(sURL, {method : "get", onComplete : getMapData });
	setMap();
	setFisheyelist();
/*
	//
	sURL = "./logic/communicationLogic.php?cache=" + (new Date()).getTime();
	sURL = sURL + "&type=requestdata";
	sURL = sURL + "&filename=" + document.searchForm.hiddenRequestFilename.value;
	if( document.searchForm.hiddenSearch.value == "off" ){
		sURL = sURL + "&first=on";
	} else {
		sURL = sURL + "&first=off";
	}
	new Ajax.Request(sURL, {method : "get", onComplete : getHotelData });
*/
});

function setFisheyelist(){
	fish1 = dijit.byId("fisheye1");
	fish2 = dijit.byId("fisheye2");

	var ranInt = parseInt(Math.random()*arrImgRequestKeyword.length);
	imgDispKeyword = arrImgRequestKeyword[ranInt];
	var sURL = "./logic/commumicationImgLogic.php?cache=" + (new Date()).getTime();
	sURL += "&perpage=" + getPerpageNum;
	sURL += "&pagenum=" + getPageNum;
	sURL += "&searchkeyword=" + encodeURI(imgDispKeyword);
	new Ajax.Request(sURL, {method : "get", onComplete : dispImgSummary });
}

function dispPhotosAttribution(){
	alert( photos_page + " " + photos_pages + " " + photos_perpage + " " + photos_total);
}

function leftSignOnclick(){
	getPageNum--;
	getPicturesByClick();
}

function rightSignOnclick(){
	getPageNum++;
	getPicturesByClick();
}

function dispLeftRightButton(){
	if( parseInt(photos_page) > 1 ){
		document.getElementById("leftSignTd").innerHTML=leftSignImgUrl;
	} else {
		document.getElementById("leftSignTd").innerHTML="";
	}
	if( parseInt(photos_page) < parseInt(photos_pages) ){
		document.getElementById("rightSignTd").innerHTML=rightSignImgUrl;
	} else {
		document.getElementById("rightSignTd").innerHTML="";
	}
}

function getPicturesByClick(){
	var sURL = "./logic/commumicationImgLogic.php?cache=" + (new Date()).getTime();
	sURL += "&perpage=" + getPerpageNum;
	sURL += "&pagenum=" + getPageNum;
	sURL += "&searchkeyword=" + encodeURI(imgDispKeyword);
	new Ajax.Request(sURL, {method : "get", onComplete : convertImgSummary });

}

function deleteImgSummary(){
	var arrChildren = fish1.getChildren();
	for( var i=0; i<arrChildren.length; i++){
		fish1.removeChild(arrChildren[i]);
	}
	var arrChildren = fish2.getChildren();
	for( var i=0; i<arrChildren.length; i++){
		fish2.removeChild(arrChildren[i]);
	}
}

function convertImgSummary( request ){
//	alert(request.responseText);
	xmlImgObj = request.responseXML;
	var stat = xmlImgObj.getElementsByTagName("rsp")[0].getAttribute("stat");
	if( stat == "ok" ){
		setFishEysList();
		deleteImgSummary();
		
		var photosTag = xmlImgObj.getElementsByTagName("rsp")[0].getElementsByTagName("photos")[0];
		
		photos_page = photosTag.getAttribute("page");
		photos_pages = photosTag.getAttribute("pages");
		photos_perpage = photosTag.getAttribute("perpage");
		photos_total = photosTag.getAttribute("total");

		var photoTag = photosTag.getElementsByTagName("photo");
		for(var i=0; i<photoTag.length; i++){
			var photo_id= photoTag[i].getAttribute("id");
			var photo_owner= photoTag[i].getAttribute("owner");
			var photo_secret= photoTag[i].getAttribute("secret");
			var photo_server= photoTag[i].getAttribute("server");
			var photo_farm= photoTag[i].getAttribute("farm");
			var photo_title= photoTag[i].getAttribute("title");
			var tempImgHtml = "http://farm" + photo_farm + ".static.flickr.com/" + photo_server + "/" + photo_id + "_" + photo_secret + "_" + pictureSize + ".jpg";
			var tempImgSourceLink = "http://www.flickr.com/photos/" + photo_owner + "/" + photo_id + "/";
			var tempImgAuthorLink = "http://www.flickr.com/photos/" + photo_owner + "/";
			
			arrImg[i] = tempImgHtml;
			arrImgSourceLink[i] = tempImgSourceLink;
			arrImgTitle[i] = photo_title;
			arrImgAuthor[i] = photoTag[i].getAttribute("ownername");
			arrImgAuthorLink[i] = tempImgAuthorLink;
			
			var fisheyeLow = getPerpageNum/2;
			if( i < fisheyeLow ){
				addToFishEysList(photo_title,tempImgHtml,1,i);
			} else {
				addToFishEysList(photo_title,tempImgHtml,2,i);
			}
		}
		
		restartSlideShowFromOnClick(1);
		dispLeftRightButton();
	}
}

function dispImgInSlideshowOnclick(){
	location.href = arrImgSourceLink[photoNum];
}

function slideShowControlButtonOnclick(){
	if(controlFlg){
		stopSlideshow();
		controlFlg=false;
		document.getElementById("controlButtonId").innerHTML=" 再開する ";
	}else{
		restartSlideshow();
		controlFlg=true;
		document.getElementById("controlButtonId").innerHTML=" 停止する ";
	};
}

function restartSlideShowFromOnClick( argImgNum ){
	clearInterval(tid_sl);
	photoNum = argImgNum-1;
	nextImgShow();
	tid_sl=setInterval("nextImgShow();",intervalTime);
	controlFlg=true;
	document.getElementById("controlButtonId").innerHTML=" 停止する ";
}

function stopSlideshow(){
	clearInterval(tid_sl);
	p_hyouji();
	n_hyouji();
}

function restartSlideshow(){
	controlFlg=true;
	nextImgShow();
	tid_sl=setInterval("nextImgShow();",intervalTime);
}

function startSlideShow(){
	controlFlg=true;
	photoNum = -1;
	nextImgShow();
	tid_sl=setInterval("nextImgShow();",intervalTime);
}

function nextImgShow(){
	if( photoNum < getPerpageNum-1 ){
		photoNum++;
	} else {
		photoNum = 0;
	}
	p_hyouji_fe();
	n_hyouji();
}

function p_hyouji_fe(){
	if(b.indexOf("EXPLORER") >= 0){
		clearTimeout(f_tid);
		fe=100;
		fe_out();
	}else{
		document.getElementById("dispImgInSlideshow").src=arrImg[photoNum];
	}
}

function fe_out(){
//alert(fe);
	if(fe > 0){
		document.getElementById("dispImgInSlideshow").filters["alpha"].opacity=fe;
		fe=fe-3*min;
		f_tid=setTimeout("fe_out();",50);
	}else{
		document.getElementById("dispImgInSlideshow").filters["alpha"].opacity=0;
		document.getElementById("dispImgInSlideshow").src=arrImg[photoNum];
		clearTimeout(f_tid);
		fe=0;
		fe_in();
	}
}

function fe_in(){
	if(fe < 100){
		document.getElementById("dispImgInSlideshow").filters["alpha"].opacity=fe;
		fe=fe+min;
		f_tid=setTimeout("fe_in();",50);
	}else{
		fe=100;
		document.getElementById("dispImgInSlideshow").filters["alpha"].opacity=fe;
	}
}

function p_hyouji(){
	document.getElementById("dispImgCaption").src=arrImg[photoNum];
}

function n_hyouji(){
	document.getElementById("dispImgCaption").innerHTML="<div id=\"dispImgCaptionTitle\">" + arrImgTitle[photoNum] + "</div>"
	+ "<div id=\"dispImgCaptionAuthorLink\">auther by <a href=\"" + arrImgAuthorLink[photoNum] + "\">" + arrImgAuthor[photoNum] + "</a></div>";
}

function dispImgSummary( request ){
//alert(request.responseText);
	xmlImgObj = request.responseXML;
	var stat = xmlImgObj.getElementsByTagName("rsp")[0].getAttribute("stat");
	if( stat == "ok" ){
		setFishEysList();
		
		document.getElementById("imgAreaKeyword").innerHTML = imgDispKeyword;
		var photosTag = xmlImgObj.getElementsByTagName("rsp")[0].getElementsByTagName("photos")[0];

		photos_page = photosTag.getAttribute("page");
		photos_pages = photosTag.getAttribute("pages");
		photos_perpage = photosTag.getAttribute("perpage");
		photos_total = photosTag.getAttribute("total");

		var photoTag = photosTag.getElementsByTagName("photo");
		for(var i=0; i<photoTag.length; i++){
			var photo_id= photoTag[i].getAttribute("id");
			var photo_owner= photoTag[i].getAttribute("owner");
			var photo_secret= photoTag[i].getAttribute("secret");
			var photo_server= photoTag[i].getAttribute("server");
			var photo_farm= photoTag[i].getAttribute("farm");
			var photo_title= photoTag[i].getAttribute("title");
			var tempImgHtml = "http://farm" + photo_farm + ".static.flickr.com/" + photo_server + "/" + photo_id + "_" + photo_secret + "_" + pictureSize + ".jpg";
			var tempImgSourceLink = "http://www.flickr.com/photos/" + photo_owner + "/" + photo_id + "/";
			var tempImgAuthorLink = "http://www.flickr.com/photos/" + photo_owner + "/";
			
			arrImg[i] = tempImgHtml;
			arrImgSourceLink[i] = tempImgSourceLink;
			arrImgTitle[i] = photo_title;
			arrImgAuthor[i] = photoTag[i].getAttribute("ownername");
			arrImgAuthorLink[i] = tempImgAuthorLink;
			
			var fisheyeLow = getPerpageNum/2;
			if( i < fisheyeLow ){
				addToFishEysList(photo_title,tempImgHtml,1,i);
			} else {
				addToFishEysList(photo_title,tempImgHtml,2,i);
			}
		}
		
		startSlideShow();
		dispLeftRightButton();
	}
}

function setFishEysList(){
	//	itemWidth="40" itemHeight="40"
	//	itemMaxWidth="150" itemMaxHeight="150"
	//	orientation="horizontal"
	//	effectUnits="2"
	//	itemPadding="10"
	//	attachEdge="center"
	//	labelEdge="bottom"
	fish1.itemWidth=80;
	fish1.itemHeight=80;
	fish1.itemMaxWidth=170;
	fish1.itemMaxHeight=170;
	fish1.orientation="horizontal";
	fish1.effectUnits="2";
	fish1.itemPadding="5";
	fish1.attachEdge="center";
	fish2.itemWidth=80;
	fish2.itemHeight=80;
	fish2.itemMaxWidth=170;
	fish2.itemMaxHeight=170;
	fish2.orientation="horizontal";
	fish2.effectUnits="2";
	fish2.itemPadding="5";
	fish2.attachEdge="center";
}

function addToFishEysList( argLabel, argIconSrc, argLow, argImgNum ){
	var item = new dojox.widget.FisheyeListItem();
	item.label = argLabel;
	item.iconSrc = argIconSrc;
	

	item.onClick = function(){
		restartSlideShowFromOnClick(argImgNum);
	};

	item.postCreate();
	
	if( argLow == 1 ){
		fish1.addChild(item);
		fish1.startup();
	} else if( argLow == 2){
		fish2.addChild(item);
		fish2.startup();
	}

	item.startup();
}

function getHotelData( request ){
	xmlHotelObj = request.responseXML;
	var resultPlanTag = xmlHotelObj.getElementsByTagName("Plan");
	//
	for(var i=0; i<resultPlanTag.length; i++){
		var resultHotelTag = resultPlanTag[i].getElementsByTagName("Hotel");
		for(var j=0; j<resultHotelTag.length; j++){
			var hotelId = resultHotelTag[j].getElementsByTagName("HotelID")[0].childNodes[0].nodeValue;
			var hotelName = resultHotelTag[j].getElementsByTagName("HotelName")[0].childNodes[0].nodeValue;
			var hotelCatchCopy = resultHotelTag[j].getElementsByTagName("HotelCatchCopy")[0].childNodes[0].nodeValue;
			var hotelLongitude  = resultHotelTag[j].getElementsByTagName("X")[0].childNodes[0].nodeValue;
			var hotelLatitude = resultHotelTag[j].getElementsByTagName("Y")[0].childNodes[0].nodeValue;

			if (!(hotelId in arrHotelName)) {
				arrHotelName[hotelId] = hotelName;

				//convert japanese to world
				hotelLongitude = hotelLongitude / (3600 * 1000);
				hotelLatitude = hotelLatitude / (3600 * 1000);
				var idoW = hotelLatitude - hotelLatitude * 0.00010695 + hotelLongitude * 0.000017464 + 0.0046017;
				var keidoW = hotelLongitude - hotelLatitude * 0.000046038 - hotelLongitude * 0.000083043 + 0.010040;

				idoW = (idoW * 100000);
				idoW = Math.round(idoW + 0.5);
				idoW = (idoW / 100000);
				keidoW = (keidoW * 100000);
				keidoW = Math.round(keidoW + 0.5);
				keidoW = (keidoW / 100000);
//alert( idoW + " " + keidoW);
				//create maker and 
				var makerpoint = new GLatLng(parseFloat(idoW), parseFloat(keidoW));
				var marker=makeMarkerAndEvent(makerpoint, hotelName, hotelCatchCopy);
				map.addOverlay(marker);

			}
		}
	}
}


function makeMarkerAndEvent(point, hotelName, hotelCatchCopy){
    var marker = new GMarker(point);
	var dispHtml = "<span style=\"font-size:14px;color:navy\">・" + hotelName + "</span><br/><span style=\"font-size:11px;color:gray\">" + hotelCatchCopy + "</span>";
/*
    GEvent.addListener(marker, "click", function(){ 
			marker.openInfoWindowHtml(dispHtml);
    }); 

    GEvent.addListener(marker, "click", function(){ 
			marker.openInfoWindowHtml(hotelName);
    }); 
*/
    GEvent.addListener(marker, "click", function(){ 
			marker.openInfoWindow(hotelName+"hgoe");
    }); 

    return marker;
}

function getMapData( request ){
//alert(request.responseText);
	xmlMapObj = request.responseXML;
	var strPathname = location.pathname;
	setPrefectureSelect();
//	setStartDaySelect();
}

function setMap(){

	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(37.4748, 136.8896), 5);
		map.addControl(new GOverviewMapControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
/*
	    GEvent.addListener(map, 'move', function() {
	      var xy = map.getCenter();
		  var nowZoom = map.getZoom();
	      document.getElementById("show_x").innerHTML = xy.lng();
	      document.getElementById("show_y").innerHTML = xy.lat();
		  document.getElementById("nowzoom").innerHTML = nowZoom;
	  	});
*/

	} else {
		alert("このページはIE,FireFox以外のブラウザだと表示することができません。");
	}

    GDownloadUrl("./js/top/mapPrefection.json", createMap);
}

function createMap(jsondata, statusCode){
  var json = eval("(" + jsondata + ")");

  for (var i = 0; i < json.markerData.length; i++) {
    var pref = json.markerData[i].prefection;
    var url = json.markerData[i].url;
    var lat = json.markerData[i].lat;
    var lng = json.markerData[i].lng;

    var marker = createMarker(pref, url, lat, lng)
    map.addOverlay(marker);

  }

}

function createMarker(prefection, url, lat, lng){
	var marker = new GMarker(new GLatLng(lat, lng));
	var dispHtml = "<span style=\"font-size:14px;color:navy\">・" + prefection + "</span><br/><span style=\"font-size:13px;color:gray\"><a href=\"./hotel/" + url + "\">" + prefection + "のホテル・旅館情報を見る</a></span>";
	GEvent.addListener(marker, "click", function(){
		marker.openInfoWindowHtml(dispHtml);
	});
	return marker;
}


function onChangeCheckMoneySelect(){

	if( document.searchForm.moneyMinSelect.value != "nothing" && 
		document.searchForm.moneyMaxSelect.value != "nothing" && 
		parseInt(document.searchForm.moneyMaxSelect.value) < parseInt(document.searchForm.moneyMinSelect.value)
	){
		document.getElementById('moneyAlert').innerHTML = '料金の条件が間違っています。<br/>再度確認してください。'; 
		document.searchForm.serchButton.disabled = true;
	} else {
		document.getElementById('moneyAlert').innerHTML = ''; 
		document.searchForm.serchButton.disabled = false;
	}

}

function onChangeAllCheck(){
/*
	var dispAlert = "";
	if( document.searchForm.moneyMinSelect.value != "nothing" && 
		document.searchForm.moneyMaxSelect.value != "nothing" && 
		parseInt(document.searchForm.moneyMaxSelect.value) < parseInt(document.searchForm.moneyMinSelect.value)
	){
		dispAlert = '料金の条件が間違っています。'; 
	}

	if( document.searchForm.startDaySelect.value == "nothing" && document.searchForm.forDaysSelect.value != "nothing" ){
		dispAlert += '宿泊日数を指定する場合は、宿泊開始日を日付まで指定してください。'; 
	}
	
	document.getElementById('formAlert').innerHTML = dispAlert;
	if( dispAlert != "" ){
		document.searchForm.serchButton.disabled = true;
	} else {
		document.searchForm.serchButton.disabled = false;
	}
*/
}

function onChangeSetLargeAreaSelect(){
	var optionNum = document.searchForm.largeAreaSelect.options.length;
	for(var iLoop=1; iLoop<optionNum; iLoop++){
		document.searchForm.largeAreaSelect.options[0] = null;
	}
	setLargeAreaSelect(document.searchForm.prefectureSelect[document.searchForm.prefectureSelect.selectedIndex].value);
}

function setLargeAreaSelect( largeAreaCode ){
	var regionTag = xmlMapObj.getElementsByTagName("Area")[0].getElementsByTagName("Region");
//document.searchForm.largeAreaSelect.options[0] = new Option("指定なし","nothing");
	for(var iLoop=0; iLoop<regionTag.length; iLoop++){
		var prefectureTag = regionTag[iLoop].getElementsByTagName("Prefecture");
		for(var jLoop=0; jLoop<prefectureTag.length; jLoop++){
			var prefectureCd = prefectureTag[jLoop].getAttribute("cd");
			if( prefectureCd == largeAreaCode ){
				var largeAreaTag = prefectureTag[jLoop].getElementsByTagName("LargeArea");
				for(var kLoop=0; kLoop<largeAreaTag.length; kLoop++){
					var largeAreaCd = largeAreaTag[kLoop].getAttribute("cd");
					var largeAreaName = largeAreaTag[kLoop].getAttribute("name");
					document.searchForm.largeAreaSelect.options[kLoop] = new Option(largeAreaName,largeAreaCd);
				}
			}
		}
	}

	document.searchForm.largeAreaSelect.selectedIndex = 0;
}

function setPrefectureSelect(){
	var regionTag = xmlMapObj.getElementsByTagName("Area")[0].getElementsByTagName("Region");
	var filaNameFlg = "false";
	var allLoop = 0;
	for(var iLoop=0; iLoop<regionTag.length; iLoop++){
		//var tempHoge = regionTag[iLoop].getAttribute("name");
		var prefectureTag = regionTag[iLoop].getElementsByTagName("Prefecture");
		for(var jLoop=0; jLoop<prefectureTag.length; jLoop++){
			var prefectureName = prefectureTag[jLoop].getAttribute("name");
			var prefectureCd = prefectureTag[jLoop].getAttribute("cd");
			document.searchForm.prefectureSelect.options[allLoop] = new Option(prefectureName,prefectureCd);
			allLoop++;
		}
	}
	document.searchForm.prefectureSelect.selectedIndex = 12;

	//
	if( filaNameFlg == "false" ){
		setLargeAreaSelect(document.searchForm.prefectureSelect[document.searchForm.prefectureSelect.selectedIndex].value);
	}
	
}
function setStartDaySelect(){

	var yearMonth = document.searchForm.startYearMonthSelect[document.searchForm.startYearMonthSelect.selectedIndex].value;
	var year = parseInt(yearMonth.substr(0,4));
	var month = parseInt(yearMonth.substr(4,2));
	var lastday = getDayFromYearMonth(year,month);

	var optionNum = document.searchForm.startDaySelect.options.length;
	for(var iLoop=1; iLoop<optionNum; iLoop++){
		document.searchForm.startDaySelect.options[1] = null;
	}
	
	dd = new Date();

	if( dd.getMonth()+1 == month ){
		var jLoop = 1;
		for(var iLoop=1; iLoop<=lastday; iLoop++){
			if( dd.getDate() <= iLoop ){
				document.searchForm.startDaySelect.options[jLoop] = new Option(iLoop,iLoop);
				jLoop++;
			}
		}
	} else {
		for(var iLoop=1; iLoop<=lastday; iLoop++){
			document.searchForm.startDaySelect.options[iLoop] = new Option(iLoop,iLoop);
		}
	}
	document.searchForm.startDaySelect.selectedIndex = 0;
}

function getDayFromYearMonth(year,month){
	var lastday = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
		lastday[1] = 29;
	}
	return lastday[month-1];
}

function CountArrayElements(array){
	var cnt = 0;
	for(key in array){ cnt++; }
	return cnt;
}

