
	function make_gIcon(gtype, color, shadow) {
		var Icon = new GIcon();
		Icon.image=color;
		Icon.shadow=shadow;
		if (gtype==0) {							// 32*32サイズ
			Icon.iconSize=new GSize(32,32);
			Icon.shadowSize=new GSize(59,32);
			Icon.iconAnchor=new GPoint(16,32);
			Icon.infoWindowAnchor=new GPoint(16,0);
		}
		return (Icon);
	}
	
	function gmap_cookie_set() {		// 位置情報記憶
		var nowtime = new Date().getTime();
		var zoomlevel = map.getZoom();
		var homepos = map.getCenter();
		var homelat = homepos.lat();
		var homelng = homepos.lng();
		var clearDay = new Date(nowtime + (60*60*24*1000 * gConfig.cookie_date));
		var expDay = clearDay.toGMTString();
		
		document.cookie = 'home_lat=' + homelat + ';expires=' + expDay + ';';
		document.cookie = 'home_lng=' + homelng + ';expires=' + expDay + ';'; 
		document.cookie = 'zoom_level=' + zoomlevel + ';expires=' + expDay + ';';
		
		alert('位置情報を記憶しました');
	}
	
	function gmoveend () {
		// マップのビジュアルが変更された場合に右クリックメニュー非表示
		if (rmenu.style.visibility == "visible") {
			rmenu.style.visibility = "hidden";
		}
		var zoomLevel = map.getZoom();
		var garea = map.getBounds();
		var gNE = garea.getNorthEast();
		var gSW = garea.getSouthWest();
		if (zoomLevel > gConfig.map_addmenu_zoomlevel) {
			mapArea = {
				NElat: gNE.lat(),
				NElng: gNE.lng(),
				SWlat: gSW.lat(),
				SWlng: gSW.lng(),
				zoomlevel: zoomLevel,
				cond: gConfig.ctg_cond
			}
			get_gmaplocdata(mapArea);
		} else {
			$('rightdata').innerHTML = '';
		}
	}

	// 新規ロケーション入力関数群
	// add_location
	// add_loc_entry
	// check_addloc
	function add_location (g, flg) {
	// g: GLatLng Object
		var url = gConfig.add_loc_form;
		var parameter;
		var icon;
		
		if (flg == 0) {			// 登録処理
			// Form画面の表示
			var lat = g.lat();
			var lng = g.lng();
			parameter = 'entry=0&lat=' + lat + '&lng=' + lng;
			
			var myAjax = new Ajax.Updater(
				gConfig.farea,
				url,
				{
					method: 'post',
					parameters: parameter
				}
			);
			// 右クリックメニューを非表示
			if (rmenu.style.visibility == "visible") {
				rmenu.style.visibility = "hidden";
			}
			
			// 仮登録用マーカーの付加
			if (gConfig.kmarker_flg > 0) {
				map.removeOverlay(kmarker);			// 古い仮登録用マーカーの削除
			}
			icon = make_gIcon(0, gConfig.kmarker_img, gConfig.kmarker_shadow);
			kmarker = new GMarker(new GPoint(lng, lat),icon);
			map.addOverlay(kmarker);
			gConfig.kmarker_flg = 1;
		}
	}
	function add_loc_entry(fm, t) {
		var url = gConfig.add_loc_entry;
		switch (t) {
			case 0:				// 入力処理
				$(gConfig.fbutton).disabled = true;
				// Error Check
				if (check_addloc(fm, 0) > 0) {
					$(gConfig.fbutton).disabled = false;
					return;
				}
				var myAjax = new Ajax.Updater (
					gConfig.farea,
					url,
					{
						method: 'post',
						postBody : Form.serialize(fm)
					}
				);
				$(gConfig.fbutton).disabled = false;
				break;
			case 1:				// 登録処理
				$(gConfig.fbutton).disabled = true;
				var myAjax = new Ajax.Updater (
					gConfig.farea,
					url,
					{
						method: 'post',
						postBody : Form.serialize(fm)
					}
				);
				$(gConfig.fbutton).disabled = false;
				map.removeOverlay(kmarker);
				gConfig.kmarker_flg = 0;
				var nowtime = new Date().getTime();
				var clearDay = new Date(nowtime + (60*60*24*1000 * gConfig.cookie_date));
				var expDay = clearDay.toGMTString();
				document.cookie = 'msg_user=' + escape(fm.msg_user.value) + ';expires=' + expDay + ';';
				document.cookie = 'msg_email=' + fm.msg_email.value + ';expires=' + expDay + ';';
				break;
			case 9:				// 再入力処理
				url = gConfig.add_loc_form;
				var myAjax = new Ajax.Updater (
					gConfig.farea,
					url,
					{
						method: 'post',
						postBody : Form.serialize(fm)
					}
				);
				break;
		}
	}
	
	function check_addloc(fm, t) {
		if (t == 0) {			// ロケーション追加処理の時のみ
			if (fm.loc_name.value == "") {
				alert (gMsg.eMsg01);
				fm.loc_name.focus();
				return (1);
			}
			if (fm.loc_categorycd.value == "" || fm.loc_categorycd.value == "0") {
				alert(gMsg.eMsg02);
				fm.loc_categorycd.focus();
				return (1);
			}
		}
		if (fm.msg_user.value == "") {
			alert(gMsg.eMsg03);
			fm.msg_user.focus();
			return(1);
		}
		if (fm.msg_email.value == "") {
			alert(gMsg.eMsg04);
			fm.msg_email.focus();
			return (1);
		} else {
			if (!fm.msg_email.value.match(/.+@.+\..+/)){
				alert(gMsg.eMsg07);
				fm.msg_email.focus();
				return(1);
			}
		}
		if (fm.msg_title.value == "") {
			alert(gMsg.eMsg05);
			fm.msg_title.focus();
			return (1);
		}
		if (fm.msg_main.value == "") {
			alert(gMsg.eMsg06);
			fm.msg_main.focus();
			return (1);
		}
		return (0);
	}
	
	// データ取得～表示関連関数群
	// get_gmaplocdata
	// show_loading
	// set_res_data
	// create_div_locdata
	// centerzoom
	// create_merker_point
	// detail_dsp
	// commentadd
	function get_gmaplocdata(area) {
		var url = gConfig.get_gmaparea;
		var pars = $H(area).toQueryString();
		debug_str = area.NElat;
		var myAjax = new Ajax.Request(
			url,
			{
				method: 'post',
				parameters: pars,
				onLoading: show_loading,
				onSuccess: set_res_data,
				onFailure: function (request) {
					$('rightdata').innerHTML = gMsg.iMsg02 + '<br />' + debug_str;
				},
				onException: function (request, e) {
					$('rightdata').innerHTML = gMsg.iMsg03 + '<br />'+ e.message;
				}
			}
		);
	}
	function show_loading() {
		$('rightdata').innerHTML = gMsg.iMsg01;
	}
	function set_res_data(xmldata) {
		var elm = ['loc_id', 'loc_lat', 'loc_lng', 'loc_name', 
		'loc_categorycd', 'loc_url', 'loc_suisen', 'loc_cont', 'loc_zoomlevel', 'msgcnt' ];
		var locdata = new Array();
		var locxml = xmldata.responseXML;
		
		elm.each(function(elmdata) {
			locdata[elmdata] = locxml.getElementsByTagName(elmdata);
		});
		
		var arrlength = locdata['loc_id'].length;
		var rightsidestr = '';
		for (var i=0;i<arrlength;i++) {
			rightsidestr += '<div class="locdata">';
			rightsidestr += create_div_locdata(locdata,i);
			rightsidestr += '</div>';
			
			create_merker_point(locdata, i, arrlength);
		}
		$('rightdata').innerHTML = rightsidestr;
		mkmanager.refresh();
	}
	
	function create_div_locdata(node, n) {
		var s = '';
		var gLL = '(' + node['loc_lat'][n].firstChild.nodeValue + ',' + node['loc_lng'][n].firstChild.nodeValue + ')';
		var locid = node['loc_id'][n].firstChild.nodeValue;
		var ctgcd = parseInt(node['loc_categorycd'][n].firstChild.nodeValue);
		var gctg = new gCategory();
		var loc_name = node['loc_name'][n].firstChild.nodeValue;
		s += '<h3>';
		s += '<img src="' + gctg.img(ctgcd) + '" alt="' + gctg.altname(ctgcd) + '" width="32" height="32" />';
		s += loc_name.link('javascript: centerzoom(' + locid + ',new GLatLng' + gLL + ',' +  node['loc_zoomlevel'][n].firstChild.nodeValue + ');');
		s += '</h3>';
		return (s);
	}
	
	function centerzoom (id, gLatLng, z) {
		
		if (map.getZoom() < z) {
			map.setZoom(z);
		}
		// タイムラグが出るようにあえて、間でAjax
		detail_dsp (id);
		
		map.panTo(gLatLng);
	}
	
	function create_merker_point(node, n, count) {
		var dLevel;
		var gMarker;
		var gctg = new gCategory();
		
		if (count < 10) {
			dLevel = node['loc_zoomlevel'][n].firstChild.nodeValue - 2;
		} else {
			if (count < 20) {
				dLevel = node['loc_zoomlevel'][n].firstChild.nodeValue - 1;
			} else {
				dLevel = node['loc_zoomlevel'][n].firstChild.nodeValue;
			}
		}
		var locid = node['loc_id'][n].firstChild.nodeValue;
		var locbool = mkpoint.indexOf(locid);
		if (locbool == -1) {		// まだ登録されていない時
			mkpoint.push(locid);
			var locctg = parseInt(node['loc_categorycd'][n].firstChild.nodeValue);
			var locstr = '<div class="infowin">'
					+ '<h3>' + node['loc_name'][n].firstChild.nodeValue + '</h3>';
			if (node['loc_cont'][n].hasChildNodes()) {
				locstr += '<p>' + node['loc_cont'][n].firstChild.nodeValue + '</p>';
			}
			locstr += '<p class="detail">' + "詳細表示".link('javascript: detail_dsp(' + locid + ');') + '</p>';
					+ '</div>';
			
			var gicon = make_gIcon (0, gctg.img(locctg),gctg.shadow(locctg));

			gMarker = new GMarker (
				new GLatLng(
					node['loc_lat'][n].firstChild.nodeValue,
					node['loc_lng'][n].firstChild.nodeValue),
				gicon
			);
			GEvent.addListener (gMarker,"click",function() {
				GEvent.removeListener(gConfig.moveEnd);
				gMarker.openInfoWindowHtml(locstr);
				setTimeout(function() {
					gConfig.moveEnd = GEvent.addListener(map, 'moveend', function() {
						gmoveend();
					});
				}, gConfig.map_loadTimer);
			});

			mkmanager.addMarker(gMarker, dLevel);
		}
	}

	function detail_dsp(n) {
		var url = gConfig.get_entrydata;
		var pars = 'glocid=' + n;
		var gsize = map.getSize();
		$(gConfig.farea).style.width=gsize.width;
		var myAjax = new Ajax.Updater (
			gConfig.farea,
			url,
			{
				method: 'post',
				parameters: pars
			}
		);
		
	}
	// コメント登録関数群
	// commentadd
	// add_msg_entry
	function commentadd(n) {
		var url = gConfig.add_msg_form;
		var pars = 'loc_id=' + n;
		
		var myAjax = new Ajax.Updater (
			gConfig.carea,
			url,
			{
				method: 'post',
				parameters: pars
			}
		);
	}
	
	function add_msg_entry(fm, t) {
		var url;
		if (t < 9) {
			url = gConfig.add_msg_entry;
		} else {
			url = gConfig.add_msg_form;
		}
		$(gConfig.fbutton).disabled = true;
		if (check_addloc(fm, 1) > 0 && t == 0) {
			$(gConfig.fbutton).disabled = false;
			return;
		}
		var myAjax = new Ajax.Updater (
			gConfig.carea,
			url,
			{
				method: 'post',
				postBody: Form.serialize(fm)
			}
		);
		
		$(gConfig.fbutton).disabled = false;
	}

	function searchbox_dsp() {
		var url = gConfig.searchbox;
		var myAjax = new Ajax.Updater (
			gConfig.farea,
			url,
			{
				method: 'get'
			}
		);
	}
	function geosrch() {
		var ggeo = new GClientGeocoder();
		
		var addr = $('gsbox').value;
		ggeo.getLatLng(addr, function(latlng) {
			var cache = ggeo.getCache();
			
			if (cache) {
				if (latlng) {
					map.setCenter(latlng, 14);
				} else {
					alert (addr + 'は変換できませんでした。');
				}
			} else {
				alert (gMsg.eMsg10);
			}
		
		});
	}
	
	function ctgselect(ctg) {		// カテゴリ別選択
		
		mkmanager.clearMarkers();
		mkpoint = new Array();
		
		gConfig.ctg_cond = ctg;
		
		var zoomLevel = map.getZoom();
		var garea = map.getBounds();
		var gNE = garea.getNorthEast();
		var gSW = garea.getSouthWest();
		
		var gCtg = new gCategory;
		if (zoomLevel > gConfig.map_addmenu_zoomlevel) {
			mapArea = {
				NElat: gNE.lat(),
				NElng: gNE.lng(),
				SWlat: gSW.lat(),
				SWlng: gSW.lng(),
				zoomlevel: zoomLevel,
				cond: gConfig.ctg_cond
			}
			get_gmaplocdata(mapArea);
		} else {
			$('rightdata').innerHTML = '';
		}
	}
	
	function chk_msgmain() {
		var msg_main = $('msg_main');
		var chkstr = msg_main.value;
		
		if (chkstr.length > gConfig.comm_max_string) {
			alert (gMsg.eMsg08 + "\n現在の文字数:" + chkstr.length);
			var repstr = chkstr.substr(0, gConfig.comm_max_string);
			msg_main.value = repstr;
		}
	}
