window.onresize = function() {
	if (Ext.isReady)
		resizeGrid();
};

function resizeGrid() {	
	var membersBlock = Ext.getDom('members');
	var leftMenu = Ext.getDom('left_menu');
	var container = Ext.getCmp('members_c');
	
	var height = membersBlock.parentNode.parentNode.clientHeight;
	var width = Ext.getBody().dom.clientWidth;
	
	if (container) {
		var delta;
		if (!Ext.isIE6) {
			delta = leftMenu ? 355 : 60;			
			container.setWidth(width - delta);			
		}
		
		delta = leftMenu ? 390 : 100; 
		delta = Ext.isIE6 || Ext.isIE7 || Ext.isIE8 ? -150 : delta; 
		
		// strange result in a updated ie
		container.setHeight(height - delta);
		
		container.doLayout();
	}
}

Ext.ns('SroSiteInfo');

SroSiteInfo.Members = Ext.extend(Ext.Panel, {
	layout : 'fit',
	border : false,
	isFired : false,
	containerId : null,
	titleId : null,
	active : null,
	privateArchive : null,
	dateFormat : DATE_FORMAT,
	selectedRow : null,
	selectedInspection : null,
	inspectionsUtilLoad : false,

	initComponent : function() {
		var me = this;
		
		me.addEvents('firstshow');
		
		var config = {
		};
		
		Ext.apply(me, Ext.apply(me.initialConfig, config));
		SroSiteInfo.Members.superclass.initComponent.apply(me, arguments);
		
		Ext.Ajax.request({
			url : 'security?do=isEmployeeOfSroOrSiteAdmin',
			success : function(val) {
				me.loginned = (val.responseText == "true");
				me.init();
				resizeGrid();
			}
		});
		
		me.on('firstshow', function() {
			if (!me.isFired) {
				me.isFired = true;
			}
		}, me);
	},

	// private
	init : function() {
		var me = this;
		
		me.workRegions = '';
		
		me.workStore = shareWorksStore(true);
		me.subworkStore = shareSubworksStore(true);
		me.nworkGroupsStore = shareNWorkGroupsStore(true);
		me.nworkStore = shareNWorksStore(true);
		
		me.membersStore = me.createMembersStore();
		me.memberWorkRegions = me.createMemberWorkRegions();
		me.protocolStore = me.createProtocolStore();
		me.mswStoreFirstCat = me.createMemberSubworksStore(REQUESTS_FIRST);
		me.mswStoreSecondCat = me.createMemberSubworksStore(REQUESTS_SECOND);
		me.decisionHistoryStore = me.createDecisionHistoryStore();
		me.inspectionsStore = me.createInspectionStore();
		me.numberBBStore = new Ext.data.Store({
			url : 'xml?get=numberBlankBills',
			reader : new Ext.data.XmlReader({
				record : 'r',
				idProperty : 'n'
			}, requestNumberBBType())
		});;
		
		me.grid = me.createGrid(me.membersStore);
		me.detail = new SroSiteInfo.MembersDetailInfo({
			isRequestList : false
		});
		me.decisionHistoryGrid = me.createDecisionHistoryGrid(me.decisionHistoryStore);

		me.requestsHistoryGrid = new SroSiteInfo.RequestsHistory({
			loginned : me.loginned,
			disabled : true
		});

		me.inspectionGrid = me.createInspectionGrid(me.inspectionsStore);
		
		me.memberWorkGridFirstCat = me.createMemberWorksGrid(me.mswStoreFirstCat, 
															 REQUESTS_FIRST);
		me.memberWorkGridSecondCat = me.createMemberWorksGrid(me.mswStoreSecondCat, 
													   		  REQUESTS_SECOND);	 
		
		var tabs;
		if(me.loginned){
			tabs = [{
				title : 'Члены СРО',
				autoScroll : true,
				layout : 'fit',
				items : me.grid
			}, me.detail, {
				layout : 'fit',
				disabled : true,
				title : 'Работы на объекты 1-ой категории, к кот. имеется допуск',
				items : me.memberWorkGridFirstCat
			}, {
				layout : 'fit',
				disabled : true,
				title : 'Работы на объекты 2-ой категории(ООТС), к кот. имеется допуск',
				items : me.memberWorkGridSecondCat
			}, me.requestsHistoryGrid, {
				title : 'История свидетельства о допуске',
				layout : 'fit',
				disabled : true,
				items : me.decisionHistoryGrid
			}, {
				title : 'История проверок',
				layout : 'fit',
				disabled : true,
				items : me.inspectionGrid
			}];
		} else {
			tabs = [{
				title : 'Члены СРО',
				autoScroll : true,
				layout : 'fit',
				items : me.grid
			}, me.detail, {
				layout : 'fit',
				disabled : true,
				title : 'Работы на объекты 1-ой категории, к кот. имеется допуск',
				items : me.memberWorkGridFirstCat
			}, {
				layout : 'fit',
				disabled : true,
				title : 'Работы на объекты 2-ой категории(ООТС), к кот. имеется допуск',
				items : me.memberWorkGridSecondCat
			}, {
				title : 'История свидетельства о допуске',
				layout : 'fit',
				disabled : true,
				items : me.decisionHistoryGrid
			}, {
				title : 'История проверок',
				layout : 'fit',
				disabled : true,
				items : me.inspectionGrid
			}];
		}
		
	    me.tabPanel = new Ext.TabPanel({
			enableTabScroll : true,
			id : 'tabs',
			activeTab : 0,
			items : tabs,
			plugins : [new Ext.ux.TabScrollerMenu({
		        maxText: 45,
		        pageSize: 5,
		        menuPrefixText :'Панель'
		    })],
			listeners : {
				tabchange : function(tabPanel, newme) {
					newme.fireEvent('firstshow');
				}
			}
		});
	    
	    me.tabPanel.setActiveTab(3);
	    me.tabPanel.setActiveTab(2);
	    me.tabPanel.setActiveTab(1);
		
		if(me.loginned){
			me.tabPanel.setActiveTab(4);
		}
		me.tabPanel.setActiveTab(0);
	    
		me.add(new Ext.Panel({
			border : false,
			id : 'members_c',
			layout : 'fit',
			width: Ext.isIE6 ? 320 : 'auto',
			items : me.tabPanel
		}));
		
		me.render(me.containerId);
	},
	
	// private
	createMembersStore : function() {
		var me = this;
		
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	    	url : 'xml?get=sroMembers',
	        method : 'POST'
	    });
		
		return new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			baseParams : {
				archive : me.active ? 'false' : 'true',
				privateArchive : me.privateArchive,
				forAll : true
			},
			autoLoad : true, 
			reader : new Ext.data.XmlReader({
				record : 'smem',
				idProperty : 'mid'
			}, sroMemberType() ),
			listeners : {
				load : function(store) {
					me.membersCountLbl.setText('Количество: ' + store.getCount());
					
					var memberId = getRequestParameter('id');
					if (memberId) {
						var memberRow = store.getById(memberId);
						if (memberRow && me.grid) {
							panel.grid.getSelectionModel().selectRow(store.indexOf(memberRow));
							var tp = Ext.getCmp('tabs');
							tp.setActiveTab(1);
						}
					}
				}
			}
		});
	},
	
	// private
	createMemberWorkRegions : function() {
		var me = this;
		
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=memberWorkRegions',
	        method : 'POST'
	    });
		
		return new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			reader : new Ext.data.XmlReader({
				record : 'area',
				id : 'areaId'
			}, [{
				name : 'areaId',
				type : 'int'
			}, {
				name : 'name',
				type : 'string'
			}]),
			listeners : {
				load : function(store) {
					me.workRegions = '';
					for (var i = 0; i < store.getCount(); i++) {
						me.workRegions += store.getAt(i).data.name;
						if (i < store.getCount() - 1) {
							me.workRegions += ', ';
						}
					}
				}
			}
		});
	},
	
	// private
	createProtocolStore : function() {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=decisionsByDomen',
	        method : 'POST'
	    });
		
		return new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			autoLoad : true,
			reader : new Ext.data.XmlReader({
				record : 'ad',
				idProperty : 'id'
			}, admissionDecisionType() )
		});
	},
	
	// private
	createDecisionHistoryStore : function() { 
		var me = this;
		
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=decisionHistory',
	        method : 'POST'
	    });
		
		return new Ext.data.GroupingStore({
			proxy : new Ext.data.HttpProxy(connObj),
			sortInfo : {
				field : 'subworkId',
				direction : 'ASC'
			},
			groupField : 'protocolId',
			groupDir : 'ASC',
			reader : new Ext.data.XmlReader({
				record : 'ms',
				idProperty : 'id'
			}, memberSubworkType() )
		});
	},
	
	// private
	createMemberSubworksStore : function(requestTypeId) {
		var me = this;
		
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=memberSubworksByRequestType',
	        method : 'POST'
	    });
		
		return new Ext.data.GroupingStore({
			proxy : new Ext.data.HttpProxy(connObj),
			baseParams : {
				requestTypeId : requestTypeId
			},
			sortInfo : {
				field : 'subworkId',
				direction : 'ASC'
			},
			groupField : 'workId',
			groupDir : 'ASC',
			listeners : {
				load : function(store) {
					var countLbl = 'Количество работ/кодов: ' + 
									me.countWorksInStore(store) + '/' + 
									me.countSubworksInStore(store);
					
					if (requestTypeId == REQUESTS_FIRST)
						me.swCountLbl_first.setText(countLbl);
					else
						me.swCountLbl_second.setText(countLbl);
				}
			},
			reader : new Ext.data.XmlReader({
				record : 'ms',
				idProperty : 'id'
			}, memberSubworkType() )
		});
	},
	
	// private
	createInspectionStore : function() {
		var me = this;
		
		me.basesStore = new Ext.data.Store({
			url : 'xml?get=inspectionBases',
			reader : new Ext.data.XmlReader({
				record : 'inspectionBase',
				totalProperty : 'total',
				idProperty : 'baseId'
			}, inspectionBaseType() )
		});
		
		me.controlOrganDecisionsStore = new Ext.data.Store({
			url : 'xml?get=inspectionControlOrganDecisions',
			reader : new Ext.data.XmlReader({
				record : 'icod',
				totalProperty : 'total',
				idProperty : 'id'
			}, inspectionControlOrganDecisionType() )
		});
		
		me.formsStore = new Ext.data.Store({
			url : 'xml?get=inspectionForms',
			reader : new Ext.data.XmlReader({
				record : 'if',
				totalProperty : 'total',
				idProperty : 'id'
			}, inspectionFormType() )
		});
		
		me.regardingOrganDecisionStore = new Ext.data.Store({
			url : 'xml?get=inspectionRegardingOrganDecisions',
			reader : new Ext.data.XmlReader({
				record : 'irod',
				totalProperty : 'total',
				idProperty : 'id'
			}, inspectionRegardingOrganDecisionType() )
		});
		
		me.subjectsStore = new Ext.data.Store({
			url : 'xml?get=inspectionSubjects',
			reader : new Ext.data.XmlReader({
				record : 'is',
				totalProperty : 'total',
				idProperty : 'id'
			}, inspectionSubjectType() )
		});
		
		return new Ext.data.Store({
			url : 'xml?get=inspections',
			reader : new Ext.data.XmlReader({
				record : 'insp',
				totalProperty : 'total',
				idProperty : 'id'
			}, inspectionType() )
		});
	},
	
	// private
	createGrid : function(membersStore) {
		var me = this;
		
		var colModel = new Ext.grid.ColumnModel({
			defaultSortable : true,
			defaultWidth : 200,
			columns : [{
				header : "№ дела",
				dataIndex : 'numberAct',
				width : 50
			}, {
				header : "№ Свидетельства",
				dataIndex : 'numberBill',
				width : 170
			}, {
				header : "ОПФ",
				dataIndex : 'opf',
				width : 50
			}, {
				header : "Название",
				dataIndex : 'name',
				width : 220,
				renderer: function(value, metaData, record, rowIndex, colIndex, store) {
		        	metaData.css = 'ext-grid-panel-multiline'; 
		        	return value;
		    	}
			}, {
				header : "Регион",
				dataIndex : 'regArea',
				width: 220,
				renderer: function(value, metaData, record, rowIndex, colIndex, store) {
		        	metaData.css = 'ext-grid-panel-multiline'; 
		        	return value;
		    	}
			}]
		});
		
		me.membersCountLbl = new Ext.form.Label({
			style : 'padding-right : 5px;',
			width : 100,
			id : 'countField'
		});
		
		var loadMask = null;
		var storeAdjustorLarge = null;
		var storeAdjustorSmall = null;
		
		var exportBtns = me.loginned ? [{
			xtype : 'button',
			text : 'Экспорт',
			cls : 'x-btn-text-icon',
			icon : 'images/xls.jpg',
			handler : 	function() {
				var title = me.active ? 'Реестр членов: Экспорт организаций' : 'Архив реестра членов: Экспорт организаций';
				var action = me.active ? 'members' : 'archive';
				Ext.Msg.prompt(title, 'Введите электронный адрес,' +
						' на который будет отправлено письмо:', function(btn, text){
				    if (btn == 'ok'){
				    	Ext.Ajax.request({
						   url: 'excel',
						   params: { 
						   	doc: action,
						   	to: text
						   }
						});
						
						showMsg('Письмо с прикрепленным файлом будет отправлено ' +
								'на адрес ' + text + ' в ближайшее время.');
				    }
				});
			}
		}] : [];
		
		if (me.loginned && me.active) {
			exportBtns = exportBtns.concat(['-', {
				xtype : 'button',
				text : 'Экспорт проверок',
				cls : 'x-btn-text-icon',
				icon : 'images/xls.jpg',
				handler : me.showInspectionsExportDialog
			}]);
		}
		
		return new Ext.grid.GridPanel({
			ds : membersStore,
			cm : colModel,
			sm : new Ext.grid.RowSelectionModel({
				singleSelect : true,
				listeners : {
					rowselect : function(sm, row, rec) {
						loadMask.show();
				
						if (!me.inspectionsUtilLoad) {
							storeAdjustorLarge.enable();
							storeAdjustorSmall.disable();
						} else {
							storeAdjustorSmall.enable();
							storeAdjustorLarge.disable();
						}
						
						me.selectedRow = rec;
						me.updateTitle();

						var sharedParams = {
							memberId : rec.data.memberId
						};
						
						me.memberWorkRegions.load({params : sharedParams});
						
				    	/*
				    	 *  List of the actual works form an old works list in the members list 
				    	 *  of the sro site part must be displayed only if it's no requests for 
				    	 *  the new works list which haven't admission decision.
				    	 *  Otherwise displayed actual works from a new works list
				    	 */
						Ext.Ajax.request({
							url: 'ajax?do=hasClosedRequests',
							params: {
								memberId : rec.data.memberId,
								requestTypeId : REQUESTS_FIRST
							},
							success : function(val) {
								me.mswStoreFirstCat.forOldWorks = !(val.responseText == "true");
								me.mswStoreFirstCat.load({
									params : {
										memberId : rec.data.memberId,
										forOldWorks : me.mswStoreFirstCat.forOldWorks
									}
								});
							}
						});
						
						Ext.Ajax.request({
							url: 'ajax?do=hasClosedRequests',
							params: {
								memberId : rec.data.memberId,
								requestTypeId : REQUESTS_SECOND
							},
							success : function(val) {
								me.mswStoreSecondCat.forOldWorks = !(val.responseText == "true");
								me.mswStoreSecondCat.load({
									params : {
										memberId : rec.data.memberId,
										forOldWorks : me.mswStoreSecondCat.forOldWorks
									}
								});
							}
						});
						
						SroMembersDao.getMemberInfoById(rec.data.memberId, function(res) {
							res.activityRegions = me.workRegions;
							me.detail.setDetailInfo(me.selectedRow.data, res);
						});

						me.requestsHistoryGrid.setMemberId(rec.data.memberId);
						
						me.decisionHistoryStore.load({params : sharedParams});
						
						me.inspectionsStore.load({params : sharedParams});
						me.numberBBStore.load({params : { memberId : rec.data.memberId }});
						
						if(!me.inspectionsUtilLoad){
							me.basesStore.load();
							me.controlOrganDecisionsStore.load();
							me.formsStore.load();
							me.regardingOrganDecisionStore.load();
							me.subjectsStore.load();
							
							me.inspectionsUtilLoad = true;
						}
						
						me.tabPanel.items.get(1).setDisabled(false);
						me.tabPanel.items.get(2).setDisabled(false);
						me.tabPanel.items.get(3).setDisabled(false);
						me.tabPanel.items.get(4).setDisabled(false);
						me.tabPanel.items.get(5).setDisabled(false);
						if (me.loginned) {
							me.tabPanel.items.get(6).setDisabled(false);
						}
					}
				}
			}),
			listeners : {
				beforerender : function() {
					loadMask = new Ext.LoadMask(me.body, {msg : "Получение данных..."});
					
					storeAdjustorLarge = new Ext.ux.StoreAdjustor({
						stores : [
							me.basesStore,
							me.controlOrganDecisionsStore,
							me.formsStore,
							me.regardingOrganDecisionStore,
							me.subjectsStore,
							me.memberWorkRegions,
							me.mswStoreFirstCat,
							me.mswStoreSecondCat,
							me.decisionHistoryStore,
							me.inspectionsStore,
							me.requestsHistoryGrid.getStore(),
							me.numberBBStore
						],
						handler : function() {
							loadMask.hide();
						}
					});	
					
					storeAdjustorSmall = new Ext.ux.StoreAdjustor({
						stores : [
							me.memberWorkRegions,
							me.mswStoreFirstCat,
							me.mswStoreSecondCat,
							me.decisionHistoryStore,
							me.inspectionsStore,
							me.requestsHistoryGrid.getStore(),
							me.numberBBStore
						],
						handler : function() {
							loadMask.hide();
						}
					});
				}
			},
			border : false,
			loadMask : {
				msg : 'Загрузка организаций...'
			},
			tbar : exportBtns.concat(['->', me.membersCountLbl])
		});
	},
	
	// private
	createDecisionHistoryGrid : function(decisionHistoryStore) {
		var me = this;
		
		var requestForOldWorks = true;
		
		var colModel = new Ext.grid.ColumnModel({
			defaultSortable : true,
			defaultWidth : 200,
			columns : [{
				header : 'Вид',
				dataIndex : 'protocolId',
				hidden : true,
				renderer : function(val, row, rec) {
					for (var i = 0; i < me.protocolStore.getCount(); i++) {
						var admissionDecision = me.protocolStore.getAt(i).data;
						
						if (admissionDecision.protocolId == val) {
							var numberBillTip = '';
							var numberBlankBillTip = '';
							var reqStore = me.requestsHistoryGrid.getStore();
							
							for (var j = 0; j < reqStore.getCount(); j++) {
								var currRequest = reqStore.getAt(j).data;
								requestForOldWorks = currRequest.forOldWorks;
								
								if (admissionDecision.id == currRequest.admissionDecisionId) {
									numberBillTip = ' Присвоен № свидетельства "' + 
													currRequest.newNumberBill + '".';
									
									for (var k = 0; k < me.numberBBStore.getCount(); k++) {
										var rnb = me.numberBBStore.getAt(k).data;
										if (rnb.adId == currRequest.admissionDecisionId)
											numberBlankBillTip = ' Присвоены № бланков свидетельства: ' + 
																	rnb.numberBB + '.';
									}
						
									break;
								}
							}
							
							var str = SroAdminUtils.decisionKindStore.getById(admissionDecision.decisionKind).data.name;
							str += '. Протокол ' + admissionDecision.protocolName + ' от ';
							str += isFunction(admissionDecision.date.format) ?
									dateRenderer(admissionDecision.date) + '.' : '... ';
							str += numberBillTip;		
							str += numberBlankBillTip;
							
							return str;
						}
					}
				}
			}, {
				header : 'Объект',
				width : 70,
				dataIndex : 'requestTypeId',
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					value = getRequestTypeName(value);
					return value;
				}
			}, {
				header : 'Код',
				width : 50,
				dataIndex : 'subworkId',
				renderer : function(val, row, rec) {
					if (requestForOldWorks)
						return me.subworkStore.getById(val).data.code;
					else
						return me.nworkStore.getById(val).data.code;
				}
			}, {
				header : 'Вид работы',
				dataIndex : 'subworkId',
				width : 300,
				renderer: function(value, metaData, record, rowIndex, colIndex, store) {
		        	metaData.css = 'ext-grid-panel-multiline'; 
		        	
		        	if (requestForOldWorks)
		        		return me.subworkStore.getById(value).data.name;
		        	else
		        		return me.nworkStore.getById(value).data.typedName;
		    	}
			}, {
				header : 'Действие',
				dataIndex : 'stateId',
				width : 200,
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					
					var prev = (record.data.prevStateId) == ''
							? null
							: record.data.prevStateId;
					var now = record.data.stateId;
					
					return decisionRenderer(now, prev);
				}
			}, {
				header : 'Работа',
				dataIndex : 'workId',
				width : 300,
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					
					if (requestForOldWorks)
						return me.workStore.getById(value).data.name;
					else
						return me.nworkGroupsStore.getById(value).data.name;
				}
			}]
		});
		
		return  new Ext.grid.GridPanel({
			ds : decisionHistoryStore,
			cm : colModel,
			view : new Ext.grid.GroupingView({
				startCollapsed : true
			}),
			border : false,
			loadMask : {
				msg : 'Загрузка решений совета...'
			},
			tbar: [{
				xtype : 'button',
				text : 'Раскрыть все',
				handler : function(){
					me.decisionHistoryGrid.getView().expandAllGroups();
				}
			}, '-', {
				xtype : 'button',
				text : 'Свернуть все',
				handler : function(){
					me.decisionHistoryGrid.getView().collapseAllGroups();
				}
			}, '-', 'Показать ', 
			SroAdminUtils.createPermitTypeSwitchCombo(decisionHistoryStore)]
		});
	},
	
	// private
	createInspectionGrid : function(inspectionsStore) {
		var me = this;
		
		var hiddenFileds = [];
		if (me.loginned) {
			hiddenFileds =  [{
				header : 'Эксперт подготавливающий задание',
				dataIndex : 'taskPreparingExpert',
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					return value;
				},
				sortable : true
			}, {
				header : 'Эксперт выполняющий проверку',
				dataIndex : 'executiveExpert',
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					return value;
				},
				sortable : true
			}, {
				header : 'Дата подготовки приказа и письма-запроса',
				dataIndex : 'lettersPreparationStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Дата запроса документов',
				dataIndex : 'docsRequestStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Дата получения документов',
				dataIndex : 'docsReceivingStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Дата подготовки задания',
				dataIndex : 'taskPreparationStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Дата отчета эксперта о проверке',
				dataIndex : 'expertReportStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Дата решения Спецоргана по контролю',
				dataIndex : 'controlOrganDecisionDateStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Решение Спецоргана по контролю',
				dataIndex : 'controlOrganDecision',
				renderer : function(value, metaData, record, rowIndex, colIndex, store){
					metaData.css = 'ext-grid-panel-multiline';
					var res = me.controlOrganDecisionsStore.getById(value);
					return res ? res.data.text : '';
				},
				sortable : true
			}, {
				header : 'Дата решения Спецоргана по рассмотрению дел',
				dataIndex : 'regardingOrganDecisionDateStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Решение Спецоргана по рассмотрению дел',
				dataIndex : 'regardingOrganDecision',
				renderer : function(value, metaData, record, rowIndex, colIndex, store){
					metaData.css = 'ext-grid-panel-multiline';
					var res = me.regardingOrganDecisionStore.getById(value);
					return res ? res.data.text : '';
				},
				sortable : true
			}];
		}
		
		var colModel = new Ext.grid.ColumnModel({
			defaultSortable : false,
			defaultWidth : 80,
			columns : [{
				header : 'Номер протокола Совета о назначении проверки',
				dataIndex : 'admissionDecisionId',
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					var res = me.protocolStore.getById(value);
					return res ? res.data.name : '';
				},
				sortable : true
			}, {
				header : 'Дата решения Совета о назначении проверки',
				dataIndex : 'inspectionAppointmentStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Дата начала проверки',
				dataIndex : 'inspectionBeginStr',
				renderer : dateRenderer,
				sortable : true
			}, {
				header : 'Основание проверки',
				dataIndex : 'inspectionBase',
				width : me.loginned ? 80 : 160,
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					var res = me.basesStore.getById(value);
					return res ? res.data.text : '';
				},
				sortable : true
			}, {
				header : 'Форма проверки',
				dataIndex : 'inspectionForm',
				width : me.loginned ? 80 : 160,
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					var res = me.formsStore.getById(value);
					return res ? res.data.text : '';
				},
				sortable : true
			}, {
				header : 'Предмет проверки',
				dataIndex : 'inspectionSubject',
				width : me.loginned ? 80 : 160,
				renderer : function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline';
					var res = me.subjectsStore.getById(value);
					return res ? res.data.text : '';
				},
				sortable : true
			}].concat(hiddenFileds).concat([{
				header : 'Заключение по результатам проверки',
				dataIndex : 'result',
				width : 100,
				renderer : function(value, metaData, record, rowIndex, colIndex, store){
					metaData.css = 'ext-grid-panel-multiline';
					return value ? 'Положительное' : 'Отрицательное';
				},
				sortable : true
			}])
		});
		
		return new Ext.grid.GridPanel({
			ds : inspectionsStore,
			cm : colModel,
			sm : new Ext.grid.RowSelectionModel({
				singleSelect : true,
				listeners : {
					rowselect : function(sm, row, rec) {
						me.selectedInspection = rec.data;
					}
				}
			}), 
			border : false,
			loadMask : {
				msg : 'Загрузка проверок...'
			},
			tbar : [{
				xtype : 'tbbutton',
				text : 'Экспорт',
				hidden : !me.loginned,
				menu : [{
					cls : 'x-btn-text-icon',
					icon : 'images/word.jpg',
					text : 'Информационная справка',
					handler : function() {
						if (me.selectedInspection) {
							document.location = 'word?get=inspection&id='
									+ me.selectedInspection.inspectionId;
						}
					}
				}]
			}]
		});
	},
	
	// private
	createMemberWorksGrid : function(memberWorksStore, requestTypeId) {
		var me = this;
		
		var colModel = new Ext.grid.ColumnModel({
			defaultSortable : true,
			defaultWidth : 200,
			columns : [{
				header : 'Работа',
				dataIndex : 'workId',
				hidden : true,
				renderer: function(value, metaData, record, rowIndex, colIndex, store) {
					metaData.css = 'ext-grid-panel-multiline'; 
					
					if (memberWorksStore.forOldWorks)
						return me.workStore.getById(value).data.name;
					else
						return me.nworkGroupsStore.getById(value).data.name;
				}
			}, {
				header : 'Код',
				width : 50,
				dataIndex : 'subworkId',
				renderer : function(val, row, record) {
					if (memberWorksStore.forOldWorks)
						return me.subworkStore.getById(val).data.code;
					else
						return me.nworkStore.getById(val).data.code;
				}
			}, {
				header : 'Вид работы',
				dataIndex : 'subworkId',
				width : 700,
				renderer: function(value, metaData, record, rowIndex, colIndex, store) {
		        	metaData.css = 'ext-grid-panel-multiline'; 
		        	if (memberWorksStore.forOldWorks)
		        		return me.subworkStore.getById(value).data.name;
		        	else
		        		return me.nworkStore.getById(value).data.typedName;
		    	}
			}]
		});
		
		var countLbl;
		if (requestTypeId == REQUESTS_FIRST) {
			me.swCountLbl_first = new Ext.form.Label({
				style : 'padding-right : 5px;',
				width : 100,
				id : 'swCountLbl_first'
			});
			countLbl = me.swCountLbl_first;
		} else {
			me.swCountLbl_second = new Ext.form.Label({
				style : 'padding-right : 5px;',
				width : 100,
				id : 'swCountLbl_second'
			});
			countLbl = me.swCountLbl_second;
		}
		
		var exportBtns = me.loginned ? [{
			xtype : 'tbbutton',
			text : 'Экспорт',
			menu : [{
				icon : 'images/word.jpg',
				cls : 'x-btn-text-icon',
				text : 'Приложение к уведомлению в РТН',
				handler : function() {
					Ext.Ajax.request({
						url : 'security?do=isEmployeeOfSroOrSiteAdmin', // change ajax.do to security.do (no isEmployeeOfSroOrSiteAdmin in ajax)
						success : function(val) {
							me.loginned = (val.responseText == "true");
							me.init();
							resizeGrid();
						}
					});
					document.location = 'word?get=enclosureToNotificationRTNForMember&id='
							+ me.selectedRow.data.memberId + '&forOldWorks=' + 
							memberWorksStore.forOldWorks;
				}
			}, {
				icon : 'images/word.jpg',
				cls : 'x-btn-text-icon',
				text : 'Свидетельтво',
				handler : function() {
					document.location = 'word?get=admittanceCertificateForMember&id='
							+ me.selectedRow.data.memberId + '&typeId=' + requestTypeId +
							'&forOldWorks=' + memberWorksStore.forOldWorks;
				}
			}]
		}, '-',] : [];
		
		return new Ext.grid.GridPanel({
			ds : memberWorksStore,
			cm : colModel,
			view : new Ext.grid.GroupingView({
				startCollapsed : true
			}),
			border : false,
			loadMask : {
				msg : 'Загрузка...'
			},
			tbar : exportBtns.concat([{
				xtype : 'button',
				text : 'Раскрыть все',
				handler : function(){
					if (requestTypeId == REQUESTS_FIRST) 
						me.memberWorkGridFirstCat.getView().expandAllGroups();
					else 
						me.memberWorkGridSecondCat.getView().expandAllGroups();
					
				}
			}, '-', {
				xtype : 'button',
				text : 'Свернуть все',
				handler : function(){
					if (requestTypeId == REQUESTS_FIRST) 
						me.memberWorkGridFirstCat.getView().collapseAllGroups();
					else 
						me.memberWorkGridSecondCat.getView().collapseAllGroups();
				
				
				}
			}, '->', countLbl])
		});
	},
	
	countWorksInStore : function(store) {
		var set = new Ext.util.MixedCollection();
		for (var i = 0; i < store.getCount(); i++) {
			var workId = store.getAt(i).data.workId;
			if (!set.containsKey(workId)) {
				set.add(workId, null);
			}
		}
		return set.getCount();
	},

	countWorksInStoreWithoutRejected : function(store){
		var set = new Ext.util.MixedCollection();
		for (var i = 0; i < store.getCount(); i++) {
			var workId = store.getAt(i).data.workId;
			var subworkId = store.getAt(i).data.subworkId;
			var	state = store.getAt(i).data.actualStateId;
			var code = this.subworkStore.getById(subworkId).data.code;	
			if (!set.containsKey(workId) && state == WORK_STATE_DECLARED_TO_GRANT && 
				 state != WORK_STATE_REJECTED_BY_EXPERT && 
				 state != WORK_STATE_STOPPED && state != WORK_STATE_PAUSED) 
			{
				set.add(workId, null);
			}
		}
		
		return set.getCount();
	},

	countSubworksInStore : function(store) {
		var set = new Ext.util.MixedCollection();
		for (var i = 0; i < store.getCount(); i++) {
			var subworkId = store.getAt(i).data.subworkId;
			var code = this.subworkStore.getById(subworkId).data.code;;
			if (!set.containsKey(subworkId) && code) {
				set.add(subworkId, null);
			}
		}
		
		return set.getCount();
	},

	countSubworksInStoreWithoutRejected : function(store) {
		var set = new Ext.util.MixedCollection();
		for (var i = 0; i < store.getCount(); i++) {
			var subworkId = store.getAt(i).data.subworkId;
			var state = store.getAt(i).data.actualStateId;
			var code = this.subworkStore.getById(subworkId).data.code;;
			if (!set.containsKey(subworkId) && code  && state != WORK_STATE_REJECTED_BY_EXPERT && 
					state != WORK_STATE_STOPPED && state != WORK_STATE_PAUSED) {
				set.add(subworkId, null);
			}
		}
		
		return set.getCount();
	},
	
	updateTitle : function() {
		var me = this;
		
		if (!me.selectedRow) {
			return '';
		}
		
		var panel = Ext.get(me.titleId);
		if (!panel) {
			return;
		}
		
		var member = me.selectedRow.data;
		var title = '<b>№ Свидетельства: </b>' + member.numberBill + '&nbsp;&nbsp;&nbsp;';
		title += '<b>Название: </b>' + member.name;
		panel.dom.innerHTML = title;
	},
	
	showInspectionsExportDialog : function() {
		Ext.Msg.prompt('Реестр членов: Экспорт проверок', 'Введите электронный адрес,' +
				' на который будет отправлено письмо:', function(btn, text){
		    if (btn == 'ok'){
		    	Ext.Ajax.request({
				   url: 'excel',
				   params: { 
				   	doc: 'inspections',
				   	to: text
				   }
				});
				
				showMsg('Письмо с прикрепленным файлом будет отправлено ' +
						'на адрес ' + text + ' в ближайшее время.');
		    }
		});
	}
});
