var mapview;var savedPos;var stCh;var TIMEOUT=30000;var TOOLBAR_HEIGHT=50;var SB_HEIGHT=27;var INFO_WND_WIDTH=200;var INFO_WND_HEIGHT=150;var S_WND_WIDTH=680;var S_WND_HEIGHT=450;var L_WND_WIDTH=270;var L_WND_HEIGHT=180;var ID_SEP='_';var MAX_SCALE=500;var MIN_SCALE=3000000;var MS_PART='ms';var LS_PART='ls';var KEY_PART='key';var SC_PART='sc';var X_PART='x';var Y_PART='y';var V_PART='v';var ST_PART='st';var H_PART='hn';var G_PART='g';var URL_VER='2.0';var selExtParams=new ObjExtParams();selExtParams.addMapParam(ObjParams.Map);selExtParams.addMapParam(ObjParams.Layer);selExtParams.addMapParam(ObjParams.Name);selExtParams.addMapParam(ObjParams.Semantics);var infoWnd;var searchWnd;var linkWnd;function main(){var hideMask=function(){Ext.fly('loading-mask').fadeOut({remove:true});};Ext.get('loading').remove();hideMask.defer(250);stCh=new StatusChecker();var firstload=true;var mask=new Ext.LoadMask(Ext.getBody(),{msg:'Пожалуйста, подождите... (<a href="javascript:void(0)" onclick="abort();">Отменить запрос</a>)'});mapview=new MapView(Ext.getDom('map'),0,5000);var ptr=new ObjPtr(APP_ROOT+"content/images/ptr.gif",{width:21,height:32},0,function(sz){return{x:sz.width/2,y:sz.height}});mapview.enableDragMode();mapview.enableSelectMode();mapview.enableWheelZoom();mapview.setTimeout(TIMEOUT);mapview.addOnTimeOut(function(id,msg){mask.hide();stCh.remove();stCh.update();alert(msg);});mapview.addOnAbort(function(id){mask.hide();stCh.remove();stCh.update();});var loginCtrl=new LoginCtrl('btnLogin','mapPanel',L_WND_WIDTH,L_WND_HEIGHT);loginCtrl.onLogout=function(sender,args){mapview.logout(null,function(id,isnew,type,res){sender.setAnonymousText();msPanel.loadRoot();setUserMapSet(res.MapSet);return true;})};loginCtrl.onLogin=function(sender,args){mapview.login(args.login,args.pwd,args.rem,null,function(id,isnew,type,res){if(res.Status==LStatus.Ok){sender.setLoggedText(res.User.Login);sender.clearPwd();sender.hide();msPanel.loadRoot();setUserMapSet(res.MapSet);}else if(res.Status==LStatus.Unknown)alert('Неверный логин/пароль');else if(res.Status==LStatus.Locked)alert('Ваш вход заблокирован');else if(res.Status==LStatus.Expired)alert('Время действия вашего логина истекло');return true;})};var urlSelRId=null;mapview.addOnPreCallback(function(id,isNewMapSet,type){if(type=='all'){var sCfg=mapview.getStartConfig();if(firstload&&sCfg&&sCfg.obj)urlSelRId=id;stCh.reset();mask.show();}else stCh.add();stCh.update();});mapview.addOnCallback(function(id,isNewMapSet,type,extraData){if(type=='all'){mask.hide();if(mapview.getSelObj()==null&&urlSelRId){if(urlSelRId==id)Ext.Msg.show({title:'Информация',buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFO,msg:'Запрашиваемый объект не найден'});urlSelRId=null;}}else{stCh.remove();stCh.update();}var msInfo=mapview.getMapSetInfo();if(isNewMapSet){var cu=mapview.getUser();if(cu.isAnonymous)loginCtrl.setAnonymousText();else loginCtrl.setLoggedText(cu.login);if(!msInfo||!msInfo.Maps){layerPanel.setRootNode(new Ext.tree.TreeNode());var errCfg={title:'Ошибка',buttons:Ext.Msg.OK,icon:Ext.MessageBox.ERROR};if(!msInfo){errCfg.msg='Данный набор карт не существует или недоступен';Ext.Msg.show(errCfg);}else if(!msInfo.Maps){errCfg.msg='Нет доступных для Вас карт';Ext.Msg.show(errCfg);}return;}var ms=mapview.getMapSetView();initScaleSlider(mapview.getScale(),mapview.getMinScale(),mapview.getMaxScale(),function(newScale){mapview.setScale(newScale);mapview.update();});if(msInfo){var btnAddr=Ext.getCmp('btnAddrSc');var btnOrg=Ext.getCmp('btnOrgSc');if(mapview.getAddrParams())btnAddr.setDisabled(false);else btnAddr.setDisabled(true);if(msInfo.IsOrg)btnOrg.setDisabled(false);else btnOrg.setDisabled(true);if(msInfo.IsOrg)selExtParams.addDbParam(ObjDbParams.Org);mapview.setClickSelObjParams(selExtParams);var root=new Ext.tree.AsyncTreeNode({expanded:true,children:mapSetToJSON(msInfo,ms.Maps)});layerPanel.setRootNode(root);}}else setSliderScale(mapview.getScale());if(type=='all'&&extraData){iterTree(msTree.root,function(node){if(node.isLeaf()){if(msTree.getClearId(node.id)==msInfo.Id)node.getUI().addClass('sel-map');else node.getUI().removeClass('sel-map');}})}if((type=='all'&&isNewMapSet)||type=='seldone'||type=='clickdone'||type=='finddone'){if(!extraData&&type!='all')return;var sObj=mapview.getSelObj();if(!sObj)return;if(!infoWnd){var mpPos=mapPanel.getPosition();infoWnd=new InfoWnd(mpPos[0]+5,mpPos[1]+mapPanel.getInnerHeight()+TOOLBAR_HEIGHT-INFO_WND_HEIGHT-5,INFO_WND_WIDTH,INFO_WND_HEIGHT);infoWnd.beforehide=function(){mapview.unSelectObj();}}infoWnd.show('mapPanel');var spec={cn:[]};if(sObj.Info.Name)spec.cn[spec.cn.length]={tag:'div',html:'Название: <b>'+sObj.Info.Name+'</b>'};var a=getAddrObj(sObj.Info.Semantics,mapview.getAddrParamsForMap(sObj.Info.MapId)).getAddr();if(a)spec.cn[spec.cn.length]={tag:'div',html:a};var t=getTownObj(sObj.Info.Semantics,mapview.getTownParamsForMap(sObj.Info.MapId)).getFullName();if(t)spec.cn[spec.cn.length]={tag:'div',html:t};if(sObj.DbInfo){if(sObj.DbInfo.Org)spec.cn[spec.cn.length]={tag:'div',cn:[{tag:'a',id:'org-in-obj',cls:'btn',href:'javascript:void(0)',html:'Организации ('+sObj.DbInfo.Org+')'}]};}infoWnd.setMarkup(spec);if(sObj.DbInfo&&sObj.DbInfo.Org){Ext.getDom('org-in-obj').onclick=function(){if(!searchWnd)searchWnd=createSearchWnd();searchWnd.orgsInObj(sObj.ListName,sObj.Key);searchWnd.showTab(2);searchWnd.show();};}var isMapOn=mapview.isMapOn(sObj.Info.MapId);var isLayerOn=mapview.isLayerOn(sObj.Info.MapId,sObj.Info.LayerId);if(!isMapOn||!isLayerOn){Ext.Msg.confirm('Подтверждение включения слоя','Слой с выделенным объектом сейчас отключен. Включить его?',function(btn){if(btn=='yes'){if(!isMapOn)layerPanel.getNodeById(sObj.Info.MapId).getUI().toggleCheck(true);if(!isLayerOn)layerPanel.getNodeById(sObj.Info.MapId+ID_SEP+sObj.Info.LayerId).getUI().toggleCheck(true);applyView();}});}}});mapview.addOnError(function(id,status,statusText){mask.hide();stCh.remove();stCh.update();if(status!=null)status=status+"; ";else status="";alert("Ошибка: "+status+statusText);});mapview.addOnAbortAll(function(){stCh.reset();stCh.update();mask.hide();setSliderScale(mapview.getScale());});mapview.addOnAbort(function(id){});mapview.addOnMouseMove(function(e){var evt=e?e:event;var pos=mapview.translate(evt.clientX,evt.clientY);var posPlane=mapview.getPlaneByRelPos(pos.left,pos.top);Ext.getCmp('sbCoord').setText('X = '+formatting(posPlane.left,'м')+' Y = '+formatting(posPlane.top,'м'));});var slider=mapview.createChildDiv('slider');var tblSlider=Ext.getDom('slider-table');tblSlider.style.display='';slider.appendChild(tblSlider);slider.className='sliderDiv';MapView.setPosition(slider,27,63);var moveEl=mapview.createChildDiv('moveEl');var tblMove=Ext.getDom('move-table');tblMove.style.display='';moveEl.appendChild(tblMove);moveEl.className='sliderDiv';MapView.setPosition(moveEl,10,5);openMapSet(null,0,null);var mapPanel=new Ext.Panel({region:'center',id:'mapPanel',bbar:new Ext.ux.StatusBar({id:'main-statusbar',defaultText:'Готово',defaultType:'tbtext',height:SB_HEIGHT,items:[{id:'sbCoord'},'-',{id:'sbScale'}]}),tbar:[{xtype:'buttongroup',title:'Управление картой',height:TOOLBAR_HEIGHT,defaults:{scale:'small',iconAlign:'top'},items:[{tooltip:'Перемещение карты и выделение объектов',iconCls:'drag',id:'dragBtn',enableToggle:true,allowDepress:false,pressed:true,toggleGroup:'mapcontrols',listeners:{toggle:{fn:function(sender,pressed){if(pressed){resetMapControls();mapview.enableDragMode();mapview.enableSelectMode();}}}}},{tooltip:'Увеличить фрагмент карты. Выделите область для увеличения',iconCls:'zoom-in',xtype:'splitbutton',id:'zoomInBtn',enableToggle:true,allowDepress:false,toggleGroup:'mapcontrols',listeners:{toggle:{fn:function(sender,pressed){if(pressed){resetMapControls();mapview.addOnMouseDown(mouseDownSelectArea);}}}},menu:{xtype:'menu',id:'mScale',width:105,items:[{xtype:'menutextitem',text:'Укажите масштаб:'},{xtype:'textfield',id:'txtScale',width:95,enableKeyEvents:true,listeners:{keyup:{fn:function(s,e){if(e.getKey()==e.ENTER){var sc=parseInt(s.getValue());var min=mapview.getMinScale()?mapview.getMinScale():MIN_SCALE;var max=mapview.getMaxScale()?mapview.getMaxScale():MAX_SCALE;if(isNaN(sc)||sc<max||sc>min){s.markInvalid('Масштаб должен быть числом от '+max+' до '+min);}else{if(sc&&sc>0){if(mapview.getScale()!=sc){mapview.setScale(sc);mapview.update();Ext.getCmp('mScale').hide();s.setValue('');}else alert('Указанный масштаб уже установлен');}}}}}}}]}},{tooltip:'Уменьшить масштаб',iconCls:'zoom-out',id:'zoomOutBtn',enableToggle:true,allowDepress:false,toggleGroup:'mapcontrols',listeners:{toggle:{fn:function(sender,pressed){if(pressed){resetMapControls();mapview.addOnMouseUp(mouseUpZoomOut);}}}}},{tooltip:'Запомнить положение карты',iconCls:'savepos',listeners:{click:{fn:function(sender,e){var pos=mapview.getMapPos();savedPos.pos={left:pos.left,top:pos.top};savedPos.scale=mapview.getScale();}}}},{tooltip:'Перейти к сохраненному положению карты',iconCls:'restorepos',listeners:{click:{fn:function(sender,e){if(!savedPos.pos){alert('Вы еще не сохраняли положение для данной карты');return;}if(savedPos.scale==mapview.getScale()){mapview.moveTo(savedPos.pos.left,savedPos.pos.top);}else{mapview.setScale(savedPos.scale);mapview.setMapPosition(savedPos.pos);mapview.update();}}}}},{tooltip:'Сформировать ссылку на карту',iconCls:'maplink',listeners:{click:{fn:function(sender,e){if(!linkWnd)linkWnd=new LinkWindow('mapPanel',600,280);var root='http://'+location.hostname;var url=root+location.pathname;var query={};query[MS_PART]=mapview.getMapSetInfo().Id;var so=mapview.getSelObj();if(so){query[LS_PART]=so.ListName;query[KEY_PART]=so.Key;}else{var sz=mapview.getSize();var center=mapview.getPlaneByRelPos(sz.width/2,sz.height/2);query[X_PART]=Math.round(center.left*100)/100;query[Y_PART]=Math.round(center.top*100)/100;}query[SC_PART]=Math.round(mapview.getScale());query[V_PART]=URL_VER;var map_q={};map_q[MS_PART]=query[MS_PART];map_q[V_PART]=URL_VER;var maplink=Ext.urlAppend(url,Ext.urlEncode(map_q));var link=Ext.urlAppend(url,Ext.urlEncode(query));var html='<a href="'+link+'" target="_blank"><img style="border:none" src="'+root+APP_ROOT+'content/images/logomap31.gif" alt="map31.ru" title="Показать на карте" /></a>';linkWnd.setLink(maplink,link,html);linkWnd.show();}}}},{text:' Размер карты',iconAlign:'left',iconCls:'listitems',id:'sizeMenu',menu:{items:['<b class="menu-title"> Выберите размер карты</b>',{text:'Максимальный (1700x1200)',checked:true,group:'size',size:{width:1700,height:1200},handler:mapSizeChanged},{text:'1000x800',checked:false,group:'size',size:{width:1000,height:800},handler:mapSizeChanged},{text:'800x600',checked:false,group:'size',size:{width:800,height:600},handler:mapSizeChanged},{text:'600x400',checked:false,group:'size',size:{width:600,height:400},handler:mapSizeChanged},{text:'400x300',checked:false,group:'size',size:{width:400,height:300},handler:mapSizeChanged}]}}]},{xtype:'buttongroup',title:'Поиск',height:TOOLBAR_HEIGHT,defaults:{scale:'small',iconAlign:'left'},items:[{text:'Населенный пункт',id:'btnTownSc',iconCls:'town-search',listeners:{click:{fn:searchHandler}}},{text:'Адресный поиск',id:'btnAddrSc',iconCls:'addr-search',listeners:{click:{fn:searchHandler}}},{text:'Организации',id:'btnOrgSc',iconCls:'org-search',listeners:{click:{fn:searchHandler}}}]},'->',{id:'btnLogin',text:' ',iconCls:'login',tooltip:' '}],contentEl:'map',listeners:{resize:{fn:function(sender,adjWidth,adjHeight,rawWidth,rawHeight){var szMenu=Ext.getCmp('sizeMenu');var size=szMenu.menu.items.find(function(item){if(item&&item.checked)return true;}).initialConfig.size;var panelWidth=adjWidth;var panelHeight=adjHeight;var tt=sender.getTopToolbar();var bt=sender.getBottomToolbar();if(tt)panelHeight-=(TOOLBAR_HEIGHT+5);if(bt)panelHeight-=SB_HEIGHT;var w=size.width<panelWidth?size.width:panelWidth;var h=size.height<panelHeight?size.height:panelHeight;mapview.setViewPortPosition((panelWidth-w)/2,(panelHeight-h)/2);mapview.setSize(w,h);if(firstload){var qp=getQueryParams();if(qp&&qp[MS_PART]){var v=qp[V_PART];var ms=new MapSet(qp[MS_PART]);var sc=qp[SC_PART];if(isNaN(sc))sc=0;openMapSet(ms,sc,null);var ls=getUrlStr(qp[LS_PART],v);var k=qp[KEY_PART];var x=parseFloat(qp[X_PART]);var y=parseFloat(qp[Y_PART]);var st=getUrlStr(qp[ST_PART],v);var hn=getUrlStr(qp[H_PART],v);var geonim=getUrlStr(qp[G_PART],v);var cfg=null;if((ls&&k)||(st&&hn)){selExtParams.addDbParam(ObjDbParams.Org);cfg={obj:{selP:selExtParams}};if(ls&&k){k=parseInt(k);if(isNaN(k))k=0;cfg.obj.selObj={listName:ls,key:k};}else cfg.obj.address={street:st,house:hn,geonim:geonim};}else if(!isNaN(x)&&!isNaN(y))cfg={center:{x:x,y:y}};mapview.setStartConfig(cfg);}mapview.update();msPanel.loadRoot();firstload=false;}}}}});function getUrlStr(str,v){if(str&&(!v||v=='1.0'))return str.replace(/\+/g,' ');return str;}function applyView(){var msg='',selNodes=layerPanel.getChecked();var map;var idx;var ms=new MapSet();ms.Maps=new Array();Ext.each(selNodes,function(node){if(node.id.indexOf("_")==-1){map=new Map(node.id);map.Layers=new Array();ms.Maps.push(map);}else{var mapId=node.id.substring(0,node.id.indexOf("_"));var layerId=node.id.substring(node.id.indexOf("_")+1,node.id.length);if(ms.Maps){idx=findItemIdx(ms.Maps,mapId);if(idx!=-1){map=ms.Maps[idx];map.Layers.push(new Layer(layerId));}}}});mapview.setMapSetView(ms);mapview.update();}var msPanel=getMapSetTree();msPanel.addListener('click',function(node,e){var id=node.id;if(node.isLeaf())id=id.substring(0,node.id.indexOf(ID_SEP));var msv=mapview.getMapSetView();if(!node.isLeaf()||(msv&&msv.Id==id))return;var mapSet=new MapSet(id);var scale;var pos;openMapSet(mapSet,0,null);mapview.update();});var layerPanel=new Ext.tree.TreePanel({renderTo:'layer-div',useArrows:true,autoScroll:true,animate:false,enableDD:false,containerScroll:true,border:false,loader:new Ext.tree.TreeLoader(),rootVisible:false,root:new Ext.tree.AsyncTreeNode(),tbar:new Ext.Toolbar({items:[{text:'Применить',tooltip:'Применить состав карты',iconCls:'apply',handler:applyView},'->',{iconCls:'ch-all',tooltip:'Выделить все',handler:function(){iterTree(layerPanel.root,function(node){node.getUI().toggleCheck(true);})}},{iconCls:'unch-all',tooltip:'Сбросить все',handler:function(){iterTree(layerPanel.root,function(node){node.getUI().toggleCheck(false);})}}]})});var extVP=new Ext.Viewport({layout:'border',hideBorders:true,monitorResize:true,items:[{region:'east',id:'east-panel',split:true,title:'Меню',animFloat:false,resizable:true,floatable:false,width:250,minSize:1,maxSize:400,collapsible:true,margins:'0 0 0 0',layout:{type:'accordion',animate:true},items:[{contentEl:'mapset-div',title:'<b>Выбор карты</b>',border:false,layout:'fit',iconCls:'nav',autoScroll:true},{title:'<b>Состав карты</b>',contentEl:'layer-div',border:false,layout:'fit',iconCls:'settings',autoScroll:true}]},mapPanel]});Ext.QuickTips.init();function searchHandler(sender,e){var tabN;var id=sender.getId();if(id=='btnTownSc')tabN=0;else if(id=='btnAddrSc')tabN=1;else if(id=='btnOrgSc')tabN=2;if(!searchWnd){searchWnd=createSearchWnd(tabN);searchWnd.show('mapPanel');}else searchWnd.showTab(tabN);}function createSearchWnd(tabN){var mpPos=mapPanel.getPosition();return new SearchWnd(mpPos[0]+(mapPanel.getInnerWidth()-S_WND_WIDTH)/2,mpPos[1]+TOOLBAR_HEIGHT+10,S_WND_WIDTH,S_WND_HEIGHT,tabN);}function setUserMapSet(resMapSet){var redraw=false;var inf=mapview.getMapSetInfo();var view=mapview.getMapSetView();var msNew=null;if(resMapSet){msNew=new MapSet(resMapSet.Id);if(resMapSet.Id!=inf.Id){redraw=true;}else{if(inf.Maps.length!=resMapSet.Maps.length)redraw=true;for(var i=0;i<inf.Maps.length;i++){var m=inf.Maps[i];var nm=findItem(resMapSet.Maps,m.Id);if(!nm){redraw=true;}else{var mapOn=false;if(view.Maps&&findItem(view.Maps,m.Id))mapOn=true;else if(m.On)mapOn=true;if(mapOn){if(!msNew.Maps)msNew.Maps=new Array();msNew.Maps.insert(new Map(m.Id));if(m.Layers.length!=nm.Layers.length)redraw=true;for(var j=0;j<m.Layers.length;j++){var l=m.Layers[j];var nl=findItem(nm.Layers,l.Id);if(!nl){redraw=true;}else{var layerOn=false;if(view.Maps&&view.Maps[i]&&view.Maps[i].Layers&&findItem(view.Maps[i].Layers,l.Id))layerOn=true;else if(l.On)layerOn=true;}}}}}}}else redraw=true;if(redraw){mapview.setMapSetView(msNew,true);if(msNew&&msNew.Id!=mapview.getMapSetInfo().Id)openMapSet(null,0,null);else openMapSet(msNew,0,null);mapview.update();}if(searchWnd){searchWnd.destroy();searchWnd=null;}}}function openMapSet(mapSet,scale,pos){if(searchWnd){searchWnd.destroy();searchWnd=null;}if(infoWnd){infoWnd.destroy();infoWnd=null;}if(linkWnd){linkWnd.hide();}savedPos=new Object();mapview.setMapSetView(mapSet);mapview.setScale(scale);mapview.setMapPosition(pos);}function abort(){mapview.abort();}function iterTree(node,callback){if(node.hasChildNodes){for(var i=0;i<node.childNodes.length;i++){callback(node.childNodes[i]);iterTree(node.childNodes[i],callback);}}}function StatusChecker(){var requestsCount=0;this.reset=function(){requestsCount=0;};this.add=function(){requestsCount++;};this.remove=function(){if(requestsCount>0)requestsCount--;};this.update=function(){var cmp=Ext.getCmp('main-statusbar');if(requestsCount<=0)cmp.clearStatus({useDefaults:true});else cmp.showBusy('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Обработка запроса');};}function findItem(ar,id){if(!ar)return null;for(var i=0;i<ar.length;i++){if(ar[i].Id==id)return ar[i];}return null;}function findItemIdx(ar,id){for(var i=0;i<ar.length;i++){if(ar[i].Id==id)return i;}return-1;}function mapSetToJSON(msInfo,msView){var maps=new Array();var layers;var isChecked;var mapIdx=-1;for(var i=0;i<msInfo.Maps.length;i++){layers=new Array();isChecked=msInfo.Maps[i].On;if(msView){mapIdx=findItemIdx(msView,msInfo.Maps[i].Id);isChecked=(mapIdx==-1)?false:true;}maps.push({id:msInfo.Maps[i].Id,text:msInfo.Maps[i].Name,children:layers,checked:isChecked,expanded:true});if(!msInfo.Maps[i].Layers)continue;for(var j=0;j<msInfo.Maps[i].Layers.length;j++){isChecked=msInfo.Maps[i].Layers[j].On;if(mapIdx!=-1&&msView[mapIdx].Layers)isChecked=findItemIdx(msView[mapIdx].Layers,msInfo.Maps[i].Layers[j].Id)==-1?false:true;layers.push({id:msInfo.Maps[i].Id+ID_SEP+msInfo.Maps[i].Layers[j].Id,text:msInfo.Maps[i].Layers[j].Name,leaf:true,checked:isChecked});}}return maps;}MyTree=Ext.extend(Ext.tree.TreePanel,{constructor:function(basecfg,cfg){if(cfg)this._cfg=cfg;MyTree.superclass.constructor.call(this,basecfg);},_cfg:{uniqLeafs:true,sep:'_'},onload:null,onrequest:null,onpreload:null,onfailed:null,loaded:function(self,id,isnew,type,res){var parentNode;if(res.ParentId){parentNode=self.getNodeById(res.ParentId);parentNode.removeChild(parentNode.firstChild);parentNode.expand();}else{parentNode=self.getRootNode();self._ready=true;}parentNode.getUI().removeClass("x-tree-node-loading");for(var i=0;i<res.Items.length;i++){var node=new Ext.tree.TreeNode();node.id=res.Items[i].Id;node.text=res.Items[i].Name;if(!res.Items[i].IsLeaf){node.addListener('beforeexpand',function(node,deep,anim){if(!node.attributes.loaded){node.getUI().addClass("x-tree-node-loading");node.attributes.loaded=true;self.onrequest(node.id,self.onpreload,self.onload,self._failed,self._failed,self._failed);return false;}return true;});node.appendChild(new Ext.tree.TreeNode());}else{node.leaf=true;if(!self._cfg.uniqLeafs)node.id+=self._cfg.sep+self._counter;}parentNode.appendChild(node);}if(!self._cfg.uniqLeafs)self._counter++;},_ready:true,loadRoot:function(){if(!this._ready)return;var r=this.getRootNode();var ch;while(ch=r.firstChild)r.removeChild(ch);this._counter=0;this.onrequest(null,this.onpreload,this.onload,this._failed,this._failed,this._failed);this._ready=false;},_failed:function(){if(!this._ready)this._ready=true;if(this.onfailed)return onfailed();else return false;},_counter:0,getClearId:function(id){if(this._cfg.uniqLeafs)return id;return id.substring(0,id.indexOf(this._cfg.sep));}});var msTree;function getMapSetTree(){if(!msTree){msTree=new MyTree({renderTo:'mapset-div',useArrows:true,autoScroll:true,animate:false,enableDD:false,containerScroll:true,border:false,loader:new Ext.tree.TreeLoader(),rootVisible:false,root:{nodeType:'async',text:'root',draggable:false,id:'top'}},{uniqLeafs:false,sep:ID_SEP});msTree.onrequest=mapview.getMapSetItems;msTree.onpreload=function(){return false;};msTree.onload=function(id,isnew,type,res){msTree.loaded(msTree,id,isnew,type,res);return false;};}return msTree;}function resetMapControls(){mapview.removeOnMouseDown(mouseDownSelectArea);mapview.removeOnMouseUp(mouseUpZoomOut);mapview.disableDragMode();mapview.disableSelectMode();}function mapSizeChanged(sender,args){var size=sender.initialConfig.size;var mapPanel=Ext.getCmp('mapPanel');var panelWidth=mapPanel.getInnerWidth();var panelHeight=mapPanel.getHeight()-mapPanel.getTopToolbar().initialConfig.items[0].height;var w=size.width<panelWidth?size.width:panelWidth;var h=size.height<panelHeight?size.height:panelHeight;mapview.setSize(w,h);mapview.setViewPortPosition((panelWidth-w)/2,(panelHeight-h)/2);}var evX0;var evY0;var sa;function mouseDownSelectArea(e){var evt=e?e:event;if(!sa)sa=mapview.createChildDiv('select-area');sa.className='selectArea';var pos=mapview.translate(evt.clientX,evt.clientY);evX0=pos.left;evY0=pos.top;MapView.setSize(sa,0,0);MapView.setPosition(sa,pos.left,pos.top);sa.style.visibility='visible';MapView.addHandler(document,'mousemove',mouseMoveSelectArea);MapView.addHandler(document,'mouseup',mouseUpSelectArea);}function mouseMoveSelectArea(e){var evt=e?e:event;var pos=mapview.translate(evt.clientX,evt.clientY);var delta_x=pos.left-evX0;var delta_y=pos.top-evY0;var mapViewPortPos=mapview.getViewPortPosition();if(delta_x>=0){MapView.setPosition(sa,evX0,null);MapView.setSize(sa,delta_x,null);}else{delta_x=Math.abs(delta_x);MapView.setPosition(sa,pos.left,null);MapView.setSize(sa,delta_x,null);}if(delta_y>=0){MapView.setPosition(sa,null,evY0);MapView.setSize(sa,null,delta_y);}else{delta_y=Math.abs(delta_y);MapView.setPosition(sa,null,pos.top);MapView.setSize(sa,null,delta_y);}}function mouseUpSelectArea(e){MapView.removeHandler(document,'mousemove',mouseMoveSelectArea);MapView.removeHandler(document,'mouseup',mouseUpSelectArea);var size=MapView.objSize(sa);var pos=MapView.uiFindChildRelPos(sa);var mapSize=mapview.getSize();var mapPos=mapview.getMapPos();mapview.removeChildDiv('select-area');sa=null;var ratioX=mapSize.width/size.width;var ratioY=mapSize.height/size.height;var ratio;var w;var h;if(ratioX>ratioY){ratio=ratioX;w=size.width;h=mapSize.height/ratio;}else{ratio=ratioY;w=mapSize.width/ratio;h=size.height;}var x=mapPos.left+pos.left+(pos.left/mapSize.width)*w;var y=mapPos.top+pos.top+(pos.top/mapSize.height)*h;if(mapview.changeScale(ratio,x,y))mapview.update();else alert('Достигнут предел масштабирования');}function mouseUpZoomOut(e){var evt=e?e:event;var pos=mapview.translate(evt.clientX,evt.clientY);var mapPos=mapview.getMapPos();if(mapview.changeScale(0.5,mapPos.left+pos.left,mapPos.top+pos.top))mapview.update();else alert('Достигнут предел масштабирования');}function shiftMap(dir){var size=mapview.getSize();switch(dir){case'topleft':mapview.shiftOn(size.width/2,size.height/2);break;case'top':mapview.shiftOn(0,size.height/2);break;case'topright':mapview.shiftOn(-size.width/2,size.height/2);break;case'left':mapview.shiftOn(size.width/2,0);break;case'right':mapview.shiftOn(-size.width/2,0);break;case'downleft':mapview.shiftOn(size.width/2,-size.height/2);break;case'down':mapview.shiftOn(0,-size.height/2);break;case'downright':mapview.shiftOn(-size.width/2,-size.height/2);break;}}var power;var min;var max;var callback;function initScaleSlider(curr,_max,_min,_cb){callback=_cb;max=_max;min=_min;if(!min)min=MAX_SCALE;if(!max)max=MIN_SCALE;var dist=getBottomLimit()-getTopLimit();power=Math.log(max-min)/Math.log(dist);setSliderScale(curr);}function setSliderScale(curr){Ext.getCmp('sbScale').setText('1:'+Math.round(curr));if(curr-min>0)setSliderPos(Math.pow(curr-min,1/power));else setSliderPos(getTopLimit());}var slider;var dH;var h0;var isSliderClick;function sliderMouseDown(sender,e){var evt=e?e:event;isSliderClick=true;slider=sender;h0=MapView.uiFindChildRelPos(slider).top;dH=MapView.uiGetEventXY(slider.parentNode,evt.clientX,evt.clientY).top-h0;MapView.addHandler(document,'mousemove',sliderMouseMove);MapView.addHandler(document,'mouseup',sliderMouseUp);return false;}function sliderMouseMove(e){var evt=e?e:event;var currH=MapView.uiGetEventXY(slider.parentNode,evt.clientX,evt.clientY).top-dH;setSliderPos(currH);return false;}function sliderMouseUp(e){isSliderClick=false;MapView.removeHandler(document,'mousemove',sliderMouseMove);MapView.removeHandler(document,'mouseup',sliderMouseUp);var slider=Ext.getDom('scaleSlider');var h=MapView.uiFindChildRelPos(slider).top;if(h!=h0)doCallback(h);return false;}function scaleClick(sender,e){if(isSliderClick)return;var evt=e?e:event;var hPos=MapView.uiGetEventXY(sender,evt.clientX,evt.clientY).top;setSliderPos(hPos);doCallback(hPos);}function stepScaling(sender,dir){var slider=Ext.getDom('scaleSlider');var h=MapView.uiFindChildRelPos(slider).top;var step=Math.round((getBottomLimit()-getTopLimit())/10);var hPos;if(dir=='up')hPos=h-step;else hPos=h+step;setSliderPos(hPos);h=MapView.uiFindChildRelPos(slider).top;if(Math.abs(hPos-h)!=step)doCallback(h);}var topLimit=0;var bottomLimit;function setSliderPos(h){var slider=Ext.getDom('scaleSlider');if(h<getTopLimit())MapView.setPosition(slider,null,getTopLimit());else if(h>getBottomLimit())MapView.setPosition(slider,null,getBottomLimit());else MapView.setPosition(slider,null,h);}function doCallback(h){if(callback)callback(Math.pow(h,power)+min);}function getBottomLimit(){var slider=Ext.getDom('scaleSlider');if(!bottomLimit)bottomLimit=MapView.objSize(slider.parentNode).height-MapView.objSize(slider).height;return bottomLimit;}function getTopLimit(){return topLimit;}function getAddrObj(sem,addrP){var retVal=new Sv.Address();if(sem&&addrP){for(var i=0;i<sem.length;i++){if(sem[i].Code==addrP.Geonim)retVal.Geonim=sem[i].FullValue.trim();else if(sem[i].Code==addrP.Street)retVal.Street=sem[i].FullValue.trim();else if(sem[i].Code==addrP.HouseN)retVal.HouseN=sem[i].FullValue.trim();else if(sem[i].Code==addrP.HouseC)retVal.HouseC=sem[i].FullValue.trim();else if(sem[i].Code==addrP.HouseF)retVal.HouseF=sem[i].FullValue.trim();}}return retVal;}function getTownObj(sem,townP){var retVal=new Sv.Town();if(sem&&townP){for(var i=0;i<sem.length;i++){if(sem[i].Code==townP.Town)retVal.Name=sem[i].FullValue.trim();else if(sem[i].Code==townP.Region)retVal.Region=sem[i].FullValue.trim();else if(sem[i].Code==townP.Geonim)retVal.Geonim=sem[i].FullValue.trim();}}return retVal;}function formatting(number_val,unit){var res='';var number=new String(number_val);var Unit=new String(unit);var i=0;var len=0;var index=-1;var fpoint;while(number.charAt(i)!=""){if(number.charAt(i)=='.')index=i;len++;i++;}if(len==0)return res;fpoint=index;if(index==-1)index=len;var remainder=parseInt(index%3);var count=parseInt(index/3);var start=remainder;res=number.substring(0,remainder);for(k=0;k<count;k++){res+=' '+number.substr(start,3);start+=3;}if(fpoint>=0)res+=number.substr(fpoint,3);return res+' '+Unit;}function ObjPtr(url,sz,zIdx,get_hp){var size=sz;var hp;var vis=false;var d=mapview.createChildDiv();d.style.position='absolute';d.style.zIndex=zIdx;d.style.cursor='pointer';d.onclick=function(){hideInt();vis=false;};hideInt();var img=new Image();img.onload=function(){img.onload=null;if(!size)size={width:img.width,height:img.height};MapView.setSize(d,size.width,size.height);var i=document.createElement('img');i.src=img.src;i.setAttribute('title','Кликните на изображении, чтобы скрыть');i.setAttribute('width',size.width.toString());i.setAttribute('height',size.height.toString());d.appendChild(i);};img.src=url;mapview.addOnPreCallback(onPreCb);mapview.addOnCallback(onCb);mapview.addOnMapShift(onShift);this.show=function(x,y){showInt(x,y);vis=true;};this.hide=function(){hideInt();vis=false;};function showInt(x,y){if(!hp)hp=get_hp(size);MapView.setPosition(d,x-hp.x,y-hp.y);d.style.display='';}function hideInt(){d.style.display='none';}function onPreCb(id,isNewMapSet,type){if(isNewMapSet){hideInt();vis=false;}}function onCb(id,isNewMapSet,type,extraData){if(type=='all'&&vis){var so=mapview.getSelObj();if(so&&so.Center){var rp=mapview.getRelPosByPlane(so.Center.X,so.Center.Y);showInt(rp.left,rp.top);}}else if(type=='seldone'||type=='finddone'||(type=='all'&&isNewMapSet)){if(!extraData&&type!='all')return;var so=mapview.getSelObj();if(so&&so.Center){var rp=mapview.getRelPosByPlane(so.Center.X,so.Center.Y);showInt(rp.left,rp.top);vis=true;}}else if(type=='unsel'||(type=='clickdone'&&extraData)){hideInt();vis=false;}}function onShift(dx,dy){if(vis){var p=MapView.uiFindChildRelPos(d);MapView.setPosition(d,p.left+dx,p.top+dy);}}}function getQueryParams(){var p=null;var query=location.search.length==0?null:location.search.substring(1);if(query)p=Ext.urlDecode(query);return p;}function getAddrSC(str,house,geonim,strict,addrP){if(!strict)str='*'+str+'*';var number;var idx='';var frac='';if(house.length>0){number=parseInt(house);var pos=house.indexOf('/');if(pos>-1){frac=house.substring(pos+1);idx=house.substring(number.toString().length,pos);}else idx=house.substring(number.toString().length);}var mscAr=new Array();for(var i=0;i<addrP.length;i++){var cAr=new Array();cAr.insert(new SemCond(addrP[i].params.Street,Operations.Equal,str));if(number){cAr.insert(new SemCond(addrP[i].params.HouseN,Operations.Equal,number.toString()));if(idx)cAr.insert(new SemCond(addrP[i].params.HouseC,Operations.Equal,idx));else cAr.insert(new SemCond(addrP[i].params.HouseC,Operations.Pass,''));if(frac)cAr.insert(new SemCond(addrP[i].params.HouseF,Operations.Equal,frac));else cAr.insert(new SemCond(addrP[i].params.HouseF,Operations.Pass,''));}if(geonim){cAr.insert(new SemCond(addrP[i].params.Geonim,Operations.Equal,geonim));}var msc=new MapSearchContext();msc.MapId=addrP[i].mapId;msc.Conds=new SemConds(cAr,CTypes.And);mscAr.insert(msc);}return new SearchContext(mscAr,false);}