var Guestbook_GridPanel = {};

Guestbook_GridPanel = {

	publicElement : null,

	fnBuild : function() {

		var varStore;
		var varColumnModel;
		var varGridPanel;
		// Forms
		var varFormPanelCreate;
		// Windows
		var varWindowCreate;
		// CRUD
		var readFunction;
		var createFunction;

		// CRUD Functions
		// Read
		readFunction = function() {
			varStore.load({params:{start:0, limit:5}});
		}

		// Create
		createFunction = function() {
			varFormPanelCreate = new Ext.FormPanel({
				border: false,
				frame: true,
				bodyStyle: 'padding:5px 5px 0',
				width: 'auto',
				height: 'auto',
				labelWidth: 80,
				items:
					[
					 {
						 xtype: 'hidden',
						 name: 'id'
					 }, new Ext.form.TextField({
						 fieldLabel: 'Pseudo *',
						 name: 'name',
						 allowBlank: false,
						 width: 140,
						 labelSeparator: ' ',
						 labelStyle: 'font-weight:bold;'
					 }), new Ext.form.TextArea({
						 fieldLabel: 'Comment *',
						 name: 'comment',
						 allowBlank: false,
						 width: 300,
						 height: 130,
						 labelSeparator: ' ',
						 labelStyle: 'font-weight:bold;'
					 })
				    ],
				    buttons:
				    	[
				    	 {
				    		 text: 'Save',
				    		 formBind: true,
				    		 handler: function() {
				    		 	if (varFormPanelCreate.form.isValid()) {
				    		 		varFormPanelCreate.form.submit({
				    		 			url: 'route.php?GuestbookAction_CreateGuestbook',
				    		 			waitMsg: 'Saving data in progress ...',
				    		 			success: function(form, action) {
				    		 				readFunction();
											varFormPanelCreate.ownerCt.close();
				    		 			},
				    		 			failure: function(form, action) {
				    		 				Ext.MessageBox.alert('Alert', 'Saving process failed !!');
				    		 			}
				    		 		});
				    		 	} else {
				    		 		Ext.MessageBox.alert('Alert', 'Some required fields are missing !!');
				    		 	}
				    	     }
				    	 },{
				    		 text: 'Cancel',
				    		 handler: function() {
				    		 	varFormPanelCreate.ownerCt.close();
				    	 	 }
				    	 }
				    	 ]
			});

			// Window
			varWindowCreate = new Ext.Window({
				layout: 'fit',
				resizable: false,
				closeAction: 'close',
				width: 430,
				height: 250,
				title: 'New Comment',
				items: varFormPanelCreate
			});

			// Show the Window
			varWindowCreate.show();
		}


		// Guestbook Store
		varStore = new Ext.data.JsonStore({
			root: 'guestbooks',
			totalProperty: 'totalCount',
			fields:
				[{
					name:'id',
					mapping: 'm_Id'
				},{
					name:'name',
					mapping: 'm_Name'
				},{
					name: 'date',
					mapping: 'm_Date',
					type : 'date',
					dateFormat : 'Y-m-d H:i:s'
				},{
					name: 'comment',
					mapping: 'm_Comment'
				}
				 ],
			proxy: new Ext.data.HttpProxy({
				method: 'POST',
				url: 'route.php?Guestbook_ListGuestbooks'
			})
		});

		// Guestbook ColumnModel
		varColumnModel = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),
		{
			id: 'name',
			header: 'Name',
			dataIndex: 'name',
			sortable: true,
			width: 400,
			hidden: false,
			renderer: renderTopic
		},{
			id: 'date',
			header: 'Date',
			dataIndex: 'date',
			sortable: true,
			width: 80,
			hidden: false,
			renderer : Ext.util.Format.dateRenderer('d-m-Y')
		}
		]);

		// Guestbook GridPanel
		varGridPanel = new Ext.grid.GridPanel({
			frame: false,
			autoShow: true,
			region: 'center',
			border: true,
			//autoExpandColumn: 'name',
			width: 'auto',
			height: '550',
			store: varStore,
			cm: varColumnModel,
			bbar: new Ext.PagingToolbar({
				pageSize: 5,
				store: varStore,
				displayInfo: true,
				displayMsg: 'Displaying comments {0} - {1} of {2}',
				emptyMsg: 'No comments to display'
			}),
			tbar:
				[
				 {
					 id: 'button-create',
					 cls: 'x-btn-text-icon',
					 text: 'Ecrire un commentaire',
					 icon: 'images/extjs/drop-add.gif',
					 handler: createFunction
				 }/*,{
					 id: 'button-refresh',
					 cls: 'x-btn-text-icon',
					 text: 'Refresh',
					 icon: 'images/extjs/refresh.gif',
					 handler: readFunction
				 }*/
				 ]
		});

		function renderTopic(value, p, record) {
			return String.format(
				'<b><h2>{1}</h2></b><br />{2}<br /><br />',
				value, record.data.name, record.data.comment
			);
		}

		this.publicElement = varGridPanel;

		// Store loading
		readFunction();
	}

};