if (!Ext.gridutil){
Ext.gridutil={};
}
Ext.gridutil.Grid2DbXml = function (extGrid,onlySelect) {
  var grid = extGrid;
  var columnModel = grid.getColumnModel();
  var dataSource = grid.getDataSource();
  if (typeof columnModel !== "object"){
    alert("参数Grid没有提供ColumnModel");
    return false;
  }
  if (typeof dataSource !== "object"){
    alert("参数Grid没有提供DataSource");
    return false;
  }
  var dbXmlJson = new db.DbXmlJson();
  var fieldConfig = columnModel.config;
  for(var i = 0, len = fieldConfig.length; i < len; i++){
    var c = fieldConfig[i];
    if (typeof c==="undefined"){
      alert(i+"不是对象1");
      break;
    }
    var dataIndex = Ext.gridutil._getDataIndex(c);
    
    if (c.dataType===db.consts.INTEGER){
      if (dbXmlJson.addIntDef(dataIndex)===false) {
        return false;
      }
    }else{
      var maxLen = c.maxLength;
      /*
      if(typeof maxLen == "undefined"){
        maxLen = db.consts.DEFAULT_STR_LEN;
      }
      */
      if (isNaN(parseInt(maxLen,10))){
        maxLen = db.consts.DEFAULT_STR_LEN;
      }
      if (dbXmlJson.addStringDef(dataIndex)===false) {
        return false;
      }
    }
  }
  var selModel = null;
  if (onlySelect===true) {
    if (grid.getSelectionModel && typeof grid.getSelectionModel()==="object" && 
      grid.getSelectionModel().isSelected) {
      selModel = grid.getSelectionModel();
    }else {
      alert("提供的Grid对象错误，不支持方法getSelectionModel().isSelected()");
      return false;
    }
  }
  for(var row = 0; row < dataSource.getCount(); row++){
    var record = dataSource.getAt(row);
    if (onlySelect===true) {
      if (!selModel.isSelected(row)){
        continue;
      }
    }
    var dataRow = {};
    for (var col = 0; col<fieldConfig.length; col++){
      var column = fieldConfig[col];
	    if (typeof column==="undefined"){
	      alert(i+"不是对象2");
	      break;
	    }
      var nameIndex = Ext.gridutil._getDataIndex(column);
      var fieldName = column.dataIndex;
      if (typeof fieldName === "undefined"){
        fieldName = "noDataIndex";
      }
      if (typeof column.renderer === "undefined"){
        dataRow[nameIndex] = Ext.gridutil.htmlTagToEnter(record.get(fieldName));
      } else {
        dataRow[nameIndex] = Ext.gridutil.htmlTagToEnter(column.renderer(record.get(fieldName),{},record,row,col,dataSource));
      }
      if (typeof dataRow[nameIndex] === "undefined"){
        dataRow[nameIndex]="";
      }
      if (dataRow[nameIndex]===null) {
        dataRow[nameIndex]="null";
      }
    }
    dbXmlJson.addRow(dataRow);
  }
  return dbXmlJson.dbXML();
};

Ext.gridutil.RecordSet2DbXml = function (columnArray,recordArray) {
  var columnModel = columnArray;
  var dataSource = recordArray;
  if (typeof columnModel !== "object"){
    alert("参数columnArray=null");
    return false;
  }
  if (typeof dataSource !== "object"){
    alert("参数recordSet=null");
    return false;
  }
  var dbXmlJson = new db.DbXmlJson();
  var fieldConfig = columnModel;
  for(var i = 0, len = fieldConfig.length; i < len; i++){
    var c = fieldConfig[i];
    if (typeof c==="undefined"){
      alert(i+"不是对象1");
      break;
    }
    var dataIndex = Ext.gridutil._getDataIndex(c);
    
    if (c.dataType===db.consts.INTEGER){
      if (dbXmlJson.addIntDef(dataIndex)===false) {
        return false;
      }
    }else{
      var maxLen = c.maxLength;
      /*
      if(typeof maxLen == "undefined"){
        maxLen = db.consts.DEFAULT_STR_LEN;
      }
      */
      if (isNaN(parseInt(maxLen,10))){
        maxLen = db.consts.DEFAULT_STR_LEN;
      }
      if (dbXmlJson.addStringDef(dataIndex)===false) {
        return false;
      }
    }
  }
  for(var row = 0; row < dataSource.length; row++){
    var record = dataSource[row];
    var dataRow = {};
    for (var col = 0; col<fieldConfig.length; col++){
      var column = fieldConfig[col];
      if (typeof column==="undefined"){
        alert(i+"不是对象2");
        break;
      }
      var nameIndex = Ext.gridutil._getDataIndex(column);
      var fieldName = column.dataIndex;
      if (typeof fieldName === "undefined"){
        fieldName = "noDataIndex";
      }
      dataRow[nameIndex] = Ext.gridutil.htmlTagToEnter(record[fieldName]);
      if (typeof dataRow[nameIndex]==="undefined"){
        dataRow[nameIndex]="";
      }
      if (dataRow[nameIndex]===null) {
        dataRow[nameIndex]="null";
      }
    }
    dbXmlJson.addRow(dataRow);
  }
  return dbXmlJson.dbXML();
};

Ext.gridutil._getDataIndexOrg = function(fieldDef){
  var fieldName = fieldDef.header;
  return fieldName;
};

Ext.gridutil._getDataIndex = function(fieldDef){
  var fieldName = fieldDef.header;
	if (!isNaN(parseInt(fieldName,10))){
	  fieldName = "COL"+fieldName;
	}
  return fieldName;
};

Ext.gridutil.Grid2Excel = function (extGrid,withHidden) {
  if (typeof withHidden==="undefined") {
    withHidden = false;
  }
  var grid = extGrid;
  var columnModel = grid.getColumnModel();
  var dataSource = grid.getDataSource();
  if (typeof columnModel !== "object"){
    alert("参数Grid没有提供ColumnModel");
    return false;
  }
  if (typeof dataSource !== "object"){
    alert("参数Grid没有提供DataSource");
    return false;
  }
  var excelStr = "";
  var fieldConfig = columnModel.config;
  for(var i = 0, len = fieldConfig.length; i < len; i++){
    var c = fieldConfig[i];
    if (typeof c==="undefined"){
      alert(i+"不是对象1");
      break;
    }
    if ((typeof c.hidden!=="undefined") && c.hidden && !withHidden) {
      continue;
    }
    if (c.notCopy) {
      continue;
    }
    var dataIndex = Ext.gridutil._getDataIndexOrg(c);
    excelStr = excelStr + Ext.gridutil.htmlTagToExcel(dataIndex) + '\t';
  }
  
  for(var row = 0; row < dataSource.getCount(); row++){
    var record = dataSource.getAt(row);
    var dataRow = '';
    for (var col = 0; col<fieldConfig.length; col++){
      var column = fieldConfig[col];
	    if (typeof column==="undefined"){
	      alert(i+"不是对象2");
	      break;
	    }
	    if ((typeof column.hidden!=="undefined") && column.hidden && !withHidden) {
	      continue;
	    }
	    if (column.notCopy) {
	      continue;
	    }
      var nameIndex = Ext.gridutil._getDataIndex(column);
      var fieldName = column.dataIndex;
      if (typeof fieldName === "undefined"){
        fieldName = "noDataIndex";
      }
      if (typeof column.renderer === "undefined"){ 
        dataRow = dataRow + Ext.gridutil.htmlTagToExcel(record.get(fieldName)) + '\t';
      } else {
        dataRow = dataRow + Ext.gridutil.htmlTagToExcel(column.renderer(record.get(fieldName),{},record,row,col,dataSource)) + '\t';
      }
    }
    excelStr = excelStr + '\n' + dataRow;
  }
  return excelStr;
};

Ext.gridutil.RecordSet2Excel = function (columnArray,recordArray) {
  var columnModel = columnArray;
  var dataSource = recordArray;
  if (typeof columnModel !== "object"){
    alert("参数columnArray=null");
    return false;
  }
  if (typeof dataSource !== "object"){
    alert("参数recordSet=null");
    return false;
  }
  var excelStr = "";
  var fieldConfig = columnModel;
  for(var i = 0, len = fieldConfig.length; i < len; i++){
    var c = fieldConfig[i];
    if (typeof c==="undefined"){
      alert(i+"不是对象1");
      break;
    }
    var dataIndex = Ext.gridutil._getDataIndexOrg(c);
    excelStr = excelStr + Ext.gridutil.htmlTagToExcel(dataIndex) + '\t';
  }
  
  for(var row = 0; row < dataSource.length; row++){
    var record = dataSource[row];
    var dataRow = '';
    for (var col = 0; col<fieldConfig.length; col++){
      var column = fieldConfig[col];
      if (typeof column==="undefined"){
        alert(i+"不是对象2");
        break;
      }
      var nameIndex = Ext.gridutil._getDataIndex(column);
      var fieldName = column.dataIndex;
      if (typeof fieldName === "undefined"){
        fieldName = "noDataIndex";
      }
      dataRow = dataRow + Ext.gridutil.htmlTagToExcel(record[fieldName]) + '\t';
    }
    excelStr = excelStr + '\n' + dataRow;
  }
  return excelStr;
};

Ext.gridutil.htmlTagToEnter=function(value){
  if (typeof value==="string"){
    var result = value;
    result = result.replace(/<BR>|<br>|<P>|<p>/g,"\r\n");
    result = result.replace(/<\/P>|<\/p>/g,"");
    result = result.replace(/\r\n\r\n/g,"\r\n");
    return result;
  }else{
    return value;
  }
};

Ext.gridutil.htmlTagToExcel=function(value){
  if (typeof value==="string"){
    var regExp = /<BR>|<br>|<P>|<p>|\r|\n/g;
    var result = value;
    if (regExp.test(result)){
    result = result.replace(/<BR>|<br>|<P>|<p>/g,"\r\n");
    result = result.replace(/<\/P>|<\/p>/g,"");
    result = result.replace(/\r\n\r\n/g,"\r\n");
    result = result.replace(/\"/g,"\"\"");
    result = "\""+result+"\"";
    }
    return result;
  }else{
    return value;
  }
};

