
var GeoExplorer=Ext.extend(gxp.Viewer,{localGeoServerBaseUrl:"",siteUrl:"",fromLayer:false,mapPanel:null,legendPanel:null,toolbar:null,capGrid:null,modified:0,popupCache:null,propDlgCache:null,stylesDlgCache:null,busyMask:null,urlPortRegEx:/^(http[s]?:\/\/[^:]*)(:80|:443)?\//,treeRoot:null,searchFields:[],gxSearchBar:null,loginWin:null,registerWin:null,worldMapSourceKey:null,hglSourceKey:null,addLayersButtonText:"UT:Add Layers",arcGisRestLabel:'UT: Add ArcGIS REST Server',areaActionText:"UT:Area",backgroundContainerText:"UT:Background",capGridAddLayersText:"UT:Add Layers",capGridDoneText:"UT:Done",capGridText:"UT:Available Layers",connErrorTitleText:"UT:Connection Error",connErrorText:"UT:The server returned an error",connErrorDetailsText:"UT:Details...",googleEarthBtnText:"UT:Google Earth",heightLabel:'UT: Height',helpLabel:'UT: Help',infoButtonText:"UT:Info",largeSizeLabel:'UT:Large',layerAdditionLabel:"UT: Add another server",layerLocalLabel:'UT:Upload your own data',layerContainerText:"UT:Map Layers",layerPropertiesText:'UT: Layer Properties',layerPropertiesTipText:'UT: Change layer format and style',layerStylesText:'UT:Edit Styles',layerStylesTipText:'UT:Edit layer styles',layerSelectionLabel:"UT:View available data from:",layersContainerText:"UT:Data",layersPanelText:"UT:Layers",legendPanelText:"UT:Legend",lengthActionText:"UT:Length",loadingMapMessage:"UT:Loading Map...",mapSizeLabel:'UT: Map Size',maxMapLayers:75,maxLayersTitle:'UT:Warning',maxLayersText:'UT:You now have %n layers in your map.  With more than %max layers you may experience problems with layer ordering, info balloon display, and general performance. ',measureSplitText:"UT:Measure",metadataFormCancelText:"UT:Cancel",metadataFormSaveAsCopyText:"UT:Save as Copy",metadataFormSaveText:"UT:Save",metaDataHeader:'UT:About this Map View',metaDataMapAbstract:'UT:Abstract (brief description)',metaDataMapKeywords:'UT: Keywords (for Picasa and YouTube overlays)',metaDataMapIntroText:'UT:Introduction (tell visitors more about your map view)',metaDataMapTitle:'UT:Title',metaDataMapUrl:'UT:UserUrl',miniSizeLabel:'UT: Mini',addCategoryActionText:'UT:Add Category',addCategoryActionTipText:'UT: Add a new category to the layer tree',renameCategoryActionText:'UT: Rename Category',renameCategoryActionTipText:'UT: Rename this category',removeCategoryActionText:'UT: Remove Category',removeCategoryActionTipText:'UT: Remove this category and layers',navActionTipText:"UT:Pan Map",navNextAction:"UT:Zoom to Next Extent",navPreviousActionText:"UT:Zoom to Previous Extent",premiumSizeLabel:'UT: Premium',printTipText:"UT:Print Map",printBtnText:"UT:Print",printWindowTitleText:"UT:Print Preview",propertiesText:"UT:Properties",publishActionText:'UT:Link To Map',publishBtnText:'UT:Link',removeLayerActionText:"UT:Remove Layer",removeLayerActionTipText:"UT:Remove Layer",revisionBtnText:"UT:Revisions",saveFailMessage:"UT: Sorry, your map could not be saved.",saveFailTitle:"UT: Error While Saving",saveMapText:"UT: Save Map",saveMapBtnText:"UT: Save",saveMapAsText:"UT: Save Map As",saveNotAuthorizedMessage:"UT: You Must be logged in to save this map.",shareLayerText:'UT: Share Layer',shareMapText:'UT: Share Map',smallSizeLabel:'UT: Small',sourceLoadFailureMessage:'UT: Error contacting server.\n Please check the url and try again.',switchTo3DActionText:"UT:Switch to Google Earth 3D Viewer",streetViewBtnText:"UT:Street View",unknownMapMessage:'UT: The map that you are trying to load does not exist.  Creating a new map instead.',unknownMapTitle:'UT: Unknown Map',unsupportedLayersTitleText:'UT:Unsupported Layers',unsupportedLayersText:'UT:The following layers cannot be printed:',widthLabel:'UT: Width',zoomInActionText:"UT:Zoom In",zoomOutActionText:"UT:Zoom Out",zoomSelectorText:'UT:Zoom level',zoomSliderTipText:"UT: Zoom Level",zoomToLayerExtentText:"UT:Zoom to Layer Extent",zoomVisibleButtonText:"UT:Zoom to Original Map Extent",constructor:function(config){this.config=config;this.popupCache={};this.propDlgCache={};this.stylesDlgCache={};this.addEvents("saved","beforeunload");Ext.preg("gx_wmssource",gxp.plugins.WMSSource);Ext.preg("gx_olsource",gxp.plugins.OLSource);Ext.preg("gx_googlesource",gxp.plugins.GoogleSource);Ext.preg("gx_gnsource",gxp.plugins.GeoNodeSource);Ext.util.Observable.observeClass(Ext.data.Connection);Ext.data.Connection.on({"beforerequest":function(conn,options){var url=options.url.replace(this.urlPortRegEx,"$1/");if(this.localGeoServerBaseUrl){var localUrl=this.localGeoServerBaseUrl.replace(this.urlPortRegEx,"$1/");if(url.indexOf(localUrl+"rest/")===0){options.url=url.replace(new RegExp("^"+
localUrl),"/gs/");return;}
if(url.indexOf(this.localGeoServerBaseUrl)==0){options.url=url.replace(new RegExp("^"+localUrl),"/geoserver/");return;}}
if(!url.contains(this.siteUrl)&&this.proxy&&options.url.indexOf(this.proxy)!==0&&options.url.indexOf(window.location.protocol)===0){var parts=options.url.replace(/&$/,"").split("?");var params=Ext.apply(parts[1]&&Ext.urlDecode(parts[1])||{},options.params);url=Ext.urlAppend(parts[0],Ext.urlEncode(params));if(!params['keepPostParams'])
delete options.params;options.url=this.proxy+encodeURIComponent(url);}},"requestexception":function(conn,response,options){if(options.failure){}else{this.busyMask&&this.busyMask.hide();var url=options.url;if(response.status==401&&url.indexOf("http"!=0)&&url.indexOf(this.proxy)===-1){this.showLoginWindow(options);}else{this.displayXHRTrouble(response);}}},scope:this});Ext.override(Ext.tree.TreeNode,{findDescendant:function(attribute,value){var children=this.childNodes;for(var i=0,l=children.length;i<l;i++){if(children[i].attributes[attribute]==value){return children[i];}else if(node=children[i].findDescendant(attribute,value)){return node;}}
return null;}});window.onbeforeunload=(function(){if(this.fireEvent("beforeunload")===false){return"If you leave this page, unsaved changes will be lost.";}}).bind(this);Ext.util.Observable.observeClass(gxp.form.ColorField);gxp.form.ColorField.on({render:function(field){var manager=new Styler.ColorManager();manager.register(field);}});Ext.form.ComboBox.prototype.getListParent=function(){return this.el.up(".x-window")||document.body;}
Ext.Window.prototype.shadow=false;OpenLayers.Renderer.defaultSymbolizer={fillColor:"#808080",fillOpacity:1,strokeColor:"#000000",strokeOpacity:1,strokeWidth:1,strokeDashstyle:"solid",pointRadius:3,graphicName:"square",fontColor:"#000000",fontSize:10,haloColor:"#FFFFFF",haloOpacity:1,haloRadius:1};OpenLayers.Tile.Image.prototype.maxGetUrlLength=2048;if(!config.map){config.map={};}
config.map.numZoomLevels=21;OpenLayers.Map.prototype.Z_INDEX_BASE={BaseLayer:100,Overlay:325,Feature:3000,Popup:3025,Control:4000},GeoExplorer.superclass.constructor.apply(this,arguments);this.mapID=this.initialConfig.id;},getNodeRecord:function(node){if(node&&node.layer){var layer=node.layer;var store=node.layerStore;record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));}
return record;},reorderNodes:function(){var mpl=this.mapPanel.layers;var x=0;var layerCount=this.mapPanel.layers.getCount()-1;var nodeToSelect=null;this.treeRoot.cascade(function(node){if(node.isLeaf()&&node.layer){var layer=node.layer;var store=node.layerStore;record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));if(record.get("group")!=="background"){mpl.remove(record);mpl.insert(layerCount-x,[record]);}
x++;}});},addCategoryFolder:function(category,isExpanded){mapRoot=this.treeRoot.findChild("id","maplayerroot");if(category==""||category==undefined||category==null)
category="General";if(mapRoot.findChild("text",category)==null){mapRoot.appendChild(new GeoExt.tree.LayerContainer({text:category,group:category,iconCls:"gx-folder",cls:"folder",expanded:isExpanded=="true",loader:new GeoExt.tree.LayerLoader({store:this.mapPanel.layers,filter:function(record){return record.get("group")==category&&record.getLayer().displayInLayerSwitcher==true;},createNode:function(attr){var layer=attr.layer;var store=attr.layerStore;if(layer&&store){var record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));if(record&&!record.get("queryable")){attr.iconCls="gx-tree-rasterlayer-icon";}
if(record&&record.get("disabled")){attr.disabled=true;}}
return GeoExt.tree.LayerLoader.prototype.createNode.apply(this,[attr]);}}),singleClickExpand:true,allowDrag:true,listeners:{append:function(tree,node){node.expand();}}}));}else if(isExpanded=="true"){(mapRoot.findChild("text",category)).expand();}},registerEvents:function(layer){var geoEx=this;layer.events.register("loadstart",layer,function(){if(!geoEx.busyMask){geoEx.busyMask=new Ext.LoadMask(geoEx.mapPanel.map.div,{msg:'Searching...'});}
geoEx.busyMask.show();});layer.events.register("loadend",layer,function(){if(geoEx.busyMask){geoEx.busyMask.hide();}});},displayXHRTrouble:function(response){response.status&&Ext.Msg.show({title:this.connErrorTitleText,msg:this.connErrorText+": "+response.status+" "+response.statusText,icon:Ext.MessageBox.ERROR,buttons:{ok:this.connErrorDetailsText,cancel:true},fn:function(result){if(result=="ok"){var details=new Ext.Window({title:response.status+" "+response.statusText,width:400,height:300,items:{xtype:"container",cls:"error-details",html:response.responseText},autoScroll:true,buttons:[{text:"OK",handler:function(){details.close();}}]});details.show();}}});},showLoginWindow:function(options){this.loginWin=null;var submit=function(){form=this.loginWin.items.get(0);form.getForm().submit({waitMsg:"Logging in...",success:function(form,action){this.loginWin.close();this.propDlgCache={};this.stylesDlgCache={};document.cookie=action.response.getResponseHeader("Set-Cookie");if(options){Ext.Ajax.request(options);}},failure:function(form,action){var username=form.items.get(0);var password=form.items.get(1);username.markInvalid();password.markInvalid();username.focus(true);},scope:this});}.bind(this);this.loginWin=new Ext.Window({title:"WorldMap Login",modal:true,width:230,autoHeight:true,layout:"fit",items:[{xtype:"form",autoHeight:true,labelWidth:55,border:false,bodyStyle:"padding: 10px;",url:"/accounts/ajax_login",waitMsgTarget:true,errorReader:{read:function(response){return{success:response.status==200,records:[]};}},defaults:{anchor:"100%"},items:[{xtype:"textfield",name:"username",fieldLabel:"Username"},{xtype:"textfield",name:"password",fieldLabel:"Password",inputType:"password"},{xtype:"hidden",name:"csrfmiddlewaretoken",value:this.csrfToken},{xtype:"button",text:"Login",inputType:"submit",handler:submit}]}],keys:{"key":Ext.EventObject.ENTER,"fn":submit}});var form=this.loginWin.items.get(0);form.items.get(0).focus(false,100);this.loginWin.show();},addInfo:function(){var queryableLayers=this.mapPanel.layers.queryBy(function(x){return x.get("queryable");});var geoEx=this;queryableLayers.each(function(x){var dl=x.getLayer();if(dl.name!="HighlightWMS"&&!dl.attributes){var category=x.get("group")!=""&&x.get("group")!=undefined&&x.get("group")?x.get("group"):"General";x.set("group",category);}},this);},initMapPanel:function(){this.mapItems=[{xtype:"gx_zoomslider",vertical:true,height:100,plugins:new GeoExt.ZoomSliderTip({template:"<div>"+this.zoomSliderTipText+": {zoom}<div>"})}];OpenLayers.IMAGE_RELOAD_ATTEMPTS=5;OpenLayers.Util.onImageLoadErrorColor="transparent";GeoExplorer.superclass.initMapPanel.apply(this,arguments);var searchFields=this.searchFields;var layerCount=0;var incrementLayerStats=function(layer){Ext.Ajax.request({url:"/data/layerstats/",method:"POST",params:{layername:layer.params.LAYERS}});}
this.mapPanel.map.events.register("preaddlayer",this,function(e){var layer=e.layer;if(layer instanceof OpenLayers.Layer.WMS){!layer.singleTile&&layer.maxExtent&&layer.mergeNewParams({tiled:true,tilesOrigin:[layer.maxExtent.left,layer.maxExtent.bottom]});layer.events.on({"loadstart":function(){layerCount++;incrementLayerStats(layer);if(!this.busyMask){this.busyMask=new Ext.LoadMask(this.mapPanel.map.div,{msg:this.loadingMapMessage});this.busyMask.show();}
layer.events.unregister("loadstart",this,arguments.callee);},"loadend":function(){layerCount--;if(layerCount===0){this.busyMask.hide();}
layer.events.unregister("loadend",this,arguments.callee);},scope:this});}});},initPortal:function(){this.on("beforeunload",function(){if(this.modified&&this.config["edit_map"]){this.showMetadataForm();return false;}},this);var geoEx=this;var mapOverlay=this.createMapOverlay();this.mapPanel.add(mapOverlay);if(!this.busyMask){this.busyMask=new Ext.LoadMask(Ext.getBody(),{msg:this.loadingMapMessage});}
this.busyMask.show();var addLayerButton=new Ext.Button({tooltip:this.addLayersButtonText,disabled:false,text:'<span class="x-btn-text">'+this.addLayersButtonText+'</span>',handler:this.showSearchWindow,scope:this});this.on("ready",function(){this.addInfo();this.mapPanel.layers.on({"update":function(){this.modified|=1;},"add":function(){this.modified|=1;},"remove":function(store,rec){this.modified|=1;delete this.stylesDlgCache[rec.getLayer().id];},scope:this});if(this.busyMask){this.busyMask.hide();}
if(this.config.first_visit)
this.showInfoWindow();});var getRecordFromNode=function(node){if(node&&node.layer){var layer=node.layer;var store=node.layerStore;record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));}
return record;};var getSelectedLayerRecord=function(){var node=layerTree.getSelectionModel().getSelectedNode();return getRecordFromNode(node);};var removeLayerAction=new Ext.Action({text:this.removeLayerActionText,iconCls:"icon-removelayers",disabled:true,tooltip:this.removeLayerActionTipText,handler:function(){var record=getSelectedLayerRecord();if(record){this.mapPanel.layers.remove(record,true);removeLayerAction.disable();}},scope:this});this.treeRoot=new Ext.tree.TreeNode({text:"Layers",expanded:true,isTarget:false,allowDrop:false});this.treeRoot.appendChild(new GeoExt.tree.LayerContainer({text:this.layerContainerText,id:"maplayerroot",iconCls:"gx-folder",expanded:true,loader:new GeoExt.tree.LayerLoader({store:this.mapPanel.layers,filter:function(record){return record.get("group")=="none"&&record.getLayer().displayInLayerSwitcher==true;},createNode:function(attr){var layer=attr.layer;var store=attr.layerStore;if(layer&&store){var record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));if(record&&!record.get("queryable")){attr.iconCls="gx-tree-rasterlayer-icon";}}
return GeoExt.tree.LayerLoader.prototype.createNode.apply(this,[attr]);}}),singleClickExpand:true,allowDrop:true,allowDrag:true,listeners:{append:function(tree,node){node.expand();}}}));this.treeRoot.appendChild(new GeoExt.tree.LayerContainer({text:this.backgroundContainerText,iconCls:"gx-folder",expanded:true,group:"background",loader:new GeoExt.tree.LayerLoader({baseAttrs:{checkedGroup:"background"},store:this.mapPanel.layers,filter:function(record){return record.get("group")==="background"&&record.getLayer().displayInLayerSwitcher==true;},createNode:function(attr){var layer=attr.layer;var store=attr.layerStore;if(layer&&store){var record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));if(record){if(!record.get("queryable")){attr.iconCls="gx-tree-rasterlayer-icon";}
if(record.get("fixed")){attr.allowDrag=false;}}}
return GeoExt.tree.LayerLoader.prototype.createNode.apply(this,arguments);}}),singleClickExpand:true,allowDrag:false,listeners:{append:function(tree,node){node.expand();}}}));createPropertiesDialog=function(){var node=layerTree.getSelectionModel().getSelectedNode();if(node&&node.layer){var layer=node.layer;var store=node.layerStore;var record=store.getAt(store.findBy(function(record){return record.getLayer()===layer;}));var backupParams=Ext.apply({},record.getLayer().params);var prop=this.propDlgCache[layer.id];if(!prop){prop=this.propDlgCache[layer.id]=new Ext.Window({title:"Properties: "+record.getLayer().name,width:280,autoHeight:true,closeAction:"hide",items:[{xtype:"gxp_wmslayerpanel",autoHeight:true,layerRecord:record,defaults:{autoHeight:true,hideMode:"offsets"},listeners:{"change":function(){this.modified|=1;},scope:this}}]});prop.items.get(0).items.get(1).cascade(function(i){i instanceof Ext.form.Field&&i.setDisabled(true);});isLocal=layer.url.replace(this.urlPortRegEx,"$1/").indexOf(this.localGeoServerBaseUrl.replace(this.urlPortRegEx,"$1/"))===0;if(isLocal){prop.items.get(0).items.get(0).add({html:"<a target='_blank' href='/data/"+layer.params.LAYERS+"'>"+this.shareLayerText+"</a>",xtype:"panel"});}
prop.items.get(0).remove(prop.items.get(0).items.get(3),true);var geoEx=this;Ext.Ajax.request({url:"/data/"+layer.params.LAYERS+"/ajax_layer_edit_check/",method:"POST",params:{layername:layer.params.LAYERS},success:function(result,request){if(result.responseText=="True"){var stylesPanel=geoEx.createStylesPanel({layerRecord:record});stylesPanel.items.get(0).on({"styleselected":function(){this.modified|=1;},"modified":function(){this.modified|=2;},scope:this});stylesPanel.setTitle("Styles");prop.items.get(0).add(stylesPanel)}},failure:function(result,request){}});}
prop.show();}};var showPropertiesAction=new Ext.Action({text:this.layerPropertiesText,iconCls:"icon-layerproperties",disabled:true,tooltip:this.layerPropertiesTipText,handler:createPropertiesDialog.createSequence(function(){var node=layerTree.getSelectionModel().getSelectedNode();this.propDlgCache[node.layer.id].items.get(0).setActiveTab(1);},this),scope:this});var updateLayerActions=function(sel,node){if(node&&node.layer){removeLayerAction.show();zoomLayerAction.show();showPropertiesAction.show();var count=this.mapPanel.layers.queryBy(function(r){return!(r.getLayer()instanceof OpenLayers.Layer.Vector);}).getCount();if(count>1){removeLayerAction.enable();zoomLayerAction.enable();}else{zoomLayerAction.disable();removeLayerAction.disable();}
var record=getRecordFromNode(node);if(record.get("properties")){showPropertiesAction.enable();}else{showPropertiesAction.disable();}
removeCategoryAction.hide();addCategoryAction.hide();renameAction.hide();var changed=true;var layer=node.layer;var store=node.layerStore;var record=store.getAt(store.findBy(function(r){return r.getLayer()===layer;}));this.selectionChanging=true;changed=geoEx.selectLayer(record);this.selectionChanging=false;return changed;}else{addCategoryAction.hide();removeLayerAction.hide();showPropertiesAction.hide();zoomLayerAction.hide();if(node&&!node.parentNode.isRoot){removeCategoryAction.show();renameAction.show();addCategoryAction.hide();}else if(node&&node.parentNode.isRoot){addCategoryAction.show();removeCategoryAction.hide();renameAction.hide();}else{addCategoryAction.hide();removeCategoryAction.hide();renameAction.hide();}}};var zoomLayerAction=new Ext.Action({text:this.zoomToLayerExtentText,disabled:true,iconCls:"icon-zoom-to",handler:function(){var node=layerTree.getSelectionModel().getSelectedNode();if(node&&node.layer){var map=this.mapPanel.map;var extent=node.layer.restrictedExtent||map.maxExtent;map.zoomToExtent(extent,true);}},scope:this})
var renameNode=function(node){Ext.MessageBox.prompt('Rename Category','New name for \"'+node.text+'\"',function(btn,text){if(btn=='ok'){this.modified|=1;var a=node;node.setText(text);node.attributes.group=text;node.group=text;node.loader.filter=function(record){return record.get("group")==text&&record.getLayer().displayInLayerSwitcher==true;}
node.eachChild(function(n){record=getRecordFromNode(n);if(record){record.set("group",text);}});node.ownerTree.fireEvent('beforechildrenrendered',node.parentNode);}});};var renameAction=new Ext.Action({text:this.renameCategoryActionText,iconCls:"icon-layerproperties",disabled:false,tooltip:this.renameCategoryActionTipText,handler:function(){var node=layerTree.getSelectionModel().getSelectedNode();renameNode(node);},scope:this});var addCategoryAction=new Ext.Action({text:this.addCategoryActionText,iconCls:"icon-add",disabled:false,tooltip:this.addCategoryActionTipText,handler:function(){var geoEx=this;var node=layerTree.getSelectionModel().getSelectedNode();Ext.MessageBox.prompt('Add Category','Category name:',function(btn,text){if(btn=='ok'){geoEx.addCategoryFolder(text,true);}});},scope:this});var removeCategoryAction=new Ext.Action({text:this.removeCategoryActionText,iconCls:"icon-removelayers",disabled:false,tooltip:this.removeCategoryActionTipText,handler:function(){var node=layerTree.getSelectionModel().getSelectedNode();if(node.parentNode.isRoot){Ext.Msg.alert(this.layerContainerText,"This category cannot be removed");return false;}
if(node){while(node.childNodes.length>0){cnode=node.childNodes[0];record=getRecordFromNode(cnode);if(record){this.mapPanel.layers.remove(record,true);}};parentNode=node.parentNode;parentNode.removeChild(node,true);}},scope:this});var mapLayersText=this.layerContainerText;var backgroundText=this.backgroundContainerText;var layerTree=new Ext.tree.TreePanel({root:this.treeRoot,rootVisible:false,border:false,enableDD:true,selModel:new Ext.tree.DefaultSelectionModel({listeners:{beforeselect:updateLayerActions,scope:this}}),listeners:{contextmenu:function(node,e){if(node){node.select();var c=node.getOwnerTree().contextMenu;c.contextNode=node;c.showAt(e.getXY());}},beforemovenode:function(tree,node,oldParent,newParent,index){if(node.layer&&oldParent!==newParent){var store=newParent.loader.store;var index=store.findBy(function(r){return r.getLayer()===node.layer;});var record=store.getAt(index);record.set("group",newParent.attributes.group);}},beforenodedrop:function(dropEvent){var source_folder_id=undefined;var dest_folder=undefined;if(dropEvent.data.node.attributes.iconCls=='gx-folder'){if(dropEvent.target.attributes.iconCls!="gx-folder")
dropEvent.target=dropEvent.target.parentNode;if((dropEvent.target.attributes.iconCls=='gx-folder'&&dropEvent.point=="above")||(dropEvent.target.text!=backgroundText&&dropEvent.target.attributes.iconCls=='gx-folder'&&dropEvent.point=="below")){return true;}else{return false;}}else{if(dropEvent.target.parentNode.text==backgroundText||(dropEvent.target.parentNode.text==mapLayersText&&dropEvent.point!="append")||dropEvent.target.parentNode.text=="Layers")
return false;else
return true;}},movenode:function(tree,node,oldParent,newParent,index){if(!node.layer)
this.reorderNodes();},scope:this},contextMenu:new Ext.menu.Menu({items:[zoomLayerAction,removeLayerAction,showPropertiesAction,addCategoryAction,renameAction,removeCategoryAction]})});this.gxSearchBar=new GeoExplorer.SearchBar(this);var searchPanel=new Ext.Panel({anchor:"100% 5%",items:[this.gxSearchBar]});var layersContainer=new Ext.Panel({autoScroll:true,border:false,title:this.layersContainerText,items:[layerTree]});this.legendPanel=new GeoExt.LegendPanel({title:this.legendPanelText,border:false,hideMode:"offsets",split:true,autoScroll:true,ascending:false,map:this.mapPanel.map,filter:function(record){return record.data.group==undefined||record.data.group!="Overlays";},defaults:{cls:'legend-item'}});var layersTabPanel=new Ext.TabPanel({anchor:"100% 95%",border:false,deferredRender:false,items:[layersContainer,this.legendPanel],activeTab:0});var westPanel=new Ext.Panel({id:'gx_westPanel',layout:"anchor",collapseMode:"mini",header:false,split:true,items:[layersTabPanel,searchPanel],region:"west",width:250});var gridWinPanel=new Ext.Panel({id:'gridWinPanel',collapseMode:"mini",title:'Identify Results',region:"west",autoScroll:true,split:true,items:[],width:200});var gridResultsPanel=new Ext.Panel({id:'gridResultsPanel',title:'Feature Details',region:"center",collapseMode:"mini",autoScroll:true,split:true,items:[],width:400});var identifyWindow=new Ext.Window({id:'queryPanel',layout:"border",closeAction:"hide",items:[gridWinPanel,gridResultsPanel],width:600,height:400});this.toolbar=new Ext.Toolbar({disabled:true,id:'paneltbar',items:[addLayerButton,"-",this.createTools()]});this.on("ready",function(){var disabled=this.toolbar.items.filterBy(function(item){return item.initialConfig&&item.initialConfig.disabled;});this.toolbar.enable();disabled.each(function(item){item.disable();});if(this.busyMask){this.busyMask.hide();}},this);this.googleEarthPanel=new gxp.GoogleEarthPanel({mapPanel:this.mapPanel,listeners:{"beforeadd":function(record){return record.get("group")!=="background";},"show":function(){addLayerButton.disable();removeLayerAction.disable();layerTree.getSelectionModel().un("beforeselect",updateLayerActions,this);},"hide":function(){addLayerButton.enable();updateLayerActions();layerTree.getSelectionModel().on("beforeselect",updateLayerActions,this);}}});this.mapPanelContainer=new Ext.Panel({layout:"card",region:"center",id:"mapPnlCntr",defaults:{border:false},items:[this.mapPanel,this.googleEarthPanel],activeItem:0});var header=new Ext.Panel({region:"north",autoHeight:true,contentEl:'header-wrapper'});Lang.registerLinks();this.portalItems=[header,{region:"center",xtype:"container",layout:"fit",border:false,hideBorders:true,items:{layout:"border",deferredRender:false,tbar:this.toolbar,items:[this.mapPanelContainer,westPanel],ref:"../../main"}}];GeoExplorer.superclass.initPortal.apply(this,arguments);if(this.config.treeconfig!=undefined){for(x=0,max=this.config.treeconfig.length;x<max;x++){if(this.config.treeconfig[x]!=null)
this.addCategoryFolder(this.config.treeconfig[x].group,this.config.treeconfig[x].expanded);}};},createStylesPanel:function(options){var layer=options.layerRecord.getLayer();var stylesPanel,stylesDialog;var createStylesDialog=function(){if(stylesPanel){stylesDialog.destroy();stylesPanel.getFooterToolbar().items.each(function(i){i.disable();});}
var modified=false;stylesDialog=this.stylesDlgCache[layer.id]=new gxp.WMSStylesDialog(Ext.apply({style:"padding: 10px 10px 0 10px;",fonts:["Arial Unicode MS","Serif","SansSerif","Arial","Courier New","Jomolhari","Tahoma","Times New Roman","Verdana"],editable:layer.url.replace(this.urlPortRegEx,"$1/").indexOf(this.localGeoServerBaseUrl.replace(this.urlPortRegEx,"$1/"))===0,hasPermission:true,plugins:[{ptype:"gxp_geoserverstylewriter",baseUrl:layerUrl.split("?").shift().replace(/\/(wms|ows)\/?$/,"/rest")},{ptype:"gxp_wmsrasterstylesdialog"}],autoScroll:true,listeners:Ext.apply(options.listeners||{},{"ready":function(){stylesDialog.editable===false&&stylesPanel.getFooterToolbar().hide();},"modified":function(cmp,name){stylesPanel.buttons[0].enable();stylesPanel.buttons[1].enable();layer.mergeNewParams({"STYLES":name,"SLD_BODY":cmp.createSLD({userStyles:[name]})});modified=true;},"styleselected":function(cmp,name){stylesPanel.buttons[0].enable();layer.mergeNewParams({"STYLES":name,"SLD_BODY":modified?cmp.createSLD({userStyles:[name]}):null});},"saved":function(){this.busyMask.hide();this.modified^=this.modified&2;var rec=stylesDialog.selectedStyle;var styleName=rec.get("userStyle").isDefault?"":rec.get("name");if(options.applySelectedStyle===true||styleName===initialStyle||rec.get("name")===initialStyle){layer.mergeNewParams({"STYLES":styleName,"SLD_BODY":null,"_dc":Math.random()});}
stylesPanel.ownerCt instanceof Ext.Window?stylesPanel.ownerCt.close():createStylesDialog();},scope:this})},options));if(stylesPanel){stylesPanel.add(stylesDialog);stylesPanel.doLayout();}}.bind(this);var layerUrl=layer.url;var initialStyle=layer.params.STYLES;createStylesDialog();stylesPanel=new Ext.Panel({autoHeight:true,border:false,items:stylesDialog,buttons:[{text:"Cancel",disabled:true,handler:function(){layer.mergeNewParams({"STYLES":initialStyle,"SLD_BODY":null});stylesPanel.ownerCt instanceof Ext.Window?stylesPanel.ownerCt.close():createStylesDialog();},scope:this},{text:"Save",disabled:true,handler:function(){this.busyMask=new Ext.LoadMask(stylesPanel.el,{msg:"Applying style changes..."});this.busyMask.show();stylesDialog.saveStyles();},scope:this}],listeners:{"added":function(cmp,ownerCt){ownerCt instanceof Ext.Window&&cmp.buttons[0].enable();}}});return stylesPanel;},reloadWorldMapSource:function(layerRecords){var geoEx=this;if(this.worldMapSourceKey==null)
this.setWorldMapSourceKey();geoEx.addWorldMapLayers(layerRecords);},setWorldMapSourceKey:function(){for(var id in this.layerSources){source=this.layerSources[id];if(source instanceof gxp.plugins.GeoNodeSource&&source.url.replace(this.urlPortRegEx,"$1/").indexOf(this.localGeoServerBaseUrl.replace(this.urlPortRegEx,"$1/"))===0){this.worldMapSourceKey=id;}}},setHGLSourceKey:function(){for(var id in this.layerSources){source=this.layerSources[id];if(source instanceof gxp.plugins.HGLSource){this.hglSourceKey=id;}}
if(this.hglSourceKey==null)
{var hglSource=this.addLayerSource({"config":{"url":"http://dixon.hul.harvard.edu/cgi-bin/tilecache/tilecache.cgi?","ptype":"gxp_hglsource"}});this.hglSourceKey=hglSource.id;}},addWorldMapLayers:function(records){if(this.worldMapSourceKey==null)
this.setWorldMapSourceKey();var wmSource=this.layerSources[this.worldMapSourceKey];if(wmSource){this.addLayerAjax(wmSource,this.worldMapSourceKey,records);}},getMapProjection:function(){var projConfig=this.mapPanel.map.projection;return this.target.mapPanel.map.getProjectionObject()||(projConfig&&new OpenLayers.Projection(projConfig))||new OpenLayers.Projection("EPSG:4326");},addLayerAjax:function(dataSource,dataKey,dataRecords){var geoEx=this;var key=dataKey;var records=dataRecords;var source=dataSource;var layerStore=this.mapPanel.layers;var isLocal=source instanceof gxp.plugins.GeoNodeSource&&source.url.replace(this.urlPortRegEx,"$1/").indexOf(this.localGeoServerBaseUrl.replace(this.urlPortRegEx,"$1/"))===0;for(var i=0,ii=records.length;i<ii;++i){var thisRecord=records[i];if(isLocal){var layer=records[i].get("name");var tiled=records[i].get("tiled");Ext.Ajax.request({url:"/maps/addgeonodelayer/?"+thisRecord.get("name"),method:"POST",params:{layername:thisRecord.get("name")},success:function(result,request){var jsonData=Ext.util.JSON.decode(result.responseText);layer=jsonData.layer;layer.source=key;layer.buffer=0;layer.tiled=true;var record=source.createLayerRecord(layer);record.selected=true;if(record){if(record.get("group")==="background"){var pos=layerStore.queryBy(function(rec){return rec.get("group")==="background"}).getCount();layerStore.insert(pos,[record]);}else{category=record.get("group");if(!category||category=='')
record.set("group","General");layerStore.add([record]);geoEx.addCategoryFolder(record.get("group"),"true");geoEx.reorderNodes(record.getLayer());geoEx.treeRoot.findDescendant("layer",record.getLayer()).select();}}},failure:function(result,request){}});}else{var layer=records[i].get("name");var record=source.createLayerRecord({name:layer,source:key,buffer:0});if(record){if(record.get("group")==="background"){var pos=layerStore.queryBy(function(rec){return rec.get("group")==="background"}).getCount();layerStore.insert(pos,[record]);}else{category="General";record.set("group",category);layerStore.add([record]);geoEx.addCategoryFolder(record.get("group"),"true");geoEx.reorderNodes();}}}
this.searchWindow.hide();}},loadConfig:function(config){var oldLayerChange=gxp.plugins.FeatureEditor.prototype.onLayerChange;gxp.plugins.FeatureEditor.prototype.onLayerChange=function(mgr,layer,schema){oldLayerChange.apply(this,[mgr,layer,schema]);var buttons=this.actions;if(layer==null){buttons[0].disable();buttons[1].disable();}
else if(layer.data.layer.params&&!buttons[0].disabled){Ext.Ajax.request({url:"/data/"+layer.data.layer.params.LAYERS+"/ajax_layer_edit_check/",method:"POST",params:{layername:layer.data.layer.params.LAYERS},success:function(result,request){if(result.responseText!="True"){for(i=0;i<buttons.length;i++){buttons[i].disable();}}else{layer.data.layer.displayOutsideMaxExtent=true;for(i=0;i<buttons.length;i++){buttons[i].enable();buttons[i].items[0].toggle(false);}}},failure:function(result,request){buttons[0].disable();buttons[1].disable();}});}}
gxp.plugins.FeatureManager.prototype.redrawMatchingLayers=function(record){var name=record.get("name");var source=record.get("source");var updated=false;this.target.mapPanel.layers.each(function(candidate){if(candidate.get("source")===source&&candidate.get("name")===name){var layer=candidate.getLayer();layer.redraw(true);if(!updated){Ext.Ajax.request({url:"/data/"+layer.params.LAYERS+"/ajax_layer_update_bounds/",method:"POST",params:{layername:layer.params.LAYERS},success:function(result,request){if(result.responseText!="True"){}else{}},failure:function(result,request){}});}
updated=true;}});}
var oldInitComponent=gxp.FeatureEditPopup.prototype.initComponent;gxp.FeatureEditPopup.prototype.initComponent=function(){oldInitComponent.apply(this);if(this.grid.customEditors["Description"]!=undefined&&this.grid.customEditors["Description"].field.maxLength==undefined){this.grid.customEditors["Description"].addListener("startedit",function(el,value){var htmlEditWindow=new Ext.Window({title:'HTML Editor',renderTo:Ext.getBody(),width:600,height:300,frame:true,layout:'fit',closeAction:'destroy',items:[{xtype:"panel",layout:"fit",style:{height:190},items:[{xtype:"textarea",id:"html_textarea",value:this.getValue(),style:{height:190}}]}],bbar:["->",new Ext.Button({text:"Save",cls:'x-btn-text',handler:function(){this.editing=true;this.setValue(nicEditors.findEditor('html_textarea').getContent());this.completeEdit();htmlEditWindow.destroy();},scope:this}),new Ext.Button({text:"Cancel",cls:'x-btn-text',handler:function(){htmlEditWindow.destroy();},scope:this})]});htmlEditWindow.show();var myNicEditor=new nicEditor({fullPanel:true,maxHeight:190,iconsPath:nicEditIconsPath}).panelInstance('html_textarea')
return true;});}}
config.tools=(config.tools||[]).concat({ptype:"gxp_featuremanager",id:"featuremanager",paging:false,tooltip:this.infoButtonText,toggleGroup:'featureGroup'},{ptype:"gxp_featureeditor",id:"gn_layer_editor",featureManager:"featuremanager",readOnly:false,autoLoadFeatures:true,actionTarget:{target:"main.tbar",index:4},defaultAction:1,outputConfig:{panIn:false,height:220},tooltip:this.infoButtonText,iconClsAdd:null,iconClsEdit:null,createFeatureActionText:'<span class="x-btn-text" >'+"Create Feature"+'</span>',editFeatureActionText:'<span class="x-btn-text">'+"Edit Feature"+'</span>',toggleGroup:'featureGroup'});GeoExplorer.superclass.loadConfig.apply(this,arguments);},initCapGrid:function(){var geoEx=this;var initialSourceId,source,data=[];for(var id in this.layerSources){source=this.layerSources[id];if(source instanceof gxp.plugins.GeoNodeSource&&source.url.replace(this.urlPortRegEx,"$1/").indexOf(this.localGeoServerBaseUrl.replace(this.urlPortRegEx,"$1/"))===0){}else{if(source.store){data.push([id,this.layerSources[id].title||id]);}}}
if(data[0]&&data[0][0])
initialSourceId=data[0][0];var sources=new Ext.data.ArrayStore({fields:["id","title"],data:data});var expander=new GeoExplorer.CapabilitiesRowExpander({ows:this.localGeoServerBaseUrl+"ows"});var addLocalLayers=function(){if(!this.mapID){Ext.Msg.alert("Save your Map View","You must save this map view before uploading your data");}
else
document.location.href="/data/upload?map="+this.mapID;};var addLayers=function(){var key=sourceComboBox.getValue();var layerStore=this.mapPanel.layers;var source=this.layerSources[key];var records=capGridPanel.getSelectionModel().getSelections();this.addLayerAjax(source,key,records);};var source=null;if(initialSourceId){source=this.layerSources[initialSourceId];source.store.filterBy(function(r){return!!source.getProjection(r);},this);}
var capGridPanel=new Ext.grid.GridPanel({store:source!=null?source.store:[],height:300,region:'center',autoScroll:true,autoExpandColumn:"title",plugins:[expander],colModel:new Ext.grid.ColumnModel([expander,{id:"title",header:"Title",dataIndex:"title",sortable:true}]),listeners:{rowdblclick:addLayers,scope:this}});var sourceComboBox=new Ext.form.ComboBox({store:sources,valueField:"id",displayField:"title",triggerAction:"all",editable:false,allowBlank:false,forceSelection:true,mode:"local",value:initialSourceId,listeners:{select:function(combo,record,index){var source=this.layerSources[record.get("id")];var store=source.store;store.setDefaultSort('title','asc');store.filterBy(function(r){return!!source.getProjection(r);},this);expander.ows=store.url;capGridPanel.reconfigure(store,capGridPanel.getColumnModel());capGridPanel.getView().focusRow(0);},scope:this}});var addWmsButton=new Ext.Button({text:this.layerAdditionLabel,iconCls:'icon-add',cls:'x-btn-link-medium x-btn-text',handler:function(){newSourceWindow.show();}});var app=this;var newSourceWindow=new gxp.NewSourceWindow({modal:true,listeners:{"server-added":function(url,type){newSourceWindow.setLoading();this.addLayerSource({config:{url:url,ptype:type},callback:function(id){var record=new sources.recordType({id:id,title:this.layerSources[id].title||"Untitled"});sources.insert(0,[record]);sourceComboBox.onSelect(record,0);newSourceWindow.hide();},failure:function(){newSourceWindow.setError("Error contacting server.\nPlease check the url and try again.");},scope:this});},scope:this},addSource:function(url,success,failure,scope){app.busyMask=scope.loadMask;}});var addLayerButton=new Ext.Button({text:"Add Layers",iconCls:"gxp-icon-addlayers",handler:addLayers,scope:this});var sourceAdditionLabel={xtype:'box',autoEl:{tag:'span',html:this.layerSelectionLabel}};var sourceForm=new Ext.Panel({frame:false,border:false,region:'north',height:40,layout:new Ext.layout.HBoxLayout({defaultMargins:{top:10,bottom:10,left:10,right:0}}),items:[sourceAdditionLabel,sourceComboBox,{xtype:'spacer',width:20},addWmsButton]});var addLayerForm=new Ext.Panel({frame:false,border:false,region:'south',layout:new Ext.layout.HBoxLayout({defaultMargins:{top:10,bottom:10,left:10,right:0}}),items:[addLayerButton]});this.capGrid=new Ext.Panel({autoScroll:true,title:'External Data',header:false,layout:'border',border:false,renderTo:'externalDiv',padding:'2 0 0 20',items:[sourceForm,capGridPanel,addLayerForm],listeners:{hide:function(win){capGridPanel.getSelectionModel().clearSelections();}}});},showCapabilitiesGrid:function(){if(!this.capGrid){this.initCapGrid();}
this.capGrid.show();},createMapOverlay:function(){var cgaLink=new Ext.BoxComponent({html:'<div class="cga-link" onclick="javascript:window.open(\'http://gis.harvard.edu\', \'_blank\');"><a href="http://gis.harvard.edu">Center for Geographic Analysis</a></div>'});var scaleLinePanel=new Ext.BoxComponent({autoEl:{tag:"div",cls:"olControlScaleLine overlay-element overlay-scaleline"}});scaleLinePanel.on('render',function(){var scaleLine=new OpenLayers.Control.ScaleLine({div:scaleLinePanel.getEl().dom,geodesic:true});this.mapPanel.map.addControl(scaleLine);scaleLine.activate();},this);var zoomSelectorWrapper=new Ext.Panel({cls:'overlay-element overlay-scalechooser',ctCls:'transparent-panel',border:false});this.on("ready",function(){var zoomStore=new GeoExt.data.ScaleStore({map:this.mapPanel.map});var zoomSelector=new Ext.form.ComboBox({emptyText:this.zoomSelectorText,tpl:'<tpl for="."><div class="x-combo-list-item">1 : {[parseInt(values.scale)]}</div></tpl>',editable:false,triggerAction:'all',mode:'local',store:zoomStore,width:110});zoomSelector.on({click:function(evt){evt.stopEvent();},mousedown:function(evt){evt.stopEvent();},select:function(combo,record,index){this.mapPanel.map.zoomTo(record.data.level);},scope:this});function setScale(){var scale=zoomStore.queryBy(function(record){return this.mapPanel.map.getZoom()==record.data.level;},this);if(scale.length>0){scale=scale.items[0];zoomSelector.setValue("1 : "+parseInt(scale.data.scale,10));}else{if(!zoomSelector.rendered){return;}
zoomSelector.clearValue();}}
setScale.call(this);this.mapPanel.map.events.register('zoomend',this,setScale);zoomSelectorWrapper.add(zoomSelector);zoomSelectorWrapper.doLayout();},this);var mapOverlay=new Ext.Panel({cls:'map-overlay',items:[scaleLinePanel,zoomSelectorWrapper,cgaLink]});mapOverlay.on("afterlayout",function(){scaleLinePanel.getEl().dom.style.position='relative';scaleLinePanel.getEl().dom.style.display='inline';mapOverlay.getEl().on("click",function(x){x.stopEvent();});mapOverlay.getEl().on("mousedown",function(x){x.stopEvent();});},this);return mapOverlay;},createTools:function(){var toolGroup="toolGroup";var mapPanel=this.mapPanel;var busyMask=null;var geoEx=this;var picasaOverlay=new GeoExplorer.PicasaFeedOverlay(this);var picasaRecord=null;var youtubeOverlay=new GeoExplorer.YouTubeFeedOverlay(this);var youtubeRecord=null;var hglPointsOverlay=new GeoExplorer.HglFeedOverlay(this);var hglRecord=null;var printButton=new Ext.Button({tooltip:this.printTipText,text:'<span class="x-btn-text">'+this.printBtnText+'</span>',handler:function(){var unsupportedLayers=[];var printWindow=new Ext.Window({title:this.printWindowTitleText,modal:true,border:false,autoHeight:true,resizable:false,items:[{xtype:"gxux_printpreview",mapTitle:this.about["title"],comment:this.about["abstract"],minWidth:336,printMapPanel:{height:Math.min(450,Ext.get(document.body).getHeight()-150),autoWidth:true,limitScales:true,map:{theme:null,controls:[new OpenLayers.Control.Navigation({zoomWheelEnabled:false,zoomBoxEnabled:false}),new OpenLayers.Control.PanPanel(),new OpenLayers.Control.Attribution()],eventListeners:{"preaddlayer":function(evt){if(evt.layer instanceof OpenLayers.Layer.Google){unsupportedLayers.push(evt.layer.name);return false;}},scope:this}}},printProvider:{capabilities:window.printCapabilities,listeners:{"beforeprint":function(){printWindow.items.get(0).printMapPanel.layers.each(function(l){var params=l.getLayer().params;for(var p in params){if(params[p]instanceof Array){params[p]=params[p].join(",");}}});},"print":function(){printWindow.close();},"printException":function(cmp,response){this.displayXHRTrouble(response);},scope:this}},includeLegend:true,sourceMap:this.mapPanel,legend:this.legendPanel}]}).show();printWindow.center();unsupportedLayers.length&&Ext.Msg.alert(this.unsupportedLayersTitleText,this.unsupportedLayersText+"<ul><li>"+unsupportedLayers.join("</li><li>")+"</li></ul>");},scope:this});var navAction=new GeoExt.Action({tooltip:this.navActionTipText,iconCls:"icon-pan",enableToggle:true,pressed:true,allowDepress:false,control:new OpenLayers.Control.Navigation(),map:this.mapPanel.map,toggleGroup:toolGroup});var historyControl=new OpenLayers.Control.NavigationHistory();this.mapPanel.map.addControl(historyControl);var navPreviousAction=new GeoExt.Action({tooltip:this.navPreviousActionText,iconCls:"icon-zoom-previous",disabled:true,control:historyControl.previous});var navNextAction=new GeoExt.Action({tooltip:this.navNextAction,iconCls:"icon-zoom-next",disabled:true,control:historyControl.next});var info={controls:[]};var infoButton=new Ext.Button({tooltip:this.infoButtonText,text:'<span class="x-btn-text">'+this.infoButtonText+'</span>',handler:this.showInfoWindow,scope:this});var picasaMenuItem={text:'Picasa',scope:this,checkHandler:function(menuItem,checked){if(checked){if(picasaOverlay.picasaRecord!==null){picasaOverlay.removeOverlay();}
picasaOverlay.createOverlay();}else{picasaOverlay.removeOverlay();}}};var youtubeMenuItem={text:'YouTube',scope:this,checkHandler:function(menuItem,checked){if(checked){if(youtubeOverlay.youtubeRecord!==null){youtubeOverlay.removeOverlay();}
youtubeOverlay.createOverlay();}else{youtubeOverlay.removeOverlay();}}};var hglMenuItem={text:'Harvard Geospatial Library',scope:this,checkHandler:function(menuItem,checked){if(checked){if(hglPointsOverlay.hglRecord!==null){hglPointsOverlay.removeOverlay();}
hglPointsOverlay.createOverlay();}else{hglPointsOverlay.removeOverlay();}}};var moreButton=new Ext.Button({text:'More...',cls:"more-overlay-element",id:'moreBtn',menu:{defaults:{checked:false},items:[picasaMenuItem,youtubeMenuItem,hglMenuItem]}});this.mapPanel.add(moreButton);var jumpBar=new GeoExplorer.SocialExplorer(this);var svt=new StreetViewPopup({mapPanel:mapPanel,titleHeader:this.streetViewBtnText,popupHeight:300,popupWidth:600});mapPanel.map.addControl(svt);var streetViewButton=new Ext.Button({text:'<span class="x-btn-text">'+this.streetViewBtnText+'</span>',tooltip:this.switchTo3DActionText,enableToggle:true,toggleHandler:function(button,state){if(state===true){svt.activate();}else{svt.deactivate();}},scope:this});var enable3DButton=new Ext.Button({text:'<span class="x-btn-text">'+this.googleEarthBtnText+'</span>',tooltip:this.switchTo3DActionText,enableToggle:true,toggleHandler:function(button,state){if(state===true){this.mapPanelContainer.getLayout().setActiveItem(1);this.toolbar.disable();button.enable();}else{this.mapPanelContainer.getLayout().setActiveItem(0);this.toolbar.enable();}},scope:this});var advancedToolsLink=function(){if(!this.mapID){Ext.Msg.alert("Save your Map View","You must save this map view before using advanced map tools");}
else
document.location.href="/maps/"+this.mapID+"/edit";};var shareMapButton=new Ext.Button({id:'shareMapButton',text:'<span class="x-btn-text">'+this.shareMapText+'</span>',handler:this.initMapShareWindow,cls:'x-btn-link-medium',hidden:!this.config["edit_map"],disabled:!this.mapID,scope:this});var publishAction=new Ext.Action({tooltip:this.publishActionText,handler:this.makeExportDialog,scope:this,text:'<span class="x-btn-text">'+this.publishBtnText+'</span>',disabled:!this.mapID});var historyAction=new Ext.Action({tooltip:'Map History',handler:this.showHistory,hidden:!this.config["edit_map"],scope:this,text:'<span class="x-btn-text">'+this.revisionBtnText+'</span>',disabled:!this.mapID});var tools=[new Ext.Button({tooltip:this.saveMapText,handler:this.showMetadataForm,scope:this,disabled:!this.config["edit_map"],text:'<span class="x-btn-text">'+this.saveMapBtnText+'</span>'}),"-","-","-",publishAction,"-",window.printCapabilities?printButton:"","-",infoButton,"-",enable3DButton,"-",streetViewButton,"-",jumpBar,'->',historyAction,shareMapButton];this.on("saved",function(){publishAction.enable();shareMapButton.show();shareMapButton.enable();this.modified^=this.modified&1;},this);return tools;},makeExportDialog:function(){var mapConfig=this.getState();var treeConfig=[];for(x=0,max=this.treeRoot.firstChild.childNodes.length;x<max;x++){node=this.treeRoot.firstChild.childNodes[x];treeConfig.push({group:node.text,expanded:node.expanded.toString()});}
mapConfig['treeconfig']=treeConfig;Ext.Ajax.request({url:"/maps/snapshot/create",method:'POST',jsonData:mapConfig,success:function(response,options){var encodedSnapshotId=response.responseText;if(encodedSnapshotId!=null){new Ext.Window({title:this.publishActionText,layout:"fit",width:380,autoHeight:true,items:[{xtype:"gx_linkembedmapdialog",linkUrl:this.rest+(this.about["urlsuffix"]?this.about["urlsuffix"]:this.mapID)+'/'+encodedSnapshotId,linkMessage:'<span style="font-size:10pt;">Paste link in email or IM:</span>',publishMessage:'<span style="font-size:10pt;">Paste HTML to embed in website:</span>',url:this.rest+(this.about["urlsuffix"]?this.about["urlsuffix"]:this.mapID)+'/'+encodedSnapshotId+"/embed"}]}).show();}},failure:function(response,options){return false;Ext.Msg.alert('Error',response.responseText,this.showMetadataForm);},scope:this});},showHistory:function(){historyWindow=new GeoExplorer.MapSnapshotGrid(this.mapID);},initMetadataForm:function(){var geoEx=this;var titleField=new Ext.form.TextField({width:'95%',fieldLabel:this.metaDataMapTitle,value:this.about.title,allowBlank:false,enableKeyEvents:true,listeners:{"valid":function(){if(urlField.isValid()){saveButton.enable();}},"invalid":function(){saveButton.disable();}}});Ext.apply(Ext.form.VTypes,{UniqueMapId:this.mapID,UniqueUrl:function(value,field){var allowedChars=value.match(/^(\w+[-]*)+$/g);if(!allowedChars){this.UniqueUrlText="URL's can only contain letters, numbers, dashes & underscores."
return false;}
Ext.Ajax.request({url:"/maps/checkurl/",method:'POST',params:{query:value,mapid:this.UniqueMapId},success:function(response,options){var urlcount=Ext.decode(response.responseText).count;if(urlcount>0){this.UniqueUrlText="The following URL's are already taken:";var urls=Ext.decode(response.responseText).urls;var isValid=true;for(var u in urls){if(urls[u].url!=undefined&&urls[u].url!=null)
this.UniqueUrlText+="<br/>"+urls[u].url;if(urls[u].url==value){isValid=false;}}
if(!isValid)
field.markInvalid(this.UniqueUrlText);}},failure:function(response,options){return false;Ext.Msg.alert('Error',response.responseText,this.showMetadataForm);},scope:this});return true;},UniqueUrlText:"The following URL's are already taken, please choose another"});var urlField=new Ext.form.TextField({width:'30%',fieldLabel:this.metaDataMapUrl+"<br/><span style='font-style:italic;'>http://"+document.location.hostname+"/maps/</span>",labelSeparator:'',enableKeyEvents:true,validationEvent:'onblur',vtype:'UniqueUrl',itemCls:'x-form-field-inline',ctCls:'x-form-field-inline',value:this.about["urlsuffix"],listeners:{"valid":function(){if(titleField.isValid()){saveButton.enable();}},"invalid":function(){saveButton.disable();}}});var checkUrlBeforeSave=function(as){Ext.getCmp('gx_saveButton').disable();Ext.Ajax.request({url:"/maps/checkurl/",method:'POST',params:{query:urlField.getValue(),mapid:geoEx.mapID},success:function(response,options){var urlcount=Ext.decode(response.responseText).count;var rt="";var isValid=true;if(urlcount>0){rt="The following URL's are already taken:";var urls=Ext.decode(response.responseText).urls;for(var u in urls){if(urls[u].url!=undefined&&urls[u].url!=null)
rt+="<br/>"+urls[u].url;if(urls[u].url==urlField.getValue()){isValid=false;}}
if(!isValid){urlField.markInvalid(rt);Ext.getCmp('gx_saveButton').enable();return false;}}
if(isValid){geoEx.about.title=titleField.getValue();geoEx.about["abstract"]=abstractField.getValue();geoEx.about["urlsuffix"]=urlField.getValue();geoEx.about["introtext"]=nicEditors.findEditor('intro_text_area').getContent();geoEx.about["keywords"]=keywordsField.getValue();geoEx.save(as);geoEx.initInfoTextWindow();}},failure:function(response,options){Ext.getCmp('gx_saveButton').enable();return false;},scope:this});};var abstractField=new Ext.form.TextArea({width:'95%',height:50,fieldLabel:this.metaDataMapAbstract,value:this.about["abstract"]});var keywordsField=new Ext.form.TextField({width:'95%',fieldLabel:this.metaDataMapKeywords,value:this.about["keywords"]});var introTextField=new Ext.form.TextArea({width:550,height:200,fieldLabel:this.metaDataMapIntroText,id:"intro_text_area",value:this.about["introtext"]});var metaDataPanel=new Ext.FormPanel({bodyStyle:{padding:"5px"},labelAlign:"top",items:[titleField,urlField,abstractField,keywordsField,introTextField]});metaDataPanel.enable();var saveButton=new Ext.Button({id:'gx_saveButton',text:this.metadataFormSaveText,cls:'x-btn-text',disabled:!this.about.title,handler:function(e){checkUrlBeforeSave(false);},scope:this});this.metadataForm=new Ext.Window({title:this.metaDataHeader,closeAction:'hide',items:metaDataPanel,modal:true,width:600,autoHeight:true,bbar:["->",saveButton,new Ext.Button({text:this.metadataFormCancelText,cls:'x-btn-text',handler:function(){titleField.setValue(this.about.title);abstractField.setValue(this.about["abstract"]);urlField.setValue(this.about["urlsuffix"]);introTextField.setValue(this.about["introtext"]);keywordsField.setValue(this.about["keywords"]);this.metadataForm.hide();},scope:this})]});},initInfoTextWindow:function(){this.infoTextPanel=new Ext.FormPanel({bodyStyle:{padding:"5px"},labelAlign:"top",preventBodyReset:true,autoScroll:false,html:this.about['introtext']});this.infoTextPanel.enable();this.infoTextWindow=new Ext.Window({title:this.about.title,closeAction:'hide',items:this.infoTextPanel,modal:true,width:500,height:400,autoScroll:true});},initHelpTextWindow:function(){this.helpTextPanel=new Ext.FormPanel({bodyStyle:{padding:"5px"},labelAlign:"top",preventBodyReset:true,autoScroll:false,autoHeight:true,autoLoad:{url:'/maphelp',scripts:true}});this.helpTextPanel.enable();this.helpTextWindow=new Ext.Window({title:this.helpLabel,closeAction:'hide',items:this.helpTextPanel,modal:true,width:1000,height:500,autoScroll:true});},initUploadPanel:function(){this.uploadPanel=new Ext.Panel({id:'worldmap_update_panel',title:'Upload Layer',header:false,autoLoad:{url:'/data/upload/?tab=true',scripts:true},listeners:{activate:function(panel){panel.getUpdater().refresh();}},renderTo:'uploadDiv',autoScroll:true});},initCreatePanel:function(){this.createPanel=new Ext.Panel({id:'worldmap_create_panel',title:'Create Layer',header:false,autoLoad:{url:'/data/create_pg_layer/?tab=true',scripts:true},listeners:{activate:function(panel){panel.getUpdater().refresh();}},renderTo:'createDiv',autoScroll:true});},initWarperPanel:function(){this.warperPanel=new Ext.Panel({id:'worldmap_warper_panel',title:'Rectify Layer',header:false,contentEl:'warpDiv',autoScroll:true});},initTabPanel:function(){this.dataTabPanel=new Ext.TabPanel({renderTo:'dataTabs',activeTab:0,region:'center',items:[{contentEl:'searchDiv',title:'WorldMap Data',autoScroll:true},this.capGrid]});if(this.config["edit_map"]){this.dataTabPanel.add(this.uploadPanel);this.dataTabPanel.add(this.createPanel);}
this.dataTabPanel.add(this.warperPanel);},initMapShareWindow:function(){var mapSharePanel=new Ext.Panel({id:'worldmap_mapshare_panel',title:'Share Map',header:false,autoLoad:{url:'/maps/'+this.mapID+'/share/',scripts:true},autoScroll:true});var mapShareWindow=new Ext.Window({title:"Share Map",closeAction:'destroy',layout:'fit',width:300,height:400,items:[mapSharePanel],modal:true,autoScroll:false,bodyStyle:'background-color:#FFF'});mapShareWindow.show();},getBoundingBoxConfig:function(){var state=this.getState();state.tools=[];var center=this.mapPanel.map.getCenter();Ext.apply(state.map,{center:[center.lon,center.lat],zoom:this.mapPanel.map.zoom,layers:[]});this.mapPanel.layers.each(function(record){if(record.get("group")==="background"){var layer=record.getLayer();if(layer.displayInLayerSwitcher&&layer.getVisibility()===true){var id=record.get("source");var source=this.layerSources[id];if(!source){throw new Error("Could not find source for layer '"+record.get("name")+"'");}
state.map.layers.push(source.getConfigForRecord(record));if(!state.sources[id]){state.sources[id]=Ext.apply({},source.initialConfig);}}}},this);return state;},initSearchWindow:function(){var mapBounds=this.mapPanel.map.getExtent();var llbounds=mapBounds.transform(new OpenLayers.Projection(this.mapPanel.map.projection),new OpenLayers.Projection("EPSG:4326"));this.bbox=new GeoNode.BoundingBoxWidget({proxy:"/proxy/?url=",viewerConfig:this.getBoundingBoxConfig(),renderTo:'refine',height:275,isEnabled:true,useGxpViewer:true});this.searchTable=new GeoNode.SearchTable({renderTo:'search_results',trackSelection:true,permalinkURL:'/data/search',searchURL:'/data/search/api',layerDetailURL:'/data/search/detail',constraints:[this.bbox],searchParams:{'limit':10,'bbox':llbounds.toBBOX()},searchOnLoad:false});this.searchTable.hookupSearchButtons('refine');var dataCart=new GeoNode.DataCart({store:this.searchTable.dataCart,renderTo:'data_cart',addToMapButtonFunction:this.addWorldMapLayers,addToMapButtonTarget:this});if(!this.capGrid){this.initCapGrid();}
if(!this.uploadPanel&&this.config["edit_map"]){this.initUploadPanel();}
if(!this.createPanel&&this.config["edit_map"]){this.initCreatePanel();}
if(!this.warperPanel){this.initWarperPanel();}
if(!this.dataTabPanel){this.initTabPanel();}
this.searchWindow=new Ext.Window({id:'ge_searchWindow',title:"Add Layers",closeAction:'hide',layout:'fit',width:850,height:600,items:[this.dataTabPanel],modal:true,autoScroll:true,bodyStyle:'background-color:#FFF'});},showSearchWindow:function(){if(!this.searchWindow){this.initSearchWindow();}else{this.bbox.updateBBox(this.mapPanel.map.getExtent());}
this.searchWindow.show();this.searchWindow.alignTo(document,'tl-tl');this.searchTable.doSearch();if(this.mapPanel.layers.data.items.length>this.maxMapLayers){Ext.Msg.alert(this.maxLayersTitle,this.maxLayersText.replace('%n',this.mapPanel.layers.data.items.length).replace("%max",this.maxMapLayers));}},showInfoWindow:function(){if(!this.infoTextWindow){this.initInfoTextWindow();}
this.infoTextWindow.show();this.infoTextWindow.alignTo(document,'t-t');},showMetadataForm:function(){if(!this.metadataForm){this.initMetadataForm();this.metadataForm.show();var metaNicEditor=new nicEditor({fullPanel:true,maxHeight:200,iconsPath:nicEditIconsPath}).panelInstance('intro_text_area')}else
this.metadataForm.show();this.metadataForm.alignTo(document,'t-t');},updateURL:function(){return this.rest+this.mapID+'/data';},save:function(as){var config=this.getState();var treeConfig=[];for(x=0,max=this.treeRoot.firstChild.childNodes.length;x<max;x++){node=this.treeRoot.firstChild.childNodes[x];treeConfig.push({group:node.text,expanded:node.expanded.toString()});}
config.treeconfig=treeConfig;if(!this.mapID||as){Ext.Ajax.request({url:this.rest,method:'POST',jsonData:config,success:function(response,options){var id=response.getResponseHeader("Location");id=id.replace(/^\s*/,'');id=id.replace(/\s*$/,'');id=id.match(/[\d]*$/)[0];this.mapID=id;this.fireEvent("saved",id);this.metadataForm.hide();Ext.Msg.wait('Saving Map',"Your new map is being saved...");window.location=response.getResponseHeader("Location");},failure:function(response,options){if(response.status===401)
this.showLoginWindow(options);else
Ext.Msg.alert('Error',response.responseText);Ext.getCmp('gx_saveButton').enable();Ext.getCmp('gx_saveAsButton').enable();},scope:this});}
else{Ext.Ajax.request({url:this.updateURL(),method:'PUT',jsonData:config,success:function(response,options){this.fireEvent("saved",this.mapID);this.metadataForm.hide();Ext.getCmp('gx_saveButton').enable();},failure:function(response,options){if(response.status===401)
this.showLoginWindow(options);else{Ext.Msg.alert('Error',response.responseText);Ext.getCmp('gx_saveButton').enable();}},scope:this});}},addHGL:function(layerTitle,layerName){Ext.Ajax.request({url:"/hglServiceStarter/"+layerName,method:'POST',success:function(response,options){if(this.hglSourceKey==null)
this.setHGLSourceKey();var hglSource=this.layerSources[this.hglSourceKey];if(hglSource)
{var layerConfig={"title":layerTitle,"name":layerName,"source":this.hglSourceKey,"url":hglSource.url,"group":"Harvard Geospatial Library","properties":"gxp_wmslayerpanel","fixed":true,"selected":false,"queryable":true,"disabled":false,"abstract":'',"styles":[],"format":"image/png"}
var record=hglSource.createLayerRecord(layerConfig);this.mapPanel.layers.add([record]);this.addCategoryFolder(record.get("group"),"true");this.reorderNodes(record.getLayer());this.treeRoot.findDescendant("layer",record.getLayer()).select();}},failure:function(response,options){Ext.Msg.alert('Restricted',"Access to this layer is restricted");},scope:this});}});Ext.namespace("GeoExplorer");GeoExplorer.Viewer=Ext.extend(GeoExplorer,{loadConfig:function(config){config.tools=(config.tools||[]).concat({ptype:"gxp_styler",id:"styler",rasterStyling:true,actionTarget:undefined});GeoExplorer.superclass.loadConfig.apply(this,arguments);},initPortal:function(){if(this.useMapOverlay!==false){this.mapPanel.add(this.createMapOverlay());}
if(this.useToolbar!==false){this.toolbar=new Ext.Toolbar({xtype:"toolbar",region:"north",autoHeight:true,disabled:true,items:this.createTools()});this.on("ready",function(){this.toolbar.enable();},this);}
this.mapPanelContainer=new Ext.Panel({layout:"card",region:"center",ref:"../main",tbar:this.toolbar,defaults:{border:false},items:[this.mapPanel],ref:"../main",activeItem:0});if(window.google&&google.earth){this.mapPanelContainer.add(new gxp.GoogleEarthPanel({mapPanel:this.mapPanel,listeners:{beforeadd:function(record){return record.get("group")!=="background";}}}));}
this.portalItems=[this.mapPanelContainer];GeoExplorer.superclass.initPortal.apply(this,arguments);},addLayerSource:function(options){var source=GeoExplorer.superclass.addLayerSource.apply(this,arguments);},createTools:function(){var tools=GeoExplorer.Viewer.superclass.createTools.apply(this,arguments);var layerChooser=new Ext.Button({tooltip:'Layer Switcher',iconCls:'icon-layer-switcher',menu:new gxp.menu.LayerMenu({layers:this.mapPanel.layers})});tools.unshift("-");tools.unshift(layerChooser);var aboutButton=new Ext.Button({tooltip:"About this map",iconCls:"icon-about",handler:this.displayAppInfo,scope:this});tools.push("->");tools.push(aboutButton);return tools;}});GeoExplorer.SocialExplorer=function(target)
{var se_url='http://www.socialexplorer.com/pub/maps/map3.aspx?g=0&mapi=SE0012&themei=B23A1CEE3D8D405BA2B079DDF5DE9402';if(target.config.social_explorer&&target.config.social_explorer[0]){se_url=target.config.social_explorer[0].url;}
var jumpstore=new Ext.data.SimpleStore({fields:['dataFieldName','displayFieldName'],data:[[0,'Yelp'],[1,'Bing Map'],[2,'Social Explorer']],autoLoad:false});var jumpBar=new Ext.form.ComboBox({id:'jumpbar',store:jumpstore,displayField:'displayFieldName',valueField:'dataFieldName',typeAhead:true,forceSelection:true,fieldLabel:'ComboBox',emptyText:'Jump to...',mode:'local',triggerAction:'all',selectOnFocus:true,editable:true,listeners:{select:function(combo,record,index){displayProjection=new OpenLayers.Projection("EPSG:4326");if(record.data.dataFieldName==0)
{var bounds=target.mapPanel.map.getExtent();var extents=bounds.transform(target.mapPanel.map.getProjectionObject(),displayProjection);window.open('http://www.yelp.com/search?find_desc=&ns=1&rpp=10#l=g:'+extents.left+'%2C'+extents.bottom+'%2C'+extents.right+'%2C'+extents.top+'&sortby=category');}
else if(record.data.dataFieldName==1){var point=target.mapPanel.map.getCenter();var lonlat=point.transform(target.mapPanel.map.getProjectionObject(),displayProjection);window.open('http://www.bing.com/maps/default.aspx?v=2&FORM=LMLTCP&cp='+lonlat.lat+'~'+lonlat.lon+'&style=r&lvl='+target.mapPanel.map.getZoom()+'&tilt=-90&dir=0&alt=-1000&phx=0&phy=0&phscl=1&encType=1');}
else if(record.data.dataFieldName==2){var bounds=target.mapPanel.map.getExtent();var extents=bounds.transform(target.mapPanel.map.getProjectionObject(),displayProjection);window.open(se_url+'&l='+extents.left+'&r='+extents.right+'&t='+extents.top+'&b='+extents.bottom+'&rndi=1');}else{}}}});return jumpBar;}
function ConvertLonToAlbersEqArea(dLon)
{return roundNumber(87832.461034585*(dLon+100),2);};function ConvertLatToAlbersEqArea(dLat)
{var e=0.0818191955335;var es=.00669438075774911;var one_es=0.993305619242251;var k0=.0000001237057815;var pi=3.14159265358979;var dRadsLat=(pi*dLat)/180;var dSinLat=Math.sin(dRadsLat);var dCon=e*dSinLat;return roundNumber(0.5*(one_es*(dSinLat/(1-dCon*dCon)-(0.5/e)*Math.log((1-dCon)/(1+dCon))))/k0,2);};function roundNumber(rnum,rlength)
{if(rnum>8191&&rnum<10485)
{rnum=rnum-5000;var newnumber=Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);return newnumber+5000;}
else
return Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);};Ext.namespace("GeoExplorer");GeoExplorer.CapabilitiesRowExpander=Ext.extend(Ext.grid.RowExpander,{categoryText:"UT:Category:",categoryEmptyText:"UT:No category is provided for this layer.",abstractText:"UT:Abstract:",attributionEmptyText:"UT: No attribution information is provided for this layer.",attributionText:"UT:Provided by:",downloadText:"UT:Download:",keywordEmptyText:"UT: No keywords are listed for this layer.",keywordText:"UT:Keywords:",metadataEmptyText:'UT: No metadata URLs are defined for this layer.',metadataText:"UT:Metadata Links:",ows:null,constructor:function(config){config=config||{};config.tpl=config.tpl||this.getDefaultTemplate();var expander,templateLib;expander=this;templateLib=Ext.apply({ows:function(){return expander.ows;}},this.templateLibrary);templateLib.metadataEmptyText=this.metadataEmptyText;templateLib.keywordEmptyText=this.keywordEmptyText;templateLib.attributionEmptyText=this.attributionEmptyText;Ext.apply(config.tpl,templateLib);GeoExplorer.CapabilitiesRowExpander.superclass.constructor.call(this,config);this.on("beforeexpand",function(expander,record,body,rowIndex){var store=record.store
if(store instanceof GeoExt.data.WMSCapabilitiesStore){var request=store.reader.raw.capability.request.describelayer;request&&Ext.Ajax.request({url:request.href,params:{"REQUEST":"DescribeLayer","VERSION":store.reader.raw.version,"LAYERS":record.get("layer").params.LAYERS},disableCaching:false,success:function(response){var describeLayer=new OpenLayers.Format.WMSDescribeLayer().read(response.responseXML&&response.responseXML.documentElement?response.responseXML:response.responseText);if(describeLayer.length&&describeLayer[0].owsType==="WFS"){Ext.get(Ext.query(".wfs.nodisplay",body)).removeClass("nodisplay");}},failure:function(){},scope:this});return true;};},this);},getDefaultTemplate:function(){return new Ext.Template('<p><b>'+this.categoryText+'</b> {category}</p>'+'<p><b>'+this.abstractText+'</b> {abstract}</p>'+'<p><b>'+this.attributionText+'</b> {attribution:this.attributionLink}</p>'+'<p><b>'+this.metadataText+'</b> {metadataURLs:this.metadataLinks}</p>'+'<p><b>'+this.keywordText+'</b> {keywords:this.keywordList}</p>');},templateLibrary:{wmsParams:function(name,values,aspect){if(values.llbbox==null){return;}
aspect=aspect||(8.5/11);var dx,dy,dataAspect,widthAdjust,heightAdjust;dx=values.llbbox[2]-values.llbbox[0];dy=values.llbbox[3]-values.llbbox[1];dataAspect=dx/dy;widthAdjust=1;heightAdjust=1;if(dataAspect>aspect){heightAdjust=dataAspect/aspect;}else{widthAdjust=aspect/dataAspect;}
return{service:"wms",request:"GetMap",bbox:this.adjustBounds(widthAdjust,heightAdjust,values.llbbox).toString(),layers:name,srs:"EPSG:4326",width:425,height:550};},adjustBounds:function(widthAdjust,heightAdjust,bbox){var dx,dy,midx,midy;dx=bbox[2]-bbox[0];dy=bbox[3]-bbox[1];midx=(bbox[2]+bbox[0])/2;midy=(bbox[3]+bbox[1])/2;return[midx-(widthAdjust*dx)/2,midy-(heightAdjust*dy)/2,midx+(widthAdjust*dx)/2,midy+(heightAdjust*dy)/2];},wfsParams:function(name,values){return{service:"wfs",request:"GetFeature",typeName:name};},showDownload:function(formats,values){return formats&&formats.indexOf("application/vnd.google-earth.kmz+xml")!==-1&&formats.indexOf("application/pdf")!==-1&&formats.indexOf("image/geotiff")!==-1?"":"nodisplay";},shpUrl:function(name,values){var shpParams=Ext.apply(this.wfsParams(name,values),{outputFormat:'SHAPE-ZIP'});return this.ows()+"?"+Ext.urlEncode(shpParams);},pdfUrl:function(name,values){var pdfParams=Ext.apply(this.wmsParams(name,values),{format:'application/pdf'});return this.ows()+"?"+Ext.urlEncode(pdfParams);},kmlUrl:function(name,values){var kmlParams=Ext.apply(this.wmsParams(name,values),{format:'application/vnd.google-earth.kmz+xml',height:2048,width:2048},1);return this.ows()+"?"+Ext.urlEncode(kmlParams);},geoTiffUrl:function(name,values){var geoTiffParams=Ext.apply(this.wmsParams(name,values),{format:"image/geotiff"});return this.ows()+"?"+Ext.urlEncode(geoTiffParams);},metadataLinks:function(metadataURLs,values){if(metadataURLs==null||metadataURLs.length===0)
{return"<em>"+this.metadataEmptyText+"</em>";}else{var i,links,len;links=[];for(i=0,len=metadataURLs.length;i<len;i++){links.push("<a target=\"_blank\" href=\""+metadataURLs[i].href+"\"> "+
metadataURLs[i].type+"</a>");}
return links.join(", ");}},keywordList:function(keywords,values){if(keywords==null||keywords.length===0)
{return"<em>"+this.keywordEmptyText+"</em>";}else{return keywords.join(", ");}},attributionLink:function(attribution,values){if(attribution==null||attribution.href==null){return"<em>"+this.attributionEmptyText+"</em>";}else{return"<a href=\""+attribution.href+"\"> "+attribution.title+"</a>";}}}});Ext.namespace("GeoExplorer");GeoExplorer.SearchBar=function(target){this.target=target;var getQueryableLayers=function(){return target.mapPanel.layers.queryBy(function(x){return x.get("queryable");});};var searchTB=new Ext.form.TextField({id:'search-tb',width:150,emptyText:'Enter search...',handleMouseEvents:true,enableKeyEvents:true,listeners:{render:function(el){el.getEl().on('keypress',function(e){var charpress=e.keyCode;if(charpress==13){performSearch();}});}}});var psHandler=function(){performSearch();};var searchBtn=new Ext.Button({text:'<span class="x-btn-text">Search</span>',handler:psHandler});var performSearch=function(){var searchCount=0;var queryableLayers=getQueryableLayers();queryableLayers.each(function(x){dl=x.getLayer();if(!dl.getVisibility()||!dl.attributes){queryableLayers.remove(x,true);}});if(queryableLayers.length==0){Ext.MessageBox.alert('No Searchable Layers','There are currently no searchable layers on the map.  You must have at least one visible layer with searchable fields on the map.');return;}
try{removeHighlightLayers();var searchTerm=searchTB.getValue();var layers=[];if(searchTerm==null||searchTerm.length==0){Ext.Msg.alert("Search Term Required","Please enter a search term");return;}
queryableLayers.each(function(x){dl=x.getLayer();if(dl.getVisibility()){if(dl.attributes){var wms_url=dl.url;var queryFields=[];for(f=0;f<dl.attributes.length;f++){field=dl.attributes[f]
if(field.searchable){queryFields.push(field.id);}}
var featureQuery="";var sld='';sld+='<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">';sld+='<sld:NamedLayer><sld:Name>'+dl.params.LAYERS+'</sld:Name><sld:UserStyle><sld:Name>query</sld:Name><sld:FeatureTypeStyle><sld:Rule><ogc:Filter>';for(i=0;i<queryFields.length;i++){if(queryFields[i]!="")
featureQuery=featureQuery+'<ogc:PropertyIsLike wildCard="*" singleChar="." escapeChar="!"><ogc:PropertyName>'+queryFields[i]+'</ogc:PropertyName><ogc:Literal>*'+searchTerm+'*</ogc:Literal></ogc:PropertyIsLike>';}
if(queryFields.length>1){featureQuery="<ogc:Or>"+featureQuery+"</ogc:Or>";}
if(featureQuery.length>0){sld+=featureQuery;sld+='</ogc:Filter>';sld+='<PointSymbolizer><Graphic><Mark><WellKnownName>circle</WellKnownName><Fill><CssParameter name="fill">#FFFF00</CssParameter></Fill></Mark><Size>8</Size></Graphic></PointSymbolizer>';sld+='<LineSymbolizer><sld:Stroke><sld:CssParameter name="stroke">#FFFF00</sld:CssParameter><sld:CssParameter name="stroke-opacity">1.0</sld:CssParameter><sld:CssParameter name="stroke-width">2</sld:CssParameter></sld:Stroke></LineSymbolizer>';sld+='</sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer></sld:StyledLayerDescriptor>';var wmsHighlight=new OpenLayers.Layer.WMS("HighlightWMS_"+dl.params.LAYERS.substr(8),wms_url,{'layers':dl.params.LAYERS,'format':'image/png','SLD_BODY':sld,'TILED':false,'TRANSPARENT':true},{'isBaseLayer':false,'displayInLayerSwitcher':false,'singleTile':true});target.registerEvents(wmsHighlight);layers.push(wmsHighlight);}}}});target.mapPanel.map.addLayers(layers);}
catch
(e){throw e;}
finally{}};var reset=function(){searchTB.setValue('');removeHighlightLayers();if(target.busyMask){target.busyMask.hide();}};var removeHighlightLayers=function(){var theLayers=target.mapPanel.map.layers;var hLayers=[];for(l=0;l<theLayers.length;l++){if(theLayers[l].name.toString().indexOf("HighlightWMS")>-1||theLayers[l].name=="hilites"){hLayers.push(theLayers[l]);}}
for(h=0;h<hLayers.length;h++){target.mapPanel.map.removeLayer(hLayers[h],true);}}
var searchBar=new Ext.Toolbar({id:'tlbr',items:[searchTB,' ',searchBtn,' ',{xtype:'button',text:'<span class="x-btn-text">Reset</span>',handler:function(brn,e){reset();}}]});return searchBar;}
StreetViewPopup=OpenLayers.Class(OpenLayers.Control,{popup:null,mapPanel:null,titleHeader:'Street View',popupHeight:300,popupWidth:300,defaults:{pixelTolerance:1,stopSingle:true},initialize:function(options){this.handlerOptions=OpenLayers.Util.extend({},this.defaults);OpenLayers.Control.prototype.initialize.apply(this,arguments);this.handler=new OpenLayers.Handler.Click(this,{click:this.trigger},this.handlerOptions);},trigger:function(event){this.openPopup(this.map.getLonLatFromViewPortPx(event.xy));},openPopup:function(location){if(!location){location=this.mapPanel.map.getCenter();}
if(this.popup&&this.popup.anc){this.popup.close();}
this.popup=new GeoExt.Popup({title:this.titleHeader,location:location,width:this.popupWidth,height:this.popupHeight,collapsible:true,map:this.mapPanel,items:[new gxp.GoogleStreetViewPanel()]});this.popup.show();}});Ext.namespace("gxp");gxp.plugins.GeoNodeQueryTool=Ext.extend(gxp.plugins.Tool,{ptype:"gxp_geonodequerytool",outputTarget:"map",popupCache:null,infoActionTip:"Get Feature Info",popupTitle:"Feature Info",toolText:null,iconCls:"gxp-icon-getfeatureinfo",proj_merc:new OpenLayers.Projection("EPSG:900913"),featurePanel:"",attributePanel:"",gridResultsPanel:'gridResultsPanel',addActions:function(){this.popupCache={};var tool=this;var actions=gxp.plugins.GeoNodeQueryTool.superclass.addActions.call(this,[{tooltip:this.infoActionTip,iconCls:this.iconCls,text:this.toolText,toggleGroup:this.toggleGroup,enableToggle:true,allowDepress:true,toggleHandler:function(button,pressed){for(var i=info.controls.length;i--;){if(pressed){info.controls[i].activate();}else{info.controls[i].deactivate();tool.reset(true);}}}}]);var infoButton=this.actions[0].items[0];var info={controls:[]};var updateInfo=function(){var queryableLayers=this.target.mapPanel.layers.queryBy(function(x){return(x.get("queryable")&&x.getLayer().getVisibility()&&x.getLayer().displayInLayerSwitcher===true&&x.getLayer()instanceof OpenLayers.Layer.WMS);});var localUrl=this.target.localGeoServerBaseUrl;var map=this.target.mapPanel.map;var control;for(var i=0,len=info.controls.length;i<len;i++){control=info.controls[i];control.deactivate();control.destroy();}
var count=queryableLayers.length,successCount=0,featureCount=0;var features=[];var featureMeta=[];info.controls=[];queryableLayers.each(function(x){var layer=x.getLayer();var vendorParams=Ext.apply({},this.vendorParams),param;if(this.layerParams){for(var i=this.layerParams.length-1;i>=0;--i){param=this.layerParams[i].toUpperCase();vendorParams[param]=layer.params[param];}}
vendorParams['buffer']=25;if(layer.url.indexOf(localUrl)>-1){var control=new OpenLayers.Control.GetFeature({protocol:OpenLayers.Protocol.WFS.fromWMSLayer(layer),clickTolerance:25,layer:layer,box:false,hover:false,single:true,eventListeners:{clickout:function(){if(successCount===0)
features=[];successCount++;if(successCount==count){successCount=0;if(features.length==0){Ext.Msg.alert('Map Results','No features found at this location.');}else{this.displayXYResults(features,featureMeta);}
OpenLayers.Element.removeClass(control.map.viewPortDiv,"olCursorWait");}},featuresselected:function(evt){if(successCount===0)
features=[];successCount++;if(evt.features){try{var featureInfo=evt.features;if(featureInfo){if(featureInfo.constructor!=Array){featureInfo=[featureInfo];}
featureInfo.title=x.get("title");if(layer.attributes){featureInfo.queryfields=layer.attributes;featureInfo.nameField=featureInfo.queryfields[0].id;}else if(featureInfo.length>0){var qfields=[];for(var fname in evt.features[0].attributes){qfields.push(fname.toString());}
featureInfo.queryfields=qfields;if(featureInfo.queryfields.length>0)
featureInfo.nameField=featureInfo.queryfields[0];}
for(var f=evt.features.length;f--;){feature=featureInfo[f];feature.wm_layer_id=featureCount;feature.wm_layer_title=featureInfo.title;feature.wm_layer_name=feature.attributes[featureInfo.nameField];feature.wm_layer_type=layer.params.LAYERS;featureCount++;features=features.concat(feature);}
featureMeta[layer.params.LAYERS]=featureInfo.queryfields;}}catch(err){Ext.Msg.alert("Error",err)}}
if(successCount==count){successCount=0;if(features.length==0){Ext.Msg.alert('Map Results','No features found at this location.');}else{this.displayXYResults(features,featureMeta);}
OpenLayers.Element.removeClass(control.map.viewPortDiv,"olCursorWait");}},scope:this}});OpenLayers.Util.extend(control,{request:function(bounds,options){options=options||{};var filter=new OpenLayers.Filter.Spatial({type:this.filterType,value:bounds});OpenLayers.Element.addClass(this.map.viewPortDiv,"olCursorWait");var control=this;var wfs_layer=this.layer;var wfs_url=wfs_layer.url;if(wfs_url.indexOf("?")>-1)
wfs_url=wfs_url.substring(0,wfs_url.indexOf("?"));wfs_url+="?service=WFS&request=GetFeature&version=1.0.0&srsName=EPSG:900913&outputFormat=GML2&typeName="+wfs_layer.params.LAYERS+"&BBOX="+bounds.toBBOX()+",EPSG:900913";Ext.Ajax.request({'url':wfs_url,'success':function(resp,opts){var features=new OpenLayers.Format.GML().read(resp.responseText);if(features&&features.length>0){if(options.single==true){control.selectBestFeature(features,bounds.getCenterLonLat(),options);}else{control.select(features);}}else{control.events.triggerEvent("clickout");if(control.clickout){control.unselectAll();}}},'failure':function(resp,opts){control.events.triggerEvent("clickout");}});},selectBestFeature:function(features,clickPosition,options){options=options||{};if(features.length){var point=new OpenLayers.Geometry.Point(clickPosition.lon,clickPosition.lat);var feature,dist;var resultFeature=[];var minDist=Number.MAX_VALUE;for(var i=0,max=features.length;i<max;++i){feature=features[i];if(feature.geometry){if(feature.geometry.CLASS_NAME.contains('Point')){resultFeature=features;break;}
else{dist=point.distanceTo(feature.geometry,{edge:false});if(dist<minDist){minDist=dist;resultFeature=feature;if(minDist==0){break;}}}}}
if(options.hover==true){this.hoverSelect(resultFeature);}else{this.select(resultFeature||features);}}}});}
else{var control=new OpenLayers.Control.WMSGetFeatureInfo({url:layer.url,queryVisible:true,infoFormat:'application/vnd.ogc.gml',layers:[layer],vendorParams:vendorParams,eventListeners:{getfeatureinfo:function(evt){if(successCount===0)
features=[];successCount++;if(evt.text!=''){if(evt.text.contains('<FeatureInfoResponse')){var coords=map.getLonLatFromPixel(evt.xy);var point=new OpenLayers.Geometry.Point(coords.lon,coords.lat)
var dq=Ext.DomQuery;var xmlObject=new OpenLayers.Format.XML().read(evt.text);var featureInfo=new Object();var nodes=dq.select('FIELDS',xmlObject);if(nodes.length>0){var qfields=[];for(var attr=0,max=nodes[0].attributes.length;attr<max;attr++){qfields.push(nodes[0].attributes[attr].name);}
featureInfo['queryfields']=qfields;if(qfields.length>0)
featureInfo['nameField']=featureInfo['queryfields'][0];for(var it=nodes.length;it--;){node=nodes[it];var feature=new OpenLayers.Feature.Vector(point);for(var at=node.attributes.length;at--;){feature.attributes[node.attributes[at].name]=node.attributes[at].value;}
feature.wm_layer_id=featureCount;feature.wm_layer_title=x.get("title");feature.wm_layer_name=feature.attributes[featureInfo.nameField];feature.wm_layer_type=layer.params.LAYERS;featureCount++;features=features.concat(feature);}
featureMeta[layer.params.LAYERS]=featureInfo.queryfields;}}
else{var featureInfo=new OpenLayers.Format.GML().read(evt.text);if(featureInfo&&featureInfo.length>0){if(featureInfo.constructor!=Array){featureInfo=[featureInfo];}
featureInfo.title=x.get("title");if(featureInfo.length>0){var qfields=[];for(var fname in featureInfo[0].attributes){qfields.push(fname.toString());}
featureInfo.queryfields=qfields;if(featureInfo.queryfields.length>0)
featureInfo.nameField=featureInfo.queryfields[0];}
for(var f=featureInfo.length;f--;){var feature=featureInfo[f];var featureBounds=feature.geometry.getBounds();var wgs84Bounds=new OpenLayers.Bounds(-180,-90,180,90);if(wgs84Bounds.containsBounds(featureBounds,true)){var inFormat=new OpenLayers.Format.GeoJSON({'internalProjection':new OpenLayers.Projection("EPSG:4326"),'externalProjection':new OpenLayers.Projection("EPSG:900913")});var outFormat=new OpenLayers.Format.GeoJSON({'projection':new OpenLayers.Projection("EPSG:900913")});var json=inFormat.write(feature);feature=outFormat.read(json)[0];}else{var coords=map.getLonLatFromPixel(evt.xy);var point=new OpenLayers.Geometry.Point(coords.lon,coords.lat)
var newFeature=new OpenLayers.Feature.Vector(point);newFeature.attributes=feature.attributes;feature=newFeature;}
feature.wm_layer_id=featureCount;feature.wm_layer_title=featureInfo.title;feature.wm_layer_name=feature.attributes[featureInfo.nameField];feature.wm_layer_type=layer.params.LAYERS;featureCount++;features=features.concat(feature);}
featureMeta[layer.params.LAYERS]=featureInfo.queryfields;}}}
if(successCount==count){successCount=0;if(features.length==0){Ext.Msg.alert('Map Results','No features found at this location.');}else{this.displayXYResults(features,featureMeta);}
OpenLayers.Element.removeClass(control.map.viewPortDiv,"olCursorWait");}},scope:this}});}
map.addControl(control);info.controls.push(control);if(infoButton&&infoButton.pressed){control.activate();}},this);};this.target.mapPanel.layers.on("update",updateInfo,this);this.target.mapPanel.layers.on("add",updateInfo,this);this.target.mapPanel.layers.on("remove",updateInfo,this);return actions;},reset:function(clearPanel){if(clearPanel===true){Ext.getCmp(this.attributePanel).removeAll(true);Ext.getCmp(this.gridResultsPanel).removeAll(true);Ext.getCmp(this.featurePanel).hide();}
var theLayers=this.target.mapPanel.map.layers;var hLayers=[];for(l=theLayers.length;l--;){if(theLayers[l].name=="hilites"){this.target.mapPanel.map.removeLayer(theLayers[l],true);break;}}},displayXYResults:function(featureInfo,featureMeta){var ep=Ext.getCmp(this.featurePanel);var gp=Ext.getCmp(this.attributePanel);if(ep.hidden){ep.show();ep.alignTo(document,'tr-tr');}
gp.removeAll(true);var currentFeatures=featureInfo;var reader=new Ext.data.JsonReader({},[{name:'wm_layer_title'},{name:'wm_layer_name'},{name:'wm_layer_id'},{name:'wm_layer_type'}]);var tool=this;var gridPanel=new Ext.grid.GridPanel({tbar:[{xtype:'button',text:'<span class="x-btn-text">Reset</span>',qtip:'Clear all features',handler:function(brn,e){tool.reset(true);},text:'Reset'}],id:'getFeatureInfoGrid',header:false,store:new Ext.data.GroupingStore({reader:reader,data:currentFeatures,groupField:'wm_layer_title',sortInfo:{field:'wm_layer_id',direction:"DESC"}}),columns:[{id:'wm_layer_id',sortable:false,header:'FID',dataIndex:'wm_layer_id',hidden:true},{header:'Name',sortable:true,dataIndex:'wm_layer_name',width:190},{header:'Feature Type',dataIndex:'wm_layer_type',width:0,hidden:true},{header:'Layer',sortable:false,dataIndex:'wm_layer_title',width:0,hidden:true}],view:new Ext.grid.GroupingView({groupTextTpl:'{group}',style:'width: 425px'}),sm:new Ext.grid.RowSelectionModel({singleSelect:true,listeners:{rowselect:{fn:function(sm,rowIndex,rec){tool.displaySingleResult(currentFeatures,rowIndex,rec.data,featureMeta[rec.data.wm_layer_type]);}}}}),layout:'fit',frame:false,collapsible:true,iconCls:'icon-grid',autoHeight:true,style:'width: 425px',width:'400'});gp.add(gridPanel);gp.doLayout();gridPanel.getSelectionModel().selectFirstRow();},displaySingleResult:function(currentFeatures,rowIndex,gridFeature,metaColumns){var dp=Ext.getCmp(this.gridResultsPanel);dp.removeAll();var feature=null;for(var i=currentFeatures.length;i--;){if(currentFeatures[i].wm_layer_id==gridFeature.wm_layer_id){feature=currentFeatures[i];}}
if(!feature){return;}
this.addVectorQueryLayer(feature);var featureHtml=this.createHTML(feature,metaColumns);dp.update(featureHtml);dp.doLayout();},createHTML:function(feature,metaColumns){html='<ul class="featureDetailList" id="featureDetailList">';for(c=0,max=metaColumns.length;c<max;c++){column=metaColumns[c];featureValue=''+(column.header?feature.attributes[column.id]:feature.attributes[column])
if(featureValue.indexOf("http")==0){featureValue='<a target="_blank" href="'+featureValue+'">'+featureValue+'</a>'}
html+="<li><label>"+(column.header?column.header:column)+"</label><span>"+featureValue+"</span></li>";}
html+="</ul>";return html;},addVectorQueryLayer:function(feature){var highlight_style={strokeColor:'Red',strokeWidth:4,strokeOpacity:1,fillOpacity:0.0,pointRadius:10};var hilites=new OpenLayers.Layer.Vector("hilites",{isBaseLayer:false,projection:new OpenLayers.Projection("EPSG:900913"),visibility:true,style:highlight_style,displayInLayerSwitcher:false});hilites.addFeatures(feature);hilites.setVisibility(true);this.target.mapPanel.layers.suspendEvents();try{this.reset(false);this.target.mapPanel.map.addLayer(hilites);}finally{this.target.mapPanel.layers.resumeEvents();}
return hilites;}});Ext.preg(gxp.plugins.GeoNodeQueryTool.prototype.ptype,gxp.plugins.GeoNodeQueryTool);Ext.namespace("gxp.plugins");gxp.plugins.GeoNodeSource=Ext.extend(gxp.plugins.WMSSource,{ptype:"gxp_gnsource",baseParams:null,title:'GeoNode Source',noCompatibleSRSTitle:"Warning",noCompatibleSRSText:"This layer cannot be added to the map since it is not available in any projection that is compatible with the map projection",format:null,describedLayers:null,schemaCache:null,url:null,createLayerRecord:function(config){var record;if(config['llbbox']){this.url=config.url;var projection=this.getMapProjection();var maxExtent=OpenLayers.Bounds.fromArray(config['llbbox']).transform(new OpenLayers.Projection("EPSG:4326"),projection);if(!(1/maxExtent.getHeight()>0)||!(1/maxExtent.getWidth()>0)){maxExtent=undefined;}
var params={STYLES:config.styles,FORMAT:config.format,TRANSPARENT:("transparent"in config)?config.transparent:true,LAYERS:config.name,EXCEPTIONS:'application/vnd.ogc.se_inimage',VERSION:'1.1.1',SERVICE:'WMS',REQUEST:'GetMap',LLBBOX:config['llbbox'],URL:config.url};if("cql_filter"in config){params['CQL_FILTER']=config['cql_filter']}
layer=new OpenLayers.Layer.WMS(config.title,config.url,params,{maxExtent:maxExtent,restrictedExtent:maxExtent,singleTile:("tiled"in config)?!config.tiled:false,ratio:config.ratio||1,visibility:("visibility"in config)?config.visibility:true,opacity:("opacity"in config)?config.opacity:1,buffer:("buffer"in config)?config.buffer:1,projection:projection});if("tiled"in config&&config.tiled==true){var tileWidth=config['tileWidth']||256;var tileHeight=config['tileHeight']||256;var tileResolutions=config['tileResolutions']||[156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625,4891.9698095703125,2445.9849047851562,1222.9924523925781,611.4962261962891,305.74811309814453,152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017,4.777314267158508,2.388657133579254,1.194328566789627,0.5971642833948135,0.29858214169740677,0.14929107084870338,0.07464553542435169,0.037322767712175846,0.018661383856087923,0.009330691928043961,0.004665345964021981];var originLon=config['tileOriginLon']||-20037508.34;var originLat=config['tileOriginLat']||-20037508.34;layer.addOptions({resolutions:tileResolutions,tileSize:new OpenLayers.Size(tileWidth,tileHeight),tileOrigin:new OpenLayers.LonLat(originLat,originLon)});layer.params.TILED=true;}else{layer.params.TILED=false;}
if(config.attributes){layer.attributes=config.attributes;}
var data={title:config.title,name:config.name,source:config.source,group:config.group,attributes:config.attributes,properties:"gxp_wmslayerpanel",fixed:config.fixed,selected:"selected"in config?config.selected:false,layer:layer,queryable:config.queryable,disabled:config.disabled,abstract:config.abstract,styles:[config.styles]};var fields=[{name:"title",type:"string"},{name:"name",type:"string"},{name:"source",type:"string"},{name:"group",type:"string"},{name:"attributes"},{name:"properties",type:"string"},{name:"fixed",type:"boolean"},{name:"selected",type:"boolean"},{name:"queryable",type:"boolean"},{name:'disabled',type:'boolean'},{name:"abstract",type:"string"},{name:"styles"}];var Record=GeoExt.data.LayerRecord.create(fields);record=new Record(data,layer.id);return record;}},initDescribeLayerStore:function(){var version="1.1.1";this.describeLayerStore=new GeoExt.data.WMSDescribeLayerStore({url:this.url,baseParams:{VERSION:version,REQUEST:"DescribeLayer"}});},createStore:function(){this.fireEvent("ready",this);},getConfigForRecord:function(record){var config=gxp.plugins.GeoNodeSource.superclass.getConfigForRecord.apply(this,arguments);var layer=record.getLayer();var params=layer.params;return Ext.apply(config,{styles:params.STYLES,tiled:record.getLayer().params.TILED});}});Ext.preg(gxp.plugins.GeoNodeSource.prototype.ptype,gxp.plugins.GeoNodeSource);Ext.namespace("GeoExplorer")
GeoExplorer.HglFeedOverlay=function(target){this.hglRecord=null;this.popupControl=null;this.popup=null;this.createOverlay=function(){var keywords=target.about["keywords"]?target.about["keywords"]:"of";var hglConfig={name:"HGL",source:"0",group:"Overlays",buffer:"0",type:"OpenLayers.Layer.Vector",args:["HGL Points",{strategies:[new OpenLayers.Strategy.Fixed()],protocol:new OpenLayers.Protocol.HTTP({url:"/hglpoint?Q="+keywords,format:new OpenLayers.Format.GeoRSS({internalProjection:new OpenLayers.Projection('EPSG:900913'),externalProjection:new OpenLayers.Projection('EPSG:4326')})}),displayInLayerSwitcher:false}]};var feedSource=Ext.ComponentMgr.createPlugin(hglConfig,"gx_olsource");this.hglRecord=feedSource.createLayerRecord(hglConfig);this.hglRecord.group=hglConfig.group;this.popupControl=new OpenLayers.Control.SelectFeature(this.hglRecord.getLayer(),{clickout:true,onSelect:function(feature){var pos=feature.geometry;this.popup=new OpenLayers.Popup.FramedCloud("popup",feature.geometry.getBounds().getCenterLonLat(),new OpenLayers.Size(300,300),"<a target='_blank' href=\""+
feature.attributes.link+"\">"+feature.attributes.title+"</a><p>"+feature.attributes.description+"</p>",null,true);this.popup.closeOnMove=false;this.popup.minSize=new OpenLayers.Size(300,150);this.popup.maxSize=new OpenLayers.Size(300,300);this.popup.keepInMap=true;target.mapPanel.map.addPopup(this.popup);},onUnselect:function(feature){target.mapPanel.map.removePopup(this.popup);this.popup=null;}});target.mapPanel.map.addControl(this.popupControl);this.popupControl.activate();target.mapPanel.layers.insert(target.mapPanel.layers.data.items.length,[this.hglRecord]);}
this.removeOverlay=function(){target.mapPanel.layers.remove(this.hglRecord,true);this.hglRecord=null;this.popupControl=null;}}
Ext.namespace("gxp.plugins");gxp.plugins.HGLSource=Ext.extend(gxp.plugins.WMSSource,{ptype:"gxp_hglsource",baseParams:null,title:'Harvard Geospatial Library Source',noCompatibleSRSTitle:"Warning",noCompatibleSRSText:"This layer cannot be added to the map since it is not available in any projection that is compatible with the map projection",format:null,url:null,createLayerRecord:function(config){var record;this.url=config.url;var projection=this.getMapProjection();var maxExtent=undefined;var params={STYLES:config.styles,FORMAT:config.format,TRANSPARENT:("transparent"in config)?config.transparent:true,LAYERS:config.name,EXCEPTIONS:'application/vnd.ogc.se_inimage',VERSION:'1.1.1',SERVICE:'WMS',REQUEST:'GetMap',URL:config.url};layer=new OpenLayers.Layer.WMS(config.title,config.url,params,{maxExtent:maxExtent,restrictedExtent:maxExtent,singleTile:("tiled"in config)?!config.tiled:false,ratio:config.ratio||1,visibility:("visibility"in config)?config.visibility:true,opacity:("opacity"in config)?config.opacity:1,buffer:("buffer"in config)?config.buffer:1,projection:projection});if("tiled"in config&&config.tiled==true){var tileWidth=config['tileWidth']||256;var tileHeight=config['tileHeight']||256;var tileResolutions=config['tileResolutions']||[156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625,4891.9698095703125,2445.9849047851562,1222.9924523925781,611.4962261962891,305.74811309814453,152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017,4.777314267158508,2.388657133579254,1.194328566789627,0.5971642833948135,0.29858214169740677,0.14929107084870338,0.07464553542435169,0.037322767712175846,0.018661383856087923,0.009330691928043961,0.004665345964021981];var originLon=config['tileOriginLon']||-20037508.34;var originLat=config['tileOriginLat']||-20037508.34;layer.addOptions({resolutions:tileResolutions,tileSize:new OpenLayers.Size(tileWidth,tileHeight),tileOrigin:new OpenLayers.LonLat(originLat,originLon)});layer.params.TILED=true;}else{layer.params.TILED=false;}
if(config.attributes){layer.attributes=config.attributes;}
var data={title:config.title,name:config.name,source:config.source,group:config.group,attributes:config.attributes,properties:"gxp_wmslayerpanel",fixed:config.fixed,selected:"selected"in config?config.selected:false,layer:layer,queryable:config.queryable,disabled:config.disabled,abstract:config.abstract,styles:config.styles};var fields=[{name:"title",type:"string"},{name:"name",type:"string"},{name:"source",type:"string"},{name:"group",type:"string"},{name:"attributes"},{name:"properties",type:"string"},{name:"fixed",type:"boolean"},{name:"selected",type:"boolean"},{name:"queryable",type:"boolean"},{name:'disabled',type:'boolean'},{name:"abstract",type:"string"},{name:"styles"}];var Record=GeoExt.data.LayerRecord.create(fields);record=new Record(data,layer.id);return record;},initDescribeLayerStore:function(){var version="1.1.1";this.describeLayerStore=new GeoExt.data.WMSDescribeLayerStore({url:this.url,baseParams:{VERSION:version,REQUEST:"DescribeLayer"}});},createStore:function(){this.fireEvent("ready",this);},getConfigForRecord:function(record){var config=gxp.plugins.HGLSource.superclass.getConfigForRecord.apply(this,arguments);var layer=record.getLayer();var params=layer.params;return Ext.apply(config,{styles:params.STYLES,tiled:record.getLayer().params.TILED});}});Ext.preg(gxp.plugins.HGLSource.prototype.ptype,gxp.plugins.HGLSource);Ext.namespace("GeoExplorer");GeoExplorer.MapSnapshotGrid=function(mapid){var store=new Ext.data.JsonStore({url:'/maps/history/'+mapid,fields:[{name:'created',type:'date'},'user','url','map'],idProperty:'url',root:'',sortInfo:{field:'created',direction:'DESC'}});var renderDate=function(value,p,record){return String.format('<b><a href="/maps/{0}/{1}">{2}</a>',record.data.map,record.id,value);};var renderUser=function(value,p,record){return String.format('<b><a href="/profiles/{0}">{1}</a>',value,value);};var grid=new Ext.grid.GridPanel({width:400,height:300,store:store,trackMouseOver:false,columns:[{header:"Revision Date",dataIndex:'created',width:200,renderer:renderDate,sortable:true},{header:"URL",dataIndex:'url',width:10,hidden:true,sortable:false},{header:"User",dataIndex:'user',width:200,align:'right',renderer:renderUser,sortable:true},{header:"Map",dataIndex:'map',width:10,align:'right',hidden:true,sortable:false}],viewConfig:{forceFit:true}});var historyWindow=new Ext.Window({title:'Map Revision History',closeAction:'destroy',items:grid,modal:true,autoScroll:true});store.load();historyWindow.show();}
Ext.namespace("GeoExplorer")
GeoExplorer.PicasaFeedOverlay=function(target){this.picasaRecord=null;this.popupControl=null;this.popup=null;this.createOverlay=function(){var keywords=target.about["keywords"]?target.about["keywords"]:"of";var picasaConfig={name:"Picasa",source:"0",group:"Overlays",buffer:"0",type:"OpenLayers.Layer.WFS",args:["Picasa Pictures","/picasa/",{'kind':'photo','max-results':'50','q':keywords},{format:OpenLayers.Format.GeoRSS,projection:"EPSG:4326",displayInLayerSwitcher:false,formatOptions:{createFeatureFromItem:function(item){var feature=OpenLayers.Format.GeoRSS.prototype.createFeatureFromItem.apply(this,arguments);feature.attributes.thumbnail=this.getElementsByTagNameNS(item,"http://search.yahoo.com/mrss/","thumbnail")[0].getAttribute("url");feature.attributes.content=OpenLayers.Util.getXmlNodeValue(this.getElementsByTagNameNS(item,"*","summary")[0]);return feature;}},styleMap:new OpenLayers.StyleMap({"default":new OpenLayers.Style({externalGraphic:"${thumbnail}",pointRadius:14}),"select":new OpenLayers.Style({pointRadius:20})})}]};var feedSource=Ext.ComponentMgr.createPlugin(picasaConfig,"gx_olsource");this.picasaRecord=feedSource.createLayerRecord(picasaConfig);this.picasaRecord.group=picasaConfig.group;this.popupControl=new OpenLayers.Control.SelectFeature(this.picasaRecord.getLayer(),{clickout:true,onSelect:function(feature){var pos=feature.geometry;var content=document.createElement("div");content.innerHTML=feature.attributes.content;this.popup=new OpenLayers.Popup("popup",new OpenLayers.LonLat(pos.x,pos.y),new OpenLayers.Size(160,160),"<a target='_blank' href="+
content.getElementsByTagName('a')[0].getAttribute('href')+"><img title='"+
feature.attributes.title+"' src='"+feature.attributes.thumbnail+"' /></a>",false);this.popup.closeOnMove=true;this.popup.keepInMap=true;target.mapPanel.map.addPopup(this.popup);},onUnselect:function(feature){target.mapPanel.map.removePopup(this.popup);this.popup=null;}});target.mapPanel.map.addControl(this.popupControl);this.popupControl.activate();target.mapPanel.layers.insert(target.mapPanel.layers.data.items.length,[this.picasaRecord]);}
this.removeOverlay=function(){target.mapPanel.layers.remove(this.picasaRecord,true);this.picasaRecord=null;this.popupControl=null;}}
Ext.namespace("GeoExplorer")
GeoExplorer.YouTubeFeedOverlay=function(target){this.youtubeRecord=null;this.popupControl=null;this.popup=null;this.createOverlay=function()
{var keywords=target.about["keywords"]?target.about["keywords"]:"of";var youtubeConfig={name:"YouTube",source:"0",group:"Overlays",buffer:"0",type:"OpenLayers.Layer.WFS",args:["YouTube Videos","/youtube/",{'max-results':'50','q':keywords,'bbox':target.mapPanel.map.getExtent().transform(target.mapPanel.map.getProjectionObject(),new OpenLayers.Projection("EPSG:4326")).toBBOX()},{format:OpenLayers.Format.GeoRSS,projection:"EPSG:4326",displayInLayerSwitcher:false,formatOptions:{createFeatureFromItem:function(item){var feature=OpenLayers.Format.GeoRSS.prototype.createFeatureFromItem.apply(this,arguments);feature.attributes.thumbnail=this.getElementsByTagNameNS(item,"http://search.yahoo.com/mrss/","thumbnail")[4].getAttribute("url");feature.attributes.content=OpenLayers.Util.getXmlNodeValue(this.getElementsByTagNameNS(item,"*","summary")[0]);return feature;}},styleMap:new OpenLayers.StyleMap({"default":new OpenLayers.Style({externalGraphic:"${thumbnail}",pointRadius:24}),"select":new OpenLayers.Style({pointRadius:30})})}]};feedSource=Ext.ComponentMgr.createPlugin(youtubeConfig,"gx_olsource");this.youtubeRecord=feedSource.createLayerRecord(youtubeConfig);this.youtubeRecord.group=youtubeConfig.group;this.popupControl=new OpenLayers.Control.SelectFeature(this.youtubeRecord.getLayer(),{clickout:true,onSelect:function(feature){var pos=feature.geometry;this.popup=new OpenLayers.Popup("popup",new OpenLayers.LonLat(pos.x,pos.y),new OpenLayers.Size(240,180),"<a target='_blank' href="+
feature.attributes.link+"><img height='180', width='240' title='"+
feature.attributes.title+"' src='"+feature.attributes.thumbnail+"' /></a>",false);this.popup.closeOnMove=true;this.popup.keepInMap=true;target.mapPanel.map.addPopup(this.popup);},onUnselect:function(feature){target.mapPanel.map.removePopup(this.popup);this.popup=null;}});target.mapPanel.map.addControl(this.popupControl);this.popupControl.activate();target.mapPanel.layers.insert(target.mapPanel.layers.data.items.length,[this.youtubeRecord]);}
this.removeOverlay=function(){target.mapPanel.layers.remove(this.youtubeRecord,true);this.youtubeRecord=null;this.popupControl=null;}}
Ext.namespace("GeoNode");GeoNode.BatchDownloadWidget=Ext.extend(Ext.util.Observable,{downloadingText:'UT: Downloading...',cancelText:'UT: Cancel',windowMessageText:'UT: Please wait',constructor:function(config){Ext.apply(this,config);this.beginDownload();},beginDownload:function(){var this_widget=this;Ext.Ajax.request({url:this.begin_download_url,method:'POST',params:{layer:this.layers,format:this.format},success:function(result){var result=Ext.util.JSON.decode(result.responseText);this_widget.monitorDownload(result.id);}});},monitorDownload:function(download_id){var checkStatus;var this_widget=this;var pb=new Ext.ProgressBar({text:this.downloadingText});var cancel_download=function(){Ext.Ajax.request({url:this_widget.stop_download_url+download_id,method:"GET",success:function(result){clearInterval(checkStatus);},failure:function(result){clearInterval(checkStatus);}})};var win=new Ext.Window({width:250,height:100,plain:true,modal:true,closable:false,hideBorders:true,items:[pb],buttons:[{text:this.cancelText,handler:function(){cancel_download();win.hide();}}]});var update_progress=function(){Ext.Ajax.request({url:this_widget.begin_download_url+'?id='+download_id,method:"GET",success:function(result){var process=Ext.util.JSON.decode(result.responseText);if(process["process"]["status"]==="FINISHED"){clearInterval(checkStatus);pb.updateProgress(1,"Done....",true);win.close();location.href=this_widget.download_url+download_id;}
else{pb.updateProgress(process["process"]["progress"]/100,this_widget.downloadingText,true);}},failure:function(result){clearInterval(checkStatus);win.close();}});};checkStatus=setInterval(update_progress,1000);win.show();}});Ext.namespace("GeoNode");GeoNode.BoundingBoxWidget=Ext.extend(Ext.util.Observable,{viewerConfig:null,height:300,isEnabled:false,useGxpViewer:false,constructor:function(config,vanillaViewer){Ext.apply(this,config);this.doLayout();},doLayout:function(){var el=Ext.get(this.renderTo);this.enabledCB=el.query('.bbox-enabled input')[0];var viewerConfig={proxy:this.proxy,useCapabilities:false,useBackgroundCapabilities:false,useToolbar:false,useMapOverlay:false,portalConfig:{collapsed:true,border:false,height:this.height,renderTo:el.query('.bbox-expand')[0]},listeners:{"ready":function(){this._ready=true;if(this.isEnabled)
{this.enable();}},scope:this}}
viewerConfig=Ext.apply(viewerConfig,this.viewerConfig)
if(this.useGxpViewer)
{viewerConfig.mapItems=[{xtype:"gx_zoomslider",vertical:true,height:100}];this.viewer=new gxp.Viewer(viewerConfig);}
else
this.viewer=new GeoExplorer.Viewer(viewerConfig);if(!this.isEnabled)
this.disable();Ext.get(this.enabledCB).on('click',function(){if(this.enabledCB.checked==true){this.enable();}
else{this.disable();}},this);},updateBBox:function(bounds){if(bounds&&bounds!=null)
{var bbmap=this.viewer.mapPanel.map;bbmap.zoomToExtent(bounds);}},isActive:function(){return this.enabledCB.checked==true;},hasConstraint:function(){return this.isActive()},applyConstraint:function(query){if(this.hasConstraint()){var bounds=this.viewer.mapPanel.map.getExtent();bounds.transform(new OpenLayers.Projection(this.viewerConfig.map.projection),new OpenLayers.Projection("EPSG:4326"));query.bbox=bounds.toBBOX();}
else if(this._ready){delete query.bbox;}},initFromQuery:function(grid,query){if(query.bbox){var bounds=OpenLayers.Bounds.fromString(query.bbox);if(bounds){bounds.transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection(this.viewerConfig.map.projection));var setMapExtent=function(){var map=this.viewer.mapPanel.map;map.events.register("moveend",this,function(){map.events.unregister("moveend",this,arguments.callee);map.zoomToExtent(bounds,true);});this.enable();};if(this._ready){setMapExtent.call(this);}else{this.viewer.on("ready",setMapExtent,this)}}}},enable:function(){this.enabledCB.checked=true;this.viewer.portal&&this.viewer.portal.expand();},disable:function(){this.enabledCB.checked=false;this.viewer.portal&&this.viewer.portal.collapse();}});Ext.namespace("GeoNode");GeoNode.DataCart=Ext.extend(Ext.util.Observable,{selectedLayersText:'UT: Selected Layers',emptySelectionText:'UT: No Layers Selected',titleText:'UT: Title',clearSelectedButtonText:'UT: Clear Selected',clearAllButtonText:'UT: Clear All',addLayersButtonText:'UT: Add Layers',addToMapButtonFunction:null,addToMapButtonTarget:null,constructor:function(config){Ext.apply(this,config);this.doLayout();},getSelectedLayerIds:function(){var layerIds=[];this.grid.selModel.each(function(rec){layerIds.push(rec.get('name'));});return layerIds;},doLayout:function(){var widgetHTML='<div class="selection-table"></div>'+'<div class="selection-controls"></div>'+'<div class="selection-ops></div>"';var el=Ext.get(this.renderTo);el.update(widgetHTML);var controls_el=el.query('.selection-controls')[0];var table_el=el.query('.selection-table')[0];var ops_el=el.query('.selection-ops')[0];sm=new Ext.grid.CheckboxSelectionModel({});this.grid=new Ext.grid.GridPanel({store:this.store,viewConfig:{autoFill:true,forceFit:true,emptyText:this.emptySelectionText,deferEmptyText:false},height:100,renderTo:table_el,selModel:sm,hideHeaders:true,colModel:new Ext.grid.ColumnModel({defaults:{sortable:false,menuDisabled:true},columns:[sm,{dataIndex:'title'}]})});this.store.on('add',function(store,records,index){sm.selectRow(index,true);})
var addToMapButton=new Ext.Button({text:this.addLayersButtonText,iconCls:'icon-add',cls:'x-btn-link-medium x-btn-text'});var clearAll=function(){this.store.removeAll();this.store.reselect();};if(this.addToMapButtonFunction){var addToMapFunction=this.addToMapButtonFunction;var addToMapTarget=this.addToMapButtonTarget;var dataGrid=this.grid;var dataCart=this;addToMapButton.on('click',function(){addToMapFunction.call(addToMapTarget,dataGrid.getSelectionModel().getSelections());clearAll.call(dataCart);});}
var clearSelectedButton=new Ext.Button({text:this.clearSelectedButtonText});clearSelectedButton.on('click',function(){sm.each(function(rec){var index=this.store.indexOfId(rec.id);if(index>=0){this.store.removeAt(index);}},this);this.store.reselect();},this);var clearAllButton=new Ext.Button({text:this.clearAllButtonText});clearAllButton.on('click',clearAll,this);var spacer=new Ext.Spacer({width:20})
var controlsForm=new Ext.Panel({frame:false,border:false,layout:new Ext.layout.HBoxLayout({defaultMargins:{top:10,bottom:10,left:0,right:0}}),items:[this.addToMapButtonFunction?addToMapButton:"",this.addToMapButtonFunction?spacer:"",clearSelectedButton,clearAllButton]});controlsForm.render(controls_el);}});Ext.namespace("GeoNode");GeoNode.DataCartOps=Ext.extend(Ext.util.Observable,{failureText:'UT: Operation Failed',noLayersText:'UT: No layers are currently selected.',constructor:function(config){Ext.apply(this,config);this.doLayout();},doLayout:function(){var el=Ext.get(this.renderTo);var createMapLink=Ext.get(el.query('a.create-map')[0]);this.createMapForm=Ext.get(el.query('#create_map_form')[0]);createMapLink.on('click',function(evt){evt.preventDefault();var layers=this.cart.getSelectedLayerIds();if(layers&&layers.length){this.createNewMap(layers);}
else{Ext.MessageBox.alert(this.failureText,this.noLayersText);}},this);batch_links=el.query('a.batch-download');for(var i=0;i<batch_links.length;i++){var bel=Ext.get(batch_links[i]);bel.on('click',function(e,t,o){e.preventDefault();var layers=this.cart.getSelectedLayerIds();if(layers&&layers.length){var format=Ext.get(t).getAttribute('href').substr(1);this.batchDownload(layers,format);}
else{Ext.MessageBox.alert(this.failureText,this.noLayersText);}},this);}},createNewMap:function(layerIds){var inputs=[];for(var i=0;i<layerIds.length;i++){inputs.push({tag:'input',type:'hidden',name:'layer',value:layerIds[i]});}
Ext.DomHelper.overwrite(this.createMapForm,{'tag':'div',cn:inputs});this.createMapForm.dom.submit();},batchDownload:function(layerIds,format){new GeoNode.BatchDownloadWidget({layers:layerIds,format:format,begin_download_url:this.begin_download_url,stop_download_url:this.stop_download_url,download_url:this.download_url});}});Ext.namespace("GeoNode");GeoNode.DataCartStore=Ext.extend(Ext.data.Store,{constructor:function(config){this.selModel=config.selModel;this.reselecting=false;this.selModel.on('rowselect',function(model,index,record){if(this.reselecting==true){return;}
if(this.indexOfId(record.id)==-1){this.add([record]);}},this);this.selModel.on('rowdeselect',function(model,index,record){if(this.reselecting==true){return;}
var index=this.indexOfId(record.id)
if(index!=-1){this.removeAt(index);}},this);GeoNode.DataCartStore.superclass.constructor.call(this,config);},reselect:function(){this.reselecting=true;this.selModel.clearSelections();var store=this.selModel.grid.store;this.each(function(rec){var index=store.indexOfId(rec.id);if(index!=-1){this.selModel.selectRow(index,true);}
return true;},this);this.reselecting=false;}});Ext.namespace("GeoNode");GeoNode.MapSearchTable=Ext.extend(Ext.util.Observable,{autoExpandColumn:'title',titleHeaderText:'UT: Title',contactHeaderText:"UT: Contact",lastModifiedHeaderText:"UT: Last Modified",mapAbstractLabelText:"UT: Abstract",mapLinkLabelText:"UT:View this Map",previousText:'UT: Prev',nextText:'UT: Next',ofText:'UT: of',noResultsText:'UT: Your search did not match any items.',searchLabelText:'UT: Search Maps',searchButtonText:'UT: Search',showingText:'UT: Showing',loadingText:'UT: Loading',permalinkText:'UT: permalink',constructor:function(config){this.addEvents('load');Ext.apply(this,config);this.initFromQuery();this.loadData();},loadData:function(){this.searchStore=new Ext.data.JsonStore({url:this.searchURL,root:'rows',idProperty:'name',remoteSort:true,totalProperty:'total',fields:[{name:'id',mapping:'id'},{name:'title',type:'string'},{name:'abstract',type:'string'},{name:'detail',type:'string'},{name:'owner',type:'string'},{name:'owner_detail',type:'string'},{name:'last_modified',type:'string'}]});this.searchStore.on('load',function(){this.updateControls();this.fireEvent('load',this);},this);this.doLayout();this.doSearch();},initFromQuery:function(){if(!this.searchParams){this.searchParams={};}
if(!this.searchParams.start){this.searchParams.start=0;}
if(!this.searchParams.limit){this.searchParams.limit=25;}
if(this.constraints){for(var i=0;i<this.constraints.length;i++){this.constraints[i].initFromQuery(this,this.searchParams);}}},doSearch:function(){this.searchParams.start=0;if(this.constraints){for(var i=0;i<this.constraints.length;i++){this.constraints[i].applyConstraint(this.searchParams);}}
this._search(this.searchParams);},_search:function(params){this.disableControls();this.searchStore.load({params:params});this.updatePermalink(params);},loadNextBatch:function(){this.searchParams.start+=this.searchParams.limit;this._search(this.searchParams);},loadPrevBatch:function(){this.searchParams.start-=this.searchParams.limit;if(this.searchParams.start<0){this.searchParams.start=0;}
this._search(this.searchParams);},disableControls:function(){this.nextButton.setDisabled(true);this.prevButton.setDisabled(true);this.pagerLabel.setText(this.loadingText);},updateControls:function(){var total=this.searchStore.getTotalCount();if(this.searchParams.start>0){this.prevButton.setDisabled(false);}
else{this.prevButton.setDisabled(true);}
if(this.searchParams.start+this.searchParams.limit<total){this.nextButton.setDisabled(false);}
else{this.nextButton.setDisabled(true);}
var minItem=this.searchParams.start+1;var maxItem=minItem+this.searchParams.limit-1;if(maxItem>total){maxItem=total;}
this.pagerLabel.setText(this.showingText+' '+minItem+'-'+maxItem+' '+this.ofText+' '+
total);},updatePermalink:function(){if(this.permalink){this.permalink.href=Ext.urlAppend(this.permalinkURL,Ext.urlEncode(this.searchParams));}},updateQuery:function(){this.searchParams.q=this.queryInput.getValue();this.doSearch();},hookupSearchButtons:function(el){var root=Ext.get(el);var buttons=root.query('.search-button');for(var i=0;i<buttons.length;i++){var text=buttons[i].innerHTML||this.searchButtonText;Ext.get(buttons[i]).update('');var searchButton=new Ext.Button({text:text,renderTo:buttons[i]});searchButton.on('click',this.doSearch,this);}},doLayout:function(){var widgetHTML='<div class="search-results">'+'<div class="search-input"></div>'+'<div class="search-table"></div>'+'<div class="search-controls"></div>'+'</div>';var el=Ext.get(this.renderTo);el.update(widgetHTML);var input_el=el.query('.search-input')[0];var table_el=el.query('.search-table')[0];var controls_el=el.query('.search-controls')[0];var tpl=new Ext.Template('<p><b>'+this.mapAbstractLabelText+':</b> {abstract}</p>'+'<p><a href="/maps/{id}">'+this.mapLinkLabelText+'</a></p>');var expander=new Ext.grid.RowExpander({tpl:tpl});expander.on("expand",function(expander,record,body,idx){Ext.select("a",Ext.get(body)).on("click",function(evt){evt.stopPropagation();});});tableCfg={store:this.searchStore,plugins:[expander],autoExpandColumn:'title',viewConfig:{autoFill:true,forceFit:true,emptyText:this.noResultsText,listeners:{refresh:function(view){Ext.select("a",Ext.get(view.mainBody)).on("click",function(evt){evt.stopPropagation();});},rowsinserted:function(view,start,end){for(var i=start;i<end;i++){Ext.select("a",Ext.get(view.getRow(i))).on("click",function(evt){evt.stopPropagation();});}},rowupdated:function(view,idx,record){Ext.select("a",Ext.get(view.getRow(idx))).on("click",function(evt){evt.stopPropagation();});}}},autoHeight:true,renderTo:table_el};tableCfg.listeners={"rowdblclick":function(grid,rowIndex,evt){var rec=grid.store.getAt(rowIndex);if(rec!=null){location.href=rec.get('detail');}},"rowclick":function(grid,rowIndex,evt){expander.toggleRow(rowIndex);},"beforerender":function(grid){grid.on('render',function(){grid.getView().mainBody.un('mousedown',expander.onMouseDown,expander);})}};var columns=[expander,{header:this.titleHeaderText,dataIndex:'title',id:'title',renderer:function(value,metaData,record,rowIndex,colIndex,store){var detail=record.get('detail');if(detail){return'<a href="'+detail+'">'+value+'</a>';}
else{return value;}}},{header:this.contactHeaderText,dataIndex:'owner',id:'owner',renderer:function(value,metaData,record,rowIndex,colIndex,store){var detail=record.get('owner_detail');if(detail){return'<a href="'+detail+'">'+value+'</a>';}
else{return value;}}},{header:this.lastModifiedHeaderText,dataIndex:'last_modified',id:'last_modified',renderer:function(value,metaData,record,rowIndex,colIndex,store){dt=Date.parseDate(value,'c');return dt.format("F j, Y");}}];var colModel=new Ext.grid.ColumnModel({defaults:{menuDisabled:true,sortable:true},columns:columns});tableCfg.colModel=colModel;this.table=new Ext.grid.GridPanel(tableCfg);this.queryInput=new Ext.form.TextField({fieldLabel:this.searchLabelText,name:'search',allowBlank:true,width:350});this.queryInput.on('specialkey',function(field,e){if(e.getKey()==e.ENTER){this.updateQuery();}},this);var searchButton=new Ext.Button({text:this.searchButtonText});searchButton.on('click',this.updateQuery,this)
var searchForm=new Ext.Panel({frame:false,border:false,layout:new Ext.layout.HBoxLayout({defaultMargins:{top:10,bottom:10,left:0,right:10}}),items:[this.queryInput,searchButton]});searchForm.render(input_el);this.prevButton=new Ext.Button({text:this.previousText});this.prevButton.on('click',this.loadPrevBatch,this);this.nextButton=new Ext.Button({text:this.nextText});this.nextButton.on('click',this.loadNextBatch,this);this.pagerLabel=new Ext.form.Label({text:""});var controls=new Ext.Panel({frame:false,border:false,layout:new Ext.layout.HBoxLayout({defaultMargins:{top:10,bottom:10,left:0,right:10}}),items:[this.prevButton,this.nextButton,this.pagerLabel]});controls.render(controls_el);this.permalink=Ext.query('a.permalink')[0];this.disableControls();if(this.searchParams.q){this.queryInput.setValue(this.searchParams.q);}
this.updatePermalink();}});Ext.namespace("GeoNode");GeoNode.SearchTableRowExpander=Ext.extend(Ext.grid.RowExpander,{errorText:'UT: Unable to fetch layer details.',loadingText:'UT: Loading...',constructor:function(config){this.fetchURL=config.fetchURL;GeoNode.SearchTableRowExpander.superclass.constructor.call(this,config);},getRowClass:function(record,rowIndex,p,ds){p.cols=p.cols-1;return this.state[record.id]?'x-grid3-row-expanded':'x-grid3-row-collapsed';},fetchBodyContent:function(body,record,index){if(!this.enableCaching){this._fetchBodyContent(body,record,index);}
var content=this.bodyContent[record.id];if(!content){this._fetchBodyContent(body,record,index);}
else{body.innerHTML=content;}},_fetchBodyContent:function(body,record,index){body.innerHTML=this.loadingText;var template_url=this.fetchURL+'?uuid='+record.get('uuid');var this_expander=this;Ext.Ajax.request({url:template_url,method:"GET",success:function(result){var content=result.responseText;body.innerHTML=content;this_expander.bodyContent[record.id]=content;},failure:function(result){body.innerHTML=this_expander.errorText;}});},beforeExpand:function(record,body,rowIndex){if(this.fireEvent('beforeexpand',this,record,body,rowIndex)!==false){this.fetchBodyContent(body,record,rowIndex);return true;}else{return false;}}});
