function SearchWnd(x,y,w,h,tabN){function ErrAbTo(){msgEl.innerHTML=prevMsg;return true;}function addTab(t,elId,l,onresize){var tabs=w.items.first();var t=tabs.add({title:t,contentEl:elId,closable:false,border:false,layout:l});if(onresize)t.addListener('resize',onresize);return t;}var addrP=mapview.getAddrParams();var townP=mapview.getTownParams();var isOrg=mapview.getMapSetInfo().IsOrg;var dh=Ext.DomHelper;var spec={id:'search-wnd',tag:'div',cls:'x-hidden',cn:[{tag:'div',id:'search-tabs'}]};dh.append(Ext.getBody(),spec);var tp=new Ext.TabPanel({renderTo:'search-tabs',enableTabScroll:true,deferredRender:false,border:false});var w=new Ext.Window({applyTo:'search-wnd',title:'Расширенный поиск',layout:'fit',iconCls:'search',x:x,y:y,width:w,height:h,closeAction:'hide',collapsible:true,maximizable:true,plain:true,items:tp});spec={id:'towns-tab',tag:'div',style:'padding: 5px',cn:[{tag:'table',width:'100%',style:'font-size:11px; font-weight:400',cn:[{tag:'tr',cn:[{tag:'td',align:'center',html:'<table style="font-size:11px"><tr><td id="townseek" style="padding:1px"></td><td id="townok"></td></tr><tr id="townMS"><td colspan="2"><table style="font-size:11px" cellPadding="0" cellSpacing="2"><tr><td><input id="cbTownMS" type="checkbox"></td><td>&nbsp;Искать только на открытой карте</td></tr></table></td></tr></table>'}]}]},{tag:'div',id:'townMsg',style:'font-weight:bold;margin-bottom:4px'},{tag:'div',id:'townGrid',style:'margin:2px 2px 2px 2px'}]};dh.append(Ext.getBody(),spec);if(!townP)Ext.getDom('townMS').style.display='none';var cbTownMS=Ext.getDom('cbTownMS');var txtTown=new Ext.form.TextField({id:'txtTown',renderTo:'townseek',emptyText:'Введите название населенного пункта',allowBlank:true,maxLength:30,maxLengthText:'Значение не должно превышать 30 символов',width:300,enableKeyEvents:true});var ls;var _req;var oldValue='';selTown=null;function townKeyUp(sender,e){var key=e.getKey();if(key==e.ENTER){seekTown();}else{if(!ls){ls=new LiveSearch(sender.getEl().dom,'LiveSearchOver');ls.format=function(item){var t=sender.getValue();var nm1='<b>'+item.Name.substring(0,t.length)+'</b>';var nm2=item.Name.substring(t.length,item.Name.length);return item.ShG+' '+nm1+nm2+', <i>'+item.Region+' район</i>';};ls.select=function(item){selTown=item;txtTown.focus();txtTown.setValue(item.Name);};}if(key==e.UP||key==e.DOWN)return;var text=sender.getValue();if(oldValue==text)return;oldValue=text;selTown=null;if(text.trim().length==0){ls.close();return;}var r=mapview.liveSearchTowns(text,(townP&&cbTownMS.checked)?mapview.getMapSetInfo().Id:null,function(){return false;},function(id,isnew,type,res){ls.setText(res);},null,null,null);if(_req)sv_ajax.abort(_req);_req=r;}}function hideLs(){if(ls)ls.close();}txtTown.addListener('keyup',townKeyUp);tp.addListener('tabchange',hideLs);w.addListener('minimize',hideLs);w.addListener('maximize',hideLs);w.addListener('beforehide',hideLs);MapView.addHandler(w.header.dom,'mousedown',hideLs);MapView.addHandler(txtTown.getEl().dom,'blur',function(){setTimeout(hideLs,150);});var btnTown=new Ext.Button({renderTo:'townok',width:80,text:'Поиск'});btnTown.addListener('click',function(sender){seekTown();});var currW;var currH;var agTown;var tT=addTab('Населенный пункт','towns-tab','fit',function(sender,adjWidth,adjHeight,w,h){currW=adjWidth-20;currH=adjHeight-100;if(agTown){if(currW>200)agTown.setWidth(currW);if(currH>50)agTown.setHeight(currH);}});function seekTown(){function failed(){Ext.getDom('townMsg').innerHTML=prevMsg;return true;}function mapSelect(ms){var currMs=mapview.getMapSetInfo();if(ms.MapSet==currMs.Id){mapview.selectObj(ms.Ls,ms.Key,selExtParams,mapview.getSelObjMinScale(),null,function(id,isnew,type,extraData){if(type=='seldone'){w.collapse();return true;}},failed,failed,failed);}else{selExtParams.addDbParam(ObjDbParams.Org);if(ms.Type>1){openMapSet(new MapSet(ms.MapSet),ms.Soms,null);mapview.setStartConfig({obj:{selObj:{listName:ms.Ls,key:ms.Key},selP:selExtParams}});}else openMapSet(new MapSet(ms.MapSet),0,null);mapview.update();}}if(ls)ls.close();var rObj={};if(selTown!=null){rObj.Name=selTown.Name;rObj.RegId=selTown.RegId;}else rObj.Name=txtTown.getValue();rObj.MapSetId=(townP&&cbTownMS.checked)?mapview.getMapSetInfo().Id:null;var pgSize=10;var msgEl=Ext.getDom('townMsg');var prevMsg=msgEl.innerHTML;msgEl.innerHTML='Выполняется поиск...';mapview.findTowns(rObj,pgSize,1,function(){return false;},function(id,isnew,type,res){if(res.Total>0){msgEl.innerHTML='Количество найденых населенных пунктов на картах: '+res.Total;var pageCfg={pageSize:pgSize,pageGroup:10,pageCls:'g-page',selPageCls:'g-selpage',remoting:{enabled:true,count:res.GroupTotal,useCache:true}};var agCfg={data:res.Groups,template:[{align:'left',cls:'g-cell'}],width:currW,height:currH,pageCfg:pageCfg,rowCls:'g-row',altRowCls:'g-altrow'};agTown=new Grid(agCfg);agTown.onDataBinding=function(sender,args){if(args.rowType=='data'){var da=args.dataItem;var h=document.createElement('div');h.className='t-header';var tFullName=da.ShG+' '+da.Name;h.innerHTML=tFullName+', '+args.dataItem.Region+' район';args.row.childNodes[0].appendChild(h);for(var i=0;i<da.Towns.length;i++){var t=document.createElement('div');t.className='t-block';for(var j=0;j<da.Towns[i].MapSets.length;j++){var ms=da.Towns[i].MapSets[j];var m=document.createElement('div');m.appendChild(document.createTextNode('→ '));var a=document.createElement('a');a.className='btn';a.setAttribute('href','javascript:void(0)');a.data=ms;a.onclick=function(){mapSelect(this.data)};if(ms.Type==1)a.innerHTML='Карта населенного пункта';else if(ms.Type==2)a.innerHTML='Населенный пункт на карте района';else if(ms.Type==3)a.innerHTML='Населенный пункт на карте области';m.appendChild(a);t.appendChild(m);}args.row.childNodes[0].appendChild(t);}}};agTown.onRemotePageChanging=function(sender,args){mapview.findTowns(rObj,pgSize,args.pageNumber,null,function(id,isnew,type,res){sender.appendData(res.Groups,args.pageNumber);return true;},failed,failed,failed);};agTown.renderTo('townGrid');}else{msgEl.innerHTML='По Вашему запросу ничего не найдено';Ext.getDom('townGrid').innerHTML='';}},failed,failed,failed);}if(addrP){spec={id:'addr-tab',tag:'div',style:'padding: 5px',cn:[{tag:'table',style:'font-size:11px; font-weight:400',cn:[{tag:'tr',cn:[{tag:'td',style:'width:100px',html:'Название улицы: '},{tag:'td',style:'padding:1px',id:'street'},{tag:'td',html:'<input type="checkbox" id="strict" />'},{tag:'td',html:'Строгое соответствие'}]},{tag:'tr',cn:[{tag:'td',style:'width:100px',html:'Номер дома: '},{tag:'td',style:'padding:1px',id:'house'},{tag:'td',html:'<input type="checkbox" id="addrFirst" checked="checked" />'},{tag:'td',html:'Показать первый результат'}]},{tag:'tr',cn:[{tag:'td',colspan:'4',html:'<a href="javascript:void(0);" class="btn" id="addrEx">Пример поиска</a>'}]},{tag:'tr',cn:[{tag:'td',id:'addrOk',colspan:'4',align:'right',style:'padding-top:5px'}]}]},{tag:'div',id:'addrMsg',style:'font-weight:bold;margin-bottom:2px'},{tag:'div',id:'addrGrid',style:'margin:2px 2px 2px 2px'}]};dh.append(Ext.getBody(),spec);function addrKeyUp(sender,e){if(e.getKey()==e.ENTER)doAddrSearch();}var txtStreet=new Ext.form.TextField({id:'txtStreet',renderTo:'street',width:150,allowBlank:false,maxLength:20,maxLengthText:'Значение не должно превышать 20 символов',blankText:'Необходимо указать название улицы',enableKeyEvents:true});txtStreet.addListener('keyup',addrKeyUp);var txtHouse=new Ext.form.TextField({id:'txtHouse',renderTo:'house',regex:/^(\d+)[А-Яа-я]{0,1}(\/?[0-9]{1,})?$/,maxLength:10,regexText:'Некорректный номер дома.<br />Примеры: 133, 15б, 12/14, 18а/2',width:150,enableKeyEvents:true});txtHouse.addListener('keyup',addrKeyUp);var cbStrict=Ext.getDom('strict');var cbAddrFirst=Ext.getDom('addrFirst');var addrEx=Ext.getDom('addrEx');if(addrP[0].params.Ex){MapView.addHandler(addrEx,'click',function(){txtStreet.setValue(addrP[0].params.Ex.Street);txtHouse.setValue(addrP[0].params.Ex.House);});}else addrEx.style.display='none';var btnAddr=new Ext.Button({renderTo:'addrOk',width:80,text:'Поиск'});btnAddr.addListener('click',function(sender){doAddrSearch()});var currW;var currH;var agAddr;var tAddr=addTab('Адресный поиск','addr-tab','fit',function(sender,adjWidth,adjHeight,w,h){currW=adjWidth-20;currH=adjHeight-150;if(agAddr){if(currW>200)agAddr.setWidth(currW);if(currH>50)agAddr.setHeight(currH);}});function doAddrSearch(){if(!addrP){alert('Карта не поддерживает адресный поиск');return;}txtStreet.validate();txtHouse.validate();if(!txtStreet.isValid()||!txtHouse.isValid())return;var str=txtStreet.getValue().trim();var house=txtHouse.getValue().trim();var sc=getAddrSC(str,house,null,cbStrict.checked,addrP);var op=new ObjExtParams();op.addMapParam(ObjParams.Map);op.addMapParam(ObjParams.Name);op.addMapParam(ObjParams.Semantics);for(var i=0;i<addrP.length;i++){op.addSemCode(addrP[i].params.Geonim);op.addSemCode(addrP[i].params.Street);op.addSemCode(addrP[i].params.HouseN);op.addSemCode(addrP[i].params.HouseC);op.addSemCode(addrP[i].params.HouseF);}var isSelFirst=cbAddrFirst.checked;var msgEl=Ext.getDom('addrMsg');var prevMsg=msgEl.innerHTML;msgEl.innerHTML='Выполняется поиск...';mapview.findObjects(sc,new ScOptions(20,0,isSelFirst,selExtParams,op),mapview.getSelObjMinScale(),null,function(id,isNewMapSet,type,extraData){if(type=='finddone'){var fObjs=mapview.getFindObjs();if(fObjs.Total>0){msgEl.innerHTML='Количество найденых адресов: '+fObjs.Total;var pageCfg={pageSize:20,pageGroup:10,pageCls:'g-page',selPageCls:'g-selpage',remoting:{enabled:true,count:fObjs.Total,useCache:true}};var agCfg={data:fObjs.Objects,template:[{align:'left',cls:'g-cell'}],width:currW,height:currH,pageCfg:pageCfg,rowCls:'g-row',altRowCls:'g-altrow',overCls:'g-overcls',selCls:'g-selcls'};agAddr=new Grid(agCfg);agAddr.onDataBinding=function(sender,args){if(args.rowType=='data'){args.row.childNodes[0].innerHTML=getAddrObj(args.dataItem.Info.Semantics,mapview.getAddrParamsForMap(args.dataItem.Info.MapId)).getAddr();}};agAddr.onClick=function(sender,args){var rows=sender.getSelectedRows();if(rows.length>0)sender.unSelect(rows[0]);sender.select(args.row);mapview.selectObj(args.dataItem.ListName,args.dataItem.Key,selExtParams,mapview.getSelObjMinScale(),null,function(id,isNewMapSet,type,extraData){if(type=='seldone'){w.collapse();return true;}},ErrAbTo,ErrAbTo,ErrAbTo);};agAddr.onPageChanged=function(sender,args){};agAddr.onRemotePageChanging=function(sender,args){mapview.findObjects(sc,new ScOptions(20,args.pageNumber-1,false,selExtParams,op),mapview.getSelObjMinScale(),null,function(id,isNewMapSet,type,extraData){if(type=='finddone')sender.appendData(mapview.getFindObjs().Objects,args.pageNumber);return true;},ErrAbTo,ErrAbTo,ErrAbTo);};agAddr.renderTo('addrGrid');if(isSelFirst)agAddr.select(0);if(!fObjs.SelFirst)return true;else if(w)w.collapse();}else{msgEl.innerHTML='По Вашему запросу ничего не найдено';Ext.getDom('addrGrid').innerHTML='';}}return true;},ErrAbTo,ErrAbTo,ErrAbTo);function ErrAbTo(){msgEl.innerHTML=prevMsg;return true;}}}var isOrgLoaded=false;var _catId=null;var _txt=null;var _mode=0;var _ls=null;var _key=0;if(isOrg){var agOrg;var agOfsH=115;var uaOfsH=20;var agOfsW=20;var pgSize=20;var allCategs;var cu=mapview.getUser();var usrAccess=cu.perms.orgAccess;var usrOrgs=cu.orgObjects;var maxOrgs=cu.maxOrgObjects;dh.append(Ext.getBody(),{id:'org-tab',tag:'div'});dh.append(Ext.getBody(),{id:'cat-tree',tag:'div',style:'display:block'});var t=addTab('Организации','org-tab','border',null);var tree=new MyTree({renderTo:'cat-tree',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:true,sep:ID_SEP});tree.onrequest=mapview.getCategories;tree.onpreload=function(){return false;};tree.onload=function(id,isnew,type,res){isOrgLoaded=true;tree.loaded(tree,id,isnew,type,res);return false;};tree.addListener('click',function(node,e){seekOrg(node.id,null,0,null,0);});t.on('activate',function(){if(!isOrgLoaded){tree.loadRoot();seekOrg(null,null,0,_ls,_key);}});var catPan=new Ext.Panel({region:'west',contentEl:'cat-tree',border:false,layout:'fit',collapseMode:'mini',split:true,width:200,collapsible:true,autoScroll:true,items:[tree]});var mainPan=new Ext.Panel({id:'org-main',contentEl:'orgs',region:'center',layout:'fit',border:false,padding:'5'});mainPan.addListener('resize',function(sender,adjWidth,adjHeight,w,h){if(agOrg){var _w=adjWidth-agOfsW;if(_w>300)agOrg.setWidth(_w);var _h=adjHeight-agOfsH;if(usrAccess)_h-=uaOfsH;if(_h>50)agOrg.setHeight(_h);}});t.add(catPan);t.add(mainPan);spec={tag:'div',id:'orgs',cn:[{tag:'table',width:'100%',style:'font-size:11px; font-weight:400',cn:[{tag:'tr',cn:[{tag:'td',style:'width:5px',html:'<input type="radio" name="cborg" value="0" checked />'},{tag:'td',html:'Везде'},{tag:'td',style:'width:5px',html:'<input type="radio" name="cborg" value="1" />'},{tag:'td',html:'В&nbsp;названии'},{tag:'td',style:'width:5px',html:'<input type="radio" name="cborg" value="2" />'},{tag:'td',html:'В&nbsp;услугах/продукции'},{tag:'td',style:'width:5px',html:'<input type="radio" name="cborg" value="3" />'},{tag:'td',html:'В&nbsp;описании'}]}]},{tag:'table',width:'100%',cn:[{tag:'tr',cn:[{tag:'td',align:'center',html:'<table><tr><td id="orgseek" style="padding:1px"></td><td id="orgok"></td></tr></table>'}]}]},{tag:'table',id:'orgCtrl',width:'100%',style:'font-size:11px',cn:[{tag:'tr',cn:[{tag:'td',align:'left',style:'width:5px',html:'<input id="cbOwnOrg" type="checkbox">'},{tag:'td',align:'left',html:'Отображать только мои объекты'},{tag:'td',align:'right',cn:[{tag:'a',id:'addOrg',cls:'btn',href:'javascript:void(0);',html:'Добавить новую организацию'}]}]}]},{tag:'div',id:'orgMsg',style:'font-weight:bold;margin:4px'},{tag:'table',width:'100%',cn:[{tag:'tr',cn:[{tag:'td',align:'center',html:'<table><tr><td id="orgGrid"></td></tr></table>'}]}]}]};dh.append(Ext.getBody(),spec);if(!usrAccess)Ext.getDom('orgCtrl').style.display='none';var cbOwnOrg=Ext.getDom('cbOwnOrg');cbOwnOrg.onclick=function(){seekOrg(null,null,0,null,0);};var addOrg=Ext.getDom('addOrg');addOrg.onclick=function(){var limMsg='Вы не можете больше добавить организацию. Ваш предел количества организаций: '+maxOrgs;if(!cu.isAdmin&&maxOrgs!=null&&maxOrgs<=usrOrgs){alert(limMsg);return;}var sObj=mapview.getSelObj();if(sObj){Ext.Msg.prompt('Название организации','Введите название новой организации:',function(btn,text){if(btn=='ok'){var nm=text.trim();if(nm.length>0){var org=new Sv.Org();org.Name=nm;var addr=getAddrObj(sObj.Info.Semantics,mapview.getAddrParamsForMap(sObj.Info.MapId));var loc=new Sv.Location();loc.Ls=sObj.ListName;loc.Key=sObj.Key;loc.Addr=addr.isEmpty()?null:addr;org.Location=loc;org.MapSetId=mapview.getMapSetInfo().Id;msgEl.innerHTML='Добавляем организацию...';mapview.addOrg(org,null,function(id,isnew,type,res){usrOrgs=res.OrgObjects;if(!res.Id){alert(limMsg);return true;}if(confirm('Организация успешно добавлена. Вы хотите заполнить дополнительную информацию для нее?')){alert('Переход на страницу редактирования. id='+res.Id);}seekOrg(_catId,_txt,_mode,_ls,_key);return true;},ErrAbTo,ErrAbTo,ErrAbTo);}else alert('Название организации не может быть пустым!')}});}else alert('Для добавления организации, пожалуйста выделите объект на карте, к которому Вы хотите добавить организацию');};var errMsg='Необходимо ввести минимум 3 символа для поиска';var txtOrg=new Ext.form.TextField({id:'txtOrg',renderTo:'orgseek',allowBlank:true,validator:function(val){if(val.trim().length<3)return errMsg;else return true;},maxLength:30,maxLengthText:'Значение не должно превышать 30 символов',validationDelay:1000,width:250,enableKeyEvents:true});function orgKeyUp(sender,e){if(e.getKey()==e.ENTER){seekByText();}}txtOrg.addListener('keyup',orgKeyUp);var btnOrg=new Ext.Button({renderTo:'orgok',width:80,text:'Поиск'});btnOrg.addListener('click',function(sender){seekByText();});var msgEl=Ext.getDom('orgMsg');var prevMsg=msgEl.innerHTML;function seekByText(){txtOrg.validate();if(!txtOrg.isValid())return;var type;var cb=document.getElementsByName('cborg');for(var i=0;i<cb.length;i++){if(cb[i].checked){type=parseInt(cb[i].value);break;}}seekOrg(null,txtOrg.getValue().trim(),type,null,0);}function getCatList(ids,categs){var res='';if(ids&&categs){for(var i=0;i<ids.length;i++){for(var j=0;j<categs.length;j++){if(ids[i]==categs[j].Id){res+=categs[j].Name+', ';continue;}}}}return res.substring(0,res.lastIndexOf(','));}function seekOrg(catId,txt,mode,ls,key){_catId=catId;_txt=txt;_mode=mode;_ls=ls;_key=key;msgEl.innerHTML='Выполняется поиск...';var own=cbOwnOrg.checked?1:0;if(txt)mapview.getOrgsByText(mapview.getMapSetInfo().Id,txt,mode,pgSize,1,own,null,function(id,isnew,type,res){if(res.Total>0){msgEl.innerHTML='Количество найденых '+(own?'Ваших':'')+' организаций по запросу "'+txt+'":&nbsp;'+res.Total;}return orgsCallback(id,isnew,type,res,own,function(s,args){mapview.getOrgsByText(mapview.getMapSetInfo().Id,txt,mode,pgSize,args.pageNumber,own,null,function(id,isnew,type,res){allCategs=res.Cats;s.appendData(res.Orgs,args.pageNumber);return true;},ErrAbTo,ErrAbTo,ErrAbTo);});},ErrAbTo,ErrAbTo,ErrAbTo);else if(catId)mapview.getOrgsByCategory(mapview.getMapSetInfo().Id,catId,pgSize,1,own,null,function(id,isnew,type,res){if(res.Total>0){msgEl.innerHTML='Количество '+(own?'Ваших':'')+' организаций в выбранной категории:&nbsp;'+res.Total;}return orgsCallback(id,isnew,type,res,own,function(s,args){mapview.getOrgsByCategory(mapview.getMapSetInfo().Id,catId,pgSize,args.pageNumber,own,null,function(id,isnew,type,res){allCategs=res.Cats;s.appendData(res.Orgs,args.pageNumber);return true;},ErrAbTo,ErrAbTo,ErrAbTo);});},ErrAbTo,ErrAbTo,ErrAbTo);else if(ls)mapview.getOrgsByMapObject(mapview.getMapSetInfo().Id,ls,key,pgSize,1,own,null,function(id,isnew,type,res){if(res.Total>0){msgEl.innerHTML='Количество '+(own?'Ваших':'')+' организаций в объекте карты:&nbsp;'+res.Total;}return orgsCallback(id,isnew,type,res,own,function(s,args){mapview.getOrgsByMapObject(mapview.getMapSetInfo().Id,ls,key,pgSize,args.pageNumber,own,null,function(id,isnew,type,res){allCategs=res.Cats;s.appendData(res.Orgs,args.pageNumber);return true;},ErrAbTo,ErrAbTo,ErrAbTo);});},ErrAbTo,ErrAbTo,ErrAbTo);else mapview.getOrgsTop(mapview.getMapSetInfo().Id,pgSize,1,own,null,function(id,isnew,type,res){if(res.Total>0){if(own)msgEl.innerHTML='Количество Ваших огранизаций: '+res.Total;else msgEl.innerHTML='TOP '+res.Total;}return orgsCallback(id,isnew,type,res,own,function(s,args){mapview.getOrgsTop(mapview.getMapSetInfo().Id,pgSize,args.pageNumber,own,null,function(id,isnew,type,res){allCategs=res.Cats;s.appendData(res.Orgs,args.pageNumber);return true;},ErrAbTo,ErrAbTo,ErrAbTo);});},ErrAbTo,ErrAbTo,ErrAbTo);}function orgsCallback(id,isnew,type,res,own,pageCallback){if(res.Total>0){allCategs=res.Cats;var pageCfg={pageSize:pgSize,pageGroup:10,pageCls:'g-page',selPageCls:'g-selpage',remoting:{enabled:true,count:res.Total,useCache:true}};var _w=mainPan.getWidth()-agOfsW;var h=mainPan.getHeight()-agOfsH;var tpl=new Array();tpl.push({align:'left',width:5,fixed:true,cls:'g-cell'});if(usrAccess){tpl.push({align:'left',width:5,fixed:true,cls:'g-cell'});tpl.push({align:'left',width:5,fixed:true,cls:'g-cell'});tpl.push({align:'left',width:5,fixed:true,cls:'g-cell'});h-=uaOfsH;}tpl.push({align:'center',width:0.25*_w,cls:'g-cell'});tpl.push({align:'center',width:0.32*_w,cls:'g-cell'});tpl.push({align:'center',cls:'g-cell'});var agCfg={data:res.Orgs,template:tpl,width:_w,height:h,pageCfg:pageCfg,rowCls:'g-row',altRowCls:'g-altrow',overCls:'g-overcls2',selCls:'g-selcls'};agOrg=new Grid(agCfg);agOrg.onDataBinding=function(sender,args){if(args.rowType=='data'){var ch=args.row.childNodes;var di=args.dataItem;var str='<img hspace="2"';if(di.State<=1)str+='src="'+APP_ROOT+'content/images/state/globe.png" title="Показать на карте" style="cursor:pointer"';else if(di.State==2)str+='src="'+APP_ROOT+'content/images/state/warn.png" title="Примерное расположение" style="cursor:pointer"';else str+='src="'+APP_ROOT+'content/images/state/block.png" title="Недоступен для просмотра"';str+=' />';var n=0;ch[n++].innerHTML=str;if(usrAccess){if(di.Edit){ch[n++].innerHTML='<img style="margin:0 1 0 1; cursor:pointer" src="'+APP_ROOT+'content/images/state/edit.png" title="Редактировать данные организации" />';ch[n++].innerHTML='<img style="margin:0 1 0 1; cursor:pointer" src="'+APP_ROOT+'content/images/state/cross.png" title="Удалить организацию" />';ch[n++].innerHTML='<img style="margin:0 1 0 1; cursor:pointer" src="'+APP_ROOT+'content/images/state/flag_green.png" title="Изменить расположение организации" />';}else{n+=3;}}ch[n++].innerHTML=di.Addr?di.Addr:'';var href='/OrgDetails.aspx?idobj='+di.Id;ch[n++].innerHTML='&nbsp;<a target="_blank" href="'+href+'">'+di.Name+(di.Type?', '+di.Type:'')+'</a>';ch[n++].innerHTML=getCatList(di.CatId,allCategs);}};agOrg.onClick=function(sender,args){if(args.cell==0){if(args.dataItem.State>2)return;var rows=sender.getSelectedRows();if(rows.length>0)sender.unSelect(rows[0]);sender.select(args.row);mapview.selectObj(args.dataItem.Ls,args.dataItem.Key,selExtParams,mapview.getSelObjMinScale(),null,function(id,isNewMapSet,type,extraData){if(type=='seldone'){w.collapse();return true;}},ErrAbTo,ErrAbTo,ErrAbTo);}else if(usrAccess&&args.cell==1){alert('Ссылка на страницу для редактирования данных');}else if(usrAccess&&args.cell==2){if(confirm("Вы уверены, что хотите удалить эту организацию?")){msgEl.innerHTML='Удаляем организацию...';mapview.delOrg(args.dataItem.Id,null,function(id,isnew,type){usrOrgs=res;alert('Удаление прошло успешно!');seekOrg(_catId,_txt,_mode,_ls,_key);return true;},ErrAbTo,ErrAbTo,ErrAbTo);}}else if(usrAccess&&args.cell==3){var sObj=mapview.getSelObj();if(sObj){if(confirm('Изменяем расположение организации?')){var org=new Sv.Org();org.Id=args.dataItem.Id;var addr=getAddrObj(sObj.Info.Semantics,mapview.getAddrParamsForMap(sObj.Info.MapId));var loc=new Sv.Location();loc.Ls=sObj.ListName;loc.Key=sObj.Key;loc.Addr=addr.isEmpty()?null:addr;org.Location=loc;msgEl.innerHTML='Изменяем расположение...';mapview.updateOrgLocation(org,null,function(id,isnew,type){alert('Обновление прошло успешно');seekOrg(_catId,_txt,_mode,_ls,_key);return true;},ErrAbTo,ErrAbTo,ErrAbTo);}}else alert('Для изменения расположения необходимо вначале выделить здание на карте, в которое Вы хотите переместить организацию');}};agOrg.onRemotePageChanging=pageCallback;agOrg.renderTo('orgGrid');}else{msgEl.innerHTML='По Вашему запросу ничего не найдено';Ext.getDom('orgGrid').innerHTML='';}return true;}}w.items.first().setActiveTab(tabN?tabN:0);this.show=function(el){w.show(el);};this.orgsInObj=function(ls,key){if(isOrgLoaded)seekOrg(null,null,0,ls,key);else{_ls=ls;_key=key;}};this.hide=function(){w.hide();};this.isVisible=function(){return w.isVisible();};this.destroy=function(){w.destroy();};this.showTab=function(t){if(!w.isVisible())w.show();w.expand();tp.setActiveTab(t);}}function InfoWnd(x,y,w,h){var wnd;var _this=this;var _w=w;var _h=h;var _x=x;var _y=y;var shortTab;function addTab(t,elId,l){var tabs=wnd.items.first();return tabs.add({title:t,contentEl:elId,closable:false,border:false,layout:l});}function getWnd(){if(!wnd){var dh=Ext.DomHelper;var spec={id:'info-wnd',tag:'div',cls:'x-hidden',cn:[{tag:'div',id:'inf-tabs'}]};dh.append(Ext.getBody(),spec);wnd=new Ext.Window({applyTo:'info-wnd',layout:'fit',title:'Информация об объекте',x:_x,y:_y,width:_w,height:_h,closeAction:'hide',collapsible:true,plain:true,items:new Ext.TabPanel({renderTo:'inf-tabs',enableTabScroll:true,deferredRender:false,border:false})});wnd.addListener('beforehide',function(sender){if(_this.beforehide)_this.beforehide(_this);});spec={id:'short-tab',tag:'div',style:'padding: 3px'};dh.append(Ext.getBody(),spec);addTab('Краткая','short-tab','fit').show();spec={id:'details-tab',tag:'div',style:'padding: 3px'};dh.append(Ext.getBody(),spec);addTab('Подробная','details-tab','fit');shortTab=Ext.getDom('short-tab');}return wnd;}this.hide=function(){getWnd().hide();};this.show=function(obj){getWnd().show(obj);};this.setMarkup=function(spec){while(shortTab.firstChild!=null)shortTab.removeChild(shortTab.firstChild);Ext.DomHelper.append(shortTab,spec);};this.destroy=function(){wnd.destroy();wnd=null;};this.beforehide=null;}function LoginCtrl(btnId,mapPanelId,w,h){var _this=this;var _w=w;var _h=h;var btn;this.onLogin;this.onLogout;var wnd;var loginId='txtLogin';var pwdId='txtPwd';var remId='cbRem';function getBtn(){if(!btn){btn=Ext.getCmp(btnId);btn.addListener('click',function(sender){var cu=mapview.getUser();if(!cu)return;if(cu.isAnonymous){var mP=Ext.getCmp(mapPanelId);var mpPos=mP.getPosition();_this.show(mpPos[0]+(mP.getInnerWidth()-L_WND_WIDTH)/2,mpPos[1]+(mP.getInnerHeight()-L_WND_HEIGHT)/2);}else{if(_this.onLogout!=null)_this.onLogout(_this,null);}});}return btn;}function getWnd(){if(!wnd)wnd=new Ext.Window({applyTo:'wLogin',layout:'fit',iconCls:'login',x:null,y:null,width:_w,height:_h,closeAction:'hide',plain:true,items:new Ext.FormPanel({labelWidth:60,frame:true,border:false,bodyStyle:'padding:5px 5px 0',width:300,defaults:{width:160},defaultType:'textfield',items:[{id:loginId,fieldLabel:'Логин',allowBlank:false,blankText:'Необходимо ввести Ваш логин',enableKeyEvents:true,listeners:{keyup:{fn:function(sender,e){handleKeyUp(sender,e);}}}},{id:pwdId,fieldLabel:'Пароль',inputType:'password',allowBlank:false,blankText:'Необходимо ввести пароль',enableKeyEvents:true,listeners:{keyup:{fn:function(sender,e){handleKeyUp(sender,e);}}}},{id:remId,xtype:'checkbox',boxLabel:'Запомнить'}],buttons:[{text:'Вход',listeners:{click:{fn:function(sender,e){doLogin();}}}},{text:'Отмена',listeners:{click:{fn:function(sender,e){_this.hide();}}}}]})});return wnd;}function handleKeyUp(sender,e){if(e.getKey()==e.ENTER)doLogin();}function doLogin(){var l=Ext.getCmp(loginId);var p=Ext.getCmp(pwdId);if(!l.isValid())return;if(!p.isValid())return;if(_this.onLogin!=null){_this.onLogin(_this,{login:l.getValue(),pwd:p.getValue(),rem:Ext.getCmp(remId).getValue()});}}this.setLoggedText=function(txt){getBtn().setText(txt+' (Выход)');getBtn().setTooltip('Нажмите эту кнопку, чтобы выйти');};this.setAnonymousText=function(){getBtn().setText('Вход');getBtn().setTooltip('Нажмите эту кнопку, чтобы войти в систему');};this.hide=function(){this.clearPwd();getWnd().hide();};this.show=function(x,y){getWnd().setPosition(x,y);getWnd().show();};this.clearPwd=function(){var p=Ext.getCmp(pwdId);if(p)p.setRawValue('');}}function LinkWindow(mapPanelId,w,h){var _this=this;var _w=w;var _h=h;var mpId=mapPanelId;var wnd;function getWnd(){if(!wnd)wnd=new Ext.Window({applyTo:'wLink',layout:'fit',iconCls:'maplink',x:null,y:null,width:_w,height:_h,closeAction:'hide',collapsible:true,plain:true,items:new Ext.FormPanel({frame:true,border:false,bodyStyle:'padding:2px',labelAlign:'top',buttonAlign:'center',defaults:{selectOnFocus:true},items:[{xtype:'textfield',id:'txtMapLink',fieldLabel:'Ссылка на эту карту',anchor:'100%'},{xtype:'textfield',id:'txtLink',fieldLabel:'Ссылка на выделенный объект или Ваше местоположение',anchor:'100%'},{xtype:'textarea',id:'txtHTML',fieldLabel:'HTML-код для вставки в блог ссылки на объект или Ваше местоположение',anchor:'100% -115'}],buttons:[{text:'Закрыть',listeners:{click:{fn:function(sender,e){getWnd().hide();}}}}]})});return wnd;}this.show=function(x,y){getWnd().setPosition(x,y);getWnd().show(mpId);};this.hide=function(){getWnd().hide();};this.setLink=function(maplnk,lnk,html){var w=getWnd();w.findById('txtMapLink').setValue(maplnk);w.findById('txtLink').setValue(lnk);w.findById('txtHTML').setValue(html);};}function LiveSearch(_el,_ovrCls){var self=this;var ovrCls=_ovrCls;var el=_el;if(typeof(el)=='string')el=document.getElementById(el);var sz=MapView.objSize(el);var sel;function clearSelection(){for(var i=0;i<d.childNodes.length;i++)d.childNodes[i].className='';}MapView.addHandler(el,'keyup',function(e){if(d.childNodes.length==0)return;var node;if(e.keyCode==40){clearSelection();sel++;if(sel>=d.childNodes.length)sel=0;node=d.childNodes[sel];node.className=ovrCls;if(self.select)self.select(node.data);}else if(e.keyCode==38){clearSelection();sel--;if(sel<0)sel=d.childNodes.length-1;node=d.childNodes[sel];node.className=ovrCls;if(self.select)self.select(node.data);}});var d=document.createElement('div');d.style.position='absolute';d.className='LiveSearch';if(!Ext.isIE)sz.width-=6;MapView.setSize(d,sz.width,null);document.body.appendChild(d);this.format;this.select;this.setText=function(data){if(!data||data.length<1){this.close();return;}sel=-1;while(d.firstChild!=null)d.removeChild(d.firstChild);d.style.display='';var pos=MapView.uiFindPos(el);if(Ext.isIE)pos.left+=1;MapView.setPosition(d,pos.left,pos.top+sz.height);var row;for(var i=0;i<data.length;i++){row=document.createElement('div');row.data=data[i];row.idx=i;row.onclick=function(){self.close();self.select(this.data);};row.onmouseover=function(){clearSelection();this.className=ovrCls;sel=this.idx;};row.onmouseout=function(){sel=-1;};row.innerHTML=this.format(data[i]);d.appendChild(row);}};this.close=function(){if(d.style.display=='none')return;d.innerHTML='';d.style.display='none';}}