/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2006, Derk Wehler"
#property link      "http://www.forexfactory.com"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Black
#property indicator_color2 Black
#property indicator_color3 Black

#import "wininet.dll"
   int InternetOpenA(string a0, int a1, string a2, string a3, int a4);
   int InternetOpenUrlA(int a0, string a1, string a2, int a3, int a4, int a5);
   int InternetReadFile(int a0, string a1, int a2, int& a3[]);
   int InternetCloseHandle(int a0);
#import "kernel32.dll"
   int GetTimeZoneInformation(int& a0[]);
#import

extern bool IncludeHigh = TRUE;
extern bool IncludeMedium = TRUE;
extern bool IncludeLow = TRUE;
extern bool IncludeSpeaks = TRUE;
extern bool IsEA_Call = true;
extern int OffsetHours = 0;
extern bool AllowWebUpdates = false;
extern int Alert1MinsBefore = -1;
extern int Alert2MinsBefore = -1;
extern bool ReportAllForUSD = TRUE;
extern bool ReportAllForEUR = TRUE;
extern bool ReportAllForGBP = TRUE;
extern bool EnableLogging = FALSE;
extern bool ShowNextTwoEvents = TRUE;
extern bool ShowVertNews = FALSE;
extern int TxtSize = 8;
extern color TxtColorTitle = LightGray;
extern color TxtColorNews = DeepSkyBlue;
extern color TxtColorImpact = Red;
extern color TxtColorPrevious = Peru;
extern color TxtColorForecast = Lime;
extern int VertTxtShift = 21;
extern int VertLeftLineShift = 900;
extern int VertRightLineShift = 200;
extern color VertLineColor = SlateBlue;
extern color VertTxtColor = Black;
extern int VertTxtSize = 8;
extern int NewsCorner = 0;
extern bool SaveXmlFiles = FALSE;
int gi_192 = 5;
double g_ibuf_196[];
double g_ibuf_200[];
double g_ibuf_204[];
string gs_208 = "http://www.forexfactory.com/ffcal_week_this.xml";
int g_file_216;
int g_file_220 = -1;
int gi_224;
int gi_232;
int g_index_236;
int gi_240;
string gsa_244[100][7];
int gi_248;
string gs_252;
string gs_dummy_260;
string g_text_268;
int gi_276;
int gi_280;
int gia_284[2];
string gsa_288[2];
string gsa_292[2];
string gsa_296[2];
string gsa_300[2];
string gsa_304[2];
string gsa_308[7] = {"<title>", "<country>", "<date>", "<time>", "<impact>", "<forecast>", "<previous>"};
string gsa_312[7] = {"</title>", "</country>", "</date>", "</time>", "</impact>", "</forecast>", "</previous>"};
bool gi_316 = FALSE;
int g_minute_320 = -1;
int gi_324 = 0;
int gi_328 = 0;
int g_str2time_332 = 0;
string g_name_336;
bool gi_344 = FALSE;
int gi_348;
int gi_352;
int gi_356 = 0;
int gi_360 = 1;
int gi_unused_364 = 3;
int gi_368 = 80;
int gia_372[43];

int init() {
   if (gi_192 > 0) Print("In Init()...\n");
   SetIndexStyle(0, DRAW_NONE);
   SetIndexBuffer(0, g_ibuf_196);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexBuffer(1, g_ibuf_200);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexBuffer(2, g_ibuf_204);
   IndicatorShortName("FFCal");
   MathSrand(TimeLocal());
   gi_324 = MathRand() % 60;
   gi_328 = MathRand() % 6;
   if (gi_192 > 0) {
      Print("RefreshMin  == ", gi_324);
      Print("RefreshHour == ", gi_328);
   }
   return (0);
}

int deinit() {
   string l_name_4;
   string l_name_12;
   ObjectDelete("Sponsor");
   ObjectDelete("Minutes");
   ObjectDelete("Impact");
   ObjectDelete("Previous");
   ObjectDelete("Forecast");
   ObjectDelete("Minutes2");
   ObjectDelete("Impact2");
   ObjectDelete("Previous2");
   ObjectDelete("Forecast2");
   for (int li_0 = ObjectsTotal() - 1; li_0 >= 0; li_0--) {
      l_name_4 = ObjectName(li_0);
      if (StringSubstr(l_name_4, 0, 5) == "vLine") ObjectDelete(l_name_4);
   }
   for (li_0 = ObjectsTotal() - 1; li_0 >= 0; li_0--) {
      l_name_12 = ObjectName(li_0);
      if (StringSubstr(l_name_12, 0, 8) == "Headline") ObjectDelete(l_name_12);
   }
   g_name_336 = GetXmlFileName();
   g_file_216 = FileOpen(g_name_336, FILE_BIN|FILE_WRITE|FILE_READ);
   if (g_file_216 >= 0) {
      FileClose(g_file_216);
      if (!SaveXmlFiles) FileDelete(g_name_336);
   }
   return (0);
}

string GetXmlFileName() {
   return (Month() + "-" + Day() + "-" + Year() + "-" + Symbol() + Period() + "-" + "FFCal.xml");
}

int start() {
   int li_8;
   string ls_12;
   bool li_20;
   int l_str2time_24;
   int l_index_0 = 0;
   int li_unused_4 = -1;
   if (!IsConnected()) {
      Print("News Indicator is disabled because NO CONNECTION to Broker!");
      return (0);
   }
   if (!EnableLogging) gi_192 = 0;
   g_text_268 = "FOREX FACTORY CALENDAR";
   g_name_336 = GetXmlFileName();
   g_file_216 = FileOpen(g_name_336, FILE_BIN|FILE_READ);
   if (g_file_216 >= 0) {
      FileClose(g_file_216);
      gi_316 = FALSE;
   } else gi_316 = TRUE;
   if (AllowWebUpdates) {
      if (gi_192 > 1) Print(GlobalVariableGet("LastUpdateTime") + " " + ((TimeCurrent() - GlobalVariableGet("LastUpdateTime"))));
      if (gi_316 || GlobalVariableCheck("LastUpdateTime") == FALSE || TimeCurrent() - GlobalVariableGet("LastUpdateTime") > 14400.0) {
         if (gi_192 > 1) Print("sUrl == ", gs_208);
         if (gi_192 > 0) Print("Grabbing Web, url = ", gs_208);
         GrabWeb(gs_208, gs_252);
         if (gi_192 > 0) {
            Print("Opening XML file...\n");
            Print(gs_252);
         }
         FileDelete(g_name_336);
         g_file_216 = FileOpen(g_name_336, FILE_BIN|FILE_WRITE);
         if (g_file_216 < 0) {
            if (gi_192 > 0) Print("Can\'t open new xml file, the last error is ", GetLastError());
            return (0);
         }
         FileWriteString(g_file_216, gs_252, StringLen(gs_252));
         FileClose(g_file_216);
         if (gi_192 > 0) Print("Wrote XML file...\n");
         gi_232 = StringFind(gs_252, "</weeklyevents>", 0);
         if (gi_232 <= 0) {
            Alert("FFCal Error - Web page download was not complete!");
            return (0);
         }
         GlobalVariableSet("LastUpdateTime", TimeCurrent());
      }
   }
   if (!IsEA_Call && Minute() == g_minute_320) return (1);
   g_minute_320 = Minute();
   OpenLog("FFCal");
   ArrayInitialize(g_ibuf_196, 0);
   ArrayInitialize(g_ibuf_200, 0);
   g_file_216 = FileOpen(g_name_336, FILE_BIN|FILE_READ);
   if (g_file_216 < 0) {
      Print("Can\'t open xml file: ", g_name_336, ".  The last error is ", GetLastError());
      return (0);
   }
   if (gi_192 > 0) Print("XML file open must be okay");
   gs_252 = FileReadString(g_file_216, 65536);
   if (StringLen(gs_252) < FileSize(g_file_216)) gs_252 = gs_252 + FileReadString(g_file_216, FileSize(g_file_216));
   if (g_file_216 > 0) FileClose(g_file_216);
   string ls_28 = Symbol();
   string ls_36 = StringSubstr(ls_28, 0, 3);
   string ls_44 = StringSubstr(ls_28, 3, 3);
   if (gi_192 > 0) Print("cntry1 = ", ls_36, "    cntry2 = ", ls_44);
   if (gi_192 > 0) {
      Log("Weekly calendar for " + ls_28 
      + "\n\n");
   }
   gi_276 = 10080;
   gi_224 = 0;
   while (true) {
      gi_224 = StringFind(gs_252, "<event>", gi_224);
      if (gi_224 == -1) break;
      gi_224 += 7;
      li_8 = StringFind(gs_252, "</event>", gi_224);
      if (li_8 == -1) break;
      ls_12 = StringSubstr(gs_252, gi_224, li_8 - gi_224);
      gi_224 = li_8;
      gi_240 = 0;
      li_20 = FALSE;
      for (g_index_236 = 0; g_index_236 < 7; g_index_236++) {
         gsa_244[l_index_0][g_index_236] = "";
         li_8 = StringFind(ls_12, gsa_308[g_index_236], gi_240);
         if (li_8 != -1) {
            gi_240 = li_8 + StringLen(gsa_308[g_index_236]);
            gi_232 = StringFind(ls_12, gsa_312[g_index_236], gi_240);
            if (gi_232 > gi_240 && gi_232 != -1) gsa_244[l_index_0][g_index_236] = StringSubstr(ls_12, gi_240, gi_232 - gi_240);
         }
      }
      if (ls_36 != gsa_244[l_index_0][1] && ls_44 != gsa_244[l_index_0][1] && (!ReportAllForUSD || gsa_244[l_index_0][1] != "USD" && !ReportAllForEUR || gsa_244[l_index_0][1] != "EUR" &&
         !ReportAllForGBP || gsa_244[l_index_0][1] != "GBP")) li_20 = TRUE;
      if (!IncludeHigh && gsa_244[l_index_0][4] == "High") li_20 = TRUE;
      if (!IncludeMedium && gsa_244[l_index_0][4] == "Medium") li_20 = TRUE;
      if (!IncludeLow && gsa_244[l_index_0][4] == "Low") li_20 = TRUE;
      if (!IncludeSpeaks && StringFind(gsa_244[l_index_0][0], "speaks") != -1 || StringFind(gsa_244[l_index_0][0], "Speaks") != -1) li_20 = TRUE;
      if (gsa_244[l_index_0][3] == "All Day" || gsa_244[l_index_0][3] == "Tentative" || gsa_244[l_index_0][3] == "") li_20 = TRUE;
      if (!(!li_20)) continue;
      l_str2time_24 = StrToTime(MakeDateTime(gsa_244[l_index_0][2], gsa_244[l_index_0][3]));
      gi_248 = (l_str2time_24 - TimeGMT()) / 60;
      if (gi_192 > 0) {
         Log("FOREX FACTORY\nTitle: " + gsa_244[l_index_0][0] 
            + "\n" 
            + gi_248 
         + "\n\n");
      }
      if (gi_248 == 0 && g_str2time_332 != l_str2time_24) {
         DisplayVerticalNews(gsa_288[0], gsa_292[0], 0);
         if (gia_284[0] == gia_284[1]) DisplayVerticalNews(gsa_288[1], gsa_292[1], 1);
         g_str2time_332 = l_str2time_24;
      }
      if (ShowVertNews && !IsEA_Call) {
         DisplayOldNews(gsa_244[l_index_0][0], gsa_244[l_index_0][1], 0, StrToTime(MakeDateTime(gsa_244[l_index_0][2], gsa_244[l_index_0][3])));
         if (gsa_244[l_index_0][3] == gsa_244[l_index_0 + 1][3]) DisplayOldNews(gsa_244[l_index_0 + 1][0], gsa_244[l_index_0 + 1][1], 1, StrToTime(MakeDateTime(gsa_244[l_index_0 + 1][2], gsa_244[l_index_0 + 1][3])));
      }
      if (gi_248 < 0 || MathAbs(gi_276) > gi_248) {
         gi_280 = l_index_0;
         gi_276 = gi_248;
      }
      Log("Weekly calendar for " + ls_28 
      + "\n\n");
      if (gi_192 > 0) {
         Log("FOREX FACTORY\nTitle: " + gsa_244[l_index_0][0] 
            + "\nCountry: " + gsa_244[l_index_0][1] 
            + "\nDate: " + gsa_244[l_index_0][2] 
            + "\nTime: " + gsa_244[l_index_0][3] 
            + "\nImpact: " + gsa_244[l_index_0][4] 
            + "\nForecast: " + gsa_244[l_index_0][5] 
            + "\nPrevious: " + gsa_244[l_index_0][6] 
         + "\n\n");
      }
      if (Alert1MinsBefore != -1 && gi_248 == Alert1MinsBefore) Alert(Alert1MinsBefore, " minutes until news for ", ls_28, ": ", gsa_244[l_index_0][0]);
      if (Alert2MinsBefore != -1 && gi_248 == Alert2MinsBefore) Alert(Alert2MinsBefore, " minutes until news for ", ls_28, ": ", gsa_244[l_index_0][0]);
      g_ibuf_196[l_index_0] = gi_248;
      l_index_0++;
   }
   bool li_52 = TRUE;
   g_ibuf_200[0] = 99999;
   g_ibuf_200[1] = 99999;
   g_ibuf_204[0] = 0;
   g_ibuf_204[1] = 0;
   string ls_56 = "Minutes until news events for " + ls_28 + " : ";
   for (g_index_236 = 0; g_index_236 < l_index_0; g_index_236++) {
      ls_56 = ls_56 + g_ibuf_196[g_index_236] + ", ";
      if (g_ibuf_196[g_index_236] >= 0.0 && li_52) {
         li_52 = FALSE;
         if (g_index_236 > 0) {
            g_ibuf_200[0] = MathAbs(g_ibuf_196[g_index_236 - 1]);
            g_ibuf_204[0] = ImpactToNumber(gsa_244[g_index_236 - 1][4]);
         }
         if (g_ibuf_196[g_index_236] > 0.0 || (g_ibuf_196[g_index_236] == 0.0 && g_ibuf_196[g_index_236 + 1] > 0.0)) g_ibuf_200[1] = g_ibuf_196[g_index_236];
         g_ibuf_204[1] = ImpactToNumber(gsa_244[g_index_236][4]);
      }
      if (g_index_236 == gi_280) {
         gsa_288[0] = gsa_244[g_index_236][0];
         gsa_292[0] = gsa_244[g_index_236][1];
         gsa_296[0] = gsa_244[g_index_236][4];
         gsa_300[0] = gsa_244[g_index_236][5];
         gsa_304[0] = gsa_244[g_index_236][6];
         gia_284[0] = g_ibuf_196[g_index_236];
      }
      if (g_index_236 == gi_280 + 1) {
         gsa_288[1] = gsa_244[g_index_236][0];
         gsa_292[1] = gsa_244[g_index_236][1];
         gsa_296[1] = gsa_244[g_index_236][4];
         gsa_300[1] = gsa_244[g_index_236][5];
         gsa_304[1] = gsa_244[g_index_236][6];
         gia_284[1] = g_ibuf_196[g_index_236];
      }
   }
   if (g_ibuf_200[0] == 0.0 && g_ibuf_200[1] == 0.0) {
      g_ibuf_200[0] = g_ibuf_196[g_index_236 - 1];
      g_ibuf_200[1] = 999999;
      ObjectDelete("Impact");
      ObjectDelete("Previous");
      ObjectDelete("Forecast");
      ObjectDelete("Impact2");
      ObjectDelete("Previous2");
      ObjectDelete("Forecast2");
   }
   if (gi_192 > 0) {
      Print(ls_56);
      Print("LastMins (ExtMapBuffer1[0]) = ", g_ibuf_200[0]);
      Print("NextMins (ExtMapBuffer1[1]) = ", g_ibuf_200[1]);
   }
   if (!IsEA_Call) OutputToChart();
   if (g_file_220 > 0) {
      FileClose(g_file_220);
      g_file_220 = -1;
   }
   return (0);
}

void DisplayVerticalNews(string as_0, string as_8, int ai_16) {
   double l_price_28 = 0.0;
   double ld_20 = (iHigh(NULL, PERIOD_D1, 1) + iLow(NULL, PERIOD_D1, 1) + iClose(NULL, PERIOD_D1, 1)) / 3.0;
   if (Open[0] > ld_20) l_price_28 = Low[iLowest(NULL, 0, MODE_LOW, 5, 0)] - VertTxtShift * Point;
   else l_price_28 = High[iHighest(NULL, 0, MODE_HIGH, 5, 0)] + VertTxtShift * Point;
   if (ai_16 == 0) {
      if (ObjectFind("vLine" + Time[0]) == -1) {
         ObjectCreate("vLine" + Time[0], OBJ_TREND, 0, Time[0], 0, Time[0], High[0]);
         ObjectSet("vLine" + Time[0], OBJPROP_COLOR, VertLineColor);
         ObjectSet("vLine" + Time[0], OBJPROP_STYLE, STYLE_DOT);
         ObjectSet("vLine" + Time[0], OBJPROP_BACK, TRUE);
      }
      if (ObjectFind("Headline" + Time[0]) == -1) {
         ObjectCreate("Headline" + Time[0], OBJ_TEXT, 0, Time[0] - VertLeftLineShift, l_price_28);
         ObjectSet("Headline" + Time[0], OBJPROP_ANGLE, 90);
         ObjectSetText("Headline" + Time[0], "News: " + as_8 + " " + as_0, VertTxtSize, "Arial", VertTxtColor);
      }
   } else {
      if (ObjectFind("Headline" + Time[0] + "s") == -1) {
         ObjectCreate("Headline" + Time[0] + "s", OBJ_TEXT, 0, Time[0] + VertRightLineShift, l_price_28);
         ObjectSet("Headline" + Time[0] + "s", OBJPROP_ANGLE, 90);
         ObjectSetText("Headline" + Time[0] + "s", "News: " + as_8 + " " + as_0, VertTxtSize, "Arial", VertTxtColor);
      }
   }
   ObjectsRedraw();
}

void DisplayOldNews(string as_0, string as_8, int ai_16, int ai_20) {
   double l_price_36 = 0.0;
   int l_shift_24 = iBarShift(NULL, 0, ai_20);
   double ld_28 = (iHigh(NULL, PERIOD_D1, l_shift_24) + iLow(NULL, PERIOD_D1, l_shift_24) + iClose(NULL, PERIOD_D1, l_shift_24)) / 3.0;
   if (Open[l_shift_24] > ld_28) l_price_36 = Low[iLowest(NULL, 0, MODE_LOW, 5, l_shift_24)] - VertTxtShift * Point;
   else l_price_36 = High[iHighest(NULL, 0, MODE_HIGH, 5, l_shift_24)] + VertTxtShift * Point;
   if (ai_20 < Time[0]) {
      if (ai_16 == 0) {
         if (ObjectFind("vLine" + ai_20) == -1) {
            ObjectCreate("vLine" + ai_20, OBJ_TREND, 0, ai_20, 0, ai_20, High[0]);
            ObjectSet("vLine" + ai_20, OBJPROP_COLOR, VertLineColor);
            ObjectSet("vLine" + ai_20, OBJPROP_STYLE, STYLE_DOT);
            ObjectSet("vLine" + ai_20, OBJPROP_BACK, TRUE);
         }
         if (ObjectFind("Headline" + ai_20) == -1) {
            ObjectCreate("Headline" + ai_20, OBJ_TEXT, 0, ai_20 - VertLeftLineShift, l_price_36);
            ObjectSet("Headline" + ai_20, OBJPROP_ANGLE, 90);
            ObjectSetText("Headline" + ai_20, "News: " + as_8 + " " + as_0, VertTxtSize, "Arial", VertTxtColor);
         }
      } else {
         if (ObjectFind("Headline" + ai_20 + "s") == -1) {
            ObjectCreate("Headline" + ai_20 + "s", OBJ_TEXT, 0, ai_20 + VertRightLineShift, l_price_36);
            ObjectSet("Headline" + ai_20 + "s", OBJPROP_ANGLE, 90);
            ObjectSetText("Headline" + ai_20 + "s", "News: " + as_8 + " " + as_0, VertTxtSize, "Arial", VertTxtColor);
         }
      }
   }
   ObjectsRedraw();
}

void OutputToChart() {
   int li_4;
   int li_8;
   int li_12;
   string l_text_16;
   int l_y_0 = 12;
   if (ObjectFind("Sponsor") == -1) ObjectCreate("Sponsor", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("Sponsor", g_text_268, TxtSize, "Arial Bold", TxtColorTitle);
   ObjectSet("Sponsor", OBJPROP_CORNER, NewsCorner);
   ObjectSet("Sponsor", OBJPROP_XDISTANCE, 10);
   ObjectSet("Sponsor", OBJPROP_YDISTANCE, l_y_0);
   string ls_24 = "until ";
   int li_32 = gia_284[0];
   if (gia_284[0] <= 0) {
      ls_24 = "since ";
      li_32 = -1 * li_32;
   }
   l_y_0 = l_y_0 + TxtSize + 4;
   if (li_32 == 999999) l_text_16 = " (No more events this week)";
   else {
      if (li_32 < 60) l_text_16 = li_32 + " mins ";
      else {
         li_8 = MathRound(li_32 / 60);
         li_12 = li_32 % 60;
         if (li_8 < 24) l_text_16 = li_8 + " hrs " + li_12 + " mins ";
         else {
            li_4 = MathRound(li_8 / 24);
            li_8 %= 24;
            l_text_16 = li_4 + " days " + li_8 + " hrs " + li_12 + " mins ";
         }
      }
   }
   if (ObjectFind("Minutes") == -1) ObjectCreate("Minutes", OBJ_LABEL, 0, 0, 0);
   if (li_32 == 999999) ObjectSetText("Minutes", l_text_16, TxtSize, "Arial Bold", TxtColorNews);
   else ObjectSetText("Minutes", l_text_16 + ls_24 + gsa_292[0] + ": " + gsa_288[0], TxtSize, "Arial Bold", TxtColorNews);
   ObjectSet("Minutes", OBJPROP_CORNER, NewsCorner);
   ObjectSet("Minutes", OBJPROP_XDISTANCE, 10);
   ObjectSet("Minutes", OBJPROP_YDISTANCE, l_y_0);
   l_y_0 = l_y_0 + TxtSize + 4;
   if (ObjectFind("Impact") == -1) ObjectCreate("Impact", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("Impact", "Impact: " + gsa_296[0], TxtSize, "Arial Bold", TxtColorImpact);
   ObjectSet("Impact", OBJPROP_CORNER, NewsCorner);
   ObjectSet("Impact", OBJPROP_XDISTANCE, 10);
   ObjectSet("Impact", OBJPROP_YDISTANCE, l_y_0);
   if (gsa_304[0] != "") {
      l_y_0 = l_y_0 + TxtSize + 4;
      if (ObjectFind("Previous") == -1) ObjectCreate("Previous", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Previous", "Previous: " + gsa_304[0], TxtSize, "Arial Bold", TxtColorPrevious);
      ObjectSet("Previous", OBJPROP_CORNER, NewsCorner);
      ObjectSet("Previous", OBJPROP_XDISTANCE, 10);
      ObjectSet("Previous", OBJPROP_YDISTANCE, l_y_0);
   }
   if (gsa_300[0] != "") {
      l_y_0 = l_y_0 + TxtSize + 4;
      if (ObjectFind("Forecast") == -1) ObjectCreate("Forecast", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Forecast", "Forecast: " + gsa_300[0], TxtSize, "Arial Bold", TxtColorForecast);
      ObjectSet("Forecast", OBJPROP_CORNER, NewsCorner);
      ObjectSet("Forecast", OBJPROP_XDISTANCE, 10);
      ObjectSet("Forecast", OBJPROP_YDISTANCE, l_y_0);
   }
   if (ShowNextTwoEvents && gsa_288[1] != "") {
      ls_24 = "until ";
      li_32 = gia_284[1];
      if (gia_284[1] <= 0) {
         ls_24 = "since ";
         li_32 = -1 * li_32;
      }
      l_y_0 = l_y_0 + TxtSize + 20;
      if (li_32 == 999999) l_text_16 = " (No more events this week)";
      else {
         if (li_32 < 60) l_text_16 = li_32 + " mins ";
         else {
            li_8 = MathRound(li_32 / 60);
            li_12 = li_32 % 60;
            if (li_8 < 24) l_text_16 = li_8 + " hrs " + li_12 + " mins ";
            else {
               li_4 = MathRound(li_8 / 24);
               li_8 %= 24;
               l_text_16 = li_4 + " days " + li_8 + " hrs " + li_12 + " mins ";
            }
         }
      }
      if (ObjectFind("Minutes2") == -1) ObjectCreate("Minutes2", OBJ_LABEL, 0, 0, 0);
      if (li_32 == 999999) ObjectSetText("Minutes", l_text_16, TxtSize, "Arial Bold", TxtColorNews);
      else ObjectSetText("Minutes2", l_text_16 + "until " + gsa_292[1] + ": " + gsa_288[1], TxtSize, "Arial Bold", TxtColorNews);
      ObjectSet("Minutes2", OBJPROP_CORNER, NewsCorner);
      ObjectSet("Minutes2", OBJPROP_XDISTANCE, 10);
      ObjectSet("Minutes2", OBJPROP_YDISTANCE, l_y_0);
      l_y_0 = l_y_0 + TxtSize + 4;
      if (ObjectFind("Impact2") == -1) ObjectCreate("Impact2", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("Impact2", "Impact: " + gsa_296[1], TxtSize, "Arial Bold", TxtColorImpact);
      ObjectSet("Impact2", OBJPROP_CORNER, NewsCorner);
      ObjectSet("Impact2", OBJPROP_XDISTANCE, 10);
      ObjectSet("Impact2", OBJPROP_YDISTANCE, l_y_0);
      if (gsa_304[1] != "") {
         l_y_0 = l_y_0 + TxtSize + 4;
         if (ObjectFind("Previous2") == -1) ObjectCreate("Previous2", OBJ_LABEL, 0, 0, 0);
         ObjectSetText("Previous2", "Previous: " + gsa_304[1], TxtSize, "Arial Bold", TxtColorPrevious);
         ObjectSet("Previous2", OBJPROP_CORNER, NewsCorner);
         ObjectSet("Previous2", OBJPROP_XDISTANCE, 10);
         ObjectSet("Previous2", OBJPROP_YDISTANCE, l_y_0);
      }
      if (gsa_300[1] != "") {
         l_y_0 = l_y_0 + TxtSize + 4;
         if (ObjectFind("Forecast2") == -1) ObjectCreate("Forecast2", OBJ_LABEL, 0, 0, 0);
         ObjectSetText("Forecast2", "Forecast: " + gsa_300[1], TxtSize, "Arial Bold", TxtColorForecast);
         ObjectSet("Forecast2", OBJPROP_CORNER, NewsCorner);
         ObjectSet("Forecast2", OBJPROP_XDISTANCE, 10);
         ObjectSet("Forecast2", OBJPROP_YDISTANCE, l_y_0);
      }
   }
}

double ImpactToNumber(string as_0) {
   if (as_0 == "High") return (3);
   if (as_0 == "Medium") return (2);
   if (as_0 == "Low") return (1);
   return (0);
}

string MakeDateTime(string as_0, string as_8) {
   int li_16 = StringFind(as_0, "-");
   int li_20 = StringFind(as_0, "-", li_16 + 1);
   string ls_24 = StringSubstr(as_0, 0, 2);
   string ls_32 = StringSubstr(as_0, 3, 2);
   string ls_40 = StringSubstr(as_0, 6, 4);
   int li_48 = StringFind(as_8, ":");
   string ls_52 = StringSubstr(as_8, 0, li_48);
   string ls_60 = StringSubstr(as_8, li_48 + 1, 2);
   string ls_68 = StringSubstr(as_8, StringLen(as_8) - 2);
   int li_76 = StrToInteger(ls_52);
   if (ls_68 == "pm" || ls_68 == "PM" && li_76 != 12) li_76 += 12;
   if (ls_68 == "am" || ls_68 == "AM" && li_76 == 12) li_76 = 0;
   string ls_80 = "";
   if (li_76 < 10) ls_80 = "0";
   return (StringConcatenate(ls_40, ".", ls_24, ".", ls_32, " ", ls_80, li_76, ":", ls_60));
}

int hSession(bool ai_0) {
   string ls_4;
   if (gi_348 == 0) {
      ls_4 = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)";
      gi_348 = InternetOpenA(ls_4, gi_356, "0", "0", 0);
      gi_352 = InternetOpenA(ls_4, gi_360, "0", "0", 0);
   }
   if (ai_0) return (gi_352);
   return (gi_348);
}

int GrabWeb(string as_0, string &as_8) {
   int lia_24[] = {1};
   string ls_28 = "                                                                                                                                                                                                                                                               ";
   int li_16 = InternetOpenUrlA(hSession(0), as_0, "0", 0, -2080374528, 0);
   if (gi_344) Log("hInternet: " + li_16);
   if (li_16 == 0) return (0);
   Print("Reading URL: " + as_0);
   int li_20 = InternetReadFile(li_16, ls_28, gi_368, lia_24);
   if (gi_344) Log("iResult: " + li_20);
   if (gi_344) Log("lReturn: " + lia_24[0]);
   if (gi_344) Log("iResult: " + li_20);
   if (gi_344) Log("sBuffer: " + ls_28);
   if (li_20 == 0) return (0);
   int li_36 = lia_24[0];
   for (as_8 = StringSubstr(ls_28, 0, lia_24[0]); lia_24[0] != 0; as_8 = as_8 + StringSubstr(ls_28, 0, lia_24[0])) {
      li_20 = InternetReadFile(li_16, ls_28, gi_368, lia_24);
      if (lia_24[0] == 0) break;
      li_36 += lia_24[0];
   }
   Print("Closing URL web connection");
   li_20 = InternetCloseHandle(li_16);
   if (li_20 == 0) return (0);
   return (1);
}

void OpenLog(string as_0) {
   string ls_8;
   string ls_16;
   string l_str_concat_24;
   if (EnableLogging) {
      if (g_file_220 <= 0) {
         ls_8 = "";
         ls_16 = "";
         if (Month() < 10) ls_8 = "0";
         if (Day() < 10) ls_16 = "0";
         l_str_concat_24 = StringConcatenate(as_0, "_", Year(), ls_8, Month(), ls_16, Day(), "_log.txt");
         g_file_220 = FileOpen(l_str_concat_24, FILE_CSV|FILE_WRITE|FILE_READ);
         Print("logHandle =================================== ", g_file_220);
      }
      if (g_file_220 > 0) {
         FileFlush(g_file_220);
         FileSeek(g_file_220, 0, SEEK_END);
      }
   }
}

void Log(string as_0) {
   if (EnableLogging) {
      if (g_file_220 > 0) {
         as_0 = TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + as_0;
         FileWrite(g_file_220, as_0);
      }
   }
}

int TimeGMT() {
   int li_0 = GetTimeZoneInformation(gia_372);
   if (li_0 == 1) li_0 = 3600;
   else li_0 = 2;
   return (TimeLocal() + li_0 + 3600 * OffsetHours + 60 * (gia_372[0] + gia_372[42]));
}