//var _mod;
//var _mod_path;
if (typeof(bfModules) == 'undefined'){
  var bfModules = {};
}
bfModules.hCacheModDscr = null;
if (typeof(bfModules.hCacheFldDscr) == 'undefined'){
  bfModules.hCacheFldDscr = {};
}
bfModules.getLimitDscr = function(sFld){
  var hParams = {
    'typ':'limit'
  }
  if (typeof(bfModules.hCacheFldDscr['__limits__']) == 'undefined'){
    bfModules.hCacheFldDscr['__limits__'] = shRpc.call('data/getLimitFlds/',hParams);
  }
  return bfModules.hCacheFldDscr['__limits__'][sFld];
}
bfModules.getFldDscr = function(sDialog,sFld,sTyp){
  bDscr = 0;
  if (typeof(sTyp) == 'undefined'){
    sTyp = 'frm';
  }else{
    if (sTyp.indexOf('_dscr') > 0){
      bDscr = 1;
      sTyp = sTyp.substr(0,sTyp.length-5);
    }
  }
  sDscrGrp = (bDscr) ? 'dscr' : 'name';
  if (sDialog == ''){
    return sFld;
  }
  if (typeof(bfModules.hCacheFldDscr[sDialog]) == 'undefined'){
    bfModules.hCacheFldDscr[sDialog] = {};
  }
  if (typeof(bfModules.hCacheFldDscr[sDialog][sDscrGrp]) == 'undefined'){
    var hParams = {};
    if (bDscr){
      hParams['return_dscr'] = 1;
    }
    if(sDialog == 'main'){
      hParams['file[0]'] = _mod_tmpl;
      hParams['mod'] = _mod;
      if (typeof(_mod_incl) == 'object'){
        for (var i in _mod_incl){
          hParams['file['+(parseInt(i)+1)+']'] = _mod_incl[i];
        }
      }
    }else if (typeof(hhDialogs[sDialog]['includes']) == 'object'){
      for(var i in hhDialogs[sDialog]['includes']){
        hParams['file['+i+']'] = hhDialogs[sDialog]['includes'][i];
      }
      i++;
      hParams['file['+i+']'] = hhDialogs[sDialog]['file'];
      hParams['mod'] = hhDialogs[sDialog]['module'];
    }else{
      hParams['file'] = hhDialogs[sDialog]['file'];
      hParams['mod'] = hhDialogs[sDialog]['module'];
    }
    bfModules.hCacheFldDscr[sDialog][sDscrGrp] = shRpc.call('data/getFldDscr/',hParams);
  }
  if (typeof(bfModules.hCacheFldDscr[sDialog][sDscrGrp][sTyp]) == 'undefined' || typeof(bfModules.hCacheFldDscr[sDialog][sDscrGrp][sTyp][sFld]) == 'undefined'){
    return sFld;
    //return sDialog+'.'+sDscrGrp+'.'+sTyp+'.'+sFld;
  }
  var sRet = bfModules.hCacheFldDscr[sDialog][sDscrGrp][sTyp][sFld];
  if (sTyp == 'other' || bDscr){
    var i = 2;
    while((sMatch = sRet.match(/\%s/))){
      i++;
      if (bfModules.getFldDscr.arguments.length>i){
        sRet = sRet.replace(sMatch,bfModules.getFldDscr.arguments[i]);
      }else{
        sRet = sRet.replace(sMatch,'');
      }
    }
  }
  return sRet;
}
bfModules.getModDscr = function(sFld){
  if (bfModules.hCacheModDscr == null){
    bfModules.hCacheModDscr = shRpc.call('data/getModDscr/',{'mod':_mod_path});
  }
  var sRet = bfModules.hCacheModDscr[sFld];
  var i = 0;
  while((sMatch = sRet.match(/\%s/))){
    i++;
    if (bfModules.getModDscr.arguments.length>i){
      sRet = sRet.replace(sMatch,bfModules.getModDscr.arguments[i]);
    }
  }
  return sRet;
}
