// url - US date
        // .htm - UK format
        public List<string> GenerateLinks(JSONLinks jsl, int startyear, int ftsymbol, int interval)
        {
            string url1 = "http://markets.ft.com/RESEARCH/Remote/UK/InteractiveChart/DrawInteractiveChart?";
            DateTime dstart;
            DateTime dend;
            DateTime now = DateTime.Now;

            if (startyear == 1) // check
            {
                Console.WriteLine("No date data: " + ftsymbol);
                return null;
            }

            dstart = new DateTime(startyear, 1, 1);
            dend = new DateTime(dstart.Year + interval, 1, 1);
            if (dend.Year >= now.Year)
            {
                dend = new DateTime(now.Year, 12, 31);
            }

            int counter = 0;
            List<string> urls = new List<string>();

            // http://markets.ft.com/research/InteractiveChart?symbol=205778&options={"StartDate":"01/15/2008","EndDate":"06/24/2013","LowerIndicator":[{"Args":[{"Type":0,"Value":14}],"Code":21,"UID":696010770}],"UpperIndicator":[],"Overlay":[2,1,0],"ChartStyle":3,"ChartScale":1,"CursorStyle":1,"Interval":6,"Duration":10,"Comparison":[],"PortfolioName":null,"Width":950,"Height":400,"ActiveTool":null}
            // date format is US, even though in interactive format is UK
            for (; ; )
            {
                string url2 = @"symbol=zzz&options={""StartDate"":""xxx"",""EndDate"":""yyy"",""LowerIndicator"":[],""UpperIndicator"":[],""Overlay"":[0,1,2],""ChartStyle"":3,""ChartScale"":1,""CursorStyle"":1,""Interval"":6,""Duration"":9,""Comparison"":[],""PortfolioName"":null,""Width"":950,""Height"":400,""ActiveTool"":null}";
                url2 = url2.Replace("xxx", dstart.ToShortDateString());
                url2 = url2.Replace("yyy", dend.ToShortDateString());
                url2 = url2.Replace("zzz", ftsymbol.ToString());
                string finalurl = url1 + url2;

                urls.Add(finalurl);

                JSONParam p = new JSONParam();
                p.startdate = dstart;
                p.enddate = dend;
                p.url = finalurl;
                jsl.m_jsonparam.Add(p);

                dstart = dend;
                if (dstart.Year == now.Year &&
                    dstart.Month == 12 &&
                    dstart.Day == 31)
                    break;
                else
                {
                    dend = new DateTime(dstart.Year + interval, 1, 1);
                    if (dend.Year >= now.Year)
                    {
                        dend = new DateTime(now.Year, 12, 31);
                    }
                }
                counter++;
            }
            return urls;
        }
        public void LoadAndAnalyze(string chartfile, int ftsymbol)
        {
            string data;
            try
            {
                data = File.ReadAllText(chartfile);
            }
            catch
            {
                return;
            }

            // date contained in json file is UK format
            // CreateSpecificCulture("fr-FR") - parse UK date format
            Match m = Regex.Match(data, @"data-uk-date=\\""true\\"" value=\\""(.+?)\\"""); // start date
            if (!m.Success) return;
            DateTime earliest = DateTime.Parse(m.Groups[1].Value, CultureInfo.CreateSpecificCulture("fr-FR"));

            bool skip = false;
            JSONLinks j = new JSONLinks();
            j.FTid = ftsymbol;
            List<string> urls = GenerateLinks(j, earliest.Year, ftsymbol, 3);

            string dir = "JSON";
            Directory.CreateDirectory(dir);

            for (int a = 0; a < urls.Count; a++)
            {
                StringBuilder s = new StringBuilder();
                s.Append(dir + "\\");
                s.Append(ftsymbol + ".");
                s.Append("json" + a + ".");
                s.Append("htm");

                j.thispart = a;
                j.totalparts = urls.Count;

                if (forceoverwrite == false)
                {
                    if (File.Exists(s.ToString()))
                    {
                        Console.WriteLine("Skipping: " + ftsymbol);
                        skip = true;
                        break;
                    }
                }
                m_threaded.Queue(urls[a], s.ToString(), j);
            }
            if (skip == false)
                Console.WriteLine("Queued: " + ftsymbol + ", total parts: " + j.totalparts);
        }