#include "stg/dotconfpp.h"
 #include "settings_impl.h"
 
-using namespace std;
-
 //-----------------------------------------------------------------------------
 SETTINGS_IMPL::SETTINGS_IMPL()
     : SETTINGS(),
 {
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseYesNo(const string & value, bool * val)
-{
-if (0 == strcasecmp(value.c_str(), "yes"))
-    {
-    *val = true;
-    return 0;
-    }
-if (0 == strcasecmp(value.c_str(), "no"))
-    {
-    *val = false;
-    return 0;
-    }
-
-strError = "Incorrect value \'" + value + "\'.";
-return -1;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseInt(const string & value, int * val)
-{
-if (str2x<int>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsigned(const string & value, unsigned * val)
-{
-if (str2x<unsigned>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to unsigned integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseIntInRange(const string & value, int min, int max, int * val)
-{
-if (ParseInt(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsignedInRange(const string & value, unsigned min, unsigned max, unsigned * val)
-{
-if (ParseUnsigned(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, vector<PARAM_VALUE> * params)
+int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
 {
 const DOTCONFDocumentNode * childNode;
 PARAM_VALUE pv;
 
 if (node->getValue(1))
     {
-    strError = "Unexpected value \'" + string(node->getValue(1)) + "\'.";
+    strError = "Unexpected value \'" + std::string(node->getValue(1)) + "\'.";
     return -1;
     }
 
 DOTCONFDocument conf(DOTCONFDocument::CASEINSENSITIVE);
 conf.setErrorCallback(SETTINGS_IMPL::ErrorCallback, this);
 conf.setRequiredOptionNames(requiredOptions);
-string confFile = confDir + "/stargazer.conf";
+std::string confFile = confDir + "/stargazer.conf";
 
 if(conf.setContent(confFile.c_str()) != 0)
     {
         {
         if (ParseDetailStatWritePeriod(node->getValue(0)) != 0)
             {
-            strError = "Incorrect DetailStatWritePeriod value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DetailStatWritePeriod value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseUnsignedInRange(node->getValue(0), 1, 1440, &statWritePeriod) != 0)
             {
-            strError = "Incorrect StatWritePeriod value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect StatWritePeriod value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseInt(node->getValue(0), &stgExecMsgKey) != 0)
             {
-            strError = "Incorrect ExecMsgKey value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ExecMsgKey value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseUnsignedInRange(node->getValue(0), 1, 1024, &executersNum) != 0)
             {
-            strError = "Incorrect ExecutersNum value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ExecutersNum value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseUnsignedInRange(node->getValue(0), 0, 31, &dayFee) != 0)
             {
-            strError = "Incorrect DayFee value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DayFee value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &fullFee) != 0)
             {
-            strError = "Incorrect FullFee value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect FullFee value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseUnsignedInRange(node->getValue(0), 0, 31, &dayResetTraff) != 0)
             {
-            strError = "Incorrect DayResetTraff value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DayResetTraff value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &spreadFee) != 0)
             {
-            strError = "Incorrect SpreadFee value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect SpreadFee value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &freeMbAllowInet) != 0)
             {
-            strError = "Incorrect FreeMbAllowInet value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect FreeMbAllowInet value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &dayFeeIsLastDay) != 0)
             {
-            strError = "Incorrect DayFeeIsLastDay value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect DayFeeIsLastDay value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &writeFreeMbTraffCost) != 0)
             {
-            strError = "Incorrect WriteFreeMbTraffCost value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect WriteFreeMbTraffCost value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &showFeeInCash) != 0)
             {
-            strError = "Incorrect ShowFeeInCash value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ShowFeeInCash value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseUnsigned(node->getValue(0), &messageTimeout) != 0)
             {
-            strError = "Incorrect MessageTimeout value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect MessageTimeout value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
 
     if (strcasecmp(node->getName(), "FeeChargeType") == 0)
         {
-        if (ParseUnsignedInRange(node->getValue(0), 0, 2, &feeChargeType) != 0)
+        if (ParseUnsignedInRange(node->getValue(0), 0, 3, &feeChargeType) != 0)
             {
-            strError = "Incorrect FeeChargeType value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect FeeChargeType value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (ParseYesNo(node->getValue(0), &reconnectOnTariffChange) != 0)
             {
-            strError = "Incorrect ReconnectOnTariffChange value: \'" + string(node->getValue(0)) + "\'";
+            strError = "Incorrect ReconnectOnTariffChange value: \'" + std::string(node->getValue(0)) + "\'";
             return -1;
             }
         }
         {
         if (node->getValue(1))
             {
-            strError = "Unexpected \'" + string(node->getValue(1)) + "\'.";
+            strError = "Unexpected \'" + std::string(node->getValue(1)) + "\'.";
             return -1;
             }
 
         {
         if (node->getValue(0))
             {
-            strError = "Unexpected \'" + string(node->getValue(0)) + "\'.";
+            strError = "Unexpected \'" + std::string(node->getValue(0)) + "\'.";
             return -1;
             }
         const DOTCONFDocumentNode * child = node->getChildNode();
             }
         }
 
+    if (strcasecmp(node->getName(), "ScriptParams") == 0)
+        {
+        for (int i = 0; node->getValue(i) != NULL; ++i)
+            {
+            scriptParams.push_back(node->getValue(i));
+            }
+        }
     node = node->getNextNode();
     }
 
 return 0;
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseDetailStatWritePeriod(const string & detailStatPeriodStr)
+int SETTINGS_IMPL::ParseDetailStatWritePeriod(const std::string & detailStatPeriodStr)
 {
 if (detailStatPeriodStr == "1")
     {