/*
 * insert license here
 */
Ext.QuickTips.init();Ext.Ajax.disableCaching=false;Ext.Ajax.timeout=120*1000;Ext.layout.FormLayout.labelStyle="font-weight: bold;";Ext.Updater.defaults.loadScripts=true;Ext.namespace("LLMAP.UI");LLMAP.degreesToDMS=function(e){var c=Math.floor(e);var a=Math.floor(e=(e-c)*60);var b=Math.floor(e=(e-a)*6000);b=b/100;return""+c+"\u00B0 "+a+"\u0027 "+b+"\u0022"};LLMAP.formatLat=function(b){var a=b>0?"N":"S";return LLMAP.degreesToDMS(Math.abs(b))+" "+a};LLMAP.formatLon=function(b){var a=b>0?"E":"W";return LLMAP.degreesToDMS(Math.abs(b))+" "+a};LLMAP.UI.LoginWindow=Ext.extend(Ext.Window,{initComponent:function(){Ext.apply(this,{layout:"fit",title:"Login to LL-MAP",modal:true,border:false,height:215,width:300,items:{xtype:"form",ref:"form_panel",bodyStyle:"padding: 10px;",items:[{xtype:"displayfield",hideLabel:true,cls:"login-window-msg",value:"Please log in with your LL-MAP account in order to continue."},{xtype:"textfield",name:"login",fieldLabel:"User ID",width:150},{xtype:"textfield",name:"password",inputType:"password",fieldLabel:"Password",width:150},{xtype:"displayfield",name:"message",hideLabel:true,cls:"login-window-error",value:""}],keys:[{key:[Ext.EventObject.ENTER],scope:this,handler:this.submitLogin}],buttons:[{text:"Log In",scope:this,handler:this.submitLogin},{text:"Cancel",scope:this,handler:function(){this.hide();this.fireEvent("loginfailure")}}]},listeners:{scope:this,show:function(){this.form_panel.getForm().findField("login").focus(false,25)}}});LLMAP.UI.LoginWindow.superclass.initComponent.call(this);this.addEvents("loginsuccess","loginfailure")},submitLogin:function(){var a;this.form_panel.getForm().submit({clientValidation:false,url:"/account/login-action.json",scope:this,success:function(b,c){this.hide();this.fireEvent("loginsuccess",c.result.data)},failure:function(b,c){switch(c.failureType){case Ext.form.Action.CONNECT_FAILURE:a="Unable to communicate with the server. Please try again in a few minutes.";break;case Ext.form.Action.SERVER_INVALID:a=c.result.message;break;default:a="Unknown Error";break}this.form_panel.getForm().findField("message").setValue(a)}})}});var LoginWindow=new LLMAP.UI.LoginWindow();var ExtConnRequest=Ext.data.Connection.prototype.request;LLMAP.promptForLogin=false;Ext.override(Ext.data.Connection,{request:function(b){var a=b.failure;var d=b.success;var c=this;b.failure=function(f,g){if(f.status==401){if(LLMAP.promptForLogin===true){LoginWindow.show();LoginWindow.addListener("loginsuccess",function(){c.request(g)},this,{single:true});LoginWindow.addListener("loginfailure",function(){if(a){a.call(g.scope,f,g)}},this,{single:true})}else{Ext.MessageBox.show({title:"Error",msg:"Sorry, you do not have access rights to the information you have requested.",buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR,width:300});if(a){a.call(g.scope,f,g)}}}else{var e=f.responseText;var h=f.getResponseHeader("Content-Type");var i;if(h.match(/^application\/json/)){e=Ext.decode(e);i=e.message}else{i=e}Ext.MessageBox.show({title:"Error",msg:i,buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR,width:600});if(a){a.call(g.scope,f,g)}}};ExtConnRequest.call(this,b)}});LLMAP.openHelpViewer=function(d,b){var a=window.open("","helpViewer","status=no,toolbar=no,location=no,height=700,width=900");var c;if(b===undefined){b="top"}if((a!==null)&&!a.closed&&(a.helpViewer!==undefined)){a.helpViewer.goToTopic(d,b)}else{window.open("/help.html#"+d+"/"+b,"helpViewer")}};LLMAP.openMapViewer=function(b){var a=window.open("","mapViewer","status=no,toolbar=no,location=no,height=700,width=900");var c;if(b!==undefined){c="?maps="+b}else{c=""}if((a!==null)&&!a.closed&&(a.mapViewer!==undefined)){a.mapViewer.loadMap(b)}else{window.open("/viewer.html"+c,"mapViewer")}};LLMAP.CountrySelector=Ext.extend(Ext.form.ComboBox,{displayField:"primary_name",valueField:"code_a3",triggerAction:"all",hideTrigger:false,forceSelection:true,fieldLabel:"Country Name",typeAhead:false,editable:false,mode:"remote",initComponent:function(){Ext.applyIf(this,{store:LLMAP.Country.zfCreateStore()});LLMAP.CountrySelector.superclass.initComponent.call(this)}});LLMAP.CodeSelector=Ext.extend(Ext.form.ComboBox,{displayField:"primary_name",valueField:"code",itemSelector:"div.language-selector-item",hideTrigger:true,forceSelection:true,emptyText:"Type a language name...",fieldLabel:"Language Name",typeAhead:false,minChars:2,queryParam:"name",codeType:"language",initComponent:function(){Ext.applyIf(this,{tpl:new Ext.XTemplate('<tpl for=".">','<div class="language-selector-item">',"<tpl if=\"standard_name = 'Private Use'\">","<span>{primary_name} ({code})</span>","</tpl>","<tpl if=\"standard_name != 'Private Use'\">",'<span style="text-weight: bold">{primary_name} ({code})</span>',"</tpl>","</div>","</tpl>"),store:LLMAP.Code.zfCreateStore({baseParams:{codeType:this.codeType}})});LLMAP.CodeSelector.superclass.initComponent.call(this)}});LLMAP.UI.YesNoSelection=Ext.extend(Ext.form.ComboBox,{store:LLMAP.types.yes_no,valueField:"id",displayField:"description",forceSelection:true,typeAhead:false,mode:"local",triggerAction:"all",selectOnFocus:true,width:200});LLMAP.UI.LoadingIndicator=function(){this.container=Ext.get(document.body);this.el=Ext.DomHelper.append(this.container,{tag:"div",style:{background:"black",border:"1px solid white",height:108,margin:0,padding:0,position:"absolute",width:108,"z-index":99999},children:[{tag:"img",src:"/images/ajax-loader.gif",style:{border:"none",height:100,margin:0,padding:"4px",width:100}}]},true);this.el.setVisible(false)};LLMAP.UI.LoadingIndicator.prototype.hide=function(){this.el.setVisible(false);this.container.unmask()};LLMAP.UI.LoadingIndicator.prototype.show=function(){var a=this.container.mask();a.setStyle("z-index",50000);this.el.alignTo(this.container,"c-c",false);this.el.setVisible(true)};LLMAP.UI.MapLayer=Ext.extend(Ext.util.Observable,{url:null,service:null,layers:[],srs:["EPSG:4326"],initialOpacity:0.7,enabled:true,isOverlay:false,show_legend:true,visible:true,temporal:false,start_year:null,end_year:null,year_increment:1,current_year:null,constructor:function(a){LLMAP.UI.MapLayer.superclass.constructor.call(this,a);Ext.apply(this,a);this.addEvents("setvisible","update");this.map_layer=new OpenLayers.Layer.WMS(this.name,this.getServiceURL(),{layers:this.getLayerList(),styles:this.getStyleList(),cql_filter:this.getFilterList(),format:this.format,tiled:false,transparent:true},{ratio:1,displayOutsideMaxExtent:true,singleTile:true});this.map_layer.setOpacity(this.initialOpacity);this.current_year=this.start_year},getFilterList:function(){var d=[];for(var b=0;b<this.layers.length;b++){var a=this.layers[b];if(a.visible){var c=a.filter;if(c===undefined){c="INCLUDE"}d.push(c)}}return d.join(";")},getLegendGraphic:function(b,c){var a=this.getServiceURL()+"SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&FORMAT=image/png&LAYER="+b.id;if(b.styleName){a=a+"&STYLE="+b.styleName}if(this.legend_options){a=a+"&LEGEND_OPTIONS="+this.legend_options.join(";")}a=a+"&llrand="+Math.random();return a},getLayerList:function(){var c=[];for(var b=0;b<this.layers.length;b++){var a=this.layers[b];if(a.visible&&a.in_range){c.push(a.id)}}return c.join(",")},getStyleList:function(){var c=[];for(var b=0;b<this.layers.length;b++){var a=this.layers[b];if(a.visible){c.push(a.styleName)}}return c.join(",")},getVisibleLayers:function(){var c=[];for(var b=0;b<this.layers.length;b++){var a=this.layers[b];if(a.visible){c.push(a.id)}}return c},isSupportedProjection:function(a){return(this.srs.indexOf(a)>=0)},setEnabled:function(a){this.fireEvent("setvisible",this,this.visible&&this.enabled,this.visible&&a);this.enabled=a;this.updateLayers()},setVisible:function(a){this.fireEvent("setvisible",this,this.visible&&this.enabled,a&&this.enabled);this.visible=a;this.updateLayers()},setYear:function(a){this.current_year=a;this.updateLayers()},updateLayers:function(){for(var c=0;c<this.layers.length;c++){var b=this.layers[c];var a=this.current_year-this.year_increment;var d=this.current_year+this.year_increment;if(this.temporal){b.in_range=(b.start_year>=a)&&(b.end_year<=d)}else{b.in_range=true}}var e=this.getLayerList();if(!this.enabled||(e==="")){this.map_layer.setVisibility(false)}else{this.map_layer.mergeNewParams({layers:e,styles:this.getStyleList(),cql_filter:this.getFilterList(),llrand:Math.random()});this.map_layer.setVisibility(this.visible)}this.fireEvent("update",this)}});LLMAP.UI.StdMapLayer=Ext.extend(LLMAP.UI.MapLayer,{format:"image/png8",getServiceURL:function(){return this.url},getStyleList:function(){return""}});LLMAP.UI.WMSMapLayer=Ext.extend(LLMAP.UI.MapLayer,{format:"image/png",getServiceURL:function(){return this.url}});LLMAP.BaseMaps={overlayLayers:[{id:"ne14:ne_10m_admin_0_countries",name:"Country Border",show_legend:true,legend_title:false,visible:true},{id:"ne14:ne_10m_admin_1_states_provinces_scale_ranks",name:"State/Province Border",show_legend:true,legend_title:false,visible:false},{id:"ne14:ne_10m_geography_regions_polys",name:"Geographic Regions",show_legend:true,legend_title:true,visible:true}],srsList:[["EPSG:4326","WGS 1984"],["EPSG:3857","Spherical Mercator"]],srsParams:{"EPSG:4326":{units:"degrees",numZoomLevels:16,maxResolution:0.703125,maxExtent:new OpenLayers.Bounds(-180,-90,180,90),resolutions:[0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.00034332275390625,0.000171661376953125,0.0000858306884765625,0.00004291534423828125,0.000021457672119140625]},"EPSG:3857":{units:"m",numZoomLevels:16,maxResolution:78271.516953125,maxExtent:new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),resolutions:[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]}}};LLMAP.BaseMaps.BaseMap=Ext.extend(Ext.util.Observable,{id:null,name:null,format:"image/png8",overlayStyles:[],constructor:function(a){LLMAP.BaseMaps.BaseMap.superclass.constructor.call(this,a);Ext.apply(this,a);this.setProjection("EPSG:4326")},setProjection:function(b){var a={isBaseLayer:true,projection:new OpenLayers.Projection(b),transitionEffect:"resize",wrapDateLine:true};Ext.apply(a,LLMAP.BaseMaps.srsParams[b]);a.maxExtent=a.maxExtent.clone();this.base_layer=new OpenLayers.Layer.WMS(this.name,"http://barbara.linguistlist.org/geoserver/gwc/service/wms",{layers:this.id,format:this.format,tiled:true},a)}});LLMAP.BaseMaps.Satellite=Ext.extend(LLMAP.BaseMaps.BaseMap,{id:"blue-marble-500m",name:"Satellite",format:"image/jpeg",overlayStyles:["sbm-admin0-boundary","sbm-admin1-boundary","vbm-geography-regions-polys","vbm-geography-regions-points"]});LLMAP.BaseMaps.Vector=Ext.extend(LLMAP.BaseMaps.BaseMap,{id:"vector-base-map",name:"Map",format:"image/png8",overlayStyles:["vbm-admin0-boundary","vbm-admin1-boundary","vbm-geography-regions-polys","vbm-geography-regions-points"]});LLMAP.BaseMaps.DefaultOverlay=Ext.extend(LLMAP.UI.WMSMapLayer,{id:"default-overlay",name:"Base Map Features",url:"http://barbara.linguistlist.org/geoserver/wms?",isOverlay:true,srs:["EPSG:4326","EPSG:3857"],legend_options:["forceLabels:on","fontName:Arial Unicode MS","fontSize:12","fontStyle:normal","fontAntiAliasing:true"],constructor:function(a){a.layers=[];for(var c=0;c<LLMAP.BaseMaps.overlayLayers.length;c++){var b=LLMAP.BaseMaps.overlayLayers[c];a.layers.push({id:b.id,name:b.name,styleName:"",show_legend:b.show_legend,legend_title:b.legend_title,visible:b.visible})}if(typeof a.defaultVisibility=="object"){for(var c=0;c<a.layers.length;c++){a.layers[c].visible=a.defaultVisibility[c]?true:false}}LLMAP.BaseMaps.DefaultOverlay.superclass.constructor.call(this,a)},changeBaseMap:function(b){for(var a=0;a<this.layers.length;a++){this.layers[a].styleName=b.overlayStyles[a]}this.fireEvent("update",this)}});LLMAP.UI.ContactForm=Ext.extend(Ext.Window,{layout:"fit",title:"Contact LL-MAP",closable:false,hidden:false,modal:true,width:475,height:450,subject:"",message:"",initComponent:function(){Ext.apply(this,{items:[{xtype:"form",border:false,bodyStyle:"padding: 10px",labelAlign:"right",labelWidth:100,labelPadding:5,monitorValid:true,items:[{xtype:"textfield",name:"email",fieldLabel:"Your Email",width:320,allowBlank:false,emptyText:"Please enter your email address",blankText:"You must provide your email address",vtype:"email"},{xtype:"textfield",name:"name",fieldLabel:"Your Name",width:320,allowBlank:false,emptyText:"Please enter your full name",blankText:"You must provide your full name"},{xtype:"textfield",name:"institution",fieldLabel:"Affiliation",width:320,allowBlank:true},{xtype:"textfield",name:"subject",fieldLabel:"Subject",width:320,allowBlank:false,emptyText:"Please enter a subject",blankText:"You must enter a subject for your message",value:this.subject},{xtype:"textarea",name:"msgbody",fieldLabel:"Message",height:125,width:320,allowBlank:false,emptyText:"Please enter your reason for contacting us",blankText:"You must provide a message",value:this.message},{xtype:"recaptcha",name:"recaptcha",fieldLabel:"Verification",id:"recaptcha",publickey:"6LeTzrkSAAAAAATl1zNpgcXT6MwRHp9Ri5gnJNme",lang:"en",theme:"white"}],listeners:{scope:this,clientvalidation:function(a,b){this.buttons[0].setDisabled(!b)}}}],buttons:[{text:"Send Message",scope:this,handler:function(){this.sendMessage()}},{text:"Cancel",scope:this,handler:function(){this.close()}}]});LLMAP.UI.ContactForm.superclass.initComponent.call(this)},sendMessage:function(){this.getComponent(0).getForm().submit({url:"/contact.json",clientValidation:true,submitEmptyText:false,waitMsg:"Sending Message...",scope:this,success:function(a,b){this.close();Ext.Msg.alert("Success","Your message has been sent. We appreciate your feedback.")},failure:function(a,b){if(b.failureType===Ext.form.Action.CONNECT_FAILURE){Ext.Msg.alert("Error","Status:"+b.response.status+": "+b.response.statusText)}else{if(b.failureType===Ext.form.Action.SERVER_INVALID){if(b.result.errorMsg){Ext.Msg.alert("Error",b.result.errorMsg)}}}}})}});LLMAP.UI.GetFeatureInfo=function(a){this.id=Ext.id(null,"feature-info-");this.mp=a};LLMAP.UI.GetFeatureInfo.prototype.close=function(){if(this.transid){Ext.Ajax.abort(this.transid);delete this.transid}this.mp.removePopup(this.popup);this.popup.destroy();delete this.popup};LLMAP.UI.GetFeatureInfo.prototype.show=function(d,c){var b=this.mp.getMapConfig();var a=c.clone();a.transform(this.mp.getProjectionObject(),this.mp.getDisplayProjection());this.top='<div class="feature-info"><h1>Features near '+LLMAP.formatLat(a.lat)+", "+LLMAP.formatLon(a.lon)+'</h1><div class="feature-info-inner">';this.bottom="</div></div>";if(this.popup){this.close()}this.popup=new OpenLayers.Popup.FramedCloud(this.id,c,new OpenLayers.Size(400,300),this.top+this.bottom,null,true,this.close.createDelegate(this));this.popup.autoSize=false;this.popup.panMapIfOutOfView=true;this.mp.addPopup(this.popup);b.x=d.x;b.y=d.y;b.lon=c.lon;b.lat=c.lat;this.transid=Ext.Ajax.request({url:"/search/get_features.html",method:"POST",jsonData:b,scope:this,failure:function(){},success:function(e,f){this.popup.setContentHTML(this.top+e.responseText+this.bottom)}})};LLMAP.UI.Legend=Ext.extend(Ext.BoxComponent,{map_panel:null,legends:[],workbenchMode:false,initComponent:function(){this.addEvents("removemap","showcredits","zoommap")},attach:function(a){this.map_panel=a;a.addListener({scope:this,addmap:this.handleAddMap,mapstatechange:this.handleMapStateChange,removemap:this.handleRemoveMap})},findLegend:function(c){var b;for(var a=0;a<this.legends.length;a++){if(this.legends[a].map===c){return this.legends[a]}}return null},handleAddMap:function(c,s){s.addListener("setvisible",this.handleSetVisible,this);s.addListener("update",this.handleUpdate,this);if(s.show_legend){var g={tag:"div",cls:"legend-map"};var m;if(s.isOverlay){m=Ext.DomHelper.insertFirst(this.body,g,true);this.overlayEl=m}else{if(this.overlayEl){m=Ext.DomHelper.insertAfter(this.overlayEl,g,true)}else{m=Ext.DomHelper.insertFirst(this.body,g,true)}}m.setVisibilityMode(Ext.Element.DISPLAY);var n=Ext.DomHelper.append(m,{tag:"div",cls:"legend-map-title",html:s.name},true);if(!s.isOverlay){var j=Ext.DomHelper.append(n,{tag:"div",cls:"legend-map-controls"},true);if(!this.workbenchMode){var b=Ext.DomHelper.append(j,{tag:"img",cls:"legend-map-control",src:"/icons/silk/information.png"},true);b.on("click",function(){this.fireEvent("showcredits",s)},this);Ext.QuickTips.register({target:b,text:"About This Map"})}var e=Ext.DomHelper.append(j,{tag:"img",cls:"legend-map-control",src:"/icons/silk/zoom.png"},true);Ext.QuickTips.register({target:e,text:"Zoom to Bounds"});e.on("click",function(){this.fireEvent("zoommap",s)},this);var k=Ext.DomHelper.append(j,{tag:"img",cls:"legend-map-control",src:"/icons/silk/eye.png"},true);Ext.QuickTips.register({target:k,text:"Set Transparency"});k.on("click",function(){var i=new LLMAP.UI.TransparencyControl({map:s});i.show()},this);if(!this.workbenchMode){var h=Ext.DomHelper.append(j,{tag:"img",cls:"legend-map-control",src:"/icons/silk/delete.png"},true);Ext.QuickTips.register({target:h,text:"Remove Map"});h.on("click",function(){this.fireEvent("removemap",s)},this)}}var u=this.map_panel.olmap.getScale();var a={el:m,map:s,layers:[]};this.legends.push(a);for(var o=0;o<s.layers.length;o++){var t=s.layers[o];var q=Ext.DomHelper.append(m,{tag:"div",cls:"legend-map-layer",style:"display: none"},true);var d;var f;var r;q.setVisibilityMode(Ext.Element.DISPLAY);if(t.show_legend){r=s.getLegendGraphic(t,u)}if(t.legend_title||(r===undefined)){d=Ext.DomHelper.append(q,{tag:"h3",cls:"legend-layer-title",html:t.name},true)}if(r!==undefined){f=Ext.DomHelper.append(q,{tag:"img",cls:"legend-image",src:r},true)}var p={tag:"input",cls:"legend-layer-toggle",type:"checkbox"};if(t.visible){p.checked="checked"}var l=Ext.DomHelper.append(q,p,true);l.on("click",this.handleToggleLayer.createDelegate(this,[s,t]));a.layers.push({el:q,header:d,image:f,toggle:l})}this.handleUpdate(s)}},handleMapStateChange:function(c,b,a){},handleRemoveMap:function(a,d){d.removeListener("setvisible",this.handleSetVisible,this);d.removeListener("update",this.handleUpdate,this);if(d.isOverlay){this.overlayEl=null}for(var b=0;b<this.legends.length;b++){var c=this.legends[b];if(c.map===d){c.el.remove();this.legends.splice(b,1);break}}},handleSetVisible:function(a,c,b){},handleToggleLayer:function(b,a){if(a.visible){a.visible=false}else{a.visible=true}b.updateLayers()},handleToggleLegend:function(){var a=this.toggle;if(this.collapsed){a.removeClass("legend-collapsed");a.addClass("legend-expanded");this.collapsed=false;this.el.setHeight(this.origHeight)}else{a.removeClass("legend-expanded");a.addClass("legend-collapsed");this.origHeight=this.el.getHeight();this.el.setHeight(this.header.getHeight());this.collapsed=true}},handleUpdate:function(d){var c=this.findLegend(d);for(var b=0;b<d.layers.length;b++){var a=d.layers[b];c.layers[b].el.setVisible(a.in_range&&(a.show_legend||a.legend_title));c.layers[b].toggle.dom.checked=a.visible}},onRender:function(b,a){var c={tag:"div",cls:"legend-panel"};if(a){this.el=Ext.DomHelper.insertBefore(a,c,true)}else{this.el=Ext.DomHelper.append(b,c,true)}if(this.id){this.el.dom.id=this.id}this.header=Ext.DomHelper.append(this.el,{tag:"h1",html:"Legend"},true);this.toggle=Ext.DomHelper.append(this.el,{tag:"div",cls:"legend-expanded"},true);this.body=Ext.DomHelper.append(this.el,{tag:"div",cls:"legend-body"},true);this.toggle.addListener({scope:this,click:this.handleToggleLegend});this.collapsed=false},setHeight:function(a,b){if(this.collapsed){this.origHeight=a}else{LLMAP.UI.Legend.superclass.setHeight.call(this,a,b);this.body.setHeight(a-this.header.getHeight())}}});LLMAP.UI.LoginPanel=Ext.extend(Ext.FormPanel,{border:false,initComponent:function(){Ext.apply(this,{bodyStyle:"padding: 10px",buttonAlign:"center",labelWidth:75,labelAlign:"right",defaults:{labelStyle:"font-weight: bold;"},items:[{xtype:"textfield",name:"login",fieldLabel:"Login ID",anchor:"100%"},{xtype:"textfield",name:"password",inputType:"password",fieldLabel:"Password",anchor:"100%"}],keys:[{key:[Ext.EventObject.ENTER],scope:this,handler:this.submitLogin}],fbar:[{text:"Log In",scope:this,handler:this.submitLogin}]});LLMAP.UI.LoginPanel.superclass.initComponent.call(this);this.addEvents("login","error")},submitLogin:function(){this.getForm().submit({clientValidation:false,url:"/account/login-action.json",scope:this,success:function(a,b){this.fireEvent("login")},failure:function(a,b){var c;switch(b.failureType){case Ext.form.Action.CONNECT_FAILURE:c="Unable to communicate with the server. Please try again in a few minutes.";break;case Ext.form.Action.SERVER_INVALID:c=b.result.message;break;default:c="Unknown Error";break}this.fireEvent("error",this,c)}})}});LLMAP.UI.AccountRecoveryPanel=Ext.extend(Ext.FormPanel,{border:false,width:500,height:200,initComponent:function(){Ext.apply(this,{bodyStyle:"padding: 10px",buttonAlign:"center",labelWidth:125,labelAlign:"right",defaults:{labelStyle:"font-weight: bold;"},items:[{xtype:"textfield",name:"email",fieldLabel:"Your Email Address",width:320},{xtype:"recaptcha",name:"recaptcha",fieldLabel:"Verification",id:"recaptcha",publickey:"6LeTzrkSAAAAAATl1zNpgcXT6MwRHp9Ri5gnJNme",lang:"en",theme:"white"}],fbar:[{text:"Submit Request",scope:this,handler:this.submitRequest}]});LLMAP.UI.AccountRecoveryPanel.superclass.initComponent.call(this);this.addEvents("success","error")},submitRequest:function(){this.getForm().submit({clientValidation:false,url:"/account/recover-action.json",scope:this,success:function(a,b){this.fireEvent("success",this)},failure:function(a,b){var c;switch(b.failureType){case Ext.form.Action.CONNECT_FAILURE:c="Unable to communicate with the server. Please try again in a few minutes.";break;case Ext.form.Action.SERVER_INVALID:c=b.result.message;break;default:c="Unknown Error";break}this.fireEvent("error",this,c)}})}});LLMAP.UI.LoginWindow=Ext.extend(Ext.Window,{initComponent:function(){Ext.apply(this,{layout:"fit",title:"Login to LL-MAP",modal:true,border:false,height:215,width:300,items:{xtype:"form",ref:"form_panel",bodyStyle:"padding: 10px;",items:[{xtype:"displayfield",hideLabel:true,cls:"login-window-msg",value:"Please log in with your LL-MAP account in order to continue."},{xtype:"textfield",name:"login",fieldLabel:"User ID",width:150},{xtype:"textfield",name:"password",inputType:"password",fieldLabel:"Password",width:150},{xtype:"displayfield",name:"message",hideLabel:true,cls:"login-window-error",value:""}],keys:[{key:[Ext.EventObject.ENTER],scope:this,handler:this.submitLogin}],buttons:[{text:"Log In",scope:this,handler:this.submitLogin},{text:"Cancel",scope:this,handler:function(){this.hide();this.fireEvent("loginfailure")}}]},listeners:{scope:this,show:function(){this.form_panel.getForm().findField("login").focus(false,25)}}});LLMAP.UI.LoginWindow.superclass.initComponent.call(this);this.addEvents("loginsuccess","loginfailure")},submitLogin:function(){var a;this.form_panel.getForm().submit({clientValidation:false,url:"/account/login-action.json",scope:this,success:function(b,c){this.hide();this.fireEvent("loginsuccess",c.result.data)},failure:function(b,c){switch(c.failureType){case Ext.form.Action.CONNECT_FAILURE:a="Unable to communicate with the server. Please try again in a few minutes.";break;case Ext.form.Action.SERVER_INVALID:a=c.result.message;break;default:a="Unknown Error";break}this.form_panel.getForm().findField("message").setValue(a)}})}});OpenLayers.Projection.addTransform("EPSG:4326","EPSG:3857",OpenLayers.Layer.SphericalMercator.projectForward);OpenLayers.Projection.addTransform("EPSG:3857","EPSG:4326",OpenLayers.Layer.SphericalMercator.projectInverse);OpenLayers.DOTS_PER_INCH=25.4/0.28;LLMAP.UI.MapPanel=Ext.extend(Ext.Panel,{srs:"EPSG:4326",controls:[],maps:[],initComponent:function(){Ext.applyIf(this,{enableDD:false,zoom:4,lon:0,lat:0,basemap:null,maps:[],use_zoom_bar:true});this.addEvents("addmap","olclick","olrightclick","mapmove","mapready","mapstatechange","removemap","setbasemap","srschange");LLMAP.UI.MapPanel.superclass.initComponent.call(this)},afterRender:function(){LLMAP.UI.MapPanel.superclass.afterRender.apply(this,arguments);if(!this.ownerCt){this.renderMap()}else{this.ownerCt.addListener({scope:this,single:true,afterlayout:this.renderMap});this.ownerCt.addListener({scope:this,move:this.updateMapSize})}},renderMap:function(){var d=new OpenLayers.Map(this.body.dom,{controls:[],displayProjection:new OpenLayers.Projection("EPSG:4326"),units:"degrees"});this.body.setStyle("background-color","#94B9D6");this.loading=new LLMAP.UI.LoadingIndicator(this.body);var e=new OpenLayers.Control.Navigation({handleRightClicks:true});var c;if(this.use_zoom_bar){c=new OpenLayers.Control.PanZoomBar()}else{c=new OpenLayers.Control.PanZoom()}d.addControl(c);d.addControl(e);d.addControl(new OpenLayers.Control.ZoomBox());e.handlers.click.callbacks.click=this.handleClick.createDelegate(this);e.handlers.click.callbacks.rightclick=this.handleRightClick.createDelegate(this);if(this.controls.length){d.addControls(this.controls)}d.events.register("moveend",this,function(f){this.fireEvent("mapmove",this)});this.olmap=d;this.slider=c;if(this.basemap){this.basemaps=[this.basemap];delete this.basemap}this.setBaseMap(this.basemaps[0]);if(this.overlay){this.doAddMap(this.overlay)}this.setControlOffsets(0,0,0,0);if(this.enableDD){var b={ddGroup:"MapDD",getTargetFromEvent:function(f){return},notifyDrop:this.notifyDrop.createDelegate(this),notifyEnter:function(g,h,f){if(h.getTarget(".olMapViewport")&&g.dragData.node.attributes.map_id){if(this.overClass){this.el.addClass(this.overClass)}return this.dropAllowed}else{return this.dropNotAllowed}},notifyOver:function(g,h,f){if(h.getTarget(".olMapViewport")&&g.dragData.node.attributes.map_id){return this.dropAllowed}else{return this.dropNotAllowed}}};if(this.dropConfig){Ext.apply(b,this.dropConfig)}this.dt=new Ext.dd.DropTarget(this.olmap.viewPortDiv,b)}this.setDefaultCenter();for(var a=0;a<this.maps.length;a++){this.doAddMap(this.maps[a])}this.fireEvent("mapready",this)},addControl:function(a){if(this.olmap){this.olmap.addControl(a)}else{this.controls.push(a)}},addMap:function(a){if(a.isSupportedProjection(this.srs)){this.maps.push(a);if(this.olmap){this.doAddMap(a)}}else{Ext.MessageBox.show({title:"Incompatible Map",msg:'The map "'+a.name+'" cannot be added, because it does not support the current map projection.',buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR,width:400});return}},addPopup:function(a){this.olmap.addPopup(a)},clearMap:function(){var a=this.maps.length;while(--a>=0){this.doRemoveMap(this.maps[a]);this.maps.splice(a,1)}if(this.overlay){for(a=0;a<this.overlay.layers.length;a++){this.overlay.layers[a].visible=false}this.overlay.updateLayers()}},doAddMap:function(a){a.updateLayers();this.olmap.addLayer(a.map_layer);if(this.overlay){this.olmap.setLayerIndex(this.overlay.map_layer,this.olmap.getNumLayers()-1)}this.fireEvent("addmap",this,a)},doRemoveMap:function(a){this.olmap.removeLayer(a.map_layer);this.fireEvent("removemap",this,a)},getExtent:function(){var a=this.olmap.getExtent().toArray();return{minx:a[0],miny:a[1],maxx:a[2],maxy:a[3]}},getMapConfig:function(){var c=this.olmap.getExtent();var a={basemap:this.basemap.id,overlay:null,srs:this.olmap.getProjection(),width:this.olmap.size.w,height:this.olmap.size.h,minx:c.left,miny:c.bottom,maxx:c.right,maxy:c.top,maps:[]};if(this.overlay!==undefined){a.overlay={id:this.overlay.id,layers:this.overlay.getVisibleLayers()}}for(var b=0;b<this.maps.length;b++){var d=this.maps[b];if(d.ref){a.maps.push({ref:d.ref,opacity:d.map_layer.opacity,layers:d.getVisibleLayers()})}}return a},getMaps:function(){return this.maps},getDisplayProjection:function(){return this.olmap.displayProjection},getNumMaps:function(){return this.maps.length},getProjection:function(){return this.olmap.getProjection()},getProjectionObject:function(){return this.olmap.getProjectionObject()},handleClick:function(a){this.fireEvent("olclick",a)},handleRightClick:function(a){this.fireEvent("olrightclick",a)},loadMap:function(a,d,b){var c;if(this.loading){this.loading.show()}if(typeof a=="object"){c=Ext.Ajax.request({method:"GET",url:"/proxy/service-info.json",params:a,client_scope:b,client_callback:d,scope:this,failure:function(){if(this.loading){this.loading.hide()}},success:function(e,f){if(this.loading){this.loading.hide()}this.onLoadMap(e,f)}})}else{c=Ext.Ajax.request({method:"GET",url:a,client_scope:b,client_callback:d,scope:this,failure:function(){this.loading.hide()},success:function(e,f){this.loading.hide();this.onLoadMap(e,f)}})}},notifyDrop:function(c,d,b){var a=c.dragData.node.attributes.map_id;if(d.getTarget(".olMapViewport")&&a){this.loadMap("/maps/"+a+"/map_layer.json",this.addMap,this)}},onLoadMap:function(b,c){var a=Ext.decode(b.responseText);if(a.success){var e=a.data;var d=e.type;var f;if(d=="std"){f=new LLMAP.UI.StdMapLayer(e)}else{f=new LLMAP.UI.WMSMapLayer(e)}c.client_callback.call(c.client_scope,f)}else{Ext.MessageBox.show({title:"Error",msg:"The map could not be loaded. "+a.message,buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.ERROR,width:400})}},onResize:function(){LLMAP.UI.MapPanel.superclass.onResize.apply(this,arguments);this.updateMapSize()},removeMap:function(b){for(var a=0;a<this.maps.length;a++){if(this.maps[a]===b){this.maps.splice(a,1);this.doRemoveMap(b);break}}},removePopup:function(a){this.olmap.removePopup(a)},setBaseMap:function(a){if(this.basemap){this.olmap.removeLayer(this.basemap.base_layer)}this.basemap=a;this.basemap.setProjection(this.srs);this.olmap.addLayer(this.basemap.base_layer);this.olmap.setBaseLayer(this.basemap.base_layer);if(this.overlay){this.overlay.changeBaseMap(this.basemap);this.overlay.updateLayers()}if(!this.olmap.center){this.setDefaultCenter()}this.fireEvent("setbasemap",this,this.basemap)},setProjection:function(d){var e=[];for(var c=0;c<this.maps.length;c++){var f=this.maps[c];var b=f.isSupportedProjection(d);if(f.enabled!==b){f.setEnabled(b);f.updateLayers();this.fireEvent("mapstatechange",this,f,b)}if(!b){e.push(f.name)}}if(e.length){var g;if(e.length==1){g='<p>The map "'+e[0]+'" is not compatible with the new projection you have chosen. It has been disabled until you switch to a compatible projection.</p>'}else{g='<p>Some of the maps you are currently viewing are not compatible with the new projection you have chosen. The following maps have been disabled until you switch to a compatible projection:</p><ul style="list-style: disc outside; padding-left: 15px">';for(var a=0;a<e.length;a++){g=g+"<li>"+e[a]+"</li>"}g=g+"</ul>"}Ext.MessageBox.show({title:"Warning",icon:Ext.MessageBox.WARNING,msg:g,buttons:Ext.MessageBox.OK,closable:false,width:450})}this.olmap.removeLayer(this.basemap.base_layer);this.srs=d;this.basemap.setProjection(d);this.olmap.center=null;this.olmap.addLayer(this.basemap.base_layer);this.olmap.setBaseLayer(this.basemap.base_layer);this.olmap.zoomToExtent(this.basemap.base_layer.maxExtent);this.fireEvent("srschange",this,d)},setControlOffsets:function(c,b,d,a){if(this.slider){this.slider.moveTo(new OpenLayers.Pixel(c,d))}},setDefaultCenter:function(){var a=new OpenLayers.LonLat(this.lon,this.lat);this.olmap.setCenter(a,this.zoom,false,true)},updateMaps:function(){for(var a=0;a<this.maps.length;a++){this.maps[a].updateLayers()}},updateMapSize:function(){if(this.olmap){this.olmap.updateSize()}},zoomToBounds:function(d,c,b,a){var f=new OpenLayers.LonLat(d,c);var e=new OpenLayers.LonLat(b,a);f.transform(this.olmap.displayProjection,this.olmap.getProjectionObject());e.transform(this.olmap.displayProjection,this.olmap.getProjectionObject());this.olmap.zoomToExtent(new OpenLayers.Bounds(f.lon,f.lat,e.lon,e.lat))}});LLMAP.UI.BaseMapControl=Ext.extend(Ext.BoxComponent,{basemaps:[],selectedIndex:0,map:null,initComponent:function(){LLMAP.UI.BaseMapControl.superclass.initComponent.apply(this,arguments);this.addEvents("change")},onRender:function(b,a){LLMAP.UI.BaseMapControl.superclass.onRender.apply(this,arguments);var f=[];var e={tag:"div",cls:"llmap-bmc",children:[{tag:"table",children:[{tag:"tr",children:f}]}]};for(var c=0;c<this.map.basemaps.length;c++){var d=this.map.basemaps[c];if(c==this.selectedIndex){f.push({tag:"td",cls:"llmap-bmc-selected",html:d.base_layer.name})}else{f.push({tag:"td",html:d.base_layer.name})}}if(a){this.el=Ext.DomHelper.insertBefore(a,e,true)}else{this.el=Ext.DomHelper.append(b,e,true)}if(this.id){this.el.dom.id=this.id}this.cells=this.el.select("td");this.cells.addClassOnOver("llmap-bmc-hover");this.cells.on("click",function(h){var g=h.target.cellIndex;if(g!=this.selectedIndex){this.cells.removeClass("llmap-bmc-selected");Ext.get(h.target).addClass("llmap-bmc-selected");this.selectedIndex=g;this.map.setBaseMap(this.map.basemaps[g])}},this)}});LLMAP.UI.TransparencyControl=Ext.extend(Ext.Window,{map:null,initComponent:function(){var a=100-(this.map.map_layer.opacity*100);Ext.apply(this,{layout:"border",title:"Change Transparency",height:150,width:375,closable:false,buttons:[{text:"Close",scope:this,handler:function(){this.close()}}],items:[{region:"center",bodyStyle:"padding: 10px",items:{xtype:"slider",anchor:"-10",increment:1,minValue:0,maxValue:100,value:a,vertical:false,listeners:{scope:this,change:function(c,d,b){this.statusPanel.body.update(this.formatValue(d));this.map.map_layer.setOpacity((100-d)/100)}}}},{region:"south",ref:"statusPanel",bodyStyle:"padding: 5px; font-size: 14px; font-weight: bold; height: 20px; text-align: center;",html:this.formatValue(a)}]});LLMAP.UI.TransparencyControl.superclass.initComponent.call(this)},formatValue:function(a){return a+"%"}});LLMAP.UI.TemporalControl=Ext.extend(Ext.Window,{map:null,initComponent:function(){Ext.apply(this,{layout:"border",title:"Change Year",height:150,width:375,closable:false,buttons:[{text:"Close",scope:this,handler:function(){this.close()}}],items:[{region:"center",bodyStyle:"padding: 10px",items:{xtype:"slider",anchor:"-10",increment:this.map.year_increment,minValue:this.map.start_year,maxValue:this.map.end_year,value:this.map.current_year,vertical:false,listeners:{scope:this,change:function(b,c,a){this.statusPanel.body.update(this.formatYear(c))},changecomplete:function(b,c,a){this.map.setYear(c)}}}},{region:"south",ref:"statusPanel",bodyStyle:"padding: 5px; font-size: 14px; font-weight: bold; height: 20px; text-align: center;",html:this.formatYear(this.map.current_year)}]});LLMAP.UI.TemporalControl.superclass.initComponent.call(this)},formatYear:function(a){var b=(a<0)?"BC":"AD";return Math.abs(a)+" "+b}});LLMAP.UI.MapPanel.Control=Ext.extend(Ext.BoxComponent,{map:null,icon:null,tooltip:null,onRender:function(b,a){var c={tag:"img",cls:"map-panel-control",src:this.icon};if(a){this.el=Ext.DomHelper.insertBefore(a,c,true)}else{this.el=Ext.DomHelper.append(b,c,true)}if(this.id){this.el.dom.id=this.id}this.el.on("click",function(f,d,g){this.onClick(f,d,g)},this);if(this.tooltip){Ext.QuickTips.register({target:this.el,text:this.tooltip})}},onClick:function(b,a,c){}});LLMAP.UI.MapPanel.Projection=Ext.extend(LLMAP.UI.MapPanel.Control,{icon:"/icons/geosilk/ruler.png",tooltip:"Change the display projection of the map",onClick:function(d,c,f){var b=parseInt(this.map.getProjection().replace(/^EPSG:/,""));var a=new LLMAP.UI.ProjectionChooser({value:b,listeners:{scope:this,select:function(e,g){this.map.setProjection("EPSG:"+g)}}});a.show()}});LLMAP.UI.MapPanel.SetYear=Ext.extend(LLMAP.UI.MapPanel.Control,{icon:"/icons/silk/clock.png",tooltip:"Change map display to a different year",onClick:function(b,a,c){}});LLMAP.UI.MapPanel.Options=Ext.extend(Ext.BoxComponent,{title:null,controls:[],rendered:false,initComponent:function(){LLMAP.UI.MapPanel.Options.superclass.initComponent.call(this)},addControl:function(a){this.controls.push(a);if(this.rendered){a.render(this.inner)}},onRender:function(b,a){var d={tag:"div",cls:"map-options-panel"};if(a){this.el=Ext.DomHelper.insertBefore(a,d,true)}else{this.el=Ext.DomHelper.append(b,d,true)}if(this.id){this.el.dom.id=this.id}if(this.title){Ext.DomHelper.append(this.el,{tag:"h1",html:this.title})}this.inner=Ext.DomHelper.append(this.el,{tag:"div",cls:"map-options-inner"},true);this.rendered=true;for(var e=0;e<this.controls.length;e++){var f=this.controls[e];f.render(this.inner)}}});LLMAP.UI.ProjectionChooser=Ext.extend(Ext.Window,{value:4326,initComponent:function(){Ext.apply(this,{layout:"fit",title:"Change Map Projection",height:324,width:600,closable:false,autoScroll:true,buttons:[{iconCls:"icon-projection",text:"Set Projection",scope:this,handler:this.setProjection},{iconCls:"icon-cancel",text:"Close",scope:this,handler:function(){this.close()}}],items:{xtype:"dataview",ref:"dataView",border:false,itemSelector:"div.proj-info",overClass:"proj-info-over",selectedClass:"proj-info-selected",singleSelect:true,store:LLMAP.SRS.zfCreateStore({proxyOptions:{url:"/srs/preferred.json",},autoLoad:true,writeable:false}),tpl:new Ext.XTemplate('<tpl for=".">','<div class="proj-info" id="epsg{srid}">','<div class="proj-info-preview">','<img alt="Preview" src="/images/proj/{srid}-small.png" />',"</div>",'<div class="proj-info-description">',"<h1>{label}</h1>","{description}","</div>","</div>",'<div class="x-clear"></div>',"</tpl>"),listeners:{scope:this,dblclick:this.setProjection}}});LLMAP.UI.ProjectionChooser.superclass.initComponent.call(this);this.addEvents("select");this.dataView.getStore().on("load",function(){if(this.value){this.dataView.select("epsg"+this.value)}},this)},setProjection:function(){var a=this.dataView.getSelectedRecords();this.fireEvent("select",this,a[0].get("srid"));this.close()}});LLMAP.Preferences={cookieName:"llmap_mapui",prefs:{},init:function(){},create:function(b){var c=b.xtype;var a;if(c=="yesno"){a=new LLMAP.YesNoPref(b)}else{if(c=="showtip"){a=new LLMAP.ShowTipPref(b)}else{return null}}this.prefs[a.name]=a;return a},get:function(a,d,b,c){return this.prefs[a].get(this,d,b,c)},load:function(){var c=new Date();var e=new Ext.state.CookieProvider({expires:new Date(c.getTime()+(1000*60*60*24*365*10))});var d=e.get(this.cookieName,{});for(var b in d){var a=this.prefs[b];if(a){a.value=d[b]}}this.provider=e},save:function(){var b={};for(var a in this.prefs){b[a]=this.prefs[a].value}this.provider.set(this.cookieName,b)}};LLMAP.Pref=function(a){Ext.applyIf(a,{name:"preference",title:"Preference",text:"What is the airspeed velocity of an unladen swallow?",value:null});Ext.apply(this,a)};LLMAP.ShowTipPref=Ext.extend(LLMAP.Pref,{title:"LL-MAP Tip",get:function(a,d,b,c){if(this.value===null){Ext.Msg.show({title:this.title,msg:this.text,icon:Ext.MessageBox.INFO,buttons:{ok:true,cancel:"Don't show this again"},scope:this,fn:function(e){if(e!="ok"){this.value=true;a.save()}d.call(b,this,this.value,c)}})}else{d.call(b,this,this.value,c)}}});LLMAP.YesNoPref=Ext.extend(LLMAP.Pref,{get:function(a,d,b,c){if(this.value===null){Ext.Msg.show({title:this.title,msg:this.text,icon:Ext.MessageBox.QUESTION,buttons:{yes:true,no:true,cancel:"Don't ask again"},scope:this,fn:function(e){var f;if(e=="yes"){f=true}else{if(e=="no"){f=false}else{this.value=f=false;a.save()}}d.call(b,this,f,c)}})}else{d.call(b,this,this.value,c)}}});Ext.namespace("LLMAP.UI.Social");LLMAP.UI.Social.Control=Ext.extend(Ext.BoxComponent,{href:null,icon:null,tooltip:null,onRender:function(b,a){var c={tag:"img",cls:"social-control",src:this.icon};if(a){this.el=Ext.DomHelper.insertBefore(a,c,true)}else{this.el=Ext.DomHelper.append(b,c,true)}if(this.id){this.el.dom.id=this.id}this.el.on("click",function(f,d,g){this.onClick(f,d,g)},this);if(this.tooltip){Ext.QuickTips.register({target:this.el,text:this.tooltip})}},onClick:function(b,a,c){}});LLMAP.UI.Social.FBShare=Ext.extend(LLMAP.UI.Social.Control,{icon:"/icons/social/facebook.png",tooltip:"Share this map via Facebook",onClick:function(d,c,f){var b;if(typeof this.href=="function"){b=this.href.call(this)}else{b=this.href}var a=window.open("https://www.facebook.com/sharer.php?u="+encodeURIComponent(b),"fbshare","status=0,toolbar=0,location=0,height=400,width=600")}});LLMAP.UI.Social.FBLike=Ext.extend(LLMAP.UI.Social.Control,{font:"arial",layout:"button_count",send:"false",show_faces:"false",height:21,width:90,onRender:function(b,a){var c={tag:"div",cls:"social-control"};if(a){this.el=Ext.DomHelper.insertBefore(a,c,true)}else{this.el=Ext.DomHelper.append(b,c,true)}if(this.id){this.el.dom.id=this.id}Ext.DomHelper.append(this.el,'<iframe src="//www.facebook.com/plugins/like.php?href='+encodeURIComponent(this.href)+"&send="+this.send+"&layout="+this.layout+"&width="+this.width+"&show_faces="+this.show_faces+"&font="+this.font+'" scrolling="no" frameborder="0" style="border:none; width:'+this.width+"px; height:"+this.height+'px"></iframe>')}});LLMAP.UI.Social.GooglePlus=Ext.extend(LLMAP.UI.Social.Control,{size:"small",annotation:"none",onRender:function(b,a){var c={tag:"div",cls:"social-control"};if(a){this.el=Ext.DomHelper.insertBefore(a,c,true)}else{this.el=Ext.DomHelper.append(b,c,true)}if(this.id){this.el.dom.id=this.id}this.plusone=Ext.DomHelper.append(this.el,"<div></div>",true);gapi.plusone.render(this.plusone.id,{href:this.href,size:this.size,annotation:this.annotation})}});LLMAP.UI.Social.Twitter=Ext.extend(LLMAP.UI.Social.Control,{count:"horizontal",text:null,url:null,via:null,height:21,width:55,onRender:function(b,a){var d={tag:"div",cls:"social-control"};if(a){this.el=Ext.DomHelper.insertBefore(a,d,true)}else{this.el=Ext.DomHelper.append(b,d,true)}if(this.id){this.el.dom.id=this.id}var c="//platform.twitter.com/widgets/tweet_button.html?count="+this.count;if(this.url){c=c+"&url="+encodeURIComponent(this.url)}if(this.text){c=c+"&text="+encodeURIComponent(this.text)}if(this.via){c=c+"&via="+encodeURIComponent(this.via)}Ext.DomHelper.append(this.el,'<iframe allowtransparency="true" frameborder="0" scrolling="no" src="'+c+'" style="width:'+this.width+"px; height:"+this.height+'px;"></iframe>')}});LLMAP.UI.Social.Email=Ext.extend(LLMAP.UI.Social.Control,{icon:"/icons/social/email.png",tooltip:"Email this map to a friend",action:null,options:null,onClick:function(d,c,f){var b=this.options;if(typeof this.options=="function"){b=this.options.call()}else{b=this.options}var a=new LLMAP.UI.EmailForm({action:this.action,options:b});a.show()}});LLMAP.UI.Social.Cite=Ext.extend(LLMAP.UI.Social.Control,{icon:"/icons/social/cite.png",tooltip:"Get a citation for this map",citation:"",onClick:function(b,a,c){Ext.MessageBox.show({title:"Citation",icon:Ext.MessageBox.INFO,msg:"Copy and paste the citation below to cite this map in a publication:",prompt:true,value:this.citation,buttons:Ext.MessageBox.OK,width:600})}});LLMAP.UI.Social.PermaLink=Ext.extend(LLMAP.UI.Social.Control,{icon:"/icons/social/permalink.png",tooltip:"Get a permanent link to this map",onClick:function(c,b,d){var a;if(typeof this.href=="function"){a=this.href.call()}else{a=this.href}Ext.MessageBox.show({title:"Permalink",icon:Ext.MessageBox.INFO,msg:"Copy and paste the link below to share this map:",prompt:true,value:a,buttons:Ext.MessageBox.OK,width:600})}});LLMAP.UI.EmailForm=Ext.extend(Ext.Window,{layout:"fit",title:"Share via Email",closable:false,hidden:false,modal:true,width:475,height:425,action:null,options:{},initComponent:function(){Ext.apply(this,{items:[{xtype:"form",border:false,bodyStyle:"padding: 10px",labelAlign:"right",labelWidth:100,labelPadding:5,monitorValid:true,baseParams:this.options,items:[{xtype:"textfield",name:"from_name",fieldLabel:"Your Name",width:320,allowBlank:false,emptyText:"Please enter your name",blankText:"You must provide your name",value:LLMAP.account===null?"":LLMAP.account.userfn+" "+LLMAP.account.userln},{xtype:"textfield",name:"from_email",fieldLabel:"Your Email",width:320,allowBlank:false,emptyText:"Please enter your email address",blankText:"You must provide your email address",value:LLMAP.account===null?"":LLMAP.account.email,vtype:"email"},{xtype:"textfield",name:"to_email",fieldLabel:"Friend's Email",width:320,allowBlank:false,emptyText:"Please enter the destination email address",blankText:"You must provide a destination email address",vtype:"email"},{xtype:"textarea",name:"note",fieldLabel:"Note",height:125,width:320,allowBlank:true,emptyText:"Enter an optional note to add to this message"},{xtype:"recaptcha",name:"recaptcha",fieldLabel:"Verification",id:"recaptcha",publickey:"6LeTzrkSAAAAAATl1zNpgcXT6MwRHp9Ri5gnJNme",lang:"en",theme:"white"}],listeners:{scope:this,clientvalidation:function(a,b){this.buttons[0].setDisabled(!b)}}}],buttons:[{text:"Send Message",scope:this,handler:function(){this.sendMessage()}},{text:"Cancel",scope:this,handler:function(){this.close()}}]});LLMAP.UI.EmailForm.superclass.initComponent.call(this)},sendMessage:function(){this.getComponent(0).getForm().submit({url:this.action,clientValidation:true,submitEmptyText:false,waitMsg:"Sending Message...",scope:this,success:function(a,b){this.close();Ext.Msg.alert("Success","Your message has been sent.")},failure:function(a,b){if(b.failureType===Ext.form.Action.CONNECT_FAILURE){Ext.Msg.alert("Error","Status:"+b.response.status+": "+b.response.statusText)}else{if(b.failureType===Ext.form.Action.SERVER_INVALID){if(b.result.errorMsg){Ext.Msg.alert("Error",b.result.errorMsg)}}}}})}});LLMAP.UI.ProjectionSelector=Ext.extend(Ext.form.TriggerField,{editable:false,submitValue:undefined,getValue:function(){return Ext.isDefined(this.value)?this.value:""},initEvents:function(){},onRender:function(b,a){if(this.hiddenName&&!Ext.isDefined(this.submitValue)){this.submitValue=false}LLMAP.UI.ProjectionSelector.superclass.onRender.call(this,b,a);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:"input",type:"hidden",name:this.hiddenName,id:(this.hiddenId||Ext.id())},"before",true)}},onTriggerClick:function(){var a=new LLMAP.UI.SRSBrowser({listeners:{scope:this,select:function(b,c){this.setValue(c.get("srid")+";"+c.get("label"))}}});a.show()},setValue:function(b){var a=b.split(";");var c;if(a.length<2){c="EPSG:"+b}else{b=a[0];c=a[1]}if(this.hiddenField){this.hiddenField.value=Ext.value(b,"")}LLMAP.UI.ProjectionSelector.superclass.setValue.call(this,c);this.value=b;return this}});LLMAP.UI.SRSGrid=Ext.extend(Ext.grid.GridPanel,{initComponent:function(){Ext.apply(this,{xtype:"grid",colModel:new Ext.grid.ColumnModel([{id:"srid",dataIndex:"srid",header:"SRID",width:75,sortable:true,groupable:false},{id:"name",dataIndex:"name",header:"SRS Name",width:300,sortable:true,groupable:false,resizable:false},{id:"preferred",dataIndex:"preferred",header:"Preferred",width:25,hidden:true,sortable:true,groupable:true,resizable:false,groupRenderer:function(a){if(a){return"Preferred"}else{return"Other"}}}]),sm:new Ext.grid.RowSelectionModel({singleSelect:true}),autoExpandColumn:"name",view:new Ext.grid.GroupingView({groupTextTpl:"{group}"})});LLMAP.UI.SRSGrid.superclass.initComponent.call(this)}});LLMAP.UI.SRSBrowser=Ext.extend(Ext.Window,{initComponent:function(){this.store=LLMAP.SRS.zfCreateStore({autoLoad:{params:{start:0,limit:10}},grouping:true,groupField:"preferred",remoteSort:true});Ext.apply(this,{title:"Select SRS",layout:"fit",modal:true,height:352,width:500,items:new LLMAP.UI.SRSGrid({ref:"srs_grid",border:false,height:250,width:415,store:this.store,tbar:[],bbar:new Ext.PagingToolbar({store:this.store,pageSize:10,displayInfo:true,displayMsg:"Results {0} - {1} of {2}",emptyMsg:"No matches"}),plugins:[new Ext.ux.grid.Search({autoFocus:true,checkIndexes:["srid","name"],menuStyle:"radio",minChars:2,mode:"remote",position:"top",width:400})],listeners:{scope:this,rowclick:function(a,c,b){this.select_button.setDisabled(false)},rowdblclick:this.selectSRS}}),buttons:[{text:"Select",ref:"../select_button",iconCls:"icon-arrow-right",width:125,scope:this,disabled:true,handler:this.selectSRS},{text:"Cancel",scope:this,handler:function(){this.close()}}]});LLMAP.UI.SRSBrowser.superclass.initComponent.call(this);this.addEvents("select")},selectSRS:function(){var a=this.srs_grid.getSelectionModel().getSelected();this.fireEvent("select",this,a);this.close()}});LLMAP.UI.UploadPanel=Ext.extend(Ext.FormPanel,{mode:"data",initComponent:function(){Ext.apply(this,{bodyStyle:"padding: 10px",fileUpload:true,labelWidth:50,items:[{xtype:"fileuploadfield",name:"filename1",fieldLabel:"File #1",allowBlank:true,emptyText:"Select a file...",buttonText:"",buttonCfg:{iconCls:"icon-folder-go"},anchor:"100%"},{xtype:"fileuploadfield",name:"filename2",fieldLabel:"File #2",allowBlank:true,emptyText:"Select a file...",buttonText:"",buttonCfg:{iconCls:"icon-folder-go"},anchor:"100%"},{xtype:"fileuploadfield",name:"filename3",fieldLabel:"File #3",allowBlank:true,emptyText:"Select a file...",buttonText:"",buttonCfg:{iconCls:"icon-folder-go"},anchor:"100%"},{xtype:"fileuploadfield",name:"filename4",fieldLabel:"File #4",allowBlank:true,emptyText:"Select a file...",buttonText:"",buttonCfg:{iconCls:"icon-folder-go"},anchor:"100%"},{xtype:"displayfield",name:"message",hideLabel:true,cls:"upload-window-error",value:""},{xtype:"hidden",name:"mode",value:this.mode}]});LLMAP.UI.UploadPanel.superclass.initComponent.call(this);this.addEvents("uploadcomplete","uploadfailed")},beginUpload:function(){this.getForm().submit({url:"/uploads.json",scope:this,waitMsg:"Uploading files...",success:function(a,b){this.fireEvent("uploadcomplete",this,b.result)},failure:function(a,b){this.fireEvent("uploadfailed",this,b.result)}})}});
