var writer2 = new Ext.data.JsonWriter({
	 	encode: true,
	 	writeAllFields: true
});

var editor3 = new Ext.ux.grid.RowEditor({
   	saveText: 'Update',
     	listeners: {
        afteredit: function(object, changes, r, rowIndex) {			
			}
		}
});
var proxyProductsEdit = new Ext.data.HttpProxy({
    url: 'php/addDeleteUpdateProducts.php'
});


ProductsEditDataStore = new Ext.data.Store({
	id: 'ProductsEditDataStore',
	proxy: proxyProductsEdit,

	reader: new Ext.data.JsonReader({  
		root: 'Products',
		totalProperty:'total',
		id: 'ProductID'		
	}, [
		{name: 'ProductID', type: 'string', mapping: 'ProductID'},
		{name: 'Description', type: 'string', mapping: 'Description'},
		{name: 'Model', type: 'string', mapping: 'Model'},
		{name: 'PartNumber', type: 'string', mapping: 'PartNumber'},
		{name: 'PriceEconomic', type: 'string', mapping: 'PriceEconomic'},
		{name: 'Quantity', type: 'string', mapping: 'Quantity'},
		{name: 'ProductCondition', type: 'string', mapping: 'ProductCondition'},
		{name: 'Warranty', type: 'string', mapping: 'Warranty'},
		{name: 'ProductTypesID', type: 'string', mapping: 'ProductTypesID'},
		{name: 'UPC', type: 'string', mapping: 'UPC'}
		
	]),
	pruneModifiedRecords: true

});


ProductsEditColumnModel = new Ext.grid.ColumnModel([
	{
   	header: 'ProductID',
      dataIndex: 'ProductID', // this is where the mapped name is important!
      readOnly: true,
      width: 90,
      hidden: false
   },
   {
      header: 'Description',
      dataIndex: 'Description',
      width: 210,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
	   
   },
   {
      header: 'ProductTypesID',
      dataIndex: 'ProductTypesID',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
   },   
   {
      header: 'Model',
      dataIndex: 'Model',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
   },
   {
      header: 'Part#',
      dataIndex: 'PartNumber',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
	   editor:{
     		   		xtype: 'textfield'                
           	 }
   },
   {
      header: 'Price',
      dataIndex: 'PriceEconomic',
      width: 80,
      align : 'right',
      sortable: true,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
   },
   {
      header: 'Quantity',
      dataIndex: 'Quantity',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
   },
   {
      header: 'Condition',
      dataIndex: 'ProductCondition',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
   },
   {
      header: 'Warranty',
      dataIndex: 'Warranty',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
      editor:{
              		xtype: 'textfield'                
           	 }
   },
   {
      header: 'UPC',
      dataIndex: 'UPC',
      width: 80,
      align : 'center',
      sortable: true,
	   hidden: false,
      editor:{
           		xtype: 'textfield'                
    	 		 }
   }
]);

var Product = Ext.data.Record.create([
												{name: 'ProductID', type: 'ProductID'},												
												{name: 'Description', type: 'string'},
												{name: 'ProductTypesID', type: 'string'},
												{name: 'Model', type: 'string'},
												{name: 'PartNumber', type: 'string'},
												{name: 'PriceEconomic', type: 'string'},
												{name: 'Quantity', type: 'string'},
												{name: 'ProductCondition', type: 'string'},
												{name: 'Warranty', type: 'string'},												
												{name: 'UPC', type: 'UPC'}											
												]);

ProductsGridMessage = "No Records Found - Please Select a category";

ProductsEditEditorGrid =  new Ext.grid.EditorGridPanel({
      id: 'ProductsEditEditorGrid',
      store: ProductsEditDataStore,     // the datastore is defined here
      cm: ProductsEditColumnModel,      // the columnmodel is defined here
      enableColLock:false,
      clicksToEdit:1,
      selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),
      tbar: [{
            text: 'Add',
            iconCls: 'silk-add',
            handler: onAddProducts
        }, '-', {
            text: 'Delete',
            iconCls: 'silk-delete',
            handler: onDeleteProducts
        }, '-', {
            text: 'Save',
           	iconCls: 'icon-save',
        		handler: function() {
						saveChangesToProducts();
				}
      }],        
      viewConfig: {
           forceFit: true
      },
      plugins:[editor3, new Ext.ux.grid.Search({
			iconCls:'icon-zoom',
			position:'tbar',
			mode:'local',
			width:200,
			shortcutEl:document,
			minChars:1
     })],
     bbar: new Ext.PagingToolbar({
     		pageSize: 10,
			store: ProductsEditDataStore,
			displayInfo:true,
			displayMessage: "Displaying Products {0} - {1} of {2}"
     }),
	 view: new Ext.grid.GridView({
    		forceFit: true,
    		emptyText: ProductsGridMessage
	 })

});


ProductsEditWindow = new Ext.Window({
      id: 'ProductsEditWindow',
      title: 'Products',
      closable:false,
      collapsible: true,
      width:760,
      height:450,
      x: 245,
      y: 70,
		plain:true,
      layout: 'fit',
      items: ProductsEditEditorGrid  // We'll just put the grid in for now...
});


function onAddProducts(){

		 var p = new  Product({
							ProductID: 'New',
                    	Description: '',
                    	Model: '',                
                    	PartNumber: '',    	
                     PriceEconomic: '',
                     Quantity: '',
                     ProductCondition: '',
                     Warranty: '',
                     ProductTypesID: ProductTypeID,
                     UPC: ''                                         
                });

        editor3.stopEditing();
        ProductsEditEditorGrid.store.insert(0, p);
        editor3.startEditing(0, 0);
}

function onDeleteProducts(){
		  var rec =  ProductsEditEditorGrid.getSelectionModel().getSelected();
        if (!rec) {
            return false;
        }
       var RemovedID = rec.get('ProductID');       
       ProductsEditEditorGrid.store.remove(rec);
       
       if (RemovedID != "New"){
       	removeProductItem(RemovedID);      
       }
	
}

function removeProductItem(RemovedID){
	Ext.Ajax.request({
		loadMask: true,
		url : 'php/deleteProductItem.php',
		params: {
        RemovedID: RemovedID
    	},
    	method: 'POST',
    	success: function (resp) {	
    		setTimeout ("ProductsEditDataStore.reload()", 450)
		}    
	});
}

function saveChangesToProducts(){
		var ModifiedProductsJson = {"Products": []
						};
						
		modified = ProductsEditDataStore.getModifiedRecords();
      for(var i = 0; i < modified.length; i++) {
  	
  	 		var ProductID= modified[i].get('ProductID');
			var Description = modified[i].get('Description');
			var Model = modified[i].get('Model');
			var PartNumber = modified[i].get('PartNumber');
			var PriceEconomic = modified[i].get('PriceEconomic');
			var Quantity = modified[i].get('Quantity');
			var ProductCondition = modified[i].get('ProductCondition');			
			var Warranty = modified[i].get('Warranty');
			var ProductTypesID = modified[i].get('ProductTypesID');
			var UPC = modified[i].get('UPC');			
			
		 	ModifiedProductsJson = addToModifiedProductsJson(i, ModifiedProductsJson, ProductID, Description, Model, PriceEconomic, Quantity, ProductCondition, Warranty, ProductTypesID, UPC, PartNumber);				
      }

	   var ModifiedProductsJsonString = JSON.stringify(ModifiedProductsJson);

		Ext.Ajax.request({
				url : 'php/insertUpdateProducts.php',
				params: {
        			ModifiedProductsJsonString: ModifiedProductsJsonString
    			},
				method: 'POST',
				success: function ( result, request ) { 
					// Ext.MessageBox.alert('Success', 'Thank you, your items have beend saved.: '+ result.responseText);
					setTimeout ("ProductsEditDataStore.reload()", 450)
					 
				},
				failure: function ( result, request) { 
					Ext.MessageBox.alert('Failed', result.responseText); 
				} 
			});

} 



function addToModifiedProductsJson(i, ModifiedProductsJson, ProductID, Description, Model, PriceEconomic, Quantity, ProductCondition, Warranty, ProductTypesID, UPC, PartNumber){
	
	var AddItem = new Object();	
	AddItem.ProductID = ProductID;
	AddItem.Description = Description;
	AddItem.Model = Model;
	AddItem.PriceEconomic = PriceEconomic;
	AddItem.Quantity = Quantity;
	AddItem.ProductCondition = ProductCondition;
	AddItem.Warranty = Warranty;
	AddItem.ProductTypesID = ProductTypesID;
	AddItem.UPC = UPC;
	AddItem.PartNumber = PartNumber;
	ModifiedProductsJson.Products[i] = AddItem;	
	return ModifiedProductsJson;
}





