db.Ext = {};
db.Ext.FieldDefs = function(){
  this._fieldsDef = new Ext.util.MixedCollection();
};

db.Ext.FieldDefs.prototype.addIntDef = function(fieldName){
  var fieldDef = {};
  fieldDef.fieldName = fieldName;
  fieldDef.dataType  = db.consts.INTEGER;
  if (this._addDef(fieldDef)===false) {
    return false;
  }
  return fieldDef;
};

db.Ext.FieldDefs.prototype.addStringDef = function(fieldName,maxLength){
  var fieldDef = {};
  fieldDef.fieldName = fieldName;
  fieldDef.dataType  = db.consts.STRING;
  fieldDef.maxLength = maxLength;
  if (maxLength){
    if (isNaN(parseFloat(maxLength,10))){
      return false;
    }else{
      fieldDef.maxLength = maxLength;
    }
  }
  if (this._addDef(fieldDef)===false) {
    return false;
  }
  return fieldDef;
};

db.Ext.FieldDefs.prototype.getCount = function(){
  return this._fieldsDef.getCount();
};

db.Ext.FieldDefs.prototype.itemAt = function(index){
  return this._fieldsDef.itemAt(index);
};

db.Ext.FieldDefs.prototype._addDef = function(fieldDef){
  if (this._fieldsDef.containsKey(fieldDef.fieldName)) {
    Ext.apply(this._fieldsDef.key(fieldDef.fieldName),fieldDef);
  }else{
    if (fieldDef.fieldName.length<=127){
    this._fieldsDef.add(fieldDef.fieldName,fieldDef);
    } else {
      return false;
    }
  }
  return fieldDef;
};

db.Ext.Name2Value = function(){
  this._fieldDefs = new db.Ext.FieldDefs();
  this._record = {};
};

db.Ext.Name2Value.prototype.addIntDef2Value = function(fieldName,value){
  if (this._fieldDefs.addIntDef(fieldName)===false) {
    return false;
  }
  this._record[fieldName] = value;
};

db.Ext.Name2Value.prototype.addStringDef2Value = function(fieldName,value,maxLength){
  if (this._fieldDefs.addStringDef(fieldName,maxLength)===false) {
    return false;
  }
  this._record[fieldName] = value;
};

db.Ext.Name2Value.prototype.addStringDef2ValueMul = function(fieldName,value,maxCount){
  var j=1;
  var maxLength = 63;
  //if(value != "") {
	  if(value.length/maxLength > maxCount) {
	  	var tmpCount = value.length % maxLength > 0 ? parseInt(value.length / maxLength) + 1 : parseInt(value.length / maxLength);
	  	alert("参数被截断，设置分割段数太小，建议设置为"+tmpCount+"段");
	  } else {
			for(var i = 0; i < maxCount; i++){
				if (this._fieldDefs.addStringDef(fieldName+"_part"+j)===false) {

			    break;
			  }
			  //alert("第"+i+"串长度:"+maxLength * (i + 1)+";总长度:"+value.length);
				if(maxLength * (i + 1) <= value.length) {
					this._record[fieldName+"_part"+j] = value.substring(i * maxLength,(i + 1) * maxLength);
					//name2Value.addStringDef2Value(fieldName+"_part"+j,value.substring(i * maxLength,(i + 1) * maxLength));
				} else {
					if(maxLength * i < value.length) {
						this._record[fieldName+"_part"+j] = value.substring(i * maxLength);
					} else {
						this._record[fieldName+"_part"+j] = "";
					}
					//name2Value.addStringDef2Value(fieldName+"_part"+j,value.substring(i * maxLength,value.length));
				}
			  j++;
			} 
	  }
  //} else {
  //	if (this._fieldDefs.addStringDef(fieldName,maxLength)===false) {
	//    return false;
	//  }
	//  this._record[fieldName] = value;
  //}
};

db.Ext.Name2Value.prototype.addStrDef2ValueMulStd = function(fieldName,value,maxCount){
  var j=0;
  var maxLength = 63;
  var tmpFieldName = "";
  //if(value != "") {
  if(value.length/maxLength > maxCount) {
    var tmpCount = value.length % maxLength > 0 ? parseInt(value.length / maxLength) + 1 : parseInt(value.length / maxLength);
    alert("参数被截断，设置分割段数太小，建议设置为"+tmpCount+"段");
  } else {
    for(var i = 0; i < maxCount; i++){
      if (j==0) {
        tmpFieldName = fieldName; 
      } else {
      	tmpFieldName = fieldName+j;
      }
      if (this._fieldDefs.addStringDef(tmpFieldName)===false) {
        break;
      }
      //alert("第"+i+"串长度:"+maxLength * (i + 1)+";总长度:"+value.length);
      if(maxLength * (i + 1) <= value.length) {
        this._record[tmpFieldName] = value.substring(i * maxLength,(i + 1) * maxLength);
        //name2Value.addStringDef2Value(fieldName+"_part"+j,value.substring(i * maxLength,(i + 1) * maxLength));
      } else {
        if(maxLength * i < value.length) {
          this._record[tmpFieldName] = value.substring(i * maxLength);
        } else {
          this._record[tmpFieldName] = "";
        }
        //name2Value.addStringDef2Value(fieldName+"_part"+j,value.substring(i * maxLength,value.length));
      }
      j++;
    } 
  }
};

db.Ext.Name2Value.prototype.dbXML = function(){
  var dbXmlJson = new db.DbXmlJson();
  for (var i=0; i<this._fieldDefs.getCount(); i++){
    var fieldDef = this._fieldDefs.itemAt(i);
    dbXmlJson._addDef(fieldDef.fieldName,fieldDef);
  }
  dbXmlJson.addRow(this._record);
  return dbXmlJson.dbXML();
};

