
Ext.namespace('Ext.ux');Ext.ux.GMapPanel=Ext.extend(Ext.Panel,{initComponent:function(){var defConfig={plain:true,zoomLevel:3,yaw:180,pitch:0,zoom:0,gmapType:'map',border:false};Ext.applyIf(this,defConfig);Ext.ux.GMapPanel.superclass.initComponent.call(this);},afterRender:function(){var wh=this.ownerCt.getSize();Ext.applyIf(this,wh);Ext.ux.GMapPanel.superclass.afterRender.call(this);if(this.gmapType==='map'){this.gmap=new GMap2(this.body.dom);}
if(this.gmapType==='panorama'){this.gmap=new GStreetviewPanorama(this.body.dom);}
if(typeof this.addControl=='object'&&this.gmapType==='map'){this.gmap.addControl(this.addControl);}
if(typeof this.setCenter==='object'){if(typeof this.setCenter.geoCodeAddr==='string'){this.geoCodeLookup(this.setCenter.geoCodeAddr);}else{if(this.gmapType==='map'){var point=new GLatLng(this.setCenter.lat,this.setCenter.lng);this.gmap.setCenter(point,this.zoomLevel);}
if(typeof this.setCenter.marker==='object'&&typeof point==='object'){this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear);}}
if(this.gmapType==='panorama'){this.gmap.setLocationAndPOV(new GLatLng(this.setCenter.lat,this.setCenter.lng),{yaw:this.yaw,pitch:this.pitch,zoom:this.zoom});}}
GEvent.bind(this.gmap,'load',this,function(){this.onMapReady();});},onMapReady:function(){this.addMarkers(this.markers);this.addMapControls();this.addOptions();},onResize:function(w,h){if(typeof this.getMap()=='object'){this.gmap.checkResize();}
Ext.ux.GMapPanel.superclass.onResize.call(this,w,h);},setSize:function(width,height,animate){if(typeof this.getMap()=='object'){this.gmap.checkResize();}
Ext.ux.GMapPanel.superclass.setSize.call(this,width,height,animate);},getMap:function(){return this.gmap;},getCenter:function(){return this.getMap().getCenter();},getCenterLatLng:function(){var ll=this.getCenter();return{lat:ll.lat(),lng:ll.lng()};},addMarkers:function(markers){if(Ext.isArray(markers)){for(var i=0;i<markers.length;i++){var mkr_point=new GLatLng(markers[i].lat,markers[i].lng);this.addMarker(mkr_point,markers[i].marker,false,markers[i].setCenter,markers[i].listeners);}}},addMarker:function(point,marker,clear,center,listeners){Ext.applyIf(marker,G_DEFAULT_ICON);if(clear===true){this.getMap().clearOverlays();}
if(center===true){this.getMap().setCenter(point,this.zoomLevel);}
var mark=new GMarker(point,marker);if(typeof listeners==='object'){for(evt in listeners){GEvent.bind(mark,evt,this,listeners[evt]);}}
this.getMap().addOverlay(mark);},addMapControls:function(){if(this.gmapType==='map'){if(Ext.isArray(this.mapControls)){for(i=0;i<this.mapControls.length;i++){this.addMapControl(this.mapControls[i]);}}else if(typeof this.mapControls==='string'){this.addMapControl(this.mapControls);}else if(typeof this.mapControls==='object'){this.getMap().addControl(this.mapControls);}}},addMapControl:function(mc){var mcf=window[mc];if(typeof mcf==='function'){this.getMap().addControl(new mcf());}},addOptions:function(){if(Ext.isArray(this.mapConfOpts)){var mc;for(i=0;i<this.mapConfOpts.length;i++){this.addOption(this.mapConfOpts[i]);}}else if(typeof this.mapConfOpts==='string'){this.addOption(this.mapConfOpts);}},addOption:function(mc){var mcf=this.getMap()[mc];if(typeof mcf==='function'){this.getMap()[mc]();}},geoCodeLookup:function(addr){this.geocoder=new GClientGeocoder();this.geocoder.getLocations(addr,this.addAddressToMap.createDelegate(this));},addAddressToMap:function(response){if(!response||response.Status.code!=200){Ext.MessageBox.alert('Error','Code '+response.Status.code+' Error Returned');}else{place=response.Placemark[0];addressinfo=place.AddressDetails;accuracy=addressinfo.Accuracy;if(accuracy===0){Ext.MessageBox.alert('Unable to Locate Address','Unable to Locate the Address you provided');}else{if(accuracy<7){Ext.MessageBox.alert('Address Accuracy','The address provided has a low accuracy.<br><br>Level '+accuracy+' Accuracy (8 = Exact Match, 1 = Vague Match)');}else{point=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);if(typeof this.setCenter.marker==='object'&&typeof point==='object'){this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear,true,this.setCenter.listeners);}}}}}});Ext.reg('gmappanel',Ext.ux.GMapPanel);
