Ext.apply(Ext.form.VTypes, {
	tel: function(val, field){
		if(/^[\+\(\)\-\ 0-9а-яa-z]+$/i.test(val)){
			return true;
		}
		return false;
	}
	,telText: 'Введите правильный телефонный номер'
});

Ext.namespace('Res');

//Res.store = new Ext.data.SimpleStore({
Res.store = new Ext.data.Store({
	 sortInfo: {
		 field: 'dt-from'
		,direction: 'ASC'
	}
	,remoteSort: true
	,proxy: new Ext.data.PagingMemoryProxy(Server.resData)
	,reader: new Ext.data.ArrayReader({
		fields: [
			 {name: 'dt-from', type: 'date', dateFormat: 'd/m/Y'}
			,{name: 'dt-to', type: 'date', dateFormat: 'd/m/Y'}
			,{name: 'app1'}
			,{name: 'app2'}
			,{name: 'app3'}
			,{name: 'app4'}
			,{name: 'app5'}
			,{name: 'app6'}
			,{name: 'app7'}
			,{name: 'app8'}
			,{name: 'app9'}
			,{name: 'app10'}
			,{name: 'app11'}
		]
	})
});

Res.rRenderer = function(v, metadata, record){
	metadata.css = Res.getRClass(v, record);
	return (v == 1?'x':'')+((Ext.isEmpty(record.get('request')) || record.get('request') == '')?'':'<br /><br />');
}

Res.getRClass = function(v, record){
	return (v == '1'?'busy':(v == '2'?'selected':((Ext.isEmpty(record.get('request')) || record.get('request') == '')?'free':'request')));
}

Res.getColName = function(col){
	switch(col){
		case 1:
			return 'app1'
		case 2:
			return 'app2'
		case 3:
			return 'app3'
		case 4:
			return 'app4'
		case 5:
			return 'app5'
		case 6:
			return 'app6'
		case 7:
			return 'app7'
		case 8:
			return 'app8'
		case 9:
			return 'app9'
		case 10:
			return 'app10'
		case 11:
			return 'app11'
		default:
			return false;
	}
}

Res.grid = new Ext.grid.GridPanel({
	 store: Res.store
	,enableColumnMove: false
	,autoExpandColumn: 'period-clmn'
	//,height: 350
	,autoHeight: true
	,width: 840
	,store: Res.store
	,cm: new Ext.grid.ColumnModel([
		 {
			 id: 'period-clmn'
			,renderer: function(v, metadata, record){
				var dtFrom = new Date(record.get('dt-from'));
				var dtTo = new Date(record.get('dt-to'));
				metadata.css = ((Ext.isEmpty(record.get('request')) || record.get('request') == '')?'':'request');
				return ''
					+dtFrom.format('d M Y')+'—'+dtTo.format('d M Y')
					+((Ext.isEmpty(record.get('request')) || record.get('request') == '')?'':'<br />'+record.get('request'))
					+'';
			}
			,dataIndex: 'dt-from'
			,align: 'center'
			,menuDisabled: true
			,resizable: false
		}
		,{
			 header: Locale.app1
			,width: 60
			,align: 'center'
			,dataIndex: 'app1'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app2
			,width: 60
			,align: 'center'
			,dataIndex: 'app2'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app3
			,width: 60
			,align: 'center'
			,dataIndex: 'app3'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app4
			,width: 60
			,align: 'center'
			,dataIndex: 'app4'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app5
			,width: 60
			,align: 'center'
			,dataIndex: 'app5'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app6
			,width: 60
			,align: 'center'
			,dataIndex: 'app6'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app7
			,width: 60
			,align: 'center'
			,dataIndex: 'app7'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app8
			,width: 60
			,align: 'center'
			,dataIndex: 'app8'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app9
			,width: 60
			,align: 'center'
			,dataIndex: 'app9'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app10
			,width: 60
			,align: 'center'
			,dataIndex: 'app10'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
		,{
			 header: Locale.app11
			,width: 60
			,align: 'center'
			,dataIndex: 'app11'
			,menuDisabled: true
			,resizable: false
			,renderer: Res.rRenderer
		}
	])
	,listeners: {
		cellclick: {
			fn: function(grid, row, col, e){
				if(col > 0){
					//echo(Res.store.getAt(row).get('dt-from'));
					var el = Ext.get(e.getTarget());
					var rec = Res.store.getAt(row);
					if(!el.parent('td').hasClass('busy') && (Ext.isEmpty(rec.get('request')) || rec.get('request') == '')){
						var colName = Res.getColName(col);
						rec.set(colName, (rec.get(colName) != '2'?'2':'0'));
						//el.toggleClass('selected');
					}
				}
			}
		}
	}
});


Res.form = new Ext.FormPanel({
	 labelWidth: 90
	,url: 'save-form.php'
	,frame:false
	,bodyStyle:'padding: 5px 5px 0; margin-top: 20px; margin-left: 82px;'
	,width: 600
	,monitorValid: true
	,defaults: {width: 250, msgTarget: 'under'}
	,defaultType: 'textfield'
	,buttonAlign: 'right'

	,items: [
		 {
			 fieldLabel: Locale.fio
			,name: 'fio'
			,allowBlank: false
			//,value: 'Лоханкин, Васиссуалий'
		}
		,{
			 fieldLabel: 'Email'
			,name: 'email'
			,allowBlank: false
			,vtype:'email'
			//,value: 'loh@tyt.rr'
		}
		,{
			 fieldLabel: Locale.tel
			,name: 'tel'
			,allowBlank: false
			,vtype:'tel'
			//,value: '+7 (555) 548-54-55'
		}
		,new Ext.form.TextArea({
			 fieldLabel: Locale.comment
			,name: 'comment'
			,allowBlank: true
		})
	]
	,buttons: [
		{
			 text: Locale.send
			,id: 'send-btn'
			,disabled: true
			,handler: function(){
				var modRec = Res.store.getModifiedRecords();
				var records = [];
				if(!Ext.isEmpty(modRec) && modRec.length){
					Ext.each(modRec, function(item, index){
						records.push(item.data);
					});
					Ext.encode(records);
					Ext.getCmp('send-btn').disable();
					Ext.Ajax.request({
						 url: './send/'
						,params: {
							 records: Ext.encode(records)
							,form: Ext.encode(Res.form.getForm().getValues())
						}
						,callback: function(options, success, response){
							//alert(response.responseText);
							if(success){
								Ext.Msg.show({
									 title: Locale.zajavkaOtpravlenaHead
									,msg: Locale.zajavkaOtpravlenaText
									,buttons: Ext.Msg.OK
									,animEl: Ext.getCmp('send-btn')
									,icon: Ext.MessageBox.INFO
								});
							}
							Ext.getCmp('send-btn').enable();
						}
						,failure: function(){
							Ext.Msg.show({
								 title: Locale.zajavkaErrorHead
								,msg: Locale.zajavkaErrorText
								,buttons: Ext.Msg.OK
								,animEl: Ext.getCmp('send-btn')
								,icon: Ext.MessageBox.ERROR
							});
						}
					});
				}
				
				//alert(Ext.encode(Res.form.getForm().getValues()));
			}
		}
	]
	,listeners: {
		'clientvalidation': {
			fn: function(form, valid){
				if(valid && Res.store.getModifiedRecords().length)
					Ext.getCmp('send-btn').enable();
				else
					Ext.getCmp('send-btn').disable();
			}
		}
	}
});


Ext.onReady(function(){
	if(!Ext.isEmpty(Server.resData)){
		Res.store.load();
		var resTable = Ext.get('res-table');
		if(!Ext.isEmpty(resTable)){
			Res.grid.render(resTable);
			Res.form.render(resTable);
			resTable.insertHtml('afterBegin', '<div><span class="busy"><img src="/i/px.gif" width="10" height="10" /></span> — '+Locale.reserved+'</div><div><span class="free"><img src="/i/px.gif" width="10" height="10" /></span> — '+Locale.free+'</div><div><span class="selected"><img src="/i/px.gif" width="10" height="10" /></span> — '+Locale.selected+'</div><br />');
			resTable.insertHtml('afterBegin', Server.resAnnotation);
		}
	}

	

});

