if(!(typeof window.google==="object"&&window.google.maps)){throw"Google Maps API is required. Please register the following JavaScript library http://maps.google.com/maps/api/js?sensor=true."}var extend_object=function(e,t){var n;if(e===t){return e}for(n in t){e[n]=t[n]}return e};var replace_object=function(e,t){var n;if(e===t){return e}for(n in t){if(e[n]!=undefined){e[n]=t[n]}}return e};var array_map=function(e,t){var n=Array.prototype.slice.call(arguments,2),r=[],i=e.length,s;if(Array.prototype.map&&e.map===Array.prototype.map){r=Array.prototype.map.call(e,function(e){callback_params=n;callback_params.splice(0,0,e);return t.apply(this,callback_params)})}else{for(s=0;s0&&typeof e[n][0]!="number"){e[n]=arrayToLatLng(e[n],t)}else{e[n]=coordsToLatLngs(e[n],t)}}return e};var getElementById=function(e,t){var n,e=e.replace("#","");if("jQuery"in this&&t){n=$("#"+e,t)[0]}else{n=document.getElementById(e)}return n};var findAbsolutePosition=function(e){var t=0,n=0;if(e.offsetParent){do{t+=e.offsetLeft;n+=e.offsetTop}while(e=e.offsetParent)}return[t,n]};var GMaps=function(e){"use strict";var t=document;var n=function(e){if(!this)return new n(e);e.zoom=e.zoom||15;e.mapType=e.mapType||"roadmap";var r=this,i,s=["bounds_changed","center_changed","click","dblclick","drag","dragend","dragstart","idle","maptypeid_changed","projection_changed","resize","tilesloaded","zoom_changed"],o=["mousemove","mouseout","mouseover"],u=["el","lat","lng","mapType","width","height","markerClusterer","enableNewStyle"],a=e.el||e.div,f=e.markerClusterer,l=google.maps.MapTypeId[e.mapType.toUpperCase()],c=new google.maps.LatLng(e.lat,e.lng),h=e.zoomControl||true,p=e.zoomControlOpt||{style:"DEFAULT",position:"TOP_LEFT"},d=p.style||"DEFAULT",v=p.position||"TOP_LEFT",m=e.panControl||true,g=e.mapTypeControl||true,y=e.scaleControl||true,b=e.streetViewControl||true,w=w||true,E={},S={zoom:this.zoom,center:c,mapTypeId:l},x={panControl:m,zoomControl:h,zoomControlOptions:{style:google.maps.ZoomControlStyle[d],position:google.maps.ControlPosition[v]},mapTypeControl:g,scaleControl:y,streetViewControl:b,overviewMapControl:w};if(typeof e.el==="string"||typeof e.div==="string"){this.el=getElementById(a,e.context)}else{this.el=a}if(typeof this.el==="undefined"||this.el===null){throw"No element defined."}window.context_menu=window.context_menu||{};window.context_menu[r.el.id]={};this.controls=[];this.overlays=[];this.layers=[];this.singleLayers={};this.markers=[];this.polylines=[];this.routes=[];this.polygons=[];this.infoWindow=null;this.overlay_el=null;this.zoom=e.zoom;this.registered_events={};this.el.style.width=e.width||this.el.scrollWidth||this.el.offsetWidth;this.el.style.height=e.height||this.el.scrollHeight||this.el.offsetHeight;google.maps.visualRefresh=e.enableNewStyle;for(i=0;i'+o.title+""}}if(!getElementById("gmaps_context_menu"))return;var u=getElementById("gmaps_context_menu");u.innerHTML=n;var a=u.getElementsByTagName("a"),f=a.length;s;for(s=0;s0){if(e.paths[0].length>0){e.paths=array_flat(array_map(e.paths,arrayToLatLng,t))}}var n=new google.maps.Polygon(e),r=["click","dblclick","mousedown","mousemove","mouseout","mouseover","mouseup","rightclick"];for(var i=0;i0){if(e.locations[0].length>0){e.locations=array_flat(array_map([e.locations],arrayToLatLng,false))}}var t=e.callback;delete e.callback;var n=new google.maps.ElevationService;if(!e.path){delete e.path;delete e.samples;n.getElevationForLocations(e,function(e,n){if(t&&typeof t==="function"){t(e,n)}})}else{var r={path:e.locations,samples:e.samples};n.getElevationAlongPath(r,function(e,n){if(t&&typeof t==="function"){t(e,n)}})}};GMaps.prototype.cleanRoute=GMaps.prototype.removePolylines;GMaps.prototype.drawRoute=function(e){var t=this;this.getRoutes({origin:e.origin,destination:e.destination,travelMode:e.travelMode,waypoints:e.waypoints,unitSystem:e.unitSystem,callback:function(n){if(n.length>0){t.drawPolyline({path:n[n.length-1].overview_path,strokeColor:e.strokeColor,strokeOpacity:e.strokeOpacity,strokeWeight:e.strokeWeight});if(e.callback){e.callback(n[n.length-1])}}}})};GMaps.prototype.travelRoute=function(e){if(e.origin&&e.destination){this.getRoutes({origin:e.origin,destination:e.destination,travelMode:e.travelMode,waypoints:e.waypoints,callback:function(t){if(t.length>0&&e.start){e.start(t[t.length-1])}if(t.length>0&&e.step){var n=t[t.length-1];if(n.legs.length>0){var r=n.legs[0].steps;for(var i=0,s;s=r[i];i++){s.step_number=i;e.step(s,n.legs[0].steps.length-1)}}}if(t.length>0&&e.end){e.end(t[t.length-1])}}})}else if(e.route){if(e.route.legs.length>0){var t=e.route.legs[0].steps;for(var n=0,r;r=t[n];n++){r.step_number=n;e.step(r)}}}};GMaps.prototype.drawSteppedRoute=function(e){var t=this;if(e.origin&&e.destination){this.getRoutes({origin:e.origin,destination:e.destination,travelMode:e.travelMode,waypoints:e.waypoints,callback:function(n){if(n.length>0&&e.start){e.start(n[n.length-1])}if(n.length>0&&e.step){var r=n[n.length-1];if(r.legs.length>0){var i=r.legs[0].steps;for(var s=0,o;o=i[s];s++){o.step_number=s;t.drawPolyline({path:o.path,strokeColor:e.strokeColor,strokeOpacity:e.strokeOpacity,strokeWeight:e.strokeWeight});e.step(o,r.legs[0].steps.length-1)}}}if(n.length>0&&e.end){e.end(n[n.length-1])}}})}else if(e.route){if(e.route.legs.length>0){var n=e.route.legs[0].steps;for(var r=0,i;i=n[r];r++){i.step_number=r;t.drawPolyline({path:i.path,strokeColor:e.strokeColor,strokeOpacity:e.strokeOpacity,strokeWeight:e.strokeWeight});e.step(i)}}}};GMaps.Route=function(e){this.origin=e.origin;this.destination=e.destination;this.waypoints=e.waypoints;this.map=e.map;this.route=e.route;this.step_count=0;this.steps=this.route.legs[0].steps;this.steps_length=this.steps.length;this.polyline=this.map.drawPolyline({path:new google.maps.MVCArray,strokeColor:e.strokeColor,strokeOpacity:e.strokeOpacity,strokeWeight:e.strokeWeight}).getPath()};GMaps.Route.prototype.getRoute=function(t){var n=this;this.map.getRoutes({origin:this.origin,destination:this.destination,travelMode:t.travelMode,waypoints:this.waypoints||[],callback:function(){n.route=e[0];if(t.callback){t.callback.call(n)}}})};GMaps.Route.prototype.back=function(){if(this.step_count>0){this.step_count--;var e=this.route.legs[0].steps[this.step_count].path;for(var t in e){if(e.hasOwnProperty(t)){this.polyline.pop()}}}};GMaps.Route.prototype.forward=function(){if(this.step_count0){t["markers"]=[];for(var n=0;n0){var r=this.polylines[0];t["polyline"]={};t["polyline"]["path"]=google.maps.geometry.encoding.encodePath(r.getPath());t["polyline"]["strokeColor"]=r.strokeColor;t["polyline"]["strokeOpacity"]=r.strokeOpacity;t["polyline"]["strokeWeight"]=r.strokeWeight}return GMaps.staticMapURL(t)};GMaps.staticMapURL=function(e){function b(e,t){if(e[0]==="#"){e=e.replace("#","0x");if(t){t=parseFloat(t);t=Math.min(1,Math.max(t,0));if(t===0){return"0x00000000"}t=(t*255).toString(16);if(t.length===1){t+=t}e=e.slice(0,8)+t}}return e}var t=[],n,r="http://maps.googleapis.com/maps/api/staticmap";if(e.url){r=e.url;delete e.url}r+="?";var i=e.markers;delete e.markers;if(!i&&e.marker){i=[e.marker];delete e.marker}var s=e.styles;delete e.styles;var o=e.polyline;delete e.polyline;if(e.center){t.push("center="+e.center);delete e.center}else if(e.address){t.push("center="+e.address);delete e.address}else if(e.lat){t.push(["center=",e.lat,",",e.lng].join(""));delete e.lat;delete e.lng}else if(e.visible){var u=encodeURI(e.visible.join("|"));t.push("visible="+u)}var a=e.size;if(a){if(a.join){a=a.join("x")}delete e.size}else{a="630x300"}t.push("size="+a);if(!e.zoom&&e.zoom!==false){e.zoom=15}var f=e.hasOwnProperty("sensor")?!!e.sensor:true;delete e.sensor;t.push("sensor="+f);for(var l in e){if(e.hasOwnProperty(l)){t.push(l+"="+e[l])}}if(i){var c,h;for(var p=0;n=i[p];p++){c=[];if(n.size&&n.size!=="normal"){c.push("size:"+n.size);delete n.size}else if(n.icon){c.push("icon:"+encodeURI(n.icon));delete n.icon}if(n.color){c.push("color:"+n.color.replace("#","0x"));delete n.color}if(n.label){c.push("label:"+n.label[0].toUpperCase());delete n.label}h=n.address?n.address:n.lat+","+n.lng;delete n.address;delete n.lat;delete n.lng;for(var l in n){if(n.hasOwnProperty(l)){c.push(l+":"+n[l])}}if(c.length||p===0){c.push(h);c=c.join("|");t.push("markers="+encodeURI(c))}else{c=t.pop()+encodeURI("|"+h);t.push(c)}}}if(s){for(var p=0;p=e.lng()||l.lng()=e.lng()){if(f.lat()+(e.lng()-f.lng())/(l.lng()-f.lng())*(l.lat()-f.lat())>>0;if(n===0){return-1}var r=0;if(arguments.length>1){r=Number(arguments[1]);if(r!=r){r=0}else if(r!=0&&r!=Infinity&&r!=-Infinity){r=(r>0||-1)*Math.floor(Math.abs(r))}}if(r>=n){return-1}var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i