// JavaScript sugubiz

var map;
var g_reset_zoom = 1;
var org_point ;
var map_bounds;
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);
var jlMarkers = new Array();
var hpMarkers = new Array();
var jlHtml = new Array();
var hpHtml = new Array();
var jalanPointArray = new Array();
var hpPointArray = new Array();
var geocoder = null;

// Create a lettered icon for this point using our icon class
function createJalanMarker(point, letter, html) {
	var icon = new GIcon(baseIcon);
	icon.iconSize = new GSize(15, 20);
	icon.shadowSize = new GSize(37, 20);
	icon.iconAnchor = new GPoint(9, 20);
	icon.image = "/map_markers/map_gourmet" + letter + ".gif";
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html, {maxWidth:400});
	});
	return marker;
}

// Create a lettered icon for this point using our icon class
function createMarker(point, letter, html) {
	var icon = new GIcon(baseIcon);
	icon.image = "/map_markers/map_hotel" + letter + ".gif";
	icon.iconSize = new GSize(15, 20);
	icon.shadowSize = new GSize(37, 20);
	icon.iconAnchor = new GPoint(9, 20);
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html, {maxWidth:400});
	});
	return marker;
}

//Action from TagCloud
function goSearchFromCloud(q){
	document.getElementById('town').value = q;
	urchinTracker('/index/cloud');
	goSearch();
}

//Replase strings function
function replaceLineName(string){
			var stationName = string.split("/");
			var splitCount = stationName.length;
			var lineName = "";
			for (var j = 0; j < splitCount - 1; j++){
				lineName += stationName[j] + " ";
			}
			return stationName[(splitCount - 1)] + "(" + lineName + ")";
}

function goSearch() {
	var address = $F('town');
	geocoder.getLocations(address, geocoderCallBack);
}

function geocoderCallBack(response){
	if (!response || response.Status.code != 200) {
		alert("見つかりませんでした。");
	} else {
		var resultCount = response.Placemark.length;
		if (resultCount == 1){
			var place = response.Placemark[0];
			var address = place.AddressDetails.Country.AddressLine[0];
			new Ajax.Request("/sugubiz/m/Tag/MakeCloud", {method: 'get', parameters: 'town=' + encodeURIComponent(response.name), onComplete:setTagCloudResponse});
			asynchroSearch(address, place.Point.coordinates[1], place.Point.coordinates[0]);
			setHistory(response.name, address, place.Point.coordinates[1], place.Point.coordinates[0]);
		}else{
			chooseTown(response, resultCount);
			return;
		}
	}
}

//show list of stations that hit from Geocoding API
function chooseTown(res, count){
	var html = "<h4>複数の候補が見つかりました。</h4><p>以下の選択肢から一つクリックしてください。</p>";
	html += "<ol>";
	for(var i = 0; i < count; i++){
		var currentPlace = res.Placemark[i];
		var address = currentPlace.AddressDetails.Country.AddressLine[0];
		html += '<li><a href="javascript: chooseTownGo(\'' + address + '\', ' + currentPlace.Point.coordinates[1] + ", " + currentPlace.Point.coordinates[0] + ', \'' + res.name + '\')">' + address + "</a></li>";
	}
	html += '</ol><p><a href="javascript: closeChooseTown()">＜キャンセル＞</a></p>';
	$('chooseArea').innerHTML = html;
	$('chooseArea').style.display = 'block';
}


function closeChooseTown(){
	$('chooseArea').style.display = '';
}

function setHistory(town, townresult, lat, lon){
	new Ajax.Request("/sugubiz/m/Tag/SetHistory", {method: 'get', parameters: 'town=' + encodeURIComponent(town) + '&townresult=' + encodeURIComponent(townresult) + '&lat=' + lat + '&lon=' + lon});
}

function setResponseImage(myId){
	$(myId).innerHTML = '<img src="/images/indicator_remembermilk_orange.gif" width="20" height="20" />';
}


//Action from the stations list
function chooseTownGo(town, lat, lon, q){
	$('chooseArea').style.display = '';
	new Ajax.Request("/sugubiz/m/Tag/MakeCloud", {method: 'get', parameters: 'town=' + encodeURIComponent(q), onComplete:setTagCloudResponse});

	asynchroSearch(town, lat, lon);	
	setHistory(q, town, lat, lon);
}

function setTagCloudResponse(req){
	getTagCloud;
}

//AsynchroSearch
function asynchroSearch(town, lat, lon){
	var url = "/sugubiz/m/";
	var yiCgi = "SuguBiz/YahooImage";
	
	map.clearOverlays();
	org_point = new GLatLng(lat, lon);
	map_bounds = new GLatLngBounds(org_point);
	new Ajax.Request(url + yiCgi, {method: 'get', parameters: 'town=' + town + '&JSON', onComplete: getYahooImage, onLoading:setResponseImage('photos')});
	$("imageTitle").innerHTML = "「" + town + "」";
	hpAjax(lat, lon, 1);
	jalanAjax(lat, lon, 1);
	
	document.title = town + ":すぐbiz -出張時のホテル･グルメ検索";
	
	map.addOverlay(new GMarker(org_point));
	map.setCenter(org_point);
}

function jalanAjax(lat, lon, startPos){
	var url = "/sugubiz/m/";
	var jalanCgi = "Jalan/GetHotelByGeo";
	
	//clear overray
	if(jalanPointArray.length > 0){
		for(var i = (jalanPointArray.length - 1); i >= 0; i--){
			map.removeOverlay(jalanPointArray[i]);
			jalanPointArray.pop();
			jlHtml.pop();
			jlMarkers.pop();
		}
	}
	
	new Ajax.Request(url + jalanCgi, {method: 'get', parameters: 'lat=' + lat + '&lon=' + lon + '&start=' + startPos + '&JSON', onComplete: getResJalan, onLoading:setResponseImage('hotelCount')});
}

function hpAjax(lat, lon, startPos){
	var url = "/sugubiz/m/";
	var hpCgi = "HotPepper/GetShopByGeoHapi";
	
	//clear overray
	if(hpPointArray.length > 0){
		for(var i = (hpPointArray.length - 1); i >= 0; i--){
			map.removeOverlay(hpPointArray[i]);
			hpPointArray.pop();
			hpHtml.pop();
			hpMarkers.pop();
		}
	}

new Ajax.Request(url + hpCgi, {method: 'get', parameters: 'lat=' + lat + '&lon=' + lon + '&start=' + startPos + '&JSON', onComplete: getResPepperAPI, onLoading:setResponseImage('groumetCount')});
}

//response of Jalan CGI
function getResJalan(req){
	var obj = eval('(' + req.responseText + ')');
	var html = "<table>";	
	
	if(obj.NumberOfResults > 0){
		for(var i = 0;i<obj.result.length;i++){
			var letter = "0" + (i + 1);
			var currentResult = obj.result[i];
			var yadoLink;
			
	
			var yadoUrl = currentResult.HotelDetailURL;
			var yadoLink = '<a href="' + yadoUrl + '" target="_blank">'+ currentResult.HotelName + '</a>';
			var myCopy = '<h4>' + currentResult.HotelCatchCopy + '</h4>';
			var caption = currentResult.HotelCaption;
			jlHtml[currentResult.HotelID] = '<div><h3>' + yadoLink + '</h3>' + myCopy + '<p style="height:135px;"><img src="' + currentResult.PictureURL + '" align="left" />' + caption + '</p><p>&lt;<a href="' + yadoUrl + '" target="_blank">じゃらんで詳細を見る</a>&gt;</p></div>&nbsp;' ;
	
			if(currentResult.SampleRateFrom != "" && currentResult.SampleRateFrom != "0"){
				yadoLink += '<br />' + currentResult.SampleRateFrom + '円～';
			}
			var yadolink = yadoLink + '<br />' + currentResult.HotelCatchCopy;
			var point = new GLatLng(currentResult.lat_degree, currentResult.lon_degree);
			jlMarkers[currentResult.HotelID] = createJalanMarker(point, letter, jlHtml[currentResult.HotelID]);
			map.addOverlay(jlMarkers[currentResult.HotelID]);
			jalanPointArray.push(jlMarkers[currentResult.HotelID]);
	
			html += "<tr><td>" + '<table><tr><td valign="top"><a href="javascript:jlMarkers[' + currentResult.HotelID +'].openInfoWindowHtml(jlHtml[' + currentResult.HotelID + '], {maxWidth:400})"><img border="0" src="/map_markers/map_gourmet' + letter + '.gif" align="left" hspace="2"></a></td><td>' + yadolink  + "</td></tr></table></td></tr>";
				
			map_bounds.extend(point);
		}
	
		html += "</table>";
	
		/*Paging*/
		var beforeHtml = "";
		var nextHtml = "";
		if(obj.DisplayFrom > 1){
			var beforeStartPos = obj.DisplayFrom - 5;
			beforeHtml = '<a href="javascript:jalanAjax(' + obj.latitude + ',' + obj.longitude + ',' + beforeStartPos + ');" onclick="javascript:urchinTracker(\'/hotel/prev\')">＜前の5件</a>';
		}
		if((obj.DisplayFrom + obj.DisplayPerPage) <= obj.NumberOfResults){
			var nextStartPos = obj.DisplayFrom + obj.DisplayPerPage;
			nextHtml = '<a href="javascript:jalanAjax(' + obj.latitude + ',' + obj.longitude + ',' + nextStartPos + ');"  onclick="javascript:urchinTracker(\'/hotel/next\')">次の5件＞</a>';
		}
		html += "<p>" + beforeHtml + " " + nextHtml + "</p>";


	
		$("yadolist").innerHTML = html;
		$("hotelCount").innerHTML = "(" + obj.NumberOfResults + ")";
		map.setCenter(map_bounds.getCenter());
		var zLevel = map.getBoundsZoomLevel(map_bounds);
		if(g_reset_zoom == 1){
			map.setZoom(zLevel);
		}
	}else{
		$("yadolist").innerHTML = "<p>この付近には宿が見つかりませんでした</p>";
		$("hotelCount").innerHTML = "";
	}
}

function getResPepperAPI(req){
	var obj = eval('(' + req.responseText + ')');
	var html2 = "<table>";
	
	if(obj.result.NumberOfResults == 0){
		$("groumetList").innerHTML = "この付近にはお店が見つかりませんでした";
		$("groumetCount").innerHTML = "";
		return;
	}
	
	
	for(var i = 0;i<obj.result.Shop.length && i < 26;i++){
		var letter = "0" + (i + 1);
		var currentResult = obj.result.Shop[i];

		var hpUrl = currentResult.ShopUrl
		var hpLink = '<h3><a href="' + hpUrl + '" target="_blank">'+ currentResult.ShopName + '</a></h3>';
		var yadolink = hpLink + '<br/>' + currentResult.KtaiAccess;

		hpHtml[i] = '<div>' + hpLink + '<h4>' + currentResult.GenreCatch + '</h4><p><img src="' + currentResult.PictureUrl.PcMiddleImg + '" height="126" align="left" />' + currentResult.ShopCatch + '</p><p>&lt;<a href="' + hpUrl + '" target="_blank">ホットペッパー.jpでお店の詳細・場所を見る</a>&gt;</p><p style="font-size:0.8em;">写真提供：ホットペッパー.jp</p></div>' ;

		var point = new GLatLng(currentResult.Latitude, currentResult.Longitude);
		hpMarkers[i] = createMarker(point, letter, hpHtml[i]);
		map.addOverlay(hpMarkers[i]);
		hpPointArray.push(hpMarkers[i]);

		html2 += "<tr><td>" + '<table><tr><td valign="top"><a href="javascript:hpMarkers[' + i +'].openInfoWindowHtml(hpHtml[' + i + '], {maxWidth:400})"><img border="0" src="/map_markers/map_hotel' + letter + '.gif" align="left" hspace="2"></a></td><td>' + yadolink  + "</td></tr></table></td></tr>";
			
		map_bounds.extend(point);
	}
	html2 += "</table>";
	
	/*Paging*/
	var beforeHtml = "";
	var nextHtml = "";
	if(obj.result.DisplayFrom > 1){
		var beforeStartPos = obj.result.DisplayFrom - obj.result.DisplayPerPage;
		beforeHtml = '<a href="javascript:hpAjax(' + obj.latitude + ',' + obj.longitude + ',' + beforeStartPos + ');" onclick="javascript:urchinTracker(\'/gourmet/prev\')">＜前の5件</a>';
	}
	if((obj.result.DisplayFrom + obj.result.DisplayPerPage)< obj.result.NumberOfResults){
		var nextStartPos = obj.result.DisplayFrom + obj.result.DisplayPerPage;
		nextHtml = '<a href="javascript:hpAjax(' + obj.latitude + ',' + obj.longitude + ',' + nextStartPos + ');" onclick="javascript:urchinTracker(\'/gourmet/next\')">次の5件＞</a>';
	}
	html2 += "<p>" + beforeHtml + " " + nextHtml + "</p>";
	
	if (obj.result.Shop.length > 0){
		$("groumetList").innerHTML = html2;
		$("groumetCount").innerHTML = "(" + obj.result.NumberOfResults + ")";
		map.setCenter(map_bounds.getCenter());
		var zLevel = map.getBoundsZoomLevel(map_bounds);
		if(g_reset_zoom == 1){
			map.setZoom(zLevel);
		}
	}else{
		$("groumetList").innerHTML = "この付近にはお店が見つかりませんでした";
		$("groumetCount").innerHTML = "";
	}
}

//Response of YahooImageSearch
function getYahooImage(req){
	var obj2 = eval('(' + req.responseText + ')');
	var obj = obj2.result[0];
	var html = "<p>";
	
	for(var i = 0;i<obj.Result.length;i++){
		html += '<a href="' + obj.Result[i].RefererUrl + '" target=_blank><img src="' + obj.Result[i].Thumbnail.Url + '" width="' +  obj.Result[i].Thumbnail.Width + '" height="' + obj.Result[i].Thumbnail.Height + '" alt=' + obj.Result[i].Summary + '" /></a>';
	}
	html += "</p>";
	
	if (obj.Result.length > 0){
		$("photos").innerHTML = html;
	}else{
		$("photos").innerHTML = "画像が見つかりませんでした。";
		$("imageTitle").innerHTML = "";
	}
}

//read TagCloud html
function getTagCloud(){
	new Ajax.Updater('tag','/sugubiz/m_/myDat/Tag/tagcloud.html',{method: 'get'});
}

//Initialize Maps
function mapLoad(){
	if(GBrowserIsCompatible()){
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		org_point = new GLatLng(35.68128, 139.76675);
		map.setCenter(org_point,13);
		geocoder = new GClientGeocoder();
	}
}
