
PolylineEncoder=function(numLevels,zoomFactor,verySmall,forceEndpoints){var i;if(!numLevels){numLevels=18;}
if(!zoomFactor){zoomFactor=2;}
if(!verySmall){verySmall=0.00001;}
if(!forceEndpoints){forceEndpoints=true;}
this.numLevels=numLevels;this.zoomFactor=zoomFactor;this.verySmall=verySmall;this.forceEndpoints=forceEndpoints;this.zoomLevelBreaks=new Array(numLevels);for(i=0;i<numLevels;i++){this.zoomLevelBreaks[i]=verySmall*Math.pow(zoomFactor,numLevels-i-1);}}
PolylineEncoder.prototype.dpEncode=function(points){var absMaxDist=0;var stack=[];var dists=new Array(points.length);var maxDist,maxLoc,temp,first,last,current;var i,encodedPoints,encodedLevels;var segmentLength;if(points.length>2){stack.push([0,points.length-1]);while(stack.length>0){current=stack.pop();maxDist=0;segmentLength=Math.pow(points[current[1]].lat()-points[current[0]].lat(),2)+
Math.pow(points[current[1]].lng()-points[current[0]].lng(),2);for(i=current[0]+1;i<current[1];i++){temp=this.distance(points[i],points[current[0]],points[current[1]],segmentLength);if(temp>maxDist){maxDist=temp;maxLoc=i;if(maxDist>absMaxDist){absMaxDist=maxDist;}}}
if(maxDist>this.verySmall){dists[maxLoc]=maxDist;stack.push([current[0],maxLoc]);stack.push([maxLoc,current[1]]);}}}
encodedPoints=this.createEncodings(points,dists);encodedLevels=this.encodeLevels(points,dists,absMaxDist);return{encodedPoints:encodedPoints,encodedLevels:encodedLevels,encodedPointsLiteral:encodedPoints.replace(/\\/g,"\\\\")}}
PolylineEncoder.prototype.dpEncodeToJSON=function(points,color,weight,opacity){var result;if(!opacity){opacity=0.9;}
if(!weight){weight=3;}
if(!color){color="#0000ff";}
result=this.dpEncode(points);return{color:color,weight:weight,opacity:opacity,points:result.encodedPoints,levels:result.encodedLevels,numLevels:this.numLevels,zoomFactor:this.zoomFactor}}
PolylineEncoder.prototype.dpEncodeToGPolyline=function(points,color,weight,opacity){if(!opacity){opacity=0.9;}
if(!weight){weight=3;}
if(!color){color="#0000ff";}
return new GPolyline.fromEncoded(this.dpEncodeToJSON(points,color,weight,opacity));}
PolylineEncoder.prototype.dpEncodeToGPolygon=function(pointsArray,boundaryColor,boundaryWeight,boundaryOpacity,fillColor,fillOpacity,fill,outline){var i,boundaries;if(!boundaryColor){boundaryColor="#0000ff";}
if(!boundaryWeight){boundaryWeight=3;}
if(!boundaryOpacity){boundaryOpacity=0.9;}
if(!fillColor){fillColor=boundaryColor;}
if(!fillOpacity){fillOpacity=boundaryOpacity/3;}
if(fill==undefined){fill=true;}
if(outline==undefined){outline=true;}
boundaries=new Array(0);for(i=0;i<pointsArray.length;i++){boundaries.push(this.dpEncodeToJSON(pointsArray[i],boundaryColor,boundaryWeight,boundaryOpacity));}
return new GPolygon.fromEncoded({polylines:boundaries,color:fillColor,opacity:fillOpacity,fill:fill,outline:outline});}
PolylineEncoder.prototype.distance=function(p0,p1,p2,segLength){var u,out;if(p1.lat()===p2.lat()&&p1.lng()===p2.lng()){out=Math.sqrt(Math.pow(p2.lat()-p0.lat(),2)+Math.pow(p2.lng()-p0.lng(),2));}
else{u=((p0.lat()-p1.lat())*(p2.lat()-p1.lat())+(p0.lng()-p1.lng())*(p2.lng()-p1.lng()))/segLength;if(u<=0){out=Math.sqrt(Math.pow(p0.lat()-p1.lat(),2)+Math.pow(p0.lng()-p1.lng(),2));}
if(u>=1){out=Math.sqrt(Math.pow(p0.lat()-p2.lat(),2)+Math.pow(p0.lng()-p2.lng(),2));}
if(0<u&&u<1){out=Math.sqrt(Math.pow(p0.lat()-p1.lat()-u*(p2.lat()-p1.lat()),2)+
Math.pow(p0.lng()-p1.lng()-u*(p2.lng()-p1.lng()),2));}}
return out;}
PolylineEncoder.prototype.createEncodings=function(points,dists){var i,dlat,dlng;var plat=0;var plng=0;var encoded_points="";for(i=0;i<points.length;i++){if(dists[i]!=undefined||i==0||i==points.length-1){var point=points[i];var lat=point.lat();var lng=point.lng();var late5=Math.floor(lat*1e5);var lnge5=Math.floor(lng*1e5);dlat=late5-plat;dlng=lnge5-plng;plat=late5;plng=lnge5;encoded_points+=this.encodeSignedNumber(dlat)+
this.encodeSignedNumber(dlng);}}
return encoded_points;}
PolylineEncoder.prototype.computeLevel=function(dd){var lev;if(dd>this.verySmall){lev=0;while(dd<this.zoomLevelBreaks[lev]){lev++;}
return lev;}}
PolylineEncoder.prototype.encodeLevels=function(points,dists,absMaxDist){var i;var encoded_levels="";if(this.forceEndpoints){encoded_levels+=this.encodeNumber(this.numLevels-1)}else{encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(absMaxDist)-1)}
for(i=1;i<points.length-1;i++){if(dists[i]!=undefined){encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(dists[i])-1);}}
if(this.forceEndpoints){encoded_levels+=this.encodeNumber(this.numLevels-1)}else{encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(absMaxDist)-1)}
return encoded_levels;}
PolylineEncoder.prototype.encodeNumber=function(num){var encodeString="";var nextValue,finalValue;while(num>=0x20){nextValue=(0x20|(num&0x1f))+63;encodeString+=(String.fromCharCode(nextValue));num>>=5;}
finalValue=num+63;encodeString+=(String.fromCharCode(finalValue));return encodeString;}
PolylineEncoder.prototype.encodeSignedNumber=function(num){var sgn_num=num<<1;if(num<0){sgn_num=~(sgn_num);}
return(this.encodeNumber(sgn_num));}
PolylineEncoder.latLng=function(y,x){this.y=y;this.x=x;}
PolylineEncoder.latLng.prototype.lat=function(){return this.y;}
PolylineEncoder.latLng.prototype.lng=function(){return this.x;}
PolylineEncoder.pointsToLatLngs=function(points){var i,latLngs;latLngs=new Array(0);for(i=0;i<points.length;i++){latLngs.push(new PolylineEncoder.latLng(points[i][0],points[i][1]));}
return latLngs;}
PolylineEncoder.pointsToGLatLngs=function(points){var i,gLatLngs;gLatLngs=new Array(0);for(i=0;i<points.length;i++){gLatLngs.push(new GLatLng(points[i][0],points[i][1]));}
return gLatLngs;}
var PENC_NUM_LEVELS=18;var PENC_ZOOM_FACTOR=2;var PENC_VERY_SMALL=0.00001;var PENC_FORCE_END_POINTS=true;var penc=new PolylineEncoder(PENC_NUM_LEVELS,PENC_ZOOM_FACTOR,PENC_VERY_SMALL,PENC_FORCE_END_POINTS);function ExtInfoWindow(marker,windowId,html,opt_opts){this.html_=html;this.marker_=marker;this.infoWindowId_=windowId;this.options_=opt_opts==null?{}:opt_opts;this.ajaxUrl_=this.options_.ajaxUrl==null?null:this.options_.ajaxUrl;this.callback_=this.options_.ajaxCallback==null?null:this.options_.ajaxCallback;this.borderSize_=this.options_.beakOffset==null?0:this.options_.beakOffset;this.paddingX_=this.options_.paddingX==null?0+this.borderSize_:this.options_.paddingX+this.borderSize_;this.paddingY_=this.options_.paddingY==null?0+this.borderSize_:this.options_.paddingY+this.borderSize_;this.map_=null;this.container_=document.createElement('div');this.container_.style.position='relative';this.container_.style.display='none';this.contentDiv_=document.createElement('div');this.contentDiv_.id=this.infoWindowId_+'_contents';this.contentDiv_.innerHTML=this.html_;this.contentDiv_.style.display='block';this.contentDiv_.style.visibility='hidden';this.wrapperDiv_=document.createElement('div');};ExtInfoWindow.prototype=new google.maps.Overlay();ExtInfoWindow.prototype.initialize=function(map){this.map_=map;this.defaultStyles={containerWidth:'360px',borderSize:1};this.wrapperParts={tl:{t:0,l:0,w:0,h:0,domElement:null},t:{t:0,l:0,w:0,h:0,domElement:null},tr:{t:0,l:0,w:0,h:0,domElement:null},l:{t:0,l:0,w:0,h:0,domElement:null},r:{t:0,l:0,w:0,h:0,domElement:null},bl:{t:0,l:0,w:0,h:0,domElement:null},b:{t:0,l:0,w:0,h:0,domElement:null},br:{t:0,l:0,w:0,h:0,domElement:null},beak:{t:0,l:0,w:0,h:0,domElement:null},close:{t:0,l:0,w:0,h:0,domElement:null}};for(var i in this.wrapperParts){var tempElement=document.createElement('div');tempElement.id=this.infoWindowId_+'_'+i;tempElement.style.visibility='hidden';document.body.appendChild(tempElement);tempElement=document.getElementById(this.infoWindowId_+'_'+i);var tempWrapperPart=eval('this.wrapperParts.'+i);tempWrapperPart.w=parseInt(this.getStyle_(tempElement,'width'));tempWrapperPart.h=parseInt(this.getStyle_(tempElement,'height'));document.body.removeChild(tempElement);}
for(var i in this.wrapperParts){if(i=='close'){this.wrapperDiv_.appendChild(this.contentDiv_);}
var wrapperPartsDiv=null;if(this.wrapperParts[i].domElement==null){wrapperPartsDiv=document.createElement('div');this.wrapperDiv_.appendChild(wrapperPartsDiv);}else{wrapperPartsDiv=this.wrapperParts[i].domElement;}
wrapperPartsDiv.id=this.infoWindowId_+'_'+i;wrapperPartsDiv.style.position='absolute';wrapperPartsDiv.style.width=this.wrapperParts[i].w+'px';wrapperPartsDiv.style.height=this.wrapperParts[i].h+'px';wrapperPartsDiv.style.top=this.wrapperParts[i].t+'px';wrapperPartsDiv.style.left=this.wrapperParts[i].l+'px';this.wrapperParts[i].domElement=wrapperPartsDiv;}
this.map_.getPane(G_MAP_FLOAT_PANE).appendChild(this.container_);this.container_.id=this.infoWindowId_;this.container_.style.width=this.defaultStyles.containerWidth;this.map_.getContainer().appendChild(this.contentDiv_);this.contentWidth=this.getDimensions_(this.container_).width;this.contentDiv_.style.width=this.contentWidth+'px';this.contentDiv_.style.position='absolute';this.container_.appendChild(this.wrapperDiv_);google.maps.Event.bindDom(this.container_,'mousedown',this,this.onClick_);google.maps.Event.bindDom(this.container_,'dblclick',this,this.onClick_);google.maps.Event.trigger(this.map_,'extinfowindowopen');if(this.ajaxUrl_!=null){this.ajaxRequest_(this.ajaxUrl_);}};ExtInfoWindow.prototype.onClick_=function(e){if(navigator.userAgent.toLowerCase().indexOf('msie')!=-1&&document.all){window.event.cancelBubble=true;window.event.returnValue=false;}else{e.preventDefault();e.stopPropagation();}};ExtInfoWindow.prototype.remove=function(){if(this.map_.getExtInfoWindow()!=null){google.maps.Event.trigger(this.map_,'extinfowindowbeforeclose');google.maps.Event.clearInstanceListeners(this.container_);if(this.container_.outerHTML){this.container_.outerHTML='';}
if(this.container_.parentNode){this.container_.parentNode.removeChild(this.container_);}
this.container_=null;google.maps.Event.trigger(this.map_,'extinfowindowclose');this.map_.setExtInfoWindow_(null);}};ExtInfoWindow.prototype.copy=function(){return new ExtInfoWindow(this.marker_,this.infoWindowId_,this.html_,this.options_);};ExtInfoWindow.prototype.redraw=function(force){if(!force||this.container_==null)return;var contentHeight=148;this.contentDiv_.style.height=contentHeight+'px';this.contentDiv_.style.width='360px';this.contentDiv_.style.left=this.wrapperParts.l.w+'px';this.contentDiv_.style.top=this.wrapperParts.tl.h+'px';this.contentDiv_.style.visibility='visible';this.wrapperParts.tl.t=0;this.wrapperParts.tl.l=0;this.wrapperParts.t.l=this.wrapperParts.tl.w;this.wrapperParts.t.w=(this.wrapperParts.l.w+this.contentWidth+this.wrapperParts.r.w)-this.wrapperParts.tl.w-this.wrapperParts.tr.w;this.wrapperParts.t.h=this.wrapperParts.tl.h;this.wrapperParts.tr.l=this.wrapperParts.t.w+this.wrapperParts.tl.w;this.wrapperParts.l.t=this.wrapperParts.tl.h;this.wrapperParts.l.h=contentHeight;this.wrapperParts.r.l=this.contentWidth+this.wrapperParts.l.w;this.wrapperParts.r.t=this.wrapperParts.tr.h;this.wrapperParts.r.h=contentHeight;this.wrapperParts.bl.t=contentHeight+this.wrapperParts.tl.h;this.wrapperParts.b.l=this.wrapperParts.bl.w;this.wrapperParts.b.t=contentHeight+this.wrapperParts.tl.h;this.wrapperParts.b.w=(this.wrapperParts.l.w+this.contentWidth+this.wrapperParts.r.w)-this.wrapperParts.bl.w-this.wrapperParts.br.w;this.wrapperParts.b.h=this.wrapperParts.bl.h;this.wrapperParts.br.l=this.wrapperParts.b.w+this.wrapperParts.bl.w;this.wrapperParts.br.t=contentHeight+this.wrapperParts.tr.h;this.wrapperParts.close.l=this.wrapperParts.tr.l+this.wrapperParts.tr.w-this.wrapperParts.close.w-this.borderSize_;this.wrapperParts.close.t=this.borderSize_;this.wrapperParts.beak.l=this.borderSize_+(this.contentWidth/2)-(this.wrapperParts.beak.w/2);this.wrapperParts.beak.t=this.wrapperParts.bl.t+this.wrapperParts.bl.h-this.borderSize_;for(var i in this.wrapperParts){if(i=='close'){this.wrapperDiv_.insertBefore(this.contentDiv_,this.wrapperParts[i].domElement);}
var wrapperPartsDiv=null;if(this.wrapperParts[i].domElement==null){wrapperPartsDiv=document.createElement('div');this.wrapperDiv_.appendChild(wrapperPartsDiv);}else{wrapperPartsDiv=this.wrapperParts[i].domElement;}
wrapperPartsDiv.id=this.infoWindowId_+'_'+i;wrapperPartsDiv.style.position='absolute';wrapperPartsDiv.style.width=this.wrapperParts[i].w+'px';wrapperPartsDiv.style.height=this.wrapperParts[i].h+'px';wrapperPartsDiv.style.top=this.wrapperParts[i].t+'px';wrapperPartsDiv.style.left=this.wrapperParts[i].l+'px';this.wrapperParts[i].domElement=wrapperPartsDiv;}
var currentMarker=this.marker_;var thisMap=this.map_;google.maps.Event.addDomListener(this.wrapperParts.close.domElement,'click',function(){thisMap.closeExtInfoWindow();});var pixelLocation=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());this.container_.style.position='absolute';var markerIcon=this.marker_.getIcon();this.container_.style.left=(pixelLocation.x
-(this.contentWidth/2)
-markerIcon.iconAnchor.x
+markerIcon.infoWindowAnchor.x)+'px';this.container_.style.top=(pixelLocation.y
-this.wrapperParts.bl.h
-contentHeight
-this.wrapperParts.tl.h
-this.wrapperParts.beak.h
-markerIcon.iconAnchor.y
+markerIcon.infoWindowAnchor.y
+this.borderSize_)+'px';this.container_.style.display='block';if(this.map_.getExtInfoWindow()!=null){this.repositionMap_();}};ExtInfoWindow.prototype.resize=function(){var tempElement=this.contentDiv_.cloneNode(true);tempElement.id=this.infoWindowId_+'_tempContents';tempElement.style.visibility='hidden';tempElement.style.height='auto';document.body.appendChild(tempElement);tempElement=document.getElementById(this.infoWindowId_+'_tempContents');var contentHeight=tempElement.offsetHeight;document.body.removeChild(tempElement);this.contentDiv_.style.height=contentHeight+'px';var contentWidth=this.contentDiv_.offsetWidth;var pixelLocation=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());var oldWindowHeight=this.wrapperParts.t.domElement.offsetHeight+this.wrapperParts.l.domElement.offsetHeight+this.wrapperParts.b.domElement.offsetHeight;var oldWindowPosTop=this.wrapperParts.t.domElement.offsetTop;this.wrapperParts.l.domElement.style.height=contentHeight+'px';this.wrapperParts.r.domElement.style.height=contentHeight+'px';var newPosTop=this.wrapperParts.b.domElement.offsetTop-contentHeight;this.wrapperParts.l.domElement.style.top=newPosTop+'px';this.wrapperParts.r.domElement.style.top=newPosTop+'px';this.contentDiv_.style.top=newPosTop+'px';windowTHeight=parseInt(this.wrapperParts.t.domElement.style.height);newPosTop-=windowTHeight;this.wrapperParts.close.domElement.style.top=newPosTop+this.borderSize_+'px';this.wrapperParts.tl.domElement.style.top=newPosTop+'px';this.wrapperParts.t.domElement.style.top=newPosTop+'px';this.wrapperParts.tr.domElement.style.top=newPosTop+'px';this.repositionMap_();};ExtInfoWindow.prototype.repositionMap_=function(){var mapNE=this.map_.fromLatLngToDivPixel(this.map_.getBounds().getNorthEast());var mapSW=this.map_.fromLatLngToDivPixel(this.map_.getBounds().getSouthWest());var markerPosition=this.map_.fromLatLngToDivPixel(this.marker_.getPoint());var panX=0;var panY=0;var paddingX=this.paddingX_;var paddingY=this.paddingY_;var infoWindowAnchor=this.marker_.getIcon().infoWindowAnchor;var iconAnchor=this.marker_.getIcon().iconAnchor;var windowT=this.wrapperParts.t.domElement;var windowL=this.wrapperParts.l.domElement;var windowB=this.wrapperParts.b.domElement;var windowR=this.wrapperParts.r.domElement;var windowBeak=this.wrapperParts.beak.domElement;var offsetTop=markerPosition.y-(-infoWindowAnchor.y+iconAnchor.y+this.getDimensions_(windowBeak).height+this.getDimensions_(windowB).height+this.getDimensions_(windowL).height+this.getDimensions_(windowT).height+this.paddingY_);if(offsetTop<mapNE.y){panY=mapNE.y-offsetTop;}else{var offsetBottom=markerPosition.y+this.paddingY_;if(offsetBottom>=mapSW.y){panY=-(offsetBottom-mapSW.y);}}
var offsetRight=Math.round(markerPosition.x+this.getDimensions_(this.container_).width/2+this.getDimensions_(windowR).width+this.paddingX_+infoWindowAnchor.x-iconAnchor.x);if(offsetRight>mapNE.x){panX=-(offsetRight-mapNE.x);}else{var offsetLeft=-(Math.round((this.getDimensions_(this.container_).width/2-this.marker_.getIcon().iconSize.width/2)+this.getDimensions_(windowL).width+this.borderSize_+this.paddingX_)-markerPosition.x-infoWindowAnchor.x+iconAnchor.x);if(offsetLeft<mapSW.x){panX=mapSW.x-offsetLeft;}}
if(panX!=0||panY!=0&&this.map_.getExtInfoWindow()!=null){this.map_.panBy(new google.maps.Size(panX,panY));}};ExtInfoWindow.prototype.ajaxRequest_=function(url){var thisMap=this.map_;var thisCallback=this.callback_;google.maps.DownloadUrl(url,function(response,status){var infoWindow=document.getElementById(thisMap.getExtInfoWindow().infoWindowId_+'_contents');if(response==null||status==-1){infoWindow.innerHTML='<span class="error">ERROR: The Ajax request failed to get HTML content from "'+url+'"</span>';}else{infoWindow.innerHTML=response;}
if(thisCallback!=null){thisCallback();}
thisMap.getExtInfoWindow().resize();google.maps.Event.trigger(thisMap,'extinfowindowupdate');});};ExtInfoWindow.prototype.getDimensions_=function(element){var display=this.getStyle_(element,'display');if(display!='none'&&display!=null){return{width:element.offsetWidth,height:element.offsetHeight};}
var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='block';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};};ExtInfoWindow.prototype.getStyle_=function(element,style){var found=false;style=this.camelize_(style);var value=element.style[style];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null;}else if(element.currentStyle){value=element.currentStyle[style];}}
if((value=='auto')&&(style=='width'||style=='height')&&(this.getStyle_(element,'display')!='none')){if(style=='width'){value=element.offsetWidth;}else{value=element.offsetHeight;}}
if(window.opera&&['left','top','right','bottom'].include(style)){if(this.getStyle_(element,'position')=='static')value='auto';}
return(value=='auto')?null:value;};ExtInfoWindow.prototype.camelize_=function(element){var parts=element.split('-'),len=parts.length;if(len==1)return parts[0];var camelized=element.charAt(0)=='-'?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++){camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1);}
return camelized;};google.maps.Map.prototype.ExtInfoWindowInstance_=null;google.maps.Map.prototype.ClickListener_=null;google.maps.Map.prototype.InfoWindowListener_=null;google.maps.Marker.prototype.openExtInfoWindow=function(map,cssId,html,opt_opts){if(map==null){throw'Error in google.maps.Marker.openExtInfoWindow: map cannot be null';return false;}
if(cssId==null||cssId==''){throw'Error in google.maps.Marker.openExtInfoWindow: must specify a cssId';return false;}
map.closeInfoWindow();if(map.getExtInfoWindow()!=null){map.closeExtInfoWindow();}
if(map.getExtInfoWindow()==null){map.setExtInfoWindow_(new ExtInfoWindow(this,cssId,html,opt_opts));if(map.ClickListener_==null){map.ClickListener_=google.maps.Event.addListener(map,'click',function(event){if(!event&&map.getExtInfoWindow()!=null){map.closeExtInfoWindow();}});}
if(map.InfoWindowListener_==null){map.InfoWindowListener_=google.maps.Event.addListener(map,'infowindowopen',function(event){if(map.getExtInfoWindow()!=null){map.closeExtInfoWindow();}});}
map.addOverlay(map.getExtInfoWindow());}};google.maps.Marker.prototype.closeExtInfoWindow=function(map){map.closeExtInfoWindow();};google.maps.Map2.prototype.getExtInfoWindow=function(){return this.ExtInfoWindowInstance_;};google.maps.Map2.prototype.setExtInfoWindow_=function(extInfoWindow){this.ExtInfoWindowInstance_=extInfoWindow;}
google.maps.Map2.prototype.openExtInfoWindow=function(point,cssId,html,opt_opts){var map=this;if(map==null){throw'Error in google.maps.Marker.openExtInfoWindow: map cannot be null';return false;}
if(cssId==null||cssId==''){throw'Error in google.maps.Marker.openExtInfoWindow: must specify a cssId';return false;}
var hi=new GIcon();hi.image="img/spacer.gif";hi.iconSize=new GSize(1,1);hi.iconAnchor=new GPoint(1,1);hi.infoWindowAnchor=new GPoint(1,1);var himarker=new google.maps.Marker(point,{icon:hi});map.addOverlay(himarker);map.extiwhimarker=himarker;map.closeInfoWindow();if(map.getExtInfoWindow()!=null){map.closeExtInfoWindow();}
if(map.getExtInfoWindow()==null){map.setExtInfoWindow_(new ExtInfoWindow(himarker,cssId,html,opt_opts));if(map.ClickListener_==null){map.ClickListener_=google.maps.Event.addListener(map,'click',function(event){if(!event&&map.getExtInfoWindow()!=null){map.closeExtInfoWindow();}});}
if(map.InfoWindowListener_==null){map.InfoWindowListener_=google.maps.Event.addListener(map,'infowindowopen',function(event){if(map.getExtInfoWindow()!=null){map.closeExtInfoWindow();}});}
map.addOverlay(map.getExtInfoWindow());}};google.maps.Map2.prototype.closeExtInfoWindow=function(){if(this.getExtInfoWindow()!=null){this.getExtInfoWindow().remove();}
if(this.extiwhimarker!=null){this.removeOverlay(this.extiwhimarker);this.extiwhimarker=null;}};if(window.mapeer==undefined)window.mapeer={};window.mapeer.maps={};var K_DISPLAY_GRID=false;var K_EDITMODE_WAIT=0;var K_EDITMODE_POINT=1;var K_EDITMODE_LINE=2;var K_EDITMODE_POLYGON=3;var K_EDITMODE_CIRCLE=4;var K_MARKER_IMPORT_MODE_ORIGINAL=0;var K_MARKER_IMPORT_MODE_COPY=1;var K_MARKER_IMPORT_MODE_ALIAS=2;var K_MARKER_TYPE_POINT=1;var K_MARKER_TYPE_LINE=2;var K_MARKER_TYPE_POLYGON=3;var K_MARKER_TYPE_CIRCLE=4;var K_MARKER_TYPE_SUMMARY=100;var K_CIRCLE_VTC=37;var K_RAD_TO_DEG=180/Math.PI;var K_DEG_TO_RAD=Math.PI/180;var K_ERMETERS=6378140;var K_MICON_BASEPATH='img/micons/';var K_MICON_PREFIX_IMAGE='m';var K_MICON_PREFIX_SHADOW='s';var K_MICON_PREFIX_HIGHTLIGHT='h';var K_MICON_SUFFIX='.png';var K_MICON_DEFAULT_IMAGE=K_MICON_BASEPATH+'m/0.png';var K_MICON_DEFAULT_SHADOW=K_MICON_BASEPATH+'s/0.png';var K_MICON_DEFAULT_HIGHLIGHT=K_MICON_BASEPATH+'h/0.png';var K_MICON_DEFAULT_IMAGE_WIDTH=32;var K_MICON_DEFAULT_IMAGE_HEIGHT=32;var K_MICON_DEFAULT_SHADOW_WIDTH=32;var K_MICON_DEFAULT_SHADOW_HEIGHT=32;var K_MICON_SUMMARY_IMAGE=K_MICON_BASEPATH+'m/sum.png';var K_MICON_SUMMARY_IMAGE_WIDTH=31;var K_MICON_SUMMARY_IMAGE_HEIGHT=32;var K_MICON_SUMMARY_SHADOW_WIDTH=32;var K_MICON_SUMMARY_SHADOW_HEIGHT=32;var K_MICON_SHADOWTYPE_MARKER=1;var K_MICON_SHADOWTYPE_GROUP=2;var K_DEFAULTSTYLE_STROKE_COLOR='#0000ff';var K_DEFAULTSTYLE_STROKE_WEIGHT=4;var K_DEFAULTSTYLE_STROKE_OPACITY=0.8;var K_DEFAULTSTYLE_FILL_COLOR='#e5ecf9';var K_DEFAULTSTYLE_FILL_OPACITY=0.5;var K_STYLE_WEIGHT_MIN=0;var K_STYLE_WEIGHT_MAX=20;var K_NORMAL_MAP=1;var K_SATELLITE_MAP=2;var K_HYBRID_MAP=3;var kf={};kf.maps={};kf.maps.init=function()
{this.initLngLat();this.initDefaultIcon();this.initSummaryIcon();this.initMap2();this.initClientGeocoder();this.initButtonControl();this.initUndoControl();this.initToggleButtonControl();this.initToggleButtonGroup();this.initCenterCursorControl();this.initRetouchControl();this.initPointMarkerControl();this.initLineMarkerControl();this.initPolygonMarkerControl();this.initCircleMarkerControl();this.initPolyline();this.initPolygon();this.initSummaryMarker();this.initPointMarker();this.initHandle();this.initLineMarker();this.initPolygonMarker();this.initCircleMarker();this.initEditableLineMarker();this.initEditablePolygonMarker();}
kf.maps.LngLat=function(geostr,unbounded)
{var lnglat=null;if(geostr.indexOf(' ',0)){lnglat=geostr.split(' ');}else{lnglat=geostr.split(',');}
return new google.maps.LatLng(parseFloat(lnglat[1]),parseFloat(lnglat[0]),unbounded);}
kf.maps.initLngLat=function()
{var c=this.LngLat;google.maps.LatLng.prototype.toGeoString=function()
{return this.lng()+' '+this.lat();}
google.maps.LatLng.prototype.toGeoUrlValue=function()
{return this.lng()+','+this.lat();}}
kf.maps.DefaultIcon={};kf.maps.initDefaultIcon=function()
{var d=new google.maps.Icon();d.shadow=window.baseurl+K_MICON_DEFAULT_SHADOW;d.iconSize=new google.maps.Size(K_MICON_DEFAULT_IMAGE_WIDTH,K_MICON_DEFAULT_IMAGE_HEIGHT);d.shadowSize=new google.maps.Size(K_MICON_DEFAULT_SHADOW_WIDTH,K_MICON_DEFAULT_SHADOW_HEIGHT);d.iconAnchor=new google.maps.Point(K_MICON_DEFAULT_IMAGE_WIDTH/2,K_MICON_DEFAULT_IMAGE_HEIGHT);d.infoWindowAnchor=new google.maps.Point(K_MICON_DEFAULT_IMAGE_WIDTH/2+6,K_MICON_DEFAULT_IMAGE_HEIGHT-24);d.infoShadowAnchor=new google.maps.Point(K_MICON_DEFAULT_IMAGE_WIDTH/2,25);this.DefaultIcon=d;}
kf.maps.SummaryIcon={};kf.maps.initSummaryIcon=function()
{this.SummaryIcon=new google.maps.Icon(kf.maps.DefaultIcon);this.SummaryIcon.image=window.baseurl+K_MICON_SUMMARY_IMAGE;this.SummaryIcon.iconSize=new google.maps.Size(K_MICON_SUMMARY_IMAGE_WIDTH,K_MICON_SUMMARY_IMAGE_HEIGHT);this.SummaryIcon.shadowSize=new google.maps.Size(K_MICON_SUMMARY_SHADOW_WIDTH,K_MICON_SUMMARY_SHADOW_HEIGHT);}
kf.maps.Map2={};kf.maps.initMap2=function()
{var c=google.maps.Map2;this.Map2=c;c.prototype.key='';c.prototype.centerOffsetTop=0;c.prototype.centerOffsetLeft=0;c.prototype.vcOffsetLeft=0;c.prototype.vcOffsetTop=0;c.prototype.controls={};c.prototype.centerCursor=null;c.prototype.editMode=K_EDITMODE_WAIT;c.prototype.addPointMode=false;c.prototype.markers={};c.prototype.markers.summaryMarkers={};c.prototype.markers.pointMarkers={};c.prototype.markers.lineMarkers={};c.prototype.markers.polygonMarkers={};c.prototype.markers.circleMarkers={};c.prototype.markers.levels={};c.prototype.levels=null;c.prototype.returner=null;c.prototype.editable=false;c.prototype.ignoreEvent=false;c.prototype.cells={};c.prototype.markers.cells={};c.prototype.retouchMode=false;c.prototype.lastHandle=null;c.prototype.search_keyword=null;c.prototype.lastPos=null;c.prototype.isVisibleContextMenu=false;c.prototype.isVisibleMousetipShapeEdit=false;c.prototype.isVisibleMousetipContextMenu=false;c.prototype.getCurrentMapTypeId=function()
{switch(this.getCurrentMapType()){case G_NORMAL_MAP:return K_NORMAL_MAP;case G_SATELLITE_MAP:return K_SATELLITE_MAP;case G_HYBRID_MAP:return K_HYBRID_MAP;default:return K_NORMAL_MAP;}}
c.prototype.setMapTypeById=function(maptypeid)
{switch(maptypeid){case K_NORMAL_MAP:this.setMapType(G_NORMAL_MAP);break;case K_SATELLITE_MAP:this.setMapType(G_SATELLITE_MAP);break;case K_HYBRID_MAP:this.setMapType(G_HYBRID_MAP);break;}}
c.prototype.goHomePosition=function()
{var eh=false;if(this.opts){if(this.opts.homeMaptype){eh=true;this.setMapTypeById(this.opts.homeMaptype);}
if(this.opts.homeZoom){eh=true;this.setZoom(this.opts.homeZoom);}
if(this.opts.homeCenter){eh=true;this.setCenter(new kf.maps.LngLat(this.opts.homeCenter));}}}
c.prototype.returnToSavedPosition=function()
{this.goHomePosition();}
c.prototype.convVCPoint=function(point)
{var p=this.fromLatLngToDivPixel(point);p.x+=this.vcOffsetLeft;p.y-=this.vcOffsetTop;return this.fromDivPixelToLatLng(p);}
c.prototype.getVCenter=function()
{return this.convVCPoint(this.getCenter());}
c.prototype.addControlWithProp=function(name,control)
{this.controls[name]=control;this.addControl(control);}
c.prototype.initCenterCursor=function()
{var ccicon=new google.maps.Icon(G_DEFAULT_ICON);ccicon.image=window.baseurl+"img/centercursor.png";ccicon.shadow="";ccicon.iconSize=new google.maps.Size(133,133);ccicon.iconAnchor=new google.maps.Point(67,67);var opts={};opts.icon=ccicon;var ccursor=new google.maps.Marker(this.getCenter(),opts);this.addOverlay(ccursor);ccursor.hide();google.maps.Event.addListener(ccursor,"click",function(){ccursor.hide();});this.centerCursor=ccursor;}
c.prototype.resetCenterCursor=function()
{if(this.centerCursor==undefined)this.initCenterCursor();this.centerCursor.setLatLng(this.getCenter());}
c.prototype.showCenterCursor=function()
{this.centerCursor.show();}
c.prototype.hideCenterCursor=function()
{this.centerCursor.hide();}
c.prototype.createMarkerTmpKey=function()
{var d=new Date();s=String(d.getFullYear())+String(d.getMonth())+String(d.getDay());s=s+String(d.getHours())+String(d.getMinutes())+String(d.getSeconds())+String(d.getMilliseconds());s=s+String(Math.random()*10)+String(Math.random()*10)+String(Math.random()*10);key=this.key+b64_sha1(s);if(key in this.markers){this.createMarkerTmpKey();}
this.markers[key]={};return key;}
c.prototype.clearReturner=function()
{if(this.returner){google.maps.Event.removeListener(this.returner);this.returner=null;}}
c.prototype.setMapContextMenu=function(menu)
{this.openContextMenuListener=google.maps.Event.addListener(this,'singlerightclick',function(point,src,overlay){var map=this;if(map.isVisibleMousetipShapeEdit)return false;var cmenu=$('gmap-context-menu');this.getContainer().appendChild(cmenu);var mapsize=this.getSize();var x=point.x;var y=point.y;if(x>(mapsize.width-248))x=mapsize.width-248;if(y>(mapsize.height-96))y=mapsize.height-96;var position=new GControlPosition(G_ANCHOR_TOP_LEFT,new google.maps.Size(x,y));position.apply(cmenu);Element.show(cmenu);this.isVisibleContextMenu=true;this.closeContextMenuListener=google.maps.Event.addListener(this,'click',function(){Element.hide(cmenu);this.isVisibleContextMenu=false;});});}
c.prototype.loadSummaryMarker=function(key,markerobj)
{if(this.markers.summaryMarkers[key])return false;var point=markerobj.src.points[0];var latlng=new kf.maps.LngLat(point);var marker=new kf.maps.SummaryMarker(key,latlng);marker.map=this;marker.markerobj=markerobj;this.markers.summaryMarkers[key]=marker;this.addOverlay(marker);logger('[map2] loadSummaryMarker(key='+key+', point='+point,K_LOG_LEVEL_DEBUG1);return marker;}
c.prototype.loadPointMarker=function(key,markerobj)
{if(this.markers.pointMarkers[key])return false;var point=markerobj.src.points[0];var latlng=new kf.maps.LngLat(point);var opts={};if(markerobj.src.icon!=undefined&&markerobj.src.icon!=null){var micon=getMIcon(markerobj.src.icon);if(micon){var icon=new google.maps.Icon();icon.image=getMIconImageSrc(micon);icon.iconSize=new google.maps.Size(parseInt(micon.msize[0]),parseInt(micon.msize[1]));icon.iconAnchor=new google.maps.Point(parseInt(micon.anchor[0]),parseInt(micon.anchor[1]));if(micon.shadow){icon.shadow=getMIconShadowSrc(micon);icon.shadowSize=new google.maps.Size(parseInt(micon.ssize[0]),parseInt(micon.ssize[1]));}
icon.infoWindowAnchor=new google.maps.Point(parseInt(micon.anchor[0])+6,parseInt(micon.anchor[1])-24);icon.infoShadowAnchor=new google.maps.Point(parseInt(micon.anchor[0]),parseInt(micon.anchor[1]));opts.icon=icon;}}
opts.draggable=(!markerobj.info.alias_of)&&this.editable;var marker=new kf.maps.PointMarker(key,latlng,opts);marker.map=this;marker.icon=markerobj.src.icon;if(marker.icon==undefined||marker.icon==null)marker.icon=0;marker.markerobj=markerobj;marker.alias_of=markerobj.info.alias_of;this.markers.pointMarkers[key]=marker;this.addOverlay(marker);logger('[map2] loadPointMarker(key='+key+', point='+point,K_LOG_LEVEL_DEBUG1);return marker;}
c.prototype.loadLineMarker=function(key,markerobj)
{if(this.markers.lineMarkers[key])return false;var points=markerobj.src.points;var marker;if(markerobj.src.penclines){marker=new kf.maps.LineMarker(key,points,markerobj.src.penclines,markerobj.src.style);}else{var latlngs=[];var c=points.length;for(var i=0;i<c;i++){latlngs.push(new kf.maps.LngLat(points[i]));}
marker=new kf.maps.LineMarker(key,latlngs,null,markerobj.src.style);}
marker.map=this;marker.markerobj=markerobj;this.markers.lineMarkers[key]=marker;this.addOverlay(marker.overlay);logger('[map2] loadLineMarker(key='+key,K_LOG_LEVEL_DEBUG1);return marker;}
c.prototype.loadPolygonMarker=function(key,markerobj)
{if(this.markers.polygonMarkers[key])return false;var pointslist=markerobj.src.points;var marker;if(markerobj.src.penclines){marker=new kf.maps.PolygonMarker(key,pointslist,markerobj.src.penclines,markerobj.src.style);}else{var latlngslist=[];var cc=pointslist.length;for(var i=0;i<cc;i++){var points=pointslist[i];var latlngs=[];var c=points.length;for(var j=0;j<c;j++){latlngs.push(new kf.maps.LngLat(points[j]));}
latlngslist.push(latlngs);}
marker=new kf.maps.PolygonMarker(key,latlngslist,null,markerobj.src.style);}
marker.map=this;marker.markerobj=markerobj;this.markers.polygonMarkers[key]=marker;this.addOverlay(marker.overlay);logger('[map2] loadPolygonMarker(key='+key,K_LOG_LEVEL_DEBUG1);return marker;}
c.prototype.loadCircleMarker=function(key,markerobj)
{if(this.markers.circleMarkers[key])return false;var points=markerobj.src.points;var latlngs=[];var c=points.length;for(var i=0;i<c;i++){latlngs.push(new kf.maps.LngLat(points[i]));}
var marker=new kf.maps.CircleMarker(key,latlngs,null,markerobj.src.style);marker.map=this;marker.markerobj=markerobj;this.markers.circleMarkers[key]=marker;this.addOverlay(marker.overlay);logger('[map2] loadCircleMarker(key='+key+', points='+points[0]+','+points[1],K_LOG_LEVEL_DEBUG1);return marker;}
c.prototype.addPointMarker=function(point)
{var map=this;var pointmarker=new kf.maps.PointMarker(null,point,{draggable:true});pointmarker.map=map;var addNewOverlay=function(marker){map.markers.pointMarkers[marker.key]=marker;map.addOverlay(marker);marker.showHead(marker);};var opts={};opts.onSuccess=addNewOverlay;pointmarker.save(false,opts);pointmarker.enableDragging();return pointmarker;}
c.prototype.addLineMarker=function(handles,existingMarker,restore)
{var map=this;var points=[];var key=null;var style=null;var linemarker=null;handles.each(function(h){points.push(h.getLatLng());})
handles.each(function(handle){map.removeOverlay(handle);});if(handles.length<2)return false;map.removeOverlay(handles[0].overlay);if(existingMarker){if(existingMarker.type==K_MARKER_TYPE_LINE){key=existingMarker.key;style=existingMarker.style;}else{restore=false;}}
var addNewOverlay=function(marker){map.markers.lineMarkers[marker.key]=marker;map.addOverlay(marker.overlay);marker.showHead(marker.overlay.getVertex(0));};if(restore){if(existingMarker)addNewOverlay(existingMarker);}else{var opts={};opts.onSuccess=addNewOverlay;linemarker=new kf.maps.LineMarker(key,points,null,style);linemarker.map=map;linemarker.save(false,opts);}
return linemarker;}
c.prototype.addLineMarkerHandle=function(point)
{var map=this;var handle=new kf.maps.Handle(point);handle.map=map;handle.type=K_MARKER_TYPE_LINE;map.addOverlay(handle);if(map.lastHandle){handle.prevHandle=map.lastHandle;map.lastHandle.nextHandle=handle;handle.redrawPolyline();}
google.maps.Event.addListener(handle,"dragend",function(){this.redrawPolyline();if(this.marker)this.marker.onChange();});google.maps.Event.addListener(handle,"drag",function(){this.redrawPolyline();});map.lastHandle=handle;}
c.prototype.addPolygonMarker=function(handles,existingMarker,restore)
{var map=this;var points=[];var pointslist=[points];var key=null;var style=null;var polygonmarker=null;handles.each(function(h){points.push(h.getLatLng());})
points.push(handles[0].getLatLng());handles.each(function(handle){map.removeOverlay(handle);});if(handles.length<2)return false;map.removeOverlay(handles[0].overlay);if(handles.length<3)return false;if(existingMarker){if(existingMarker.type==K_MARKER_TYPE_POLYGON){key=existingMarker.key;style=existingMarker.style;}else{restore=false;}}
var addNewOverlay=function(marker){map.markers.polygonMarkers[marker.key]=marker;map.addOverlay(marker.overlay);marker.showHead(marker.overlay.getBounds().getCenter());};if(restore){if(existingMarker)addNewOverlay(existingMarker);}else{var opts={};opts.onSuccess=addNewOverlay;polygonmarker=new kf.maps.PolygonMarker(key,pointslist,null,style);polygonmarker.map=map;polygonmarker.save(false,opts);}
return polygonmarker;}
c.prototype.addPolygonMarkerHandle=function(point)
{var map=this;var handle=new kf.maps.Handle(point);handle.map=map;handle.type=K_MARKER_TYPE_POLYGON;map.addOverlay(handle);if(map.lastHandle){handle.prevHandle=map.lastHandle;map.lastHandle.nextHandle=handle;handle.redrawPolygon();}
google.maps.Event.addListener(handle,"dragend",function(){this.redrawPolygon();if(this.marker)this.marker.onChange();});google.maps.Event.addListener(handle,"drag",function(){this.redrawPolygon();});map.lastHandle=handle;}
c.prototype.addCircleMarker=function(handles,existingMarker,restore)
{var map=this;var points=[];var key=null;var style=null;var circlemarker=null;handles.each(function(h){points.push(h.getLatLng());})
handles.each(function(handle){map.removeOverlay(handle);});if(handles.length<2)return false;map.removeOverlay(handles[0].overlay);if(existingMarker){if(existingMarker.type==K_MARKER_TYPE_CIRCLE){key=existingMarker.key;style=existingMarker.style;}else{restore=false;}}
var addNewOverlay=function(marker){map.markers.circleMarkers[marker.key]=marker;map.addOverlay(marker.overlay);marker.showHead(marker.overlay.getBounds().getCenter());};if(restore){if(existingMarker)addNewOverlay(existingMarker);}else{var opts={};opts.onSuccess=addNewOverlay;circlemarker=new kf.maps.CircleMarker(key,points,null,style);circlemarker.map=map;circlemarker.save(false,opts);}
return circlemarker;}
c.prototype.addCircleMarkerHandle=function(point)
{var map=this;if(map.lastHandle)
if(map.lastHandle.prevHandle)return false;var handle=new kf.maps.Handle(point);handle.map=map;handle.type=K_MARKER_TYPE_CIRCLE;map.addOverlay(handle);if(map.lastHandle){handle.prevHandle=map.lastHandle;map.lastHandle.nextHandle=handle;handle.redrawCircle();}
google.maps.Event.addListener(handle,"dragend",function(){this.redrawCircle();if(this.marker)this.marker.onChange();});google.maps.Event.addListener(handle,"drag",function(){this.redrawCircle();});map.lastHandle=handle;}
c.prototype.getMarker=function(key_marker)
{var marker=null;var targets=[this.markers.pointMarkers,this.markers.lineMarkers,this.markers.polygonMarkers,this.markers.circleMarkers];var len=targets.length;for(var i=0;i<len;i++){marker=targets[i][key_marker];if(marker)break;}
return marker;}
c.prototype.removeMarker=function(key_marker)
{var marker=this.getMarker(key_marker);var o=(marker.overlay)?marker.overlay:marker;this.removeOverlay(o);marker=null;}
c.prototype.showMousetipContextMenu=function(evt)
{var map=getMap(this.id);if(map.getExtInfoWindow())return false;if(map.isVisibleContextMenu)return false;if(map.isVisibleMousetipShapeEdit)return false;map.isVisibleMousetipContextMenu=true;var mousetip=$('mousetip-contextmenu');if(!Element.visible(mousetip))Element.show(mousetip);mousetip.style.top=Event.pointerY(evt)+8+'px';mousetip.style.left=Event.pointerX(evt)+8+'px';}
c.prototype.hideMousetipContextMenu=function()
{var map=getMap(this.id);var mousetip=$('mousetip-contextmenu');Element.hide(mousetip);map.isVisibleMousetipContextMenu=true;}
c.prototype.enableMousetipContextMenu=function()
{return false;this.disableMousetipContextMenu();Event.observe(this.getContainer(),'mousemove',this.showMousetipContextMenu);Event.observe(this.getContainer(),'mouseout',this.hideMousetipContextMenu);}
c.prototype.disableMousetipContextMenu=function()
{this.hideMousetipContextMenu();Event.stopObserving(this.getContainer(),'mousemove',this.showMousetipContextMenu);Event.stopObserving(this.getContainer(),'mouseout',this.hideMousetipContextMenu);}}
kf.maps.ClientGeocoder=function(){}
kf.maps.initClientGeocoder=function()
{var c=this.ClientGeocoder;c.prototype=new google.maps.ClientGeocoder();c.prototype.getLatLngWithCache=function(address,f)
{url=window.baseurl+'myprofile/geocoding';pars='query='+address;var a=new Ajax.Request(url,{method:'post',parameters:pars,onComplete:function(originalRequest){eval('var results = '+originalRequest.responseText);f(results);}});}
c.prototype.getLatLng=function(address,f)
{return this.getLatLngWithCache(address,f);}}
kf.maps.ButtonControl=function(){}
kf.maps.initButtonControl=function()
{var c=this.ButtonControl;c.prototype=new google.maps.Control();c.prototype.container=null;c.prototype.button=null;c.prototype.group=null;c.prototype.is_enable=false;c.prototype.positionAnchor=G_ANCHOR_TOP_LEFT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=34;c.prototype.initialize=function(map)
{this.map=map;if(!(this.container&&this.button))return false;var t=this;google.maps.Event.addDomListener(this.button,"click",function(){t.onClick();});map.getContainer().appendChild(this.container);return this.container;}
c.prototype.getDefaultPosition=function()
{return new google.maps.ControlPosition(this.positionAnchor,new google.maps.Size(this.positionOffsetWidth,this.positionOffsetHeight));}
c.prototype.onClick=function()
{if(this.is_enable)this.action();}
c.prototype.enable=function()
{this.button.className='mapcontrol-button-enable';this.is_enable=true;}
c.prototype.disable=function()
{this.button.className='mapcontrol-button-disable';this.is_enable=false;}
c.prototype.action=function(){}}
kf.maps.UndoControl=function(){}
kf.maps.initUndoControl=function()
{var c=this.UndoControl;c.prototype=new this.ButtonControl();c.prototype.container=$('mapcontrol-undo-container');c.prototype.button=$('mapcontrol-undo');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=240;c.prototype.action=function()
{var control=getMap('main-gmap').currentControl;if(control){if(control.undoable()){control.undo();}else{this.disable();}}}}
kf.maps.ToggleButtonControl=function(){}
kf.maps.initToggleButtonControl=function()
{var c=this.ToggleButtonControl;c.prototype=new google.maps.Control();c.prototype.container=null;c.prototype.button=null;c.prototype.group=null;c.prototype.on=false;c.prototype.positionAnchor=G_ANCHOR_TOP_LEFT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=34;c.prototype.initialize=function(map)
{this.map=map;if(!(this.container&&this.button))return false;var t=this;google.maps.Event.addDomListener(this.button,"click",function(){t.turn();});map.getContainer().appendChild(this.container);return this.container;}
c.prototype.turn=function()
{if(this.map.lastHandle)return false;if(this.on){this.turnOff();}else{this.turnOn();}}
c.prototype.turnOn=function(stop)
{if(!this.on){if(this.onTurnOn()){this.on=true;if(this.group&&stop==undefined){this.group.turnOffOther(this);}
this.turnOnIcon();}}}
c.prototype.turnOnIcon=function()
{this.button.className='mapcontrol-togglebutton-on';}
c.prototype.turnOff=function()
{if(this.on){if(this.onTurnOff()){this.on=false;if(this.group){if(this.group.turnOnDefault()==this)return;}
this.turnOffIcon();}}}
c.prototype.turnOffIcon=function()
{this.button.className='mapcontrol-togglebutton-off';}
c.prototype.onTurnOn=function(){}
c.prototype.onTurnOff=function(){}
c.prototype.getDefaultPosition=function()
{return new google.maps.ControlPosition(this.positionAnchor,new google.maps.Size(this.positionOffsetWidth,this.positionOffsetHeight));}}
kf.maps.ToggleButtonGroup=function(buttons,defaultButton)
{this.buttons=buttons;this.defaultButton=defaultButton;var group=this;$A(buttons).each(function(button){button.group=group;});return this;}
kf.maps.initToggleButtonGroup=function()
{var c=this.ToggleButtonGroup;c.prototype.buttons=[];c.prototype.defaultButton=null;c.prototype.turnOnDefault=function()
{if(!this.defaultButton)return;var findOn=false;$A(this.buttons).each(function(button){findOn=findOn||(button.on);});if(findOn)return;this.defaultButton.turnOn(true);return this.defaultButton;}
c.prototype.turnOffOther=function(target)
{$A(this.buttons).each(function(button){if(button!=target){button.turnOff();}});}}
kf.maps.CenterCursorControl=function(){}
kf.maps.initCenterCursorControl=function()
{var c=this.CenterCursorControl;c.prototype=new this.ToggleButtonControl();c.prototype.container=$('mapcontrol-centercursor-container');c.prototype.button=$('mapcontrol-centercursor');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=34;c.prototype.onTurnOn=function()
{this.map.showCenterCursor();return true;}
c.prototype.onTurnOff=function()
{this.map.hideCenterCursor();return true;}}
kf.maps.RetouchControl=function(){}
kf.maps.initRetouchControl=function()
{var c=this.RetouchControl;c.prototype=new this.ToggleButtonControl();c.prototype.container=$('mapcontrol-retouch-container');c.prototype.button=$('mapcontrol-retouch');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=71;c.prototype.onTurnOn=function()
{this.map.retouchMode=true;return true;}
c.prototype.onTurnOff=function()
{this.map.retouchMode=false;return true;}}
kf.maps.PointMarkerControl=function(){}
kf.maps.initPointMarkerControl=function()
{var c=this.PointMarkerControl;c.prototype=new this.ToggleButtonControl();c.prototype.container=$('mapcontrol-pointmarker-container');c.prototype.button=$('mapcontrol-pointmarker');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=103;c.prototype.listenerMapClick=null;c.prototype.onTurnOn=function()
{var map=this.map;var control=this;this.listenerMapClick=google.maps.Event.addListener(map,"click",function(overlay,point){if(point&&map.ignoreEvent==false){map.addPointMarker(point);control.turnOff();}});return true;}
c.prototype.onTurnOff=function()
{var map=this.map;if(this.listenerMapClick){google.maps.Event.removeListener(this.listenerMapClick);this.listenerMapClick=null;}
return true;}}
kf.maps.LineMarkerControl=function(){}
kf.maps.initLineMarkerControl=function()
{var c=this.LineMarkerControl;c.prototype=new this.ToggleButtonControl();c.prototype.container=$('mapcontrol-linemarker-container');c.prototype.button=$('mapcontrol-linemarker');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=133;c.prototype.listenerMapClick=null;c.prototype.listenerMapDblclick=null;c.prototype.listenerMapSRClick=null;c.prototype.history=[];c.prototype.showMousetipShapeEdit=function(evt)
{var map=getMap(this.id);map.isVisibleMousetipShapeEdit=true;var mousetip=$('mousetip-shape-edit');if(!Element.visible(mousetip))Element.show(mousetip);mousetip.style.top=Event.pointerY(evt)+8+'px';mousetip.style.left=Event.pointerX(evt)+8+'px';}
c.prototype.hideMousetipShapeEdit=function(evt)
{var mousetip=$('mousetip-shape-edit');Element.hide(mousetip);}
c.prototype.saveMarker=function(restore)
{var map=this.map;if(map.lastHandle){var handles=map.lastHandle.getHandles();map.addLineMarker(handles,map.currentMarker,restore);map.lastHandle=null;}}
c.prototype.restoreMarker=function()
{this.saveMarker(true);}
c.prototype.onTurnOn=function()
{var map=this.map;var control=this;map.currentControl=this;control.history=[];if(map.currentMarker)map.currentMarker.blur();this.listenerMapClick=google.maps.Event.addListener(map,"click",function(overlay,point){if(!overlay){map.addLineMarkerHandle(point);var handle=map.lastHandle;control.history.push({type:'add',handle:handle});map.controls.undoControl.enable();google.maps.Event.addListener(handle,'dragstart',function(){control.history.push({type:'move',handle:this,point:this.getPoint()});});}});this.listenerMapSRClick=google.maps.Event.addListener(map,"singlerightclick",function()
{control.turnOff();});Event.observe(map.getContainer(),'mousemove',this.showMousetipShapeEdit);Event.observe(map.getContainer(),'mouseout',this.hideMousetipShapeEdit);map.disableDoubleClickZoom();return true;}
c.prototype.onTurnOff=function()
{var map=this.map;var mousetip=$('mousetip-shape-edit');var control=this;var _onTurnOff=function(restore)
{Element.hide(mousetip);if(control.listenerMapClick){google.maps.Event.removeListener(control.listenerMapClick);control.listenerMapClick=null;}
if(control.listenerMapDblclick){google.maps.Event.removeListener(control.listenerMapDblclick);control.listenerMapDblclick=null;}
if(control.listenerMapSRClick){google.maps.Event.removeListener(control.listenerMapSRClick);control.listenerMapSRClick=null;}
Event.stopObserving(map.getContainer(),'mousemove',control.showMousetipShapeEdit);Event.stopObserving(map.getContainer(),'mouseout',control.hideMousetipShapeEdit);control.hideMousetipShapeEdit();map.isVisibleMousetipShapeEdit=false;if(restore){control.restoreMarker();}else{control.saveMarker();}
map.enableDoubleClickZoom();control.history=null;map.controls.undoControl.disable();}
if(!map.lastHandle){_onTurnOff(true);return true}
var handles=map.lastHandle.getHandles();if(handles.length<2){handles.each(function(handle){map.removeOverlay(handle);});_onTurnOff(true);return true;}
if(control.modal)return true;control.modal=true;openModalYNC('confirmShapeEdit',{message:messages.CONFIRM_EDIT_FINISH,onYes:function(){_onTurnOff();control.turnOff();control.modal=false;},onNo:function(){_onTurnOff(true);control.turnOff();control.modal=false;},onCancel:function(){control.turnOn();control.modal=false;}});return false;}
c.prototype.undoable=function()
{if(this.history.length>0){return true;}else{this.map.controls.undoControl.disable();return false;}}
c.prototype.undo=function()
{if(!this.history){map.controls.undoControl.disable();return false;}
var action=this.history.pop();switch(action.type){case'add':var handles=action.handle.getHandles();if(handles.length==0)break;this.map.lastHandle=action.handle.prevHandle;action.handle.removeHandle();break;case'move':action.handle.setPoint(action.point);action.handle.redrawOverlay();break;}
if(this.history.length==0){this.map.controls.undoControl.disable();}}}
kf.maps.PolygonMarkerControl=function(){}
kf.maps.initPolygonMarkerControl=function()
{var c=this.PolygonMarkerControl;c.prototype=new this.ToggleButtonControl();c.prototype.container=$('mapcontrol-polygonmarker-container');c.prototype.button=$('mapcontrol-polygonmarker');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=163;c.prototype.listenerMapClick=null;c.prototype.listenerMapDblclick=null;c.prototype.listenerMapSRClick=null;c.prototype.history=[];c.prototype.showMousetipShapeEdit=function(evt)
{var map=getMap(this.id);map.isVisibleMousetipShapeEdit=true;var mousetip=$('mousetip-shape-edit');if(!Element.visible(mousetip))Element.show(mousetip);mousetip.style.top=Event.pointerY(evt)+8+'px';mousetip.style.left=Event.pointerX(evt)+8+'px';}
c.prototype.hideMousetipShapeEdit=function(evt)
{var mousetip=$('mousetip-shape-edit');Element.hide(mousetip);}
c.prototype.saveMarker=function(restore)
{var map=this.map;if(map.lastHandle){var handles=map.lastHandle.getHandles();map.addPolygonMarker(handles,map.currentMarker,restore);map.lastHandle=null;}}
c.prototype.restoreMarker=function()
{this.saveMarker(true);}
c.prototype.onTurnOn=function()
{var map=this.map;var control=this;map.currentControl=this;control.history=[];if(map.currentMarker)map.currentMarker.blur();this.listenerMapClick=google.maps.Event.addListener(map,"click",function(overlay,point){if(!overlay){map.addPolygonMarkerHandle(point);var handle=map.lastHandle;control.history.push({type:'add',handle:handle});map.controls.undoControl.enable();google.maps.Event.addListener(handle,'dragstart',function(){control.history.push({type:'move',handle:this,point:this.getPoint()});});}});this.listenerMapSRClick=google.maps.Event.addListener(map,"singlerightclick",function()
{control.turnOff();});Event.observe(map.getContainer(),'mousemove',this.showMousetipShapeEdit);Event.observe(map.getContainer(),'mouseout',this.hideMousetipShapeEdit);map.disableDoubleClickZoom();return true;}
c.prototype.onTurnOff=function()
{var map=this.map;var mousetip=$('mousetip-shape-edit');var control=this;var _onTurnOff=function(restore)
{Element.hide(mousetip);if(control.listenerMapClick){google.maps.Event.removeListener(control.listenerMapClick);control.listenerMapClick=null;}
if(control.listenerMapDblclick){google.maps.Event.removeListener(control.listenerMapDblclick);control.listenerMapDblclick=null;}
if(control.listenerMapSRClick){google.maps.Event.removeListener(control.listenerMapSRClick);control.listenerMapSRClick=null;}
Event.stopObserving(map.getContainer(),'mousemove',control.showMousetipShapeEdit);Event.stopObserving(map.getContainer(),'mouseout',control.hideMousetipShapeEdit);control.hideMousetipShapeEdit();map.isVisibleMousetipShapeEdit=false;if(restore){control.restoreMarker();}else{control.saveMarker();}
map.enableDoubleClickZoom();control.history=null;map.controls.undoControl.disable();}
if(!map.lastHandle){_onTurnOff(true);return true;}
var handles=map.lastHandle.getHandles();if(handles.length<3){if(handles[0].overlay){map.removeOverlay(handles[0].overlay);}
handles.each(function(handle){map.removeOverlay(handle);});_onTurnOff(true);return true;}
if(control.modal)return true;control.modal=true;openModalYNC('confirmShapeEdit',{message:messages.CONFIRM_EDIT_FINISH,onYes:function(){_onTurnOff();control.turnOff();control.modal=false;},onNo:function(){_onTurnOff(true);control.turnOff();control.modal=false;},onCancel:function(){control.turnOn();control.modal=false;}});return false;}
c.prototype.undoable=function()
{return(this.history.length>0);}
c.prototype.undo=function()
{if(!this.history){map.controls.undoControl.disable();return false;}
var action=this.history.pop();switch(action.type){case'add':var handles=action.handle.getHandles();if(handles.length==0)break;this.map.lastHandle=action.handle.prevHandle;action.handle.removeHandle();break;case'move':action.handle.setPoint(action.point);action.handle.redrawOverlay();break;}
if(this.history.length==0){this.map.controls.undoControl.disable();}}}
kf.maps.CircleMarkerControl=function(){}
kf.maps.initCircleMarkerControl=function()
{var c=this.CircleMarkerControl;c.prototype=new this.ToggleButtonControl();c.prototype.container=$('mapcontrol-circlemarker-container');c.prototype.button=$('mapcontrol-circlemarker');c.prototype.positionAnchor=G_ANCHOR_TOP_RIGHT;c.prototype.positionOffsetWidth=7;c.prototype.positionOffsetHeight=193;c.prototype.listenerMapClick=null;c.prototype.listenerMapDblclick=null;c.prototype.listenerMapSRClick=null;c.prototype.history=[];c.prototype.showMousetipShapeEdit=function(evt)
{var map=getMap(this.id);map.isVisibleMousetipShapeEdit=true;var mousetip=$('mousetip-shape-edit');if(!Element.visible(mousetip))Element.show(mousetip);mousetip.style.top=Event.pointerY(evt)+8+'px';mousetip.style.left=Event.pointerX(evt)+8+'px';}
c.prototype.hideMousetipShapeEdit=function(evt)
{var mousetip=$('mousetip-shape-edit');Element.hide(mousetip);}
c.prototype.saveMarker=function(restore)
{var map=this.map;if(map.lastHandle){var handles=map.lastHandle.getHandles();map.addCircleMarker(handles,map.currentMarker,restore);map.lastHandle=null;}}
c.prototype.restoreMarker=function()
{this.saveMarker(true);}
c.prototype.onTurnOn=function()
{var map=this.map;var control=this;map.currentControl=this;control.history=[];if(map.currentMarker)map.currentMarker.blur();this.listenerMapClick=google.maps.Event.addListener(map,"click",function(overlay,point){if(!overlay){map.addCircleMarkerHandle(point);var handle=map.lastHandle;control.history.push({type:'add',handle:handle});map.controls.undoControl.enable();google.maps.Event.addListener(handle,'dragstart',function(){control.history.push({type:'move',handle:this,point:this.getPoint()});});}});this.listenerMapSRClick=google.maps.Event.addListener(map,"singlerightclick",function()
{control.turnOff();});Event.observe(map.getContainer(),'mousemove',this.showMousetipShapeEdit);Event.observe(map.getContainer(),'mouseout',this.hideMousetipShapeEdit);map.disableDoubleClickZoom();return true;}
c.prototype.onTurnOff=function()
{var map=this.map;var mousetip=$('mousetip-shape-edit');var control=this;var _onTurnOff=function(restore)
{Element.hide(mousetip);if(control.listenerMapClick){google.maps.Event.removeListener(control.listenerMapClick);control.listenerMapClick=null;}
if(control.listenerMapDblclick){google.maps.Event.removeListener(control.listenerMapDblclick);control.listenerMapDblclick=null;}
if(control.listenerMapSRClick){google.maps.Event.removeListener(control.listenerMapSRClick);control.listenerMapSRClick=null;}
Event.stopObserving(map.getContainer(),'mousemove',control.showMousetipShapeEdit);Event.stopObserving(map.getContainer(),'mouseout',control.hideMousetipShapeEdit);control.hideMousetipShapeEdit();map.isVisibleMousetipShapeEdit=false;if(restore){control.restoreMarker();}else{control.saveMarker();}
map.enableDoubleClickZoom();control.history=null;map.controls.undoControl.disable();}
if(!map.lastHandle){_onTurnOff(true);return true;}
var handles=map.lastHandle.getHandles();if(handles.length<2){handles.each(function(handle){map.removeOverlay(handle);});_onTurnOff(true);return true;}
if(control.modal)return true;control.modal=true;openModalYNC('confirmShapeEdit',{message:messages.CONFIRM_EDIT_FINISH,onYes:function(){_onTurnOff();control.turnOff();control.modal=false;},onNo:function(){_onTurnOff(true);control.turnOff();control.modal=false;},onCancel:function(){control.turnOn();control.modal=false;}});return false;}
c.prototype.undoable=function()
{return(this.history.length>0);}
c.prototype.undo=function()
{if(!this.history){map.controls.undoControl.disable();return false;}
var action=this.history.pop();switch(action.type){case'add':var handles=action.handle.getHandles();if(handles.length==0)break;this.map.lastHandle=action.handle.prevHandle;action.handle.removeHandle();break;case'move':action.handle.setPoint(action.point);action.handle.redrawOverlay();break;}
if(this.history.length==0){this.map.controls.undoControl.disable();}}}
kf.maps.Polyline=function(points,strokeColor,strokeWeight,strokeOpacity)
{if(!strokeColor)strokeColor=K_DEFAULTSTYLE_STROKE_COLOR;if(!strokeWeight)strokeWeight=K_DEFAULTSTYLE_STROKE_WEIGHT;if(!strokeOpacity)strokeOpacity=K_DEFAULTSTYLE_STROKE_OPACITY;return google.maps.Polyline.call(this,points,strokeColor,strokeWeight,strokeOpacity);}
kf.maps.initPolyline=function()
{var c=this.Polyline;c.prototype=new google.maps.Polyline([new google.maps.LatLng(0,0),new google.maps.LatLng(0,0)],'#ffffff',0,0);c.prototype.map=null;}
kf.maps.Polygon=function(points,strokeColor,strokeWeight,strokeOpacity,fillColor,fillOpacity)
{if(!strokeColor)strokeColor=K_DEFAULTSTYLE_STROKE_COLOR;if(!strokeWeight)strokeWeight=K_DEFAULTSTYLE_STROKE_WEIGHT;if(!strokeOpacity)strokeOpacity=K_DEFAULTSTYLE_STROKE_OPACITY;if(!fillColor)fillColor=K_DEFAULTSTYLE_FILL_COLOR;if(!fillOpacity)fillOpacity=K_DEFAULTSTYLE_FILL_OPACITY;return google.maps.Polygon.call(this,points,strokeColor,strokeWeight,strokeOpacity,fillColor,fillOpacity);}
kf.maps.initPolygon=function()
{var c=this.Polygon;c.prototype=new google.maps.Polygon([new google.maps.LatLng(0,0),new google.maps.LatLng(0,0)],'#ffffff',0,0,'#ffffff',0);c.prototype.map=null;}
kf.maps.CommonMarkerInterface=function()
{this.key=null;this.handles=[];this.map=null;this.overlay=null;this.icon=null;this.style={};this.style.strokeColor=K_DEFAULTSTYLE_STROKE_COLOR;this.style.strokeWeight=K_DEFAULTSTYLE_STROKE_WEIGHT;this.style.strokeOpacity=K_DEFAULTSTYLE_STROKE_OPACITY;this.style.fillColor=K_DEFAULTSTYLE_FILL_COLOR;this.style.fillOpacity=K_DEFAULTSTYLE_FILL_OPACITY;this.onClick=function(pointOrMarker)
{var map=this.map;if(map.retouchMode){this.focus();this.showHead(pointOrMarker);}else{if(pointOrMarker!=this){google.maps.Event.trigger(map,'click',this.overlay,pointOrMarker);}}}
this.onFocus=function()
{}
this.onBlur=function()
{}
this.focus=function()
{var map=this.map;var marker=this;if(map.currentMarker)map.currentMarker.blur();marker.onFocus();map.currentMarker=marker;if(!map.listenerCloseInfoWindowForBlur){map.listenerCloseInfoWindowForBlur=google.maps.Event.addListener(map,'infowindowclose',function(){if(map.currentMarker)map.currentMarker.blur();});}}
this.blur=function()
{try{var map=this.map;map.closeInfoWindow();map.closeExtInfoWindow();this.onBlur();map.currentMarker=null;}catch(e){}}
this.checkStyle=function()
{if(!this.style.strokeColor.match(/^#[0-9A-F]{6}$/i))
this.style.strokeColor=K_DEFAULTSTYLE_STROKE_COLOR;if(isNaN(this.style.strokeWeight))
this.style.strokeWeight=K_DEFAULTSTYLE_STROKE_WEIGHT;else if(this.style.strokeWeight<K_STYLE_WEIGHT_MIN)
this.style.strokeWeight=K_STYLE_WEIGHT_MIN;else if(this.style.strokeWeight>K_STYLE_WEIGHT_MAX)
this.style.strokeWeight=K_STYLE_WEIGHT_MAX;if(isNaN(this.style.strokeOpacity))
this.style.strokeOpacity=K_DEFAULTSTYLE_STROKE_OPACITY;else if(this.style.strokeOpacity<0)
this.style.strokeOpacity=0;else if(this.style.strokeOpacity>1)
this.style.strokeOpacity=1;if(!this.style.fillColor.match(/^#[0-9A-F]{6}$/i))
this.style.fillColor=K_DEFAULTSTYLE_FILL_COLOR;if(isNaN(this.style.fillOpacity))
this.style.fillOpacity=K_DEFAULTSTYLE_FILL_OPACITY;else if(this.style.fillOpacity<0)
this.style.fillOpacity=0;else if(this.style.fillOpacity>1)
this.style.fillOpacity=1;this.style.strokeWeight=parseInt(this.style.strokeWeight);this.style.strokeOpacity=parseFloat(this.style.strokeOpacity);this.style.strokeColor=this.style.strokeColor.toLowerCase();this.style.fillColor=this.style.fillColor.toLowerCase();this.style.fillOpacity=parseFloat(this.style.fillOpacity);}
this.showHead=function(pointOrMarker,withoutPan)
{var map=this.map;var marker=this;map.currentMarker=marker;if(!pointOrMarker){switch(marker.type){case K_MARKER_TYPE_POINT:pointOrMarker=marker;break;case K_MARKER_TYPE_LINE:pointOrMarker=marker.points[0];break;case K_MARKER_TYPE_POLYGON:case K_MARKER_TYPE_CIRCLE:pointOrMarker=marker.overlay.getBounds().getCenter();break;}}
var url=window.baseurl+'map/head_marker/'+map.key+'/'+marker.key;new Ajax.Request(url,{asynchronous:false,method:'get',onFailure:function(originalRequest,o){logger('fail',K_LOG_LEVEL_DEBUG1);success=false;},onException:function(originalRequest,e){logger('exception: '+e.message,K_LOG_LEVEL_DEBUG1);success=false;},onComplete:function(originalRequest){var returnCenter=function(){}
var opts={};opts.beakOffset=6;map.clearReturner();if(pointOrMarker==marker){marker.openExtInfoWindow(map,"extInfoWindow_default",originalRequest.responseText,opts);map.panTo(marker.getPoint());}else{map.openExtInfoWindow(pointOrMarker,"extInfoWindow_default",originalRequest.responseText,opts);map.panTo(pointOrMarker);switch(marker.type){case K_MARKER_TYPE_LINE:var length=marker.overlay.getLength();length+=0.5;if(length<1000){length=length.toFixed(2)
length+='m';}else{length=length/1000;length=length.toFixed(2)
length+='km';}
$('line-marker-info-length').innerHTML=length;break;case K_MARKER_TYPE_POLYGON:var area=marker.overlay.getArea();area+=0.5;if(area<1000000){area=area.toFixed(2)
area+='m&#178;';}else{area=area/1000000;area=area.toFixed(2)
area+='km&#178;';}
$('polygon-marker-info-area').innerHTML=area;break;case K_MARKER_TYPE_CIRCLE:var rline=new google.maps.Polyline(marker.points);var length=rline.getLength();length+=0.5;if(length<1000){length=length.toFixed(2)
length+='m';}else{length=length/1000;length=length.toFixed(2)
length+='km';}
$('circle-marker-info-radius').innerHTML=length;break;}}
tracker(url);}});}}
kf.maps.EditableMarkerInterface=function()
{this.editable=true;this.onChange=function()
{this.save();}
this.save=function(async,opts)
{if(!this.map.editable)return false;if(async==undefined)async=true;var savepoints=[];switch(this.type){case K_MARKER_TYPE_POINT:savepoints.push(this.getLatLng().toGeoString());break;case K_MARKER_TYPE_LINE:case K_MARKER_TYPE_CIRCLE:this.points.each(function(point){savepoints.push(point.toGeoString());});break;case K_MARKER_TYPE_POLYGON:this.pointslist.each(function(points){var tpoints=[];points.each(function(point){tpoints.push(point.toGeoString());});savepoints.push(tpoints);});break;}
var markerobj={key:this.key,type:this.type,points:savepoints,icon:this.icon,style:this.style};var marker_json=Object.toJSON(markerobj);var pars=$H({marker_json:marker_json}).toQueryString();logger('marker_json: '+marker_json,K_LOG_LEVEL_DEBUG1);var marker=this;var url=window.baseurl+'map/save_marker_shape/'+marker.map.key;var success=true;var confirmRetry=function(marker,opts){openModalOC('confirmRetry',{message:messages.CONFIRM_RETRYSAVE,onOk:function(){marker.save(async,opts);},onCancel:function(){}});};new Ajax.Request(url,{asynchronous:async,method:'post',parameters:pars,onFailure:function(originalRequest,o){logger('fail',K_LOG_LEVEL_DEBUG1);success=false;logger('Save marker failed.',K_LOG_LEVEL_DEBUG1);logger('Dump savedata: '+pars,K_LOG_LEVEL_DEBUG1);logger('Dump url: '+url,K_LOG_LEVEL_DEBUG1);confirmRetry(marker,opts);},onException:function(originalRequest,e){logger('exception: '+e.message,K_LOG_LEVEL_DEBUG1);success=false;logger('Save marker failed.',K_LOG_LEVEL_DEBUG1);logger('Dump savedata: '+pars,K_LOG_LEVEL_DEBUG1);logger('Dump url: '+url,K_LOG_LEVEL_DEBUG1);confirmRetry(marker,opts);},onComplete:function(originalRequest){var result=null;try{eval('result = '+originalRequest.responseText);}catch(e){result=false;}
if(result){logger('Save marker success.',K_LOG_LEVEL_DEBUG1);marker.key=result;if(opts)if(opts.onSuccess)opts.onSuccess(marker);}else{logger('Save marker failed.',K_LOG_LEVEL_DEBUG1);logger('Dump savedata: '+pars,K_LOG_LEVEL_DEBUG1);logger('Dump response: '+originalRequest.responseText,K_LOG_LEVEL_DEBUG1);confirmRetry(marker,opts);}}});return success;}}
kf.maps.SummaryMarker=function(key,point,opts)
{this.key=key;if(!opts)opts={};opts.icon=kf.maps.SummaryIcon;google.maps.Marker.call(this,point,opts);google.maps.Event.addListener(this,'click',function(){var map=this.map;var marker=this;map.closeExtInfoWindow();map.setCenter(marker.getPoint());$('sum-count').innerHTML=marker.markerobj.info.count;var html=$('sum-marker-info').innerHTML;var opts={};opts.beakOffset=6;marker.openExtInfoWindow(map,"extInfoWindow_default",html,opts);});}
kf.maps.initSummaryMarker=function()
{var c=this.SummaryMarker;c.prototype=new google.maps.Marker(new google.maps.LatLng(0,0));c.prototype.type=K_MARKER_TYPE_SUMMARY;}
kf.maps.PointMarker=function(key,point,opts)
{kf.maps.CommonMarkerInterface.apply(this);kf.maps.EditableMarkerInterface.apply(this);this.key=key;if(!opts)opts={};if(opts.icon==undefined){if(Cookie.get('lastmicon')){var micon=getMIcon(Cookie.get('lastmicon'));var icon=new google.maps.Icon();icon.image=getMIconImageSrc(micon);icon.iconSize=new google.maps.Size(parseInt(micon.msize[0]),parseInt(micon.msize[1]));icon.iconAnchor=new google.maps.Point(parseInt(micon.anchor[0]),parseInt(micon.anchor[1]));if(parseInt(micon.shadow)){icon.shadow=getMIconShadowSrc(micon);icon.shadowSize=new google.maps.Size(parseInt(micon.ssize[0]),parseInt(micon.ssize[1]));}
icon.infoWindowAnchor=new google.maps.Point(parseInt(micon.anchor[0])+6,parseInt(micon.anchor[1])-24);icon.infoShadowAnchor=new google.maps.Point(parseInt(micon.anchor[0]),parseInt(micon.anchor[1]));opts.icon=icon;this.icon=micon.id;}else{opts.icon=new google.maps.Icon(kf.maps.DefaultIcon);opts.icon.image=window.baseurl+K_MICON_DEFAULT_IMAGE;this.icon=0;}}
google.maps.Marker.call(this,point,opts);this.overlay=this;this.onFocus=function()
{this.highlightOn();}
this.onBlur=function()
{this.highlightOff();}
google.maps.Event.addListener(this,"dragstart",function(){this.map.closeExtInfoWindow();this.beforeDragPoint=this.getPoint();});google.maps.Event.addListener(this,"dragend",function(){var marker=this;setTimeout(function(){openModalOC('confirmPointMarkerMove',{message:messages.CONFIRM_MARKER_MOVE,onOk:function(){marker.onChange();},onCancel:function(){marker.setPoint(marker.beforeDragPoint);marker.map.panTo(marker.beforeDragPoint);}});},300);});google.maps.Event.addListener(this,'click',function(){this.onClick(this);});}
kf.maps.initPointMarker=function()
{var c=this.PointMarker;c.prototype=new google.maps.Marker(new google.maps.LatLng(0,0));c.prototype.type=K_MARKER_TYPE_POINT;c.prototype.highlightOn=function()
{var micon=getMIcon(this.icon);this.setImage(getMIconHighlightSrc(micon));}
c.prototype.highlightOff=function()
{var micon=getMIcon(this.icon);this.setImage(getMIconImageSrc(micon));}}
kf.maps.LineMarker=function(key,points,penclines,style)
{kf.maps.CommonMarkerInterface.apply(this);kf.maps.EditableMarkerInterface.apply(this);this.key=key;this.points=points;this.penclines=penclines;if(style)this.style=style;this.createOverlay();}
kf.maps.initLineMarker=function()
{var c=this.LineMarker;c.prototype.type=K_MARKER_TYPE_LINE;c.prototype.createOverlay=function()
{var penclines=this.penclines;var points=this.points;this.checkStyle();if(penclines){var pencline=penclines[0];var line=new google.maps.Polyline.fromEncoded({color:this.style.strokeColor,weight:this.style.strokeWeight,opacity:this.style.strokeOpacity,points:pencline.encodedPoints,levels:pencline.encodedLevels,zoomFactor:PENC_ZOOM_FACTOR,numLevels:PENC_NUM_LEVELS});line.marker=this;this.overlay=line;}else{var pencline=penc.dpEncode(points);var line=new google.maps.Polyline.fromEncoded({color:this.style.strokeColor,weight:this.style.strokeWeight,opacity:this.style.strokeOpacity,points:pencline.encodedPoints,levels:pencline.encodedLevels,zoomFactor:PENC_ZOOM_FACTOR,numLevels:PENC_NUM_LEVELS});line.marker=this;this.overlay=line;this.penclines=[pencline];}
google.maps.Event.addListener(this.overlay,'click',function(point){this.marker.onClick(point);});}
c.prototype.redrawOverlay=function()
{this.map.removeOverlay(this.overlay);this.createOverlay();this.map.addOverlay(this.overlay);this.save();}
c.prototype.shapeEdit=function()
{var map=this.map;var marker=this;var o=marker.overlay;var vc=o.getVertexCount();map.closeExtInfoWindow();var control=map.controls.lineMarkerControl;control.turnOn();this.focus();for(var i=0;i<vc;i++){var p=o.getVertex(i);map.addLineMarkerHandle(p);var handle=map.lastHandle;google.maps.Event.addListener(handle,'dragstart',function(){control.history.push({type:'move',handle:this,point:this.getPoint()});map.controls.undoControl.enable();});}
map.removeOverlay(o);}}
kf.maps.PolygonMarker=function(key,pointslist,penclines,style)
{kf.maps.CommonMarkerInterface.apply(this);kf.maps.EditableMarkerInterface.apply(this);this.key=key;this.pointslist=pointslist;this.penclines=penclines;if(style)this.style=style;this.createOverlay();}
kf.maps.initPolygonMarker=function()
{var c=this.PolygonMarker;c.prototype.type=K_MARKER_TYPE_POLYGON;c.prototype.createOverlay=function()
{var penclines=this.penclines;var pointslist=this.pointslist;this.checkStyle();if(penclines){var polylines=[];var cc=penclines.length;for(var i=0;i<cc;i++){var pencline=penclines[i];polylines.push({points:pencline.encodedPoints,levels:pencline.encodedLevels,color:this.style.strokeColor,weight:this.style.strokeWeight,opacity:this.style.strokeOpacity,zoomFactor:PENC_ZOOM_FACTOR,numLevels:PENC_NUM_LEVELS});}
var polygon=new google.maps.Polygon.fromEncoded({polylines:polylines,fill:true,color:this.style.fillColor,opacity:this.style.fillOpacity,outline:true});polygon.marker=this;this.overlay=polygon;}else{var polylines=[];var cc=pointslist.length;for(var i=0;i<cc;i++){var result=penc.dpEncode(pointslist[i]);polylines.push({points:result.encodedPoints,levels:result.encodedLevels,color:this.style.strokeColor,weight:this.style.strokeWeight,opacity:this.style.strokeOpacity,zoomFactor:PENC_ZOOM_FACTOR,numLevels:PENC_NUM_LEVELS});}
var polygon=new google.maps.Polygon.fromEncoded({polylines:polylines,fill:true,color:this.style.fillColor,opacity:this.style.fillOpacity,outline:true});polygon.marker=this;this.overlay=polygon;}
google.maps.Event.addListener(this.overlay,'click',function(point){this.marker.onClick(point);});}
c.prototype.redrawOverlay=function()
{this.map.removeOverlay(this.overlay);this.createOverlay();this.map.addOverlay(this.overlay);this.save();}
c.prototype.shapeEdit=function()
{var map=this.map;var marker=this;var o=marker.overlay;var vc=o.getVertexCount()-1;map.closeExtInfoWindow();var control=map.controls.polygonMarkerControl;control.turnOn();this.focus();for(var i=0;i<vc;i++){var p=o.getVertex(i);map.addPolygonMarkerHandle(p);var handle=map.lastHandle;google.maps.Event.addListener(handle,'dragstart',function(){control.history.push({type:'move',handle:this,point:this.getPoint()});map.controls.undoControl.enable();});}
map.removeOverlay(o);}}
kf.maps.CircleMarker=function(key,points,level,style)
{kf.maps.CommonMarkerInterface.apply(this);kf.maps.EditableMarkerInterface.apply(this);this.key=key;this.points=points;if(style)this.style=style;this.createOverlay();}
kf.maps.initCircleMarker=function()
{var c=this.CircleMarker;c.prototype.type=K_MARKER_TYPE_CIRCLE;c.prototype.createOverlay=function()
{var points=this.points;if(points.length<2)return false;this.checkStyle();var clat=points[0].lat();var clng=points[0].lng();var radius=points[0].distanceFrom(points[1]);points=[];var latscale=radius/K_ERMETERS*K_RAD_TO_DEG;var lngscale=latscale/Math.cos(clat*K_DEG_TO_RAD);for(var i=0;i<K_CIRCLE_VTC;i++){var rd=(i!=0)?i*10/180*Math.PI:0;points.push(new GLatLng(clat+latscale*Math.sin(rd),clng+lngscale*Math.cos(rd)));}
var polylines=[];var result=penc.dpEncode(points);polylines.push({points:result.encodedPoints,levels:result.encodedLevels,color:this.style.strokeColor,weight:this.style.strokeWeight,opacity:this.style.strokeOpacity,zoomFactor:PENC_ZOOM_FACTOR,numLevels:PENC_NUM_LEVELS});var circle=new google.maps.Polygon.fromEncoded({polylines:polylines,fill:true,color:this.style.fillColor,opacity:this.style.fillOpacity,outline:true});circle.marker=this;this.overlay=circle;google.maps.Event.addListener(circle,'click',function(point){this.marker.onClick(point);});}
c.prototype.redrawOverlay=function()
{this.map.removeOverlay(this.overlay);this.createOverlay();this.map.addOverlay(this.overlay);this.save();}
c.prototype.shapeEdit=function()
{var map=this.map;var marker=this;var o=marker.overlay;map.closeExtInfoWindow();var control=map.controls.circleMarkerControl;control.turnOn();this.focus();for(var i=0;i<2;i++){map.addCircleMarkerHandle(this.points[i]);var handle=map.lastHandle;google.maps.Event.addListener(handle,'dragstart',function(){control.history.push({type:'move',handle:this,point:this.getPoint()});map.controls.undoControl.enable();});}
map.removeOverlay(o);}}
kf.maps.Handle=function(point,opts)
{var handle=new google.maps.Icon();handle.image="../img/mapcontrol-handle-icon.png";handle.shadow="";handle.iconSize=new google.maps.Size(9,9);handle.shadowSize=new google.maps.Size(0,0);handle.iconAnchor=new google.maps.Point(4,4);handle.infoWindowAnchor=new google.maps.Point(6,-24);handle.infoShadowAnchor=new google.maps.Point(0,0);if(!opts)opts={};opts.icon=handle;opts.draggable=true;opts.bouncy=false;opts.dragCrossMove=true;return google.maps.Marker.call(this,point,opts);}
kf.maps.initHandle=function()
{var c=this.Handle;c.prototype=new google.maps.Marker(new google.maps.LatLng(0,0));c.prototype.key=null;c.prototype.type=null;c.prototype.marker=null;c.prototype.map=null;c.prototype.prevHandle=null;c.prototype.nextHandle=null;c.prototype.overlay=null;c.prototype.redrawPolyline=function()
{var map=this.map;var handles=this.getHandles();var newoverlay=null;var points=[];$A(handles).each(function(handle){points.push(handle.getLatLng());});if(map.currentMarker){var s=map.currentMarker.style;newoverlay=new kf.maps.Polyline(points,s.strokeColor,s.strokeWeight,s.strokeOpacity);}else{newoverlay=new kf.maps.Polyline(points);}
map.addOverlay(newoverlay);var handle=this;google.maps.Event.addListener(newoverlay,"click",function(point){var marker=handle.marker;if(marker)marker.onClick(point);});var oldoverlay=this.getFirstHandle().overlay;if(oldoverlay){map.removeOverlay(oldoverlay);}
overlay=null;$A(handles).each(function(handle){handle.overlay=newoverlay;});}
c.prototype.redrawPolygon=function()
{var map=this.map;var handles=this.getHandles();var newoverlay=null;if(handles.length<3){this.redrawPolyline();}
var points=[];$A(handles).each(function(handle){points.push(handle.getLatLng());});points.push(handles[0].getLatLng());if(map.currentMarker){var s=map.currentMarker.style;newoverlay=new kf.maps.Polygon(points,s.strokeColor,s.strokeWeight,s.strokeOpacity,s.fillColor,s.fillOpacity);}else{newoverlay=new kf.maps.Polygon(points);}
map.addOverlay(newoverlay);var handle=this;google.maps.Event.addListener(newoverlay,"click",function(point){var marker=handle.marker;if(marker)marker.onClick(point);});var oldoverlay=this.getFirstHandle().overlay;if(oldoverlay){map.removeOverlay(oldoverlay);}
overlay=null;$A(handles).each(function(handle){handle.overlay=newoverlay;});}
c.prototype.redrawCircle=function()
{var map=this.map;var handles=this.getHandles();var newoverlay=null;var oldoverlay=this.getFirstHandle().overlay;if(oldoverlay){map.removeOverlay(oldoverlay);}
overlay=null;if(handles.length<2)return false;var clatlng=handles[0].getLatLng();var clat=clatlng.lat();var clng=clatlng.lng();var radius=clatlng.distanceFrom(handles[1].getLatLng());var points=[];var latscale=radius/K_ERMETERS*K_RAD_TO_DEG;var lngscale=latscale/Math.cos(clat*K_DEG_TO_RAD);for(var i=0;i<K_CIRCLE_VTC;i++){var rd=(i!=0)?i*10/180*Math.PI:0;points.push(new GLatLng(clat+latscale*Math.sin(rd),clng+lngscale*Math.cos(rd)));}
if(map.currentMarker){var s=map.currentMarker.style;newoverlay=new kf.maps.Polygon(points,s.strokeColor,s.strokeWeight,s.strokeOpacity,s.fillColor,s.fillOpacity);}else{newoverlay=new kf.maps.Polygon(points);}
map.addOverlay(newoverlay);var handle=this;google.maps.Event.addListener(newoverlay,"click",function(point){var marker=handle.marker;if(marker)marker.onClick(point);});$A(handles).each(function(handle){handle.overlay=newoverlay;});}
c.prototype.redrawOverlay=function()
{switch(this.type){case K_MARKER_TYPE_LINE:this.redrawPolyline();break;case K_MARKER_TYPE_POLYGON:this.redrawPolygon();break;case K_MARKER_TYPE_CIRCLE:this.redrawCircle();break;}}
c.prototype.getFirstHandle=function()
{var handle=this;while(handle.prevHandle){handle=handle.prevHandle;}
return handle;}
c.prototype.getHandles=function()
{var handle=this;var handles=[];while(handle.prevHandle){handle=handle.prevHandle;}
while(handle){handles.push(handle);handle=handle.nextHandle;}
return handles;}
c.prototype.removeHandle=function()
{var h;if(this.prevHandle){this.prevHandle.nextHandle=(this.nextHandle)?this.nextHandle:null;h=this.prevHandle;}
if(this.nextHandle){this.nextHandle.prevHandle=(this.prevHandle)?this.prevHandle:null;h=this.prevHandle;}
this.map.removeOverlay(this);if(h)h.redrawOverlay();}}
kf.maps.EditableLineMarker=function(key,handles)
{this.key=key;this.handles=handles;var marker=this;$A(handles).each(function(handle){handle.key=key;handle.marker=marker;handle.type=K_MARKER_TYPE_LINE;handle.hide();});}
kf.maps.initEditableLineMarker=function()
{var c=this.LineMarker;this.CommonMarkerInterface.apply(c.prototype);this.EditableMarkerInterface.apply(c.prototype);c.prototype.type=K_MARKER_TYPE_LINE;}
kf.maps.EditablePolygonMarker=function(key,handles)
{this.key=key;this.handles=handles;var marker=this;$A(handles).each(function(handle){handle.key=key;handle.marker=marker;handle.type=K_MARKER_TYPE_POLYGON;handle.hide();});}
kf.maps.initEditablePolygonMarker=function()
{var c=this.PolygonMarker;this.CommonMarkerInterface.apply(c.prototype);this.EditableMarkerInterface.apply(c.prototype);c.prototype.type=K_MARKER_TYPE_POLYGON;}
function fixMaxResolution(map)
{var maptypes=map.getMapTypes();for(var i=0;i<maptypes.length;i++){if(maptypes[i].uc=='m'){maptypes[i].getMaximumResolution=function(){return 22;};continue;}}}
function initSimpleMap(id_container,id_map)
{if(!id_container)id_container='map';if(!id_map)id_map=id_container;var container=$(id_container);kf.maps.init();var map=new kf.maps.Map2(container);fixMaxResolution(map);container.setAttribute('is_map','1');if(!window.maps)window.maps=[];window.mapeer.maps[id_map]=map;map.setCenter(new google.maps.LatLng(35.69884987331584,139.78233575820923),3);map.enableScrollWheelZoom();map.addControl(new google.maps.LargeMapControl());map.addControl(new google.maps.ScaleControl());map.addControl(new google.maps.MapTypeControl());map.addControl(new google.maps.OverviewMapControl(),new google.maps.ControlPosition(G_ANCHOR_BOTTOM_RIGHT,new google.maps.Size(7,7)));Event.observe(window,'unload',google.maps.Unload,true);return map;}
function initTopMap(id_container,id_map,opts)
{if(!id_container)id_container='map';if(!id_map)id_map=id_container;var container=$(id_container);kf.maps.init();var map=new kf.maps.Map2(container);fixMaxResolution(map);map.vcOffsetTop=90;map.retouchMode=true;map.setCenter(new kf.maps.LngLat(opts.center),opts.zoom);container.setAttribute('is_map','1');if(!window.maps)window.maps=[];window.mapeer.maps[id_map]=map;map.enableMousetipContextMenu();map.addControl(new google.maps.LargeMapControl(),new google.maps.ControlPosition(G_ANCHOR_TOP_LEFT,new google.maps.Size(10,105)));map.addControl(new google.maps.MapTypeControl());map.addControl(new google.maps.OverviewMapControl(),new google.maps.ControlPosition(G_ANCHOR_BOTTOM_RIGHT,new google.maps.Size(7,7)));google.maps.Event.addListener(map,'moveend',function(){if(map.stopRefreshMarkersList)return false;var pos=map.getCenter();if(map.lastPos){if(map.lastPos==pos)return false;}else{map.lastPos=pos;}
purgeOutBoundsMarkers(map);loadMarkers(map);var iw=map.getExtInfoWindow();var point=(iw)?iw.marker_.getPoint():null;});google.maps.Event.addListener(map,'zoomend',function(oldLevel,newLevel){if(newLevel<2)map.setZoom(2);map.resetCenterCursor();purgeAllMarkers(map);loadMarkers(map);});Event.observe(window,'resize',function(){map.resetCenterCursor();},true);Event.observe(window,'unload',google.maps.Unload,true);return map;}
function initMap(id_container,id_map,key_map,opts,onLoaded)
{if(!id_container)id_container='map';if(!id_map)id_map=id_container;var container=$(id_container);kf.maps.init();var map=new kf.maps.Map2(container);fixMaxResolution(map);map.retouchMode=true;map.key=key_map;if(onLoaded)google.maps.Event.addListener(map,'load',function(){onLoaded(map);});container.setAttribute('is_map','1');if(!window.maps)window.maps=[];window.mapeer.maps[id_map]=map;map.opts=opts;map.setMapTypeById(opts.maptype);map.setCenter(new kf.maps.LngLat(opts.center),opts.zoom);map.enableMousetipContextMenu();map.enableScrollWheelZoom();map.addControl(new google.maps.LargeMapControl());map.addControl(new google.maps.ScaleControl());map.addControl(new google.maps.MapTypeControl());map.addControl(new google.maps.OverviewMapControl(),new google.maps.ControlPosition(G_ANCHOR_BOTTOM_RIGHT,new google.maps.Size(7,7)));if(K_DISPLAY_GRID){var myCopyright=new google.maps.CopyrightCollection("(c) ");myCopyright.addCopyright(new GCopyright('grid',new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180)),0,'Copyright (c) 2005 KingFish Communication, Inc. All Rights Reserved.'));var tilelayer=new GTileLayer(myCopyright);tilelayer.getTileUrl=function(){return"img/tile_grid.png";};tilelayer.isPng=function(){return true;};tilelayer.getOpacity=function(){return 1.0;}
var myTileLayer=new GTileLayerOverlay(tilelayer);map.addOverlay(myTileLayer);}
google.maps.Event.addListener(map,'moveend',function(){if(map.stopRefreshMarkersList)return false;var pos=map.getCenter();if(map.lastPos){if(map.lastPos==pos)return false;}else{map.lastPos=pos;}
purgeOutBoundsMarkers(map);loadMarkers(map);var iw=map.getExtInfoWindow();if(iw){if(!map.getBounds().containsLatLng(iw.marker_.getPoint())){map.closeExtInfoWindow();iw=null;if(map.moveendtrap){map.moveendtrap=false;}else{map.setCenter(map.getCenter());map.moveendtrap=true;}}}
var point=(iw)?iw.marker_.getPoint():null;refreshMarkersList(map,'markers-list',point);});google.maps.Event.addListener(map,'zoomend',function(oldLevel,newLevel){if(newLevel<2)map.setZoom(2);map.resetCenterCursor();purgeAllMarkers(map);loadMarkers(map);});Event.observe(window,'resize',function(){map.resetCenterCursor();},true);Event.observe(window,'unload',google.maps.Unload,true);return map;}
function initEditableMap(id_container,id_map,key_map,opts,onLoaded)
{if(!id_container)id_container='map';if(!id_map)id_map=id_container;var container=$(id_container);kf.maps.init();var map=new kf.maps.Map2(container);fixMaxResolution(map);map.key=key_map;map.editable=true;if(onLoaded)google.maps.Event.addListener(map,'load',function(){onLoaded(map);});container.setAttribute('is_map','1');if(!window.maps)window.maps=[];window.mapeer.maps[id_map]=map;map.opts=opts;map.setMapTypeById(opts.maptype);map.setCenter(new kf.maps.LngLat(opts.center),opts.zoom);map.enableScrollWheelZoom();map.addControl(new google.maps.LargeMapControl());map.addControl(new google.maps.ScaleControl());map.addControl(new google.maps.MapTypeControl());map.addControl(new google.maps.OverviewMapControl(),new google.maps.ControlPosition(G_ANCHOR_BOTTOM_RIGHT,new google.maps.Size(7,7)));if(K_DISPLAY_GRID){var myCopyright=new google.maps.CopyrightCollection("(c) ");myCopyright.addCopyright(new GCopyright('grid',new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180)),0,'Copyright (c) 2005 KingFish Communication, Inc. All Rights Reserved.'));var tilelayer=new GTileLayer(myCopyright);tilelayer.getTileUrl=function(){return"img/tile_grid.png";};tilelayer.isPng=function(){return true;};tilelayer.getOpacity=function(){return 1.0;}
var myTileLayer=new GTileLayerOverlay(tilelayer);map.addOverlay(myTileLayer);}
var centerCursorControl=new kf.maps.CenterCursorControl();var retouchControl=new kf.maps.RetouchControl();var pointMarkerControl=new kf.maps.PointMarkerControl();var lineMarkerControl=new kf.maps.LineMarkerControl();var polygonMarkerControl=new kf.maps.PolygonMarkerControl();var circleMarkerControl=new kf.maps.CircleMarkerControl();var undoControl=new kf.maps.UndoControl();map.addControlWithProp('centerCursorControl',centerCursorControl);map.addControlWithProp('retouchControl',retouchControl);map.addControlWithProp('pointMarkerControl',pointMarkerControl);map.addControlWithProp('lineMarkerControl',lineMarkerControl);map.addControlWithProp('polygonMarkerControl',polygonMarkerControl);map.addControlWithProp('circleMarkerControl',circleMarkerControl);map.addControlWithProp('undoControl',undoControl);var controlGroup=new kf.maps.ToggleButtonGroup([retouchControl,pointMarkerControl,lineMarkerControl,polygonMarkerControl,circleMarkerControl],retouchControl);controlGroup.turnOnDefault();map.initCenterCursor();map.resetCenterCursor();map.enableMousetipContextMenu();google.maps.Event.addListener(map,'move',function(){map.resetCenterCursor();});google.maps.Event.addListener(map,'moveend',function(){if(map.stopRefreshMarkersList)return false;var pos=map.getCenter();if(map.lastPos){if(map.lastPos==pos)return false;}else{map.lastPos=pos;}
purgeOutBoundsMarkers(map);loadMarkers(map);var iw=map.getExtInfoWindow();if(iw){if(!map.getBounds().containsLatLng(iw.marker_.getPoint())){map.closeExtInfoWindow();iw=null;if(map.moveendtrap){map.moveendtrap=false;}else{map.setCenter(map.getCenter());map.moveendtrap=true;}}}
var point=(iw)?iw.marker_.getPoint():null;refreshMarkersList(map,'markers-list',point);});google.maps.Event.addListener(map,'zoomend',function(oldLevel,newLevel){if(newLevel<2)map.setZoom(2);map.resetCenterCursor();purgeAllMarkers(map);loadMarkers(map);});Event.observe(window,'resize',function(){map.resetCenterCursor();},true);Event.observe(window,'unload',google.maps.Unload,true);return map;}
function initMiniMap(id_container,id_map)
{if(!id_container)id_container='map';if(!id_map)id_map=id_container;var container=$(id_container);kf.maps.init();var map=new kf.maps.Map2(container);fixMaxResolution(map);map.retouchMode=true;map.enableScrollWheelZoom();container.setAttribute('is_map','1');map.addControl(new google.maps.SmallMapControl());map.addControl(new google.maps.ScaleControl());map.addControl(new google.maps.MapTypeControl());if(!window.maps)window.maps=[];window.mapeer.maps[id_map]=map;map.setCenter(new google.maps.LatLng(35.69884987331584,139.78233575820923),9);Event.observe(window,'unload',google.maps.Unload,true);return map;}
function getCells(map)
{var mt=map.getCurrentMapType();var pj=mt.getProjection();var cz=map.getZoom();var cb=map.getBounds();var ne=cb.getNorthEast();var sw=cb.getSouthWest();var ts=mt.getTileSize()/2;var ww=Math.floor(pj.getWrapWidth(cz)/ts);var p_ne=pj.fromLatLngToPixel(ne,cz);var p_sw=pj.fromLatLngToPixel(sw,cz);var p_ne_x=Math.floor(p_ne.x/ts)+1;var p_ne_y=Math.floor(p_ne.y/ts);var p_sw_x=Math.floor(p_sw.x/ts)+1;var p_sw_y=Math.floor(p_sw.y/ts);if(p_ne_y<0)p_ne_y=0;if(p_sw_y<0)p_ne_y=0;var xd=p_ne_x-p_sw_x;var yd=p_sw_y-p_ne_y;if(xd<0)xd+=ww+1;xd++;yd++;var cells={};for(var i=0;i<yd;i++){for(var j=0;j<xd;j++){var ne_x=p_ne_x-j;if(ne_x<0)ne_x+=ww+1;var sw_x=ne_x-1;if(sw_x<0)sw_x+=ww+1;var tp_ne=new google.maps.Point(ne_x*ts,(p_ne_y+i)*ts);var tp_sw=new google.maps.Point(sw_x*ts,(p_ne_y+i+1)*ts);var t_ne=pj.fromPixelToLatLng(tp_ne,cz,true);var t_sw=pj.fromPixelToLatLng(tp_sw,cz,true);if(t_sw.lng()==-180)t_sw=new google.maps.LatLng(t_sw.lat(),t_sw.lng()+0.0000000000001);var range=t_sw.lng()-t_ne.lng();if(range>45||range<-45)continue;var cell=new google.maps.LatLngBounds(t_sw,t_ne);cells['c_'+ne_x+'_'+(p_ne_y+i)]=cell;}}
return cells;}
function getCell(map,latlng)
{var mt=map.getCurrentMapType();var pj=mt.getProjection();var cz=map.getZoom();var ts=mt.getTileSize()/2;var p=pj.fromLatLngToPixel(latlng,cz);var p_x=Math.floor(p.x/ts);var p_y=Math.floor(p.y/ts);var tp_ne=new google.maps.Point(p_x*ts,p_y*ts);var tp_sw=new google.maps.Point((p_x-1)*ts,(p_y+1)*ts);var t_ne=pj.fromPixelToLatLng(tp_ne,cz);var t_sw=pj.fromPixelToLatLng(tp_sw,cz);var cell=new google.maps.LatLngBounds(t_sw,t_ne);return{cellkey:'c_'+p_x+'_'+p_y,cell:cell};}
function loadMarkers(map)
{var newCells=getCells(map);var oldCells=map.cells;var searchcells={};for(var k in oldCells){if(newCells[k]==undefined){newCells[k]=oldCells[k];}}
for(var k in newCells){if(oldCells[k]==undefined){searchcells[k]={ne:newCells[k].getNorthEast().toGeoString(),sw:newCells[k].getSouthWest().toGeoString()};}}
map.cells=newCells;if(searchcells.length==0)return false;var url=window.baseurl+'map/load_markers_by_cells/'+map.key;searchcells=Object.toJSON(searchcells);var pars=$H({cells:searchcells,keyword:map.search_keyword}).toQueryString();new Ajax.Request(url,{method:'post',parameters:pars,onFailure:function(originalRequest,o){logger('fail',K_LOG_LEVEL_DEBUG1);},onException:function(originalRequest,e){logger('exception: '+e.message,K_LOG_LEVEL_DEBUG1);},onComplete:function(originalRequest){eval('var cells = '+originalRequest.responseText);for(var cellkey in cells){var cell=cells[cellkey];if(map.markers.cells[cellkey]){for(var key in cell)
if(!map.markers.cells[cellkey][key])
map.markers.cells[cellkey][key]=cell[key];}else{map.markers.cells[cellkey]=cell;}
if(!cell)continue;for(var key in cell){var markerobj=cell[key];if(markerobj==undefined)continue;var marker=null;switch(markerobj.src.type){case K_MARKER_TYPE_SUMMARY:map.loadSummaryMarker(key,markerobj);break;case K_MARKER_TYPE_POINT:map.loadPointMarker(key,markerobj);break;case K_MARKER_TYPE_LINE:map.loadLineMarker(key,markerobj);break;case K_MARKER_TYPE_POLYGON:map.loadPolygonMarker(key,markerobj);break;case K_MARKER_TYPE_CIRCLE:map.loadCircleMarker(key,markerobj);break;}}}}});}
function purgeCellMarkers(map,cellkey)
{try{var cell=map.markers.cells[cellkey];for(var key in cell){var pm=cell[key];logger('purge markers: '+key,K_LOG_LEVEL_DEBUG1);switch(pm.src.type){case K_MARKER_TYPE_SUMMARY:var m=map.markers.summaryMarkers[key];if(m)map.removeOverlay(m);delete map.markers.summaryMarkers[key];break;case K_MARKER_TYPE_POINT:var m=map.markers.pointMarkers[key];if(m)map.removeOverlay(m);delete map.markers.pointMarkers[key];break;case K_MARKER_TYPE_LINE:break;var m=map.markers.lineMarkers[key];if(m)map.removeOverlay(m);delete map.markers.lineMarkers[key];break;case K_MARKER_TYPE_POLYGON:break;var m=map.markers.polygonMarkers[key];if(m)map.removeOverlay(m);delete map.markers.polygonMarkers[key];break;case K_MARKER_TYPE_CIRCLE:break;var m=map.markers.circleMarkers[key];if(m)map.removeOverlay(m);delete map.markers.circleMarkers[key];break;}}
logger('purge markers successed in cell: '+cellkey,K_LOG_LEVEL_DEBUG1);return true;}catch(e){logger('purge markers failed in cell: '+cellkey,K_LOG_LEVEL_DEBUG1);return false;}}
function purgeAllMarkers(map)
{for(var cellkey in map.markers.cells){if(purgeCellMarkers(map,cellkey)){delete map.cells[cellkey];delete map.markers.cells[cellkey];}}
map.cells={};map.markers.cells={};logger('purge all markers.',K_LOG_LEVEL_DEBUG1);}
function purgeOutBoundsMarkers(map)
{var mb=map.getBounds();var newcells={};for(var cellkey in map.markers.cells){var cb=map.cells[cellkey];if(!cb)continue;if(!mb.intersects(cb)){if(purgeCellMarkers(map,cellkey)){map.cells[cellkey]=null;delete map.cells[cellkey];map.markers.cells[cellkey]=null;delete map.markers.cells[cellkey];}}else{newcells[cellkey]=map.markers.cells[cellkey];}}
map.markers.cells=newcells;logger('purge markers out bounds cell.',K_LOG_LEVEL_DEBUG1);}
function refreshMarkersList(map,id_ph,point)
{var point=point?point.toGeoString():map.getCenter().toGeoString();var url=window.baseurl+'map/search_markers_by_center/'+map.key;var pars=$H({id_map:map.getContainer().id,center:point,ne:map.getBounds().getNorthEast().toGeoString(),sw:map.getBounds().getSouthWest().toGeoString(),keyword:map.search_keyword}).toQueryString();var myAjax=new Ajax.Updater(id_ph,url,{method:'post',parameters:pars});}
function init_geocoder()
{if(window.mapeer==undefined)window.mapeer={};window.mapeer.geocoder=new kf.maps.ClientGeocoder();}
function searchWithGeocoder(address,map,list,onFaild)
{if(!window.geocoder)init_geocoder();var geocoder=window.mapeer.geocoder;if(list){$A(list.childNodes).each(function(n){list.removeChild(n);});}
geocoder.getLatLng(address,function(results){if(!results){if(onFaild){onFaild(address,map,list);}else{alert('Not found.');}}else{var result=results[0];showAddress(result['lat'],result['lng'],result['name'],map);if(list){for(var i=0;i<results.length;i++){result=results[i];var li=document.createElement('li');var a=document.createElement('a');if(typeof a.textContent!="undefined"){a.textContent=result['name'];}else{a.innerText=result['name'];}
a.setAttribute('href','javascript:;');if(document.documentElement.getAttribute("style")==document.documentElement.style){a.setAttribute('onclick',new Function("showAddress("+result['lat']+", "+result['lng']+", '"+result['name']+"', getMap('"+map.id+"'))"));}else{a.setAttribute('onclick',"showAddress("+result['lat']+", "+result['lng']+", '"+result['name']+"', getMap("+map.id+"'))");}
li.appendChild(a);if(i%2==0)li.setAttribute('class','even');list.appendChild(li);}}}});}
function showMarker(map,key_marker,type,pointstr)
{var listener=null;var marker=null;var pom=null;switch(type){case K_MARKER_TYPE_POINT:marker=map.markers.pointMarkers[key_marker];pom=marker;break;case K_MARKER_TYPE_LINE:marker=map.markers.lineMarkers[key_marker];pom=new kf.maps.LngLat(pointstr);break;case K_MARKER_TYPE_POLYGON:marker=map.markers.polygonMarkers[key_marker];pom=new kf.maps.LngLat(pointstr);break;case K_MARKER_TYPE_CIRCLE:marker=map.markers.circleMarkers[key_marker];pom=new kf.maps.LngLat(pointstr);break;}
if(marker){marker.focus();marker.showHead(pom);}else{loadMarker(map,key_marker,pointstr,function(marker,pom){marker.showHead(pom);});}}
function loadMarker(map,key_marker,pointstr,func)
{var url=window.baseurl+'map/load_marker/'+map.key+'/'+key_marker;new Ajax.Request(url,{method:'post',onFailure:function(originalRequest,o){logger('fail',K_LOG_LEVEL_DEBUG1);},onException:function(originalRequest,e){logger('exception: '+e.message,K_LOG_LEVEL_DEBUG1);},onComplete:function(originalRequest){eval('var markerobj = '+originalRequest.responseText);var marker=null;var pom=null;switch(markerobj.src.type){case K_MARKER_TYPE_POINT:marker=map.loadPointMarker(key_marker,markerobj);pom=marker;break;case K_MARKER_TYPE_LINE:marker=map.loadLineMarker(key_marker,markerobj);pom=new kf.maps.LngLat(pointstr);break;case K_MARKER_TYPE_POLYGON:marker=map.loadPolygonMarker(key_marker,markerobj);pom=new kf.maps.LngLat(pointstr);break;case K_MARKER_TYPE_CIRCLE:marker=map.loadCircleMarker(key_marker,markerobj);pom=new kf.maps.LngLat(pointstr);break;}
if(pointstr){var c=getCell(map,new kf.maps.LngLat(pointstr));if(!map.cells[c.cellkey])map.cells[c.cellkey]=c.cell;if(!map.markers.cells[c.cellkey])map.markers.cells[c.cellkey]={};map.markers.cells[c.cellkey][key_marker]=markerobj;logger('Get cell: '+c.cellkey,K_LOG_LEVEL_DEBUG1);}
if(func)func(marker,pom);logger('Load marker: '+key_marker,K_LOG_LEVEL_DEBUG1);}});}
function showAddress(lat,lng,name,map)
{var point=new google.maps.LatLng(lat,lng);map.setCenter(point);}
function getMap(id_map)
{if(!id_map)return false;return window.mapeer.maps[id_map];}
function getThisMap(element)
{return getThis(element,'is_map');}
function getThis(element,matching_attr)
{if(element.getAttribute(matching_attr)){return element;}else{return getThis(element.parentNode,matching_attr);}}
function getMIcon(id_icon)
{var micon=MICONS['id_'+id_icon];micon.id=id_icon;return micon;}
function getMIconImageSrc(micon)
{return window.baseurl+K_MICON_BASEPATH+'m/'+micon.id+K_MICON_SUFFIX;}
function getMIconShadowSrc(micon)
{switch(parseInt(micon.shadow)){case K_MICON_SHADOWTYPE_MARKER:return window.baseurl+K_MICON_BASEPATH+'s/'+micon.id+K_MICON_SUFFIX;break;case K_MICON_SHADOWTYPE_GROUP:return window.baseurl+K_MICON_BASEPATH+'s/'+micon.group+K_MICON_SUFFIX;break;default:return false;break;}}
function getMIconHighlightSrc(micon)
{return window.baseurl+K_MICON_BASEPATH+'h/'+micon.id+K_MICON_SUFFIX;}
function getMIconListSrc(micon)
{return window.baseurl+K_MICON_BASEPATH+'l/'+micon.id+K_MICON_SUFFIX;}
function getPointMarker(map,key_marker)
{return map.markers.pointMarkers[key_marker];}
function getMarker(map,key_marker)
{return map.getMarker(key_marker);}
function zoom(map,z)
{if(!z)z=1;var p=map.getExtInfoWindow();if(p)p=p.marker_.getPoint();else p=map.getCenter();map.setCenter(p,map.getZoom()+z);}
function zoomIn(map,i)
{if(!i)i=1;zoom(map,i);}
function zoomOut(map,i)
{if(!i)i=1;zoom(map,i*(-1));}