///////// charset="UTF-8"
/////////
/////////
/////////
/////////
// Super A3/B (329 mm x 483 mm) 
// Super A3/B (329 mm x 483 mm)
// A3 (297 mm x 420 mm)
// US B (279 mm x 432 mm)
// A4 (210 mm x 297 mm)
// A5 (148 mm x 210 mm)
// Letter (216 mm x 279 mm)
// Half letter (139.7 mm x 215.9 mm)
// Legal (216 mm x 356 mm)
// Executive (184.2 mm x 266.7 mm)
// 100 mm x 150 mm
// 11 x 14" (279 mm x 356 mm)
// 8 x 10" (203 mm x 254 mm)
// 5 x 7" (127 mm x 178 mm)
// 3.5 x 5" (89 mm x 127 mm)
// 3.81 pixels per mm = 96 pixels per inch
// 3.81*(210-30)=685.8
// 3.81*(297-40)=979.17
// 3.81*(210)=800.1
// 3.81*(297)=1,131.57
// 3.81*(279)=1,062.99
var a4x = "710px";
var a4y = "910px";
// var a4x = "200px";
// var a4y = "200px";
var dx = 168;
var dy = 220;
// var dy = 238;
var map = false;
var geocoder = false;
var printer = new Array();
var box_printer = j('<div id="box-printer" style=""></div>');
var b_printer0 = j('<div id="b_printer0"><div id="printer0"></div></div>');
var b_printer1 = j('<div id="b_printer1"><div id="printer1"></div></div>');
var b_printer2 = j('<div id="b_printer2"><div id="printer2"></div></div>');
var b_printer3 = j('<div id="b_printer3"><div id="printer3"></div></div>');
var b_printer4 = j('<div id="b_printer4"><div id="printer4"></div></div>');
var b_printer5 = j('<div id="b_printer5"><div id="printer5"></div></div>');
var debug = j('<div id="debug" style="display:block;position:absolute;left:0;bottom:40px;width:400px;height:100px;overflow:auto;font-size:80%;background:#bbb;color:#630;"></div>');
// display:none;
// <label for="address">Location:</label>
var saddress = j('<form action="#" onsubmit="showAddress(this.address.value); return false;" id="form-address"><div><input type="text" size="30" name="address" id="address" value="" style="margin:0;" /><input type="submit" value="'+go+'" id="goFindPlace" style="margin:0 0 0 3px;padding:0;" /></div></form>');
// Quantity:
var pbtn = j('<div id="pbtn"><label for="p-size">'+papersize+'</label><select id="p-size" disabled="disabled"><option value="a4"> '+a4_letter+' </option></select><label for="p-quan">'+sheets+'</label><select id="p-quan" disabled="disabled"><option value="6"> 6 </option></select>&#187; <input type="button" id="goPrint" value="'+print_map+'" onclick="goPrint();return false;" style="margin:0 0 0 10px;" /></div>');
var fav = j('<span id="fav"><span id="showFav">'+__Fav+': <a href="#" onclick="showAddFav(); return false;">'+__AddFav+'</a> <a href="#" onclick="showFav(); return false;">'+__ListFav+'</a> </span><span id="showMap" style="display:none;"><a href="#" onclick="backToMap(); return false;">'+__Back_To_Map+'</a></span></span>');
var databox = j('<div id="databox" style="display:block;"><h2>'+__Your_Faves+'</h2></div>');
var addbox = j('<div id="addbox" style="display:block;"><h2>'+__Fav_This_Map+'</h2></div>');
var spinwheel = j('<div id="spinwheel" style="position:absolute;background:white url(/img/ajax-loader.gif) 50% 50% no-repeat;display:block;width:100%;"></div>');
var center = false;
var size = false;
var point = false;
var addressDefault = "熊本市";
var addressDefault = "Mountain View, CA";
var zm = false;
var zmDefault = 13;
var mapHeightDefault = 0.98;
var mapHeightDefaultOffset = 20;
var mapWidthDefault = 1;
var mapWidthDefaultOffset = 20;
var rectangle = null;
var zoomUp = 2;
var goW = false;
var styleTag = '<style>@media print{ body{margin:0;padding:0;} .printerbox{ clear:both;float:none;page-break-after:always;page-break-inside:avoid;} #inprocess{display:none;} }</style>';//
var scriptTag = '<script>function p(){setTimeout("this.window.print();this.window.blur();this.window.close();",600)}</script>';
var headTag = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>'+title_printer+'</title>'+styleTag+scriptTag+'</head>';
var COOKIE_NAME_COUNTRY = 'map_country';
var COOKIE_NAME_ADDRESS = 'map_address';
var COOKIE_NAME_CENTER_LAT = 'map_center_lat';
var COOKIE_NAME_CENTER_LNG = 'map_center_lng';
var COOKIE_NAME_ZOOM = 'map_zoom';
var address = false;
var country = false;
var maptype = false;
var mapH = false;
var mapW = false;
var mapZ = false;
var mapS = false;
var mapT = false;
var mapC = false;
var cx = false;
var cy = false;
var mZ = false;
var rR = 0;
var pbtnH = 0;
var headerH = 0;
var footerH = 0;
var usrid = false;
var grpid = false;
// GScaleControl.prototype.printable=function(){return true;}

function mW() {
	if(j("#map")){
		mapW = Math.round((j(window).width()*mapWidthDefault) - mapWidthDefaultOffset);
	}
	return mapW;
}
function mH() {
	if(j("#map")){
		mapH = Math.round((j(window).height() - (pH() + hH() +fH() + mapHeightDefaultOffset)));
	}
	return mapH;
}
function pH() {
	if(j("#pbtn")){pbtnH = toNumber(j("#pbtn").height())
		+toNumber(j("#pbtn").css("padding-top"))+toNumber(j("#pbtn").css("padding-bottom"));}
	return pbtnH;
}
function hH() {
	if(j("#header")){headerH = toNumber(j("#header").height())
		+toNumber(j("#header").css("padding-top"))+toNumber(j("#header").css("padding-bottom"));}
	return headerH;
}
function fH() {
	if(j("#footer")){footerH = toNumber(j("#footer").height())
		+toNumber(j("#footer").css("padding-top"))+toNumber(j("#footer").css("padding-bottom"));}
	return footerH;
}
j(document).ready(function(){
	setTimeout(initMap,0);
});
function initMap(){
	if(GBrowserIsCompatible()){
		j("body").css({overflow:'hidden'});
		j("#box-map").prepend(saddress);
		j("#map").parent().append(pbtn);
		if(j("#pbtn")){pbtnH = pH();}
		if(j("#header")){headerH = hH();}
		if(j("#footer")){footerH = fH();}
		j("#map").parent().append(box_printer);
		ctlt = j.cookie(COOKIE_NAME_CENTER_LAT);
		ctlg = j.cookie(COOKIE_NAME_CENTER_LNG);
		if((ctlt == null) || (ctlt == '') || (ctlt == false) || (ctlt == 'null')){
			mapC = false;
		}else{
			mapC = new GLatLng(decodeURI(ctlt),decodeURI(ctlg));
		}
		address = j.cookie(COOKIE_NAME_ADDRESS);
		if((address == null) || (address == '') || (address == false) || (address == 'null')){
			if(google.loader.ClientLocation.address.city != ''){
				address = google.loader.ClientLocation.address.city;
			}else{
				address = addressDefault;
			}
		}else{
			address = decodeURI(address);
		}
		zm = j.cookie(COOKIE_NAME_ZOOM);
		if(isNaN(toNumber(decodeURI(zm))) || (zm == 0)){
			mapZ = zmDefault;
		}else{
			mapZ = toNumber(decodeURI(zm));
		}
		if(document.getElementById("map")){
			j("#map").css({
				width: mW()+"px",
				height: mH()+"px"
			});
			map = new GMap2(document.getElementById("map"));
			map.enableContinuousZoom();
			map.addMapType(G_PHYSICAL_MAP);
			geocoder = new GClientGeocoder();
			map.addControl(maptype = new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(6,6)));
	        map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(6,34)));
	        map.addControl(new GOverviewMapControl());
			map.addControl(new GScaleControl("300"));
			j("#map").append(debug);
//			j("#map").append(j('<div style="position:absolute;top:100px;left:100px;width:100px;height:100px;background:transparent;border:1px solid #f00;"></div>'));
			if(j(".cake-sql-log")){j(".cake-sql-log").appendTo("#debug");}
			if(document.getElementById("pbtn") && !document.getElementById("fav")){
				window.setTimeout(initUserFav, 0);
			}
//			j("#debug").prepend('<div>ClientLocations: '+google.loader.ClientLocation+'</div>');
//			j("#debug").prepend('<div>ClientLocations.address.city: '+google.loader.ClientLocation.address.city+'</div>');
//			j("#debug").prepend('<div>pbtnH: '+pbtnH+'</div>');
//			j("#debug").prepend('<div>headerH: '+headerH+'</div>');
//			j("#debug").prepend('<div>footerH: '+footerH+'</div>');
//			j("#debug").prepend('<div>p+h+f+off: '+(pH() + hH() +fH() + mapHeightDefaultOffset)+'</div>');
//			j("#debug").prepend('<div>j(window).height(): '+j(window).height()+'</div>');
//			j("#debug").prepend('<div>j("#container").height(): '+j("#container").height()+'</div>');
//			j("#debug").prepend('<div>j("body").height(): '+j("body").height()+'</div>');
//			j("#debug").prepend('<div>j(document).height(): '+j(document).height()+'</div>');
//			j("#debug").prepend('<div>document.documentElement.scrollHeight: '+
//				document.documentElement.scrollHeight+'</div>');
//			j("#debug").prepend('<div>mapH: '+mapH+'</div>');
//			j("#debug").prepend('<div>padding-top: '+j("#pbtn").css("padding-top")+'</div>');


//
// hide #debug
//
	if(j("#debug")){j("#debug").hide();}
//
//
			//j(window).height()
			//(pH() + hH() +fH() + mapHeightDefaultOffset)
			if(mapC == false){
				showAddress(address);
			}else{
				map.setCenter(mapC, mapZ);setTimeout(initRec,0);
			}
			j(window).resize(function(){
				j("#map").css({
					width: mW()+"px",
					height: mH()+"px"
				});
				j("#spinwheel").css({
					width: mW()+"px",
					height: mH()+"px"
				});
//				map.setCenter(mapC);
//				drawRec();
//				map.panTo(mapC);
//				mapS = map.getSize();
//				mapW = j("#map").width();
//				mapH = j("#map").height();
				return false;
			});
		}
	}
	return false;
}

function setMap(mapC, mapZ) {
	if(GBrowserIsCompatible()){
		if(j("#goPrint")){
			j("#goPrint").removeAttr('disabled');
		}
		if(j("#databox")){
			if(j("#databox").css("display") == 'block'){
				j("#databox").fadeOut("fast");
			}
		}
		if(!isNaN(mapZ) && mapC){
			map.setCenter(mapC, mapZ);//map.setZoom(mapZ);
			j.cookie(COOKIE_NAME_ZOOM, mapZ, { path: '/', expires: 90 });
			j.cookie(COOKIE_NAME_CENTER_LAT, mapC.lat(), { path: '/', expires: 90 });
			j.cookie(COOKIE_NAME_CENTER_LNG, mapC.lng(), { path: '/', expires: 90 });
		}
	}
	if(j("#showFav")){
		j("#showFav").show();
	}
	if(j("#showMap")){
		j("#showMap").hide();
	}
	return false;
}

function showAddress(address, mapZ) {
	if(GBrowserIsCompatible() && (address != '')){
		if(j("#databox")){
			if(j("#databox").css("display") == 'block'){
				j("#databox").fadeOut("fast");
			}
		}
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
//					alert(address + " not found");
					j("#address").val('');
				} else {
					mapC = point;
//					j("#debug").prepend('<div>mapZ: '+mapZ+'</div>');
					if(isNaN(mapZ)){
						mapZ = zmDefault;
					}
//					j("#debug").prepend('<div>mapZ: '+mapZ+'</div>');
					if(address != ''){
						address = encodeURI(address);
						j.cookie(COOKIE_NAME_ADDRESS, address, { path: '/', expires: 90 });
						j("#address").val(decodeURI(address));
//						j("#map").find(".gsc-input").val(decodeURI(address));
					}
					map.setCenter(mapC, mapZ);//map.setZoom(mapZ);
					j.cookie(COOKIE_NAME_ZOOM, mapZ, { path: '/', expires: 90 });
//					initRec();
					setTimeout(initRec,0);
				}
			}
		);
	}
	return false;
}

function initPrinter(num){
	b = "b_printer"+num;
	j("#box-printer").append(eval(b));
	j("#b_printer"+num).css({
		overflow: "auto",
		float: "left",
		width: "0px",
		height: "0px"
	});
	j("#printer"+num).addClass("printerbox");
	j("#printer"+num).css({
//		position: "relative",
//		overflow: "visible",
		overflow: "auto",
		width: a4x,
		height: a4y
	});
	if(document.getElementById("printer"+num)){
		printer[num] = new GMap2(document.getElementById("printer"+num));
		printer[num].setCenter(mapC, mapZ);
		printer[num].addControl(new GScaleControl("300"));
	}
	return false;
}
function drawRec(){
	if(GBrowserIsCompatible()){
		if(document.getElementById("div_recangle")){
			j("#div_recangle").remove();
		}
		var bounds = map.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		var lngDelta = (northEast.lng() - southWest.lng()) / 2;
		var latDelta = (northEast.lat() - southWest.lat()) / 2;
		var rectBounds = new GLatLngBounds(
			new GLatLng(southWest.lat() + latDelta, southWest.lng() + lngDelta),
			new GLatLng(northEast.lat() - latDelta, northEast.lng() - lngDelta));
		mapW = j("#map").width();
		mapH = j("#map").height();
		rectangle = new Rectangle(rectBounds);
		map.addOverlay(rectangle);
		mapC = map.getCenter();
		mapZ = map.getZoom();
		j.cookie(COOKIE_NAME_CENTER_LAT, mapC.lat(), { path: '/', expires: 90 });
		j.cookie(COOKIE_NAME_CENTER_LNG, mapC.lng(), { path: '/', expires: 90 });
		j.cookie(COOKIE_NAME_ZOOM, mapZ, { path: '/', expires: 90 });
	}
	return false;
}
function initRec(){
	if(GBrowserIsCompatible()){
		drawRec();
		for(var i = 0; i < 6; i++){
//			j("#debug").append(document.getElementById("b_printer"+i)+"<br />");
			if(document.getElementById("b_printer"+i) == null){initPrinter(i);}
		}
		mapT = map.getCurrentMapType();
		panPrinter();
		GEvent.addListener(map, "resize", function() {
			map.setCenter(mapC);
			drawRec();
			panPrinter();
//			j("#debug").prepend('<div>resize: '+mapC+'</div>');
//			map.panTo(mapC);
//			map.setCenter(mapC);
//			mapS = map.getSize();
//			mapW = j("#map").width();
//			mapH = j("#map").height();
		});
		GEvent.addListener(map, "moveend", function() {
			mapC = map.getCenter();
			drawRec();
			panPrinter();
//			j("#debug").prepend('<div>moveend: '+mapC+'</div>');
		});
		GEvent.addListener(map, "zoomend", function() {
			mapC = map.getCenter();
			mapZ = map.getZoom();
			j.cookie(COOKIE_NAME_CENTER_LAT, mapC.lat(), { path: '/', expires: 90 });
			j.cookie(COOKIE_NAME_CENTER_LNG, mapC.lng(), { path: '/', expires: 90 });
			j.cookie(COOKIE_NAME_ZOOM, mapZ, { path: '/', expires: 90 });
			panPrinter();
//			j("#debug").prepend('<div>zoomend: '+mapC+'</div>');
		});
		GEvent.addListener(map, "maptypechanged", function() {
			mapT = map.getCurrentMapType();
			printer[0].setMapType(mapT);
			printer[1].setMapType(mapT);
			printer[2].setMapType(mapT);
			printer[3].setMapType(mapT);
			printer[4].setMapType(mapT);
			printer[5].setMapType(mapT);
//			panPrinter();
//			j("#debug").prepend('<div>maptypechanged: '+mapC+'</div>');
		});
	}
	return false;
}
function panPrinter(){
//	j("#debug").prepend('<div>'+mapC+'</div>');
	geocoder.getLocations(
		mapC,
		function(addresses){
			if(addresses.Status.code == 200){
				if(addresses.Placemark.length > 0){
//					j("#debug").prepend('<div>'+addresses+'</div>');
//					j("#debug").prepend('<div>'+addresses.name+'</div>');
//					j("#debug").prepend('<div>'+addresses.Status.code+'</div>');
//					j("#debug").prepend('<div>'+addresses.Placemark[0].address.toString()+'</div>');
//					j("#debug").prepend('<div>'+addresses.Placemark[0].AddressDetails.Country.CountryNameCode.toString()+'</div>');
//					j("#debug").prepend('<div>'+addresses.Placemark.length+'</div>');
					country = addresses.Placemark[0].AddressDetails.Country.CountryNameCode.toString();
					address = encodeURI(addresses.Placemark[0].address.toString());
					j.cookie(COOKIE_NAME_COUNTRY, country, { path: '/', expires: 90 });
					j.cookie(COOKIE_NAME_ADDRESS, address, { path: '/', expires: 90 });
				}
			}
		}
	);
//	mapWidth = toNumber(j("#map").css('width'));
	cx = Math.round(mapW/2);
//	mapHeight = Math.round(toNumber(j("#map").css('height')));
	cy = Math.round(mapH/2);
	mZ = mapZ+zoomUp;
	printer[0].setCenter(map.fromContainerPixelToLatLng(new GPoint((cx - dx), (cy - Math.round(dy/2)))), mZ);
	printer[1].setCenter(map.fromContainerPixelToLatLng(new GPoint((cx - 0), (cy - Math.round(dy/2)))), mZ);
	printer[2].setCenter(map.fromContainerPixelToLatLng(new GPoint((cx + dx), (cy - Math.round(dy/2)))), mZ);
	printer[3].setCenter(map.fromContainerPixelToLatLng(new GPoint((cx - dx), (cy + Math.round(dy/2)))), mZ);
	printer[4].setCenter(map.fromContainerPixelToLatLng(new GPoint((cx - 0), (cy + Math.round(dy/2)))), mZ);
	printer[5].setCenter(map.fromContainerPixelToLatLng(new GPoint((cx + dx), (cy + Math.round(dy/2)))), mZ);
	return false;
}
if(GBrowserIsCompatible()){
	function Rectangle(bounds, opt_weight, opt_color) {
		this.bounds_ = bounds;
		this.weight_ = opt_weight || 1;
		this.color_ = opt_color || "#000";
	}
	Rectangle.prototype = new GOverlay();
	Rectangle.prototype.initialize = function(map) {
		var div = document.createElement("div");
		div.id = "div_recangle";
		div.style.border = this.weight_ + "px solid " + this.color_;
		div.style.position = "absolute";
		map.getPane(G_MAP_MAP_PANE).appendChild(div);
		this.map_ = map;
		this.div_ = div;
	}
	Rectangle.prototype.remove = function() {
		this.div_.parentNode.removeChild(this.div_);
	}
	Rectangle.prototype.copy = function() {
		return new Rectangle(this.bounds_, this.weight_, this.color_,
			this.backgroundColor_, this.opacity_);
	}
	Rectangle.prototype.redraw = function(force) {
		if (!force) return;
		var c1 = this.map_.fromLatLngToDivPixel(this.bounds_.getSouthWest());
		var c2 = this.map_.fromLatLngToDivPixel(this.bounds_.getNorthEast());
		this.div_.style.width = Math.abs(c2.x - c1.x) + "px";
		this.div_.style.height = Math.abs(c2.y - c1.y) + "px";
		this.div_.style.left = ((Math.min(c2.x, c1.x) - this.weight_) - Math.round((dx-1)*(1.5)))+ "px";
		this.div_.style.top = ((Math.min(c2.y, c1.y) - this.weight_) - ((dy-1)*1)) + "px";
		this.div_.style.width = (((dx-1)*3)+2)+"px";
		this.div_.style.height = (((dy-1)*2)+1)+"px";
		var r = new Array();
		var divleft = 0;var divtop = 0;
		for(var i = 0; i < 6; i++){
			if(i > 2){divtop = 1;}
			if(!(document.getElementById("rec"+i))){
				r[i] = j('<div id="rec'+i+'"></div>');
				if(r[i]){
					r[i].id = "rec"+i
					r[i].css({
						position: "absolute",
						width: (dx-1)+"px",
						height: (dy-1)+"px",
						border: "1px solid #000",
						left: ((dx*divleft)-1)+"px",
						top: ((dy*divtop)-1)+"px"
					});
					r[i].appendTo("#div_recangle");
				}
			}
			divleft++;
			if(i == 2){divleft = 0;}
		}
	}
}
function goPrint() {
	// decodeURI(
//	c = j.cookie('CakeCookie');
	var c = j.cookie('CAKEPHP');
	j.ajax({
		type: "POST",
//			data: "data[User][id]="+id+"&data[User][name]="+un,
		data: "data[C]="+c+"",
		url: root+"histories/add.xml",
		dataType: "xml",
		error: function(xml){
//				j("#debug").text(xml);
		}, 
		success: function(xml) {
//				j("#debug").append(xml);
//				var username = '';
//				username = j(xml).find('User_name').text();
//		j("#debug").append(username+"<br />");
//			 	if(username != ''){
//					t.text(username);
//				}
//			return false;
		}
	});
	goW = window.open('','printThisWindow','width=200,height=100,status=no,toolbar=0,location=no,menubar=0,directories=0,resizable=0,scrollbars=0');
	goW.document.open("text/html");
	var clone_box_printerl = '';
	clone_box_printer = j("#box-printer").clone();
	for(var i = 0; i < 6; i++){
		clone_box_printer.find("#b_printer"+i).css({
			overflow: "visible",
			float: "none",
			clear: "left",
			width: a4x,
			height: a4y
		});
	}
	goW.document.write(headTag+'<body onload="p();">');
	goW.document.write('<div id="printing_map">'+clone_box_printer.html()+'</div><div id="inprocess" style="color:#fff;background:#999;width:200px;height:100px;position:absolute;top:0;left:0;text-align:center;font-size:80%;line-height:50px;">'+processing+'</div></body></html>');
	goW.document.close();
	return false;
}

function toNumber(ns) {
	ns += '';n = ns;
	var rgx = /([0-9.])([^0-9.])/;
	while (rgx.test(n)) {
		n = n.replace(rgx,'$1');
	}
	return parseFloat(n);
}
function numberF(ns) {
	ns += '';
	x = ns.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
function isEven(num) {
  return !(num % 2);
}
