
google.load('maps', '2',{'language':'ja'});
var map;
function setCookie() {

    if (!$.cookie('lat')) {
	$.cookie('lat','35.68112',{ expires: 7 });
    }
    if (!$.cookie('lng')) {
	$.cookie('lng','139.76703',{ expires: 7 });
    }
    if (!$.cookie('zoom')) {
	$.cookie('zoom','14',{ expires: 7 });
    }
    if (!$.cookie('maptype')) {
	$.cookie('maptype','normal',{ expires: 7 });
    }
}

function loadPin (lat, lng) {

    var marker = new GMarker(new GLatLng(lat, lng),{draggable:true,bouncy:true});
    GEvent.addListener(marker, "dragend", function() {
	var p = marker.getLatLng();
	$("#latitude").val(p.lat());
	$("#longitude").val(p.lng());
    });
    map.addOverlay(marker);

    map.panTo(new GLatLng(lat, lng));

}

function loadFixPin (lat, lng) {

    var marker = new GMarker(new GLatLng(lat, lng));
    GEvent.addListener(marker, "dragend", function() {
	var p = marker.getLatLng();
	$("#latitude").val(p.lat());
	$("#longitude").val(p.lng());
    });
    map.addOverlay(marker);

    map.panTo(new GLatLng(lat, lng));

}

function setCenterIcon () {

    //一度全部削除
    map.clearOverlays();

    var center = map.getCenter();

    $("#latitude").val(center.y);
    $("#longitude").val(center.x);
    
    var marker = new GMarker(new GLatLng(center.y, center.x),{draggable:true,bouncy:true});
    GEvent.addListener(marker, "dragend", function() {
	var p = marker.getLatLng();
	$("#latitude").val(p.lat());
	$("#longitude").val(p.lng());
    });
    map.addOverlay(marker);

}

function mapLoad() {

    if(GBrowserIsCompatible()){
	/*cookie取得*/
	setCookie();
	var lat = $.cookie('lat');
	var lng = $.cookie('lng');
	var zoom = 14;
	var maptype = $.cookie('maptype');
	//var map = new GMap2(document.getElementById("map"));
	map = new google.maps.Map2(document.getElementById('map'));

	// center and zoom to the lat/long in the form
	map.setCenter(new GLatLng(lat,lng), parseFloat(zoom));

	map.addControl(new GHierarchicalMapTypeControl());
	map.addControl(new GLargeMapControl3D());
	//map.addControl(new GMenuMapTypeControl());
	switch(maptype){
	case 'satellite':
	    map.setMapType(G_SATELLITE_MAP);
	    break;
	case 'hybrid':
	    map.setMapType(G_HYBRID_MAP);
	    break;
	case 'physical':
	    map.setMapType(G_PHYSICAL_MAP);
	    break;
	}

	GEvent.addListener(map, "click", function() {
	    $("#chasetext").html('シェイプを描き続けるポイントをクリックします<br>ダブルクリックするとシェイプを閉じます');
	});
	//ドラッグ後再読み込み
	GEvent.addListener(map, "moveend", function() {
	    var center = map.getCenter();
	    $.cookie('lat', center.y);
	    $.cookie('lng', center.x);
	});

	//縮小変更後再度読み込み
	GEvent.addListener(map, "zoomend", function(oldLevel, newLevel){
	    var center = map.getCenter();
	    $.cookie('lat', center.y);
	    $.cookie('lng', center.x);
	    $.cookie('zoom', newLevel);
	});

    }
}



var ply = {
poly:null,
makePostData: function() {
    var vnum = this.poly.getVertexCount();
    var post = "";
    var total_distance = null;
    for(i = 0; i < vnum; i++){

	vertex = this.poly.getVertex(i);
	if (i != 0) {
	    vertex_old = this.poly.getVertex(i-1);
	    total_distance += calcDist(vertex_old.lat(), vertex_old.lng(), vertex.lat(), vertex.lng());
	}
	post += '&point_x[]=' + vertex.lng() + '&point_y[]=' + vertex.lat();
    }
    bounds = this.poly.getBounds();
    center = bounds.getCenter();
    post += '&center_x=' + center.x;
    post += '&center_y=' + center.y;
    post += '&zoomlevel=' + map.getZoom();
    post += '&total_dimension=' + (this.poly.getArea()/1000).toFixed(2);
    post += '&total_distance=' + document.getElementById('total_distance').innerHTML;

    $('#total_dimension').html((this.poly.getArea()/1000).toFixed(2));
    $('#total_distance').html(total_distance.toFixed(2));

    return post;
},
getPolygonPoint: function() {
    return ply.poly.getVertexCount();
},
setPolygon: function() {

    //ボタンを変更
    $('#mapmenu01').attr('src', '/images/icn_area_over.png');

    var post = "";
    var myDate = new Date();
    var color = '#ff0000';
    var weight = 5;
    ply.poly = new GPolygon([], color, weight, 0.7, color, 0.2);
    map.addOverlay(this.poly);
    this.poly.enableDrawing({});
    this.poly.enableEditing({onEvent: 'mouseover'});
    this.poly.disableEditing({onEvent: 'mouseout'});

    //書き終わったら座標一覧とりたいな
    GEvent.addListener(ply.poly, 'endline', function() {

	//ボタンを変更
	$('#mapmenu01').attr('src', '/images/icn_area.png');
	$('#mapmenu02').attr('src', '/images/icn_move_over.png');

	post = ply.makePostData();

	//編集時も座標取りたいな
	GEvent.addListener(ply.poly, 'lineupdated', function(){
	    post = ply.makePostData();
	});
	//HTMLを取得
	var file ='/remote/getloginstatus?t=' + myDate.getTime();
	GDownloadUrl(file, function(data) {
	    //iwを表示
	    map.openInfoWindowHtml(ply.poly.getVertex(0), data);
	},'postbody=1' + post);

	//クリック時の動作
	GEvent.addListener(ply.poly, 'click', function(latlng,index) {

	    if(typeof index == 'number') {
		ply.poly.deleteVertex(index);
	    }else{
		var file ='/remote/getloginstatus?t=' + myDate.getTime();
		GDownloadUrl(file, function(data) {
		    //iwを表示
		    post = ply.makePostData();
		    map.openInfoWindowHtml(ply.poly.getVertex(0), data);
		},'postbody=1' + post);
	    }
	});

	//マウス追従を削除
	$("#chasetext").hide();

    });
},
setPolygonDoctorTop: function() {

    //ボタンを変更
    $('#mapmenu01').attr('src', '/images/icn_area_over.png');

    var post = "";
    var myDate = new Date();
    var color = '#ff0000';
    var weight = 5;
    ply.poly = new GPolygon([], color, weight, 0.7, color, 0.2);
    map.addOverlay(this.poly);
    this.poly.enableDrawing({});
    this.poly.enableEditing({onEvent: 'mouseover'});
    this.poly.disableEditing({onEvent: 'mouseout'});

    //書き終わったら座標一覧とりたいな
    GEvent.addListener(ply.poly, 'endline', function() {

	//ボタンを変更
	$('#mapmenu01').attr('src', '/images/icn_area.png');
	$('#mapmenu02').attr('src', '/images/icn_move_over.png');

	post = ply.makePostData();
	//編集時も座標取りたいな
	GEvent.addListener(ply.poly, 'lineupdated', function(){
	    post = ply.makePostData();
	});
	//HTMLを取得
	var file ='/remote/getcommentform?t=' + myDate.getTime();
	GDownloadUrl(file, function(data) {
	    //iwを表示
	    map.openInfoWindowHtml(ply.poly.getVertex(0), data);
	},'postbody=1' + post);

	//クリック時の動作
	GEvent.addListener(ply.poly, 'click', function(latlng,index) {
	    if(typeof index == 'number') {
		ply.poly.deleteVertex(index);
	    }else{
		var file ='/remote/getcommentform?t=' + myDate.getTime();
		GDownloadUrl(file, function(data) {
		    //iwを表示
		    post = ply.makePostData();
		    map.openInfoWindowHtml(ply.poly.getVertex(0), data);
		},'postbody=1' + post);
	    }
	});
    });
},
setPolygonManArea: function() {

    //ボタンを変更
    $('#mapmenu01').attr('src', '/images/icn_area_over.png');

    var post = "";
    var myDate = new Date();
    var color = '#ff0000';
    var weight = 5;
    ply.poly = new GPolygon([], color, weight, 0.7, color, 0.2);
    map.addOverlay(this.poly);
    this.poly.enableDrawing({});
    this.poly.enableEditing({onEvent: 'mouseover'});
    this.poly.disableEditing({onEvent: 'mouseout'});

    //書き終わったら座標一覧とりたいな
    GEvent.addListener(ply.poly, 'endline', function() {

	//ボタンを変更
	$('#mapmenu01').attr('src', '/images/icn_area.png');
	$('#mapmenu02').attr('src', '/images/icn_move_over.png');

	post = ply.makePostData();
	//編集時も座標取りたいな
	GEvent.addListener(ply.poly, 'lineupdated', function(){
	    post = ply.makePostData();
	});
	//HTMLを取得
	var file ='/remote/getmyareaform?t=' + myDate.getTime();
	GDownloadUrl(file, function(data) {
	    //iwを表示
	    map.openInfoWindowHtml(ply.poly.getVertex(0), data);
	},'postbody=1' + post);

	//クリック時の動作
	GEvent.addListener(ply.poly, 'click', function(latlng,index) {
	    if(typeof index == 'number') {
		ply.poly.deleteVertex(index);
	    }else{
		var file ='/remote/getmyareaform?t=' + myDate.getTime();
		GDownloadUrl(file, function(data) {
		    //iwを表示
		    post = ply.makePostData();
		    map.openInfoWindowHtml(ply.poly.getVertex(0), data);
		},'postbody=1' + post);
	    }
	});
    });
},
//MOVEのステータスを変更
moveChange:function () {
    if($('#mapmenu02').attr('src', '/images/icn_move.png')) {
	this.poly.disableEditing();
	$("#chasetext").hide();
	$('#mapmenu02').attr('src', '/images/icn_move_over.png');
	$('#mapmenu01').attr('src', '/images/icn_area.png');
	$('#mapmenu04').attr('src', '/images/icn_width.png');
	$('#mapmenu03').attr('src', '/images/icn_reset.png');
    } else {
	this.poly.disableEditing();
	$('#mapmenu02').attr('src', '/images/icn_move.png');
	$('#mapmenu01').attr('src', '/images/icn_area.png');
    }
},
//AREAのステータスを変更
areaChange:function() {
    if($('#mapmenu01').attr('src', '/images/icn_area.png')) {
	this.resetMap();
	$('#mapmenu01').attr('src', '/images/icn_area_over.png');
	$('#mapmenu02').attr('src', '/images/icn_move.png');
    } else {
	$("chasetext").hide();
	this.poly.disableEditing();
	$('#mapmenu01').attr('src', '/images/icn_area.png');
	$('#mapmenu02').attr('src', '/images/icn_move_over.png');
    }
},
//AREAのステータスを変更
areaChangeForDoctor:function() {
    if($('#mapmenu01').attr('src', '/images/icn_area.png')) {
	this.resetMapForDoctor();
	$('#mapmenu01').attr('src', '/images/icn_area_over.png');
	$('#mapmenu02').attr('src', '/images/icn_move.png');
    } else {
	$("chasetext").hide();
	this.poly.disableEditing();
	$('#mapmenu01').attr('src', '/images/icn_area.png');
	$('#mapmenu02').attr('src', '/images/icn_move_over.png');
    }
},
delPolygon:function () {
    if(window.confirm('マーカーを削除します')) {
	this.resetMap();
    }
},
resetMap:function () {
    map.clearOverlays();
    this.poly.hide();
    //parse_marker();
    this.setPolygon();

    $('#mapmenu02').attr('src', '/images/icn_move.png');
    $('#mapmenu01').attr('src', '/images/icn_area_over.png');
},
resetMapForDoctor:function () {
    map.clearOverlays();
    this.poly.hide();
    //parse_marker();
    this.setPolygonDoctorTop();

    $('#mapmenu02').attr('src', '/images/icn_move.png');
    $('#mapmenu01').attr('src', '/images/icn_area_over.png');
}
};

function updateManAreaList() {
    var myDate = new Date();
    //HTMLを取得
    var file ='/remote/getManSearchAreaList?t=' + myDate.getTime();
    GDownloadUrl(file, function(data) {
	$('#list_comment').html(data);
    });

}

function updateList() {
    var myDate = new Date();
    //HTMLを取得
    var file ='/remote/getSearchAreaList?t=' + myDate.getTime();
    GDownloadUrl(file, function(data) {
	$('#list_comment').html(data);
    });

}

function calcDist(lon1,lat1,lon2,lat2) {
    var r = 3963.0;
    // var MILESASKM = 1.609344;
    // var multiplier = currentUnit == "miles" ? 1 : MILESASKM;
    var multiplier = 1.609344;
    return multiplier * r * Math.acos(Math.sin(lat1/57.2958) * Math.sin(lat2/57.2958) +     Math.cos(lat1/57.2958) * Math.cos(lat2/57.2958) * Math.cos(lon2/57.2958 - lon1/57.2958));
}


function removeHidden() {

    var childlist = [];
    eles = document.getElementById("regist_form");
    // 子ノードの数だけ処理を繰り返す
    for (i=0;i<eles.childNodes.length;i++)
    {
	if (eles.childNodes.item(i).type == 'hidden') {
	    childlist.push(eles.childNodes.item(i));
	}
    }
    for(i=0; i<childlist.length; i++) {
	if (childlist[i].name != 'doctor_id') {
	    eles.removeChild(childlist[i]);
	}
    }
}

function moveManmapCenter(x, y, poly_x, poly_y, zoomlevel, comment, distance, dimension, msg_cnt, search_area_id) {

    var myDate = new Date();
    map.clearOverlays();
    map.setZoom(zoomlevel);
    var points = [];
    map.panTo(new GLatLng(y, x));
    //cookie設定
    $.cookie('lat', y);
    $.cookie('lng', x);
    $.cookie('zoom', zoomlevel);

    x_array = poly_x.split(",");
    y_array = poly_y.split(",");
    for(i = 0; i < x_array.length; i++) {
	var point = new GPoint(x_array[i], y_array[i]);
	points.push(point);
    }
    poly = new GPolygon(points, "#00B4AE", 3, 1, "#00B4AE", 0.5);
    map.addOverlay(poly);
    //map.openInfoWindowHtml(poly.getVertex(0), comment);

    //map.openInfoWindowHtml(new GLatLng(y, x), "<div style=\"width:250px;\">" + comment + "</div>");
    document.getElementById('total_distance').innerHTML = distance;
    document.getElementById('total_dimension').innerHTML = dimension;
    parse_marker();


}

function moveCenter(x, y, poly_x, poly_y, zoomlevel, comment, distance, dimension, msg_cnt, search_area_id) {

    var myDate = new Date();
    map.clearOverlays();
    map.setZoom(zoomlevel);
    var points = [];
    map.panTo(new GLatLng(y, x));
    //cookie設定
    $.cookie('lat', y);
    $.cookie('lng', x);
    $.cookie('zoom', zoomlevel);

    x_array = poly_x.split(",");
    y_array = poly_y.split(",");
    for(i = 0; i < x_array.length; i++) {
	var point = new GPoint(x_array[i], y_array[i]);
	points.push(point);
    }
    poly = new GPolygon(points, "#00B4AE", 3, 1, "#00B4AE", 0.5);
    map.addOverlay(poly);
    map.openInfoWindowHtml(poly.getVertex(0), comment);

    //map.openInfoWindowHtml(new GLatLng(y, x), "<div style=\"width:250px;\">" + comment + "</div>");
    document.getElementById('total_distance').innerHTML = distance;
    document.getElementById('total_dimension').innerHTML = dimension;
    parse_marker();

    map.clearOverlays();
    map.setZoom(16);

    var myDate = new Date();
    var file = '/remote/getgalinfo?id=' + search_area_id + '&t=' + myDate.getTime();

    GDownloadUrl(file, function(data) {

	map.openInfoWindowHtml(new GLatLng(y, x), data);

    });

}

function panToAddress(address, y,x) {
    document.getElementById("search_address").value = address;
    map.panTo(new GLatLng(y, x));

    //cookie設定
    $.cookie('lat', y);
    $.cookie('lng', x);
    parse_marker();
}

function mapFullChg(){
    if($('#content_right').hasClass('hiddend')){
	$.cookie('map','');
	$('#content_right').css('display', 'block');
	$('#content_left').css('width', '68%');
	$('#content_right').removeClass('hiddend');
	$("#expand").show();
	$("#narrow").hide();
    }else{
	$.cookie('map','full',{ expires: 7 });
	$('#content_right').css('display', 'none');
	$('#content_left').css('width', '100%');
	$('#content_right').addClass('hiddend');
	$("#narrow").show();
	$("#expand").hide();
    }
}
//アイコンオブジェクト作成
function generateIcon(){

    var icon = new GIcon();
    icon.image = '/images/white-marker.png';
    icon.shadow = '/images/icon_shadow.png';
    icon.iconSize = new GSize( 30, 37 );
    icon.shadowSize = new GSize( 39, 40 );
    icon.iconAnchor = new GPoint( 30, 26 );
    icon.infoWindowAnchor = new GPoint( icon.iconSize.width / 3, 0 );
    return icon;

}

//地図の境界を取得
function mapBounds(){
    var bounds = map.getBounds();
    var center = map.getCenter();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var maxX = northEast.lng();
    var minX = southWest.lng();
    var maxY = northEast.lat();
    var minY = southWest.lat();
    var centerX = center.x;
    var centerY = center.y;
    return [maxX,minX,maxY,minY,centerX,centerY];
}

function parse_marker() {

    //地図の境界を取得
    var bounds = mapBounds();
    var maxX = bounds[0];
    var minX = bounds[1];
    var maxY = bounds[2];
    var minY = bounds[3];
    var centerX = bounds[4];
    var centerY = bounds[5];
    var myDate = new Date();

    var file ='/remote/getSearchArea?centerX='+ centerX + '&centerY=' + centerY + '&maxX=' + maxX + '&minX=' + minX + '&maxY=' + maxY + '&minY=' + minY + '&t=' + myDate.getTime();

    GDownloadUrl(file, function(data) {

	//XMLをDOM表現に変換
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName('marker');

	for (var i = 0; i < markers.length; i++) {
	    var one = markers[i];
	    var id = one.getAttribute('id');
	    var lat =  parseFloat(one.getAttribute('lat'));
	    var lng =  parseFloat(one.getAttribute('lng'));
	    var latlist =  one.getAttribute('latlist');
	    var lnglist =  one.getAttribute('lnglist');
	    var point = new GLatLng(lat,lng);
	    //iconオブジェクト作成
	    var icon = generateIcon();

	    var marker = new GMarker(point,icon);

	    marker.id = id;
	    marker.lat = lat;
	    marker.lng = lng;
	    marker.latlist = latlist;
	    marker.lnglist = lnglist;

	    //マーカークリックしたら病院情報を取得表示
	    GEvent.addListener(marker, "click", function(){

		map.clearOverlays();
		map.setZoom(16);

		var myDate = new Date();
		var file = '/remote/getgalinfo?id=' + this.id + '&t=' + myDate.getTime();

		var marker_holder = this;
		GDownloadUrl(file, function(data) {

		    var points = [];

		    x_array = marker_holder.latlist.split(",");
		    y_array = marker_holder.lnglist.split(",");
		    for(i = 0; i < x_array.length; i++) {
			var point = new GPoint(x_array[i], y_array[i]);
			points.push(point);
		    }

		    poly = new GPolygon(points, "#00B4AE", 3, 1, "#00B4AE", 0.5);
		    map.addOverlay(poly);
		    map.openInfoWindowHtml(marker_holder.getLatLng(), data);

		});

	    });
	    map.addOverlay(marker);
	}

    });
}
function emailReset(self) {
    self.style.color='#3198D3';
    if(self.value == 'メールアドレス'){
	self.value = '';
    }else if(self.value == '' || self.value == 'メールアドレス'){
	self.style.color='#3198D3';
	self.value = 'メールアドレス';
    }
}
function passwordReset(self) {
    self.style.color='#3198D3';
    if(self.value == 'パスワード'){
	self.value = '';
    }else if(self.value == '' || self.value == 'パスワード'){
	self.style.color='#3198D3';
	self.value = 'パスワード';
    }
}

