// 
	function ext_json_edit(formData,options){
			//Prepare Fields
			eval("var data="+formData)
			var formData=data.rows
			
			var html='';
			var items=[]
			for (prop in formData[0])
					{
						//Get Type 
						var parts=prop.split('_');
						var col_type=	parts[0];
						var col_name=	parts[1];
						var col_label=	parts[2];
						var col_options=Ext.decode(parts[3])
						
						var col_value=	formData[0][prop];
						
						var inputHTML=''; //reset
						//Create Field						
						switch(col_type){
							case 'hidden':
							case 'uniqueid':
								items.push($.extend({xtype:'hidden',fieldLabel:col_label, value:col_value,name:col_name},col_options));
								break;
								
								
							
							case 'text':  
								items.push($.extend({xtype:'textfield',fieldLabel:col_label, value:col_value,name:col_name},col_options));
									break;
							case 'textarea': 
								items.push({xtype:'textarea',fieldLabel:col_label, value:col_value, name:col_name});
									break;
							case 'checkbox': ; break;
							case 'list': 
								//Load data
								var store = new Ext.data.SimpleStore({id:0,fields: ['xval','label'],url:'server/index.php?formList='+parts[2]});
								
								//Create combobox
								var combo = new Ext.form.ComboBox({
									store: store,
									displayField:'label',
									valueField:'xval',
									
									fieldLabel:parts[2]+'',
									typeAhead: true,
									hiddenName:col_name,
									hiddenId:'F_'+col_name+'_cid',
									id:'F_'+col_name,
									name:col_name+'type',
									mode: 'local',
									forceSelection: true,
									emptyText:'Choose...',
									selectOnFocus:true
								});
								
								
								store.load()
								combo.setValue(col_value)
								combo.fireEvent('select')
								items.push(combo)
							
							break;
							}
						
						
							
							
					}
						
						 var form = new Ext.FormPanel({
							title:options.title,
							labelWidth: 75, // label settings here cascade unless overridden
							frame:false,
							bodyStyle:'padding:5px 5px 0',
							width: 350,
							defaults: {width: 230},
							defaultType: 'textfield',
							items: items,
							 buttons: [{
										text: 'Save',
										handler: function(){
											if(form.getForm().isValid()){
												form.getForm().submit({
													url: options.url,
													waitMsg: 'Updating database',
													success: function(fp, o){
														
														//Message
														msg('Success', Ext.decode(o.response.responseText).result.message);
														//Eval
														try{eval( Ext.decode(o.response.responseText).callback)}catch(e){};
														form.findParentByType('window').close()
													}
												});
											}
										}
									},{
										text: 'Reset',
										handler: function(){
											form.getForm().reset();
										}
									}]


							})
		
						return form;
			

			
						
	}




function ext_grid_creator(myData,settings)
 		{
		//Prepare Array
			var links=[]; var cm=[]; var rs=[]
		//create default
			var defaults={	
						tbar:[],
						bbar:[],
						id:'col_right_content',
						iconClass:'icon-grid',
						title:'Form',
						width:300, 
						pageSize:15,
						sortInfo:{}
						//height:500,
					//viewConfig: {forceFit: true}
						};
		
		//Apply the defaults
		var options=$.extend(defaults,settings);
		//Build Header model + Data Reade
		
		for (prop in myData.rows[0])
		{
			//Split col name in types
				var parts=prop.split('_');
				var col_type=	parts[0];
				var col_index=	parts[1];
				var col_label=	parts[2];
				var col_width=  parts[3];
				var col_value=	myData.rows[0][prop];
				
				switch(col_type){
				
					case 'link':
						links[col_index]=prop;
					case 'hide':
						//Nothing
						break;
										
					
						
					default:
						
						var cmx={header: col_label, dataIndex:prop};
						if (col_width){cmx.width=parseInt(col_width)}
						
						//console.log(cmx)
						cm.push(cmx);
						rs.push({name: prop, mapping: prop});
				}	
				
		} //for prop
		
		
		var cmX = new Ext.grid.ColumnModel(cm);
		cmX.defaultSortable = true;

		
		
			options.store = new Ext.data.JsonStore({
			  	url:options.url,
				id: 'hide_1_id',
				autoExpandColumn:'col_label',
				totalProperty: 'totalCount',
				root: 'data',
				fields: rs,
			  	remoteSort: true,
				sortInfo: options.sortInfo
			});
		
		
		
		options.store.on('beforeload',function(){this.baseParams={keyword:Ext.getCmp('keyword').getRawValue()} });
		

		if (options.reconfigure){return [ds,new Ext.grid.ColumnModel(cm)]};
			
		 options.bbar= new Ext.PagingToolbar({
											store: options.store,
			  								displayInfo: true,
											displayMsg: '{0} - {1} of {2}',
       		 								emptyMsg: "No products found",
			 							paramNames:{
												start: 'start',
												limit: 'limit',
												keyword: 'keyword'//function(){Ext.getCmp('keyword').getRawValue()}
														},
	   									 pageSize: options.pageSize
	 	 				})
		 
		options.sm=new Ext.grid.RowSelectionModel({singleSelect:false}),
		
		options.cm=cmX
		
		return  new Ext.grid.GridPanel(options)
				
				
		
		}

	// Update grid
	function updateGrid(JSONdata,id,options)
		{	
			//Some defaults for custom plugin
			var defaults={reconfigure:true}
			//Load data and tranform ro JSON
			var data=Ext.decode(JSONdata);
			//Get data connection and col model from my plugin
			var configs=grid_creator(data,$.extend(defaults,options));
			//Update main grid....
			Ext.getCmp(id).reconfigure(configs[0],configs[1]);	
			var gridTitle=Ext.getCmp('nav_tree').getNodeById(Control.position_node).text;
			
			//Update Title using current tree node
			$("#grid_content .x-panel-header-text").html(gridTitle);
		}
