﻿var pm = { //pm is phiten map objects
	
	//config
	mapId : "map" , 
	topUrl  : "index.aspx" , 
	areaUrl : "index_search.aspx" ,
	topLat  : 37.5688 , 
	topLng  : 136.40625 , 
	topZoom : 5 , 
	filterLat : 45.4688 , //area filter position left
	filterLng  : 129.10625 , //area filter position top
	pointUrl : "createShopListJson.ashx" ,
	stateListUrl : "createStateListJson.ashx" ,
	AreaName : ["未選択","北海道","東北","関東(東京都以外)","東京都内","中部","近畿","中国・四国","九州・沖縄"] , 
	//setting
	get : new Array , 
	maker : new Array , 
	shopList : new Array , 
	stateList : new Array , 
	stateEnable : new Array , 
	areaList : new Array , 
	stateArea : new Array , 
	file : "" ,
	
	//function
	parseUrl : function(){
		var directories = location.href.split("/")
		this.file = directories[directories.length-1] || this.topUrl;
		if(this.file.split("?")[1]){
			var gets = this.file.split("?")[1].split("&");
			for(var i in gets){
				var p = gets[i].split("=");
				this.get[p[0]] =p[1];
			}
			this.file = this.file.split("?")[0];
		}
	},
	
	setQuickSearchStateIDField : function(){
		var jsonText = $.ajax({type: "GET",url: this.stateListUrl,async: false});
		eval("var jsonData="+jsonText.responseText);
		var option = $("<option value=''>選択してください</option>");
		$("#quickSearchStateIDField").append(option);
		$(jsonData).each(function(){
			pm.stateList[this.state_id] = this.state;
			pm.stateEnable[this.state_id] = this.enable;
			if(!(pm.areaList[this.area_id] instanceof Array))pm.areaList[this.area_id] = new Array;
			pm.areaList[this.area_id].push(this.state_id);
			pm.stateArea[this.state_id] = this.area_id;
			var disabled = this.enable=="false"?" disabled='disabled' class='disabled'":"";
			option = $("<option value='"+this.state_id+"'"+disabled+">"+this.state+"</option>");
			$("#quickSearchStateIDField").append(option);
		})
	},
	
	ieDisabled : function(){
		if($.browser.msie && $.browser.version <= 7){
			$("#quickSearchStateIDField").change(function(){
				if($(":selected",this).css("color")=="graytext"){
					$(this).get(0).selectedIndex = $(":selected",this).prev().val();
				}
			})
			$("option.disabled").css("color","graytext")
		}
	},
	
	top_map_show : function(){
	
		map.setCenter(new GLatLng(pm.topLat, pm.topLng), pm.topZoom);
		map.disableDoubleClickZoom()
		map.disableDragging()
		$("#quickSearch h2").data("state","open");
		var mapFilter = $("<div id='mapFilter'><div id='ie6Filter'></div><img name='map_background' src='../img/map/alpha.gif' width='415' height='432' border='0' id='map_background' usemap='#m_map_background_filter' alt='' /><map name='m_map_background_filter' id='m_map_background_filter'><area shape='poly' coords='2,333,2,430,69,430,69,346,44,346,44,333,2,333' href='"+pm.areaUrl+"?AreaID=8' alt='九州・沖縄' id='kyusyu' /><area shape='poly' coords='50,290,50,339,75,339,75,369,129,369,129,326,116,326,116,290,50,290' href='"+pm.areaUrl+"?AreaID=7' alt='中国・四国' id='tyugoku' /><area shape='poly' coords='122,291,122,321,135,321,135,352,177,352,177,316,152,316,152,291,122,291' href='"+pm.areaUrl+"?AreaID=6' alt='近畿' id='kinki' /><area shape='poly' coords='158,225,158,309,183,309,183,328,206,328,206,255,231,255,231,225,158,225' href='"+pm.areaUrl+"?AreaID=5' alt='中部' id='tyubu' /><area shape='poly' coords='228,281,258,281,258,301,228,301,228,281' href='"+pm.areaUrl+"?AreaID=4' alt='東京都内' id='tokyo' /><area shape='poly' coords='213,261,213,328,273,328,273,261,244,261,245,281,258,280,257,301,228,300,228,281,244,280,244,261,213,261' href='"+pm.areaUrl+"?AreaID=3' alt='関東(東京以外)' id='kanto'/><area shape='poly' coords='238,122,303,122,303,255,238,255,238,122' href='"+pm.areaUrl+"?AreaID=2' alt='東北' id='tohoku' /><area shape='poly' coords='238,2,413,2,413,116,238,116,238,2' href='"+pm.areaUrl+"?AreaID=1' alt='北海道' id='hokaido' /></map></div>");
		map.addOverlay(new customBox(mapFilter.get(0),new GLatLng(pm.filterLat,pm.filterLng)));

		//kyusyu
		$("#kyusyu").mouseover(function(){
			$("#map_background").addClass("kyusyu")
		}).mouseout(function(){
			$("#map_background").removeClass("kyusyu")
		})
		//tyugoku
		$("#tyugoku").mouseover(function(){
			$("#map_background").addClass("tyugoku")
		}).mouseout(function(){
			$("#map_background").removeClass("tyugoku")
		})
		//kinki
		$("#kinki").mouseover(function(){
			$("#map_background").addClass("kinki")
		}).mouseout(function(){
			$("#map_background").removeClass("kinki")
		})
		//tyubu
		$("#tyubu").mouseover(function(){
			$("#map_background").addClass("tyubu")
		}).mouseout(function(){
			$("#map_background").removeClass("tyubu")
		})
		//tokyo
		$("#tokyo").mouseover(function(){
			$("#map_background").addClass("tokyo")
		}).mouseout(function(){
			$("#map_background").removeClass("tokyo")
		})
		//kanto
		$("#kanto").mouseover(function(){
			$("#map_background").addClass("kanto")
		}).mouseout(function(){
			$("#map_background").removeClass("kanto")
		})
		//tohoku
		$("#tohoku").mouseover(function(){
			$("#map_background").addClass("tohoku")
		}).mouseout(function(){
			$("#map_background").removeClass("tohoku")
		})
		//hokaido
		$("#hokaido").mouseover(function(){
			$("#map_background").addClass("hokaido")
		}).mouseout(function(){
			$("#map_background").removeClass("hokaido")
		})
	}
}

var map
//init
$(function(){
	pm.setQuickSearchStateIDField();
	pm.ieDisabled();
	if (GBrowserIsCompatible()) {
		
		pm.parseUrl();
		map = new GMap2($("#"+pm.mapId).get(0));
		
		if(pm.file==pm.topUrl){
			pm.top_map_show();
		}else if(pm.file==pm.areaUrl){
			$("#historyBack").click(function(){
				history.back();
				pageTracker._trackPageview("/shop/back");
			})
			if(pm.get["AreaID"]){
				$("#map_info").append(pm.AreaName[pm.get["AreaID"]]+"のショップ情報")
			}else{
				if(pm.get["StateID"] && !pm.get["Keyword"]){
					$("#map_info").append(pm.stateList[pm.get["StateID"]]+"のショップ情報")
				}else if(pm.get["Keyword"] && !pm.get["StateID"]){
					$("#map_info").append("検索結果　キーワード : "+decodeURIComponent(pm.get["Keyword"].replace("+"," ")))
				}else if(pm.get["Keyword"] && pm.get["StateID"]){
					$("#map_info").append("検索結果　都道府県 : "+pm.stateList[pm.get["StateID"]]+"　キーワード : "+decodeURIComponent(pm.get["Keyword"].replace("+"," ")))
				}
			}
			if(pm.get["AreaID"] || pm.get["StateID"]){
				var area =pm.get["AreaID"]?pm.get["AreaID"]:pm.stateArea[pm.get["StateID"]];
				if(pm.areaList[area] && pm.areaList[area].length>1){
					if(pm.get["AreaID"]){
						var states = $("<div class='states'>都道府県で絞り込み　</div>");
					}else{
						//都道府県画面
						var states = $("<div class='states'>都道府県で絞り込み　</div>");
					}
					for(var i in pm.areaList[area]){
						if(pm.stateEnable[pm.areaList[area][i]]=="true"){
							$(states).append("<a href='?StateID="+pm.areaList[area][i]+"'>"+pm.stateList[pm.areaList[area][i]]+"</a>");
						}else{
							$(states).append("<strong>"+pm.stateList[pm.areaList[area][i]]+"</strong>");
						}
					}
					$(states).insertAfter("#map_info");
				}
			}
			var parm;
			if(pm.get["AreaID"] && pm.get["AreaID"]!="undefined")parm = "AreaID="+pm.get["AreaID"];
			if(parm!="")parm += "&";
			if(pm.get["StateID"] && pm.get["StateID"]!="undefined")parm += "StateID="+pm.get["StateID"];
			if(parm!="")parm += "&";
			if(pm.get["Keyword"] && pm.get["Keyword"]!="undefined")parm += "Keyword="+pm.get["Keyword"];
			
			var jsonText = $.ajax({type: "GET",url: pm.pointUrl+"?"+parm ,async: false});
			eval("var jsonData="+jsonText.responseText);
			var minLng, minLat, maxLng, maxLat;
			
			//shop list
			$("#quickSearch").before($("<div id='shopNavi'></div>"))
			
			var icon = new GIcon();
			icon.image = "../img/map/map_pin.png";
			icon.iconSize = new GSize(34,52);
			icon.iconAnchor = new GPoint(17,52);
			
			$("#shopNavi").append($("<div class='shopList'></div>"))
			
			if(jsonData.length==0){
				pm.top_map_show();
				$("#map_info").append("　該当する店舗はありませんでした");
				$("#shopNavi").remove();
			}else{
				for(var i in jsonData){
					if(minLng>jsonData[i].longitude || !minLng)minLng = jsonData[i].longitude;
					if(minLat>jsonData[i].latitude  || !minLat)minLat = jsonData[i].latitude;
					if(maxLng<jsonData[i].longitude || !maxLng)maxLng = jsonData[i].longitude;
					if(maxLat<jsonData[i].latitude  || !maxLat)maxLat = jsonData[i].latitude;
					
					var point = new GLatLng(jsonData[i].latitude,jsonData[i].longitude);
					pm.maker[i] = new GMarker(point,icon);
					pm.maker[i].html = $("<div id='info_win'><div class='head'><a href='javascript:win_close()'><img src='../img/map/info_win_close.png' id='info_win_close' /></a><img src='"+jsonData[i].icon+"' alt='"+jsonData[i].shop+"' /><h2>"+jsonData[i].shop+"</h2><p>"+jsonData[i].prefecture+jsonData[i].address+"</p><p>TEL:"+jsonData[i].tel+"</p><p><a href='"+jsonData[i].url+"' target='_blank'>ショップの詳細はこちら</a></p></div><div class='bottom'></div></div>").get(0);
					pm.maker[i].lat = jsonData[i].latitude
					pm.maker[i].lng = jsonData[i].longitude
					
					map.addOverlay(pm.maker[i]);
					GEvent.addListener(pm.maker[i], "click", function(){
						show_window(new GLatLng(this.lat,this.lng),this.html);
						pageTracker._trackPageview("/shop/icon");
					})
					
					pm.shopList[i] = $("<div class='shop' title='"+i+"'><div><img src='../img/map/shopListLeft.gif' class='left'/>"+jsonData[i].shop+"</div><img src='../img/map/shopListRight.gif' /></div>")
					
					$(pm.shopList[i]).click(function(){
						show_window(new GLatLng(pm.maker[$(this).attr("title")].lat,pm.maker[$(this).attr("title")].lng),pm.maker[$(this).attr("title")].html);
						pageTracker._trackPageview("/shop/name");
					})
					
					$(".shopList").append(pm.shopList[i])
					
					/*
					if((i-0+1)%7==1){
						if(i!=0)$(".shopList"+Math.floor((i-1)/7)).append($("<img src='../img/map/shopNaviNextBtn.gif' class='next' />"))
						$("#shopNavi").append($("<div class='shopList shopList"+Math.floor((i-0)/7)+"'></div>"))
						if(i!=0)$(".shopList"+Math.floor((i-0)/7)).append($("<img src='../img/map/shopNaviPrevBtn.gif' class='prev' />"))
					}
					$(".shopList"+Math.floor((i-0)/7)).append(pm.shopList[i])
					*/
				}
				$("#map_info").append("　"+(i-0+1)+"店舗");

			
				var centerLng = (minLng+maxLng)/2;
				var centerLat = (minLat+maxLat)/2;
					
				var rectObj = new GLatLngBounds(new GLatLng(minLat,minLng), new GLatLng(maxLat,maxLng));
				var zm = map.getBoundsZoomLevel(rectObj)
				
				map.setCenter(new GLatLng(centerLat , centerLng),zm);
				
				//zoom
				var pos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10));
				map.addControl(new GLargeMapControl(),pos);
				
				var div = $("<div></div>")
									.css("background","white")
									.css("width",$("#"+pm.mapId).width())
									.css("height",$("#"+pm.mapId).height())
									.hide();
				
				map.addOverlay(new customBox(div.get(0)));
				GEvent.addListener(map, "zoomend", function(){
					$(div).show().fadeOut("slow");
				});
				
				GEvent.addListener(map, "moveend", function(){
					var latlngbounds = map.getBounds();
					var southwest = latlngbounds.getSouthWest();
					var northeast = latlngbounds.getNorthEast();
					var north = northeast.lat();
					var west  = southwest.lng();
					var northwest = new GLatLng(north,west)
					var pixelnorthwest = map.fromLatLngToDivPixel(northwest);
					$(div).css({
						position:"absolute",
						left:pixelnorthwest.x+"px",
						top:pixelnorthwest.y+"px"
					})
				});
			}
			
			//quick search
			$("#quickSearch h2").data("state","close");
			$("#quickSearch dl,p input").hide();
			$("#quickSearch").css("width","120px")
			
			//shop navi
			var shoplist = $(".shopList").height()/45;
			for(var j =0 ; j< shoplist ; j++){
				if(j==0){
					if(shoplist>1)$(".shopList").append($("<img src='../img/map/shopNaviNextBtn.gif' class='next' />"))
				}else{
					
					$("#shopNavi").append($(".shopList").eq(0).clone(true).addClass("shopList"+j).css("top",-(45*j)));
					if(j!=shoplist-1){
						$(".shopList"+j).append($("<img src='../img/map/shopNaviNextBtn.gif' class='next' />").css("top",45*j+12))
					}
					$(".shopList"+j).append($("<img src='../img/map/shopNaviPrevBtn.gif' class='prev' />").css("top",45*j+12))
				}
			}
			$(".shopList").eq(0).addClass("shopList0");
			
			if($.browser.safari){// for web kit browser
				_onload = window.onload;
				window.onload = function(){
					_onload();
					if(shoplist != $(".shopList0").height()/45){
						$(".shopList"+($(".shopList0").height()/45-1)+" .next").remove()
					}
					if(shoplist==1){
						$(".shopList0 .next").remove()
					}
				}
			}
			
			$(".next").click(function(){
				$(this).parent().animate({
					left: "900px"
				})
				$(this).parent().next().animate({
					left: "0"
				})
				pageTracker._trackPageview("/shop/next");
			})

			$(".prev").click(function(){
				$(this).parent().animate({
					left: "-900px"
				})
				$(this).parent().prev().animate({
					left: "0"
				})
				pageTracker._trackPageview("/shop/prev");
			})
		}
	}
	$("#quickSearch h2").click(function(){
		if($("#quickSearch h2").data("state")=="open"){
			$("#quickSearch dl,p input").fadeOut("fast");
			$("#quickSearch").animate({
				width: "120px"
			})
			$("#quickSearch h2").data("state","close");
		}else{
			$("#quickSearch").animate({
				width: "760px"
			})
			$("#quickSearch dl,p input").fadeIn("slow");
			$("#quickSearch dl,p input").fadeIn("slow");
			$("#quickSearch h2").data("state","open");
		}
		pageTracker._trackPageview("/shop/search");
	}).css("cursor","pointer")
})



var info_win;
var info_win_point;
var show_window = function(point,html){
	if(info_win){
		map.removeOverlay(info_win);
		info_win="";
		//info_win_point="";
	}
	if(info_win_point!==point.toString()){
		info_win_point=point.toString();
		info_win = new customBox(html,point);
		map.addOverlay(info_win);
		pixel_to=map.fromLatLngToContainerPixel(point)
		pixel_from=map.fromLatLngToContainerPixel(map.getCenter())
		new_pixel = new GSize(pixel_from.x-pixel_to.x, pixel_from.y-pixel_to.y+100)
		map.panBy(new_pixel);
	}else{
		info_win_point="";
	}
}
var win_close = function(){
	if(info_win){
		map.removeOverlay(info_win);
		info_win="";
		info_win_point="";
	}
}
//customBox
function customBox(html,point) {
	this.html = html;
	this.point = point;
}
customBox.prototype = new GOverlay();
customBox.prototype.initialize = function() {
	map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(this.html);
}
customBox.prototype.redraw = function(force){
	if (!force) return;
	if(this.point){
		var point=map.fromLatLngToDivPixel(this.point)
		$(this.html).css({
			position:"absolute",
			left:point.x+"px",
			top:point.y+"px"
		})
		if(info_win){
			$("#info_win").css({
				left:point.x-parseInt($("#info_win").width())/2+"px",
				top:point.y-parseInt($("#info_win").height())-52
			})
		}
	}
}
customBox.prototype.remove = function() {
	if(this.html.parentNode){
		this.html.parentNode.removeChild(this.html);
	}
}

