var eventRecord = Ext.data.Record.create([
                                  {name: 'id', mapping: 'id'},
                                  {name: 'type', mapping: 'type'},	                                         
                                  {name: 'handler', mapping: 'handler'},
                                  {name: 'beforeEventHandler', mapping: 'beforeEventHandler'},
                                  {name: 'external', mapping: 'external'},	
                                  {name: 'componentId', mapping: 'componentId'},
                                  {name: 'paramRequest', mapping: 'paramRequest'},
                                  {name: 'responseCache', mapping: 'responseCache'},
                                  {name: 'renderableResponse', mapping: 'renderableResponse'},
                                  {name: 'replaceComponent', mapping: 'replaceComponent'},	 	  	                                          
                                  {name: 'cleanContainer', mapping: 'cleanContainer'}, 	                                        
                                  {name: 'renderContainerId', mapping: 'renderContainerId'},
                                  {name: 'linkToUrl', mapping: 'linkToUrl'},
                                  {name: 'waitMessage', mapping: 'waitMessage'},
                                  {name: 'waitMessageHeader', mapping: 'waitMessageHeader'},
                                  {name: 'formId', mapping: 'formId'},
                                  {name: 'paramArgs', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var argumentArray = new Array();
                                	  var argumentValues = Ext.DomQuery.select(' paramArg ', node);
                                	  for(var i = 0; i < argumentValues.length; i++) {			                                        		 
                                		 argumentArray[i] = Ext.DomQuery.selectValue('',argumentValues[i]);
                                	  }
                                	  return argumentArray;
                                  }}
                                          ]);
//alert('DEBUG-4');
// Resources to read the XML GUI data from server-side
var componentRecord = Ext.data.Record.create([
                                  {name: 'id', mapping: 'id'},
                                  {name: 'containerId', mapping: 'containerId'},
                                  {name: 'type', mapping: 'type'},
                                  {name: 'external', mapping: 'external'},	
                                  {name: 'sourceId', mapping: 'sourceId'},
                                  {name: 'defaultValueId', mapping: 'defaultValueId'},	                                          
                                  {name: 'value', mapping: 'value'},
                                  {name: 'propertyValues', mapping: '', convert: function(v, node){
                                	  var propertyValuesArray = new Array();
                                	  var properties = Ext.DomQuery.select(' property-value ', node);
                                	  for(var i = 0; i < properties.length; i++) {		                  
                                	  	  var valueType = Ext.DomQuery.selectValue('@type',properties[i]);                      		  
                                		  if(valueType == undefined) { valueType = 'string'; }	                                        		  
                                		  if(valueType == 'int') {
                                			  propertyValuesArray[i] = parseInt(Ext.DomQuery.selectValue('',properties[i]));
                                		  } else if(valueType == 'boolean') {
                                			  propertyValuesArray[i] = Ext.DomQuery.selectValue('',properties[i]) === 'true';	                                        		 	                                           				 
                                		  } else {
                                		      propertyValuesArray[i] = Ext.DomQuery.selectValue('',properties[i])
                                		  }
                                	  }
                                	  return propertyValuesArray; // it is a list
                                  }},
                                  {name: 'propertyKeys', mapping: '', convert: function(v, node){
                                	  var propertyValuesArray = new Array();
                                	  var properties = Ext.DomQuery.select(' property-key ', node);
                                	  for(var i = 0; i < properties.length; i++) {		                  
                                	  	  var valueType = Ext.DomQuery.selectValue('@type',properties[i]);                      		  
                                		  if(valueType == undefined) { valueType = 'string'; }	                                        		  
                                		  if(valueType == 'int') {
                                			  propertyValuesArray[i] = parseInt(Ext.DomQuery.selectValue('',properties[i]));
                                		  } else if(valueType == 'boolean') {
                                			  propertyValuesArray[i] = Ext.DomQuery.selectValue('',properties[i]) === 'true';	                                        		 	                                           				 
                                		  } else {
                                		      propertyValuesArray[i] = Ext.DomQuery.selectValue('',properties[i])
                                		  }
                                	  }
                                	  return propertyValuesArray; // it is a list
                                  }},
                                  {name: 'components', mapping: '', convert: function(v, node){
                                	  var componentPropertyIdArray = new Array();
                                	  var properties = Ext.DomQuery.select(' componentProperty ', node);
                                	  for(var i = 0; i < properties.length; i++) {		                                        		  
                                		  var propertyName = Ext.DomQuery.selectValue('@name',properties[i]);	                                        		  
                                		  var componentId = Ext.DomQuery.selectValue('',properties[i]);	                                        		  
                                		  componentPropertyIdArray['' + propertyName] = ''+ componentId;	                                        		  
                                	  }
                                	  return componentPropertyIdArray;
                                  }},	  
                                  {name: 'properties', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var propertyArray = new Array();
                                	  var properties = Ext.DomQuery.select(' property ', node);	  
                                	  for(var i = 0; i < properties.length; i++) {	   
                                		  var valueContainer = Ext.DomQuery.selectValue('@container',properties[i]);
                                		  if(valueContainer == undefined) { valueContainer = 'none'; }
                                		  if(valueContainer == 'eval') {
                                			  var strToEval = Ext.DomQuery.selectValue('',properties[i]); // contains something like: {columns: 3, key1: value1, key2: value2, ...}
                                			  var obj = eval('(' + strToEval + ')');
                                			  propertyArray[Ext.DomQuery.selectValue('@name',properties[i])] = obj;
                                		  }
                                		  if(valueContainer == 'none') {
	                                		  var valueType = Ext.DomQuery.selectValue('@type',properties[i]);	
	                                		  if(valueType == undefined) { valueType = 'string'; }	                                        		  
	                                		  if(valueType == 'int') {
	                                			  propertyArray[Ext.DomQuery.selectValue('@name',properties[i])] = parseInt(Ext.DomQuery.selectValue('',properties[i]));
	                                		  } else if(valueType == 'boolean') {
	                                			  propertyArray[Ext.DomQuery.selectValue('@name',properties[i])] = Ext.DomQuery.selectValue('',properties[i]) === 'true';	                                        		 	                                           				 
	                                		  } else {
	                                			  propertyArray[Ext.DomQuery.selectValue('@name',properties[i])] = Ext.DomQuery.selectValue('',properties[i]);
	                                			  
	                                			  // because Ext.DomQuery.selectValue can only retreive 4k of data in IE
	                                			  if(Ext.DomQuery.selectValue('@name',properties[i]) === 'value' && Ext.DomQuery.selectValue('',properties[i])) {	                                        				  
	                                				  var size =  Ext.DomQuery.selectValue('',properties[i]).length;
	                                				  if(Ext.isIE == false && size >= 4096) {
	                                					  msg("Contenu trop volumineux", "Merci d'utiliser Internet Explorer");
	                                					  return null;
	                                				  }	                                        				 
	                                			  }	                                			 
	                                		  }
                                		  }
                                	  }
                                	  return propertyArray; // it is a hashMap
                                  }},
                                  {name: 'itemIds', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var itemIdArray = new Array();
                                	  var itemIds = Ext.DomQuery.select(' itemId ', node);	  
                                	  for(var i = 0; i < itemIds.length; i++) {	   
                                		  var itemId = Ext.DomQuery.selectValue('',itemIds[i]);
                                		  itemIdArray[i] = itemId;
                                	  }
                                	  return itemIdArray; // it is a array of string
                                  }},
                                  {name: 'buttonIds', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var buttonIdArray = new Array();
                                	  var buttonIds = Ext.DomQuery.select(' buttonId ', node);	  
                                	  for(var i = 0; i < buttonIds.length; i++) {	   
                                		  var buttonId = Ext.DomQuery.selectValue('',buttonIds[i]);
                                		  buttonIdArray[i] = buttonId;
                                	  }
                                	  return buttonIdArray; // it is a array of string
                                  }},
                                  {name: 'columnModel', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var headerArray = new Array();
                                	  var headers = Ext.DomQuery.select(' columnModel > header ', node);	                                        	  
                                	  for(var i = 0; i < headers.length; i++) {			                                        		 
                                		 headerArray[i] = [Ext.DomQuery.selectValue('',headers[i]), 
                                		                   parseInt(Ext.DomQuery.selectValue('@width',headers[i])),
                                		                   Ext.DomQuery.selectValue('@sortable',headers[i]) === 'true',
                                		                   Ext.DomQuery.selectValue('@resizable',headers[i]) === 'true'];	                                        		 
                                	  }
                                	  return headerArray;
                                  }},
                                  {name: 'columnTreeModel', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var headerArray = new Array();
                                	  var headers = Ext.DomQuery.select(' columnTreeModel > header ', node);	                                        	  
                                	  for(var i = 0; i < headers.length; i++) {			                                        		 
                                		 headerArray[i] = [Ext.DomQuery.selectValue('',headers[i]), 
                                		                   parseInt(Ext.DomQuery.selectValue('@width',headers[i])),
                                		                   Ext.DomQuery.selectValue('@dataIndex',headers[i])];	                                        		 
                                	  }
                                	  return headerArray;
                                  }}
                                      ]);

//alert('DEBUG-5');
// 
var sourceRecord = Ext.data.Record.create([
                                  {name: 'id', mapping: 'id'},	  	                                      
                                  {name: 'datarows', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var rowArray = new Array();
                                	  var rows = Ext.DomQuery.select(' row ', node);	   
                                	  for(var i = 0; i < rows.length; i++) {
                                		  var rowValues = Ext.DomQuery.select(' value ', rows[i]);
                                		  var valueArray = new Array();
                                		  for(var v = 0; v < rowValues.length; v++) {
                                			  valueArray[v] = Ext.DomQuery.selectValue('',rowValues[v]);
                                		  }
                                		  rowArray[i] = valueArray;
                                	  }
                                	  
                                	  return rowArray;
                                  }},
                                  {name: 'datacombo', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var rowArray = new Array();
                                	  var rows = Ext.DomQuery.select(' bean ', node);
                                	  for(var i = 0; i < rows.length; i++) {
                                		  
                                		  var rowValues = Ext.DomQuery.select(' id ', rows[i]);
                                		  var id = Ext.DomQuery.selectValue('', rowValues[0]);
                                		  
                                		  rowValues = Ext.DomQuery.select(' text ', rows[i]);
                                		  var text = Ext.DomQuery.selectValue('', rowValues[0]);	    	                                        		  
                                		  
                                		  rowArray[i] = [id, text];
                                	  }
                                	  /*
                                	    	array[0] = ['1', 'un'];
											array[1] = ['2', 'deux'];
											array[2] = ['3', 'trois'];
											array[3] = ['4', 'quatre'];
										
										*/
                                	  return rowArray;
                                  }},
                                  {name: 'datatree', mapping: '', convert: function(v, node){	  	                                        	  
                                	  var treeArray = new Array();
                                	  var beans = Ext.DomQuery.select(' /bean ', node);	   
                                	  for(var i = 0; i < beans.length; i++) {
                                		  //var sub = Ext.DomQuery.select(' /bean ', beans[i]);
                                		  	                                        		  
                                		  recursiveTreeData(treeArray, beans[i]);
                                	  }
                                	  
                                	  return treeArray;
                                  }}
                                      ]);	

/*
 * Defining  the XmlReaders
 */

var sourceXmlReader = new Ext.data.XmlReader({
	record: "source" 
}, sourceRecord);

var eventXmlReader = new Ext.data.XmlReader({
	record: "event" 
}, eventRecord);

var componentXmlReader = new Ext.data.XmlReader({
	record: "component" 
}, componentRecord);

/*
 * Defining the Stores
 */
var sourceDataStore = new Ext.data.Store({
	storeId: 'dynamic-source-store',
	reader:sourceXmlReader
}); 

var eventDataStore = new Ext.data.Store({
	reader:eventXmlReader
}); 

var componentDataStore = new Ext.data.Store({	
	reader:componentXmlReader
}); 


