(function( $ ) {
   var params = {
      divid: "TFC-outerdiv", 
      category: "BEV", 
      title: "Have your say", 
      surl: "/php/savecomment2.php", 
      rurl: "/php/listcomments.php", 
      turl: "/php/gettopics.php",
      curl: "/php/clock.php",
      noToggle: false,
      pid: "BEV?",
      lvcallback: false
   };
   
   $.fn.bevTfc = function(options)
   {
      if (options) $.extend(params, options);
      var topics = new Array();
      var enabled = false;
      var topicsLoaded = false;
      var subURL = params.surl;
      var refreshURL = params.rurl;
      var topicsURL = params.turl;
      var clockURL = params.curl;
      var month = "";
      var sortorder = "time";
      var newtopic = "";
      var falert;
      var seed = (""+Math.random()).substr(2);
      var virgin = true;;
      var status = "?";
      var city = "?";
      var region = "?";
      var country = "?";
      var ip = "?";
      var path = "?";
      var browser = "?";
      var bversion = "?";
      var showing = false;
        
   function addNewTopic()
   {
      var exists = false;
      for (var i = 0; i < topics.length; i++)
      {
         if (topics[i] === newtopic)
         {
            exists = true;
            break;
         }
      }
      if (exists) return;
      var topsel = $("#britseyeview-TFC-topsel");
      topsel.append("<option>"+newtopic+"</option>");
   }

   function commentSaved(data)
   {
       if (data === "Bad CAPTCHA")
       {
          seed = (""+Math.random()).substr(2);
          $("#britseyeview-TFC-clock").attr("src", clockURL+"?now="+seed);
          tfcAlert("BEV Feedback", "The time you entered was not as expected. Try again with a refreshed clock.");
          return;
       }
       if (data.substr(0, 2) !== "ok")
       {
          tfcAlert("BEV Feedback", "There was a problem saving your comment - "+data);
          return;
       }
       addNewTopic();
       tfcAlert("BEV Feedback", "Your comment was saved - the list will be updated momentarily");
       refreshFeedbackList();
   }

   function gotTopics(response)
   {
      if (!response)
         topics = [];
      eval(response);
      var topsel = $("#britseyeview-TFC-topsel");
      topsel.append("<option> </option>");
      for (var i = 0; i < topics.length; i++)
         topsel.append("<option>"+topics[i]+"</option>");
   }

   function refreshFeedbackList()
   {
      var url = refreshURL;
      url += "&sort="+sortorder;
      $.get(url, function(data) { loadComments(data); });
   }

   function getCookie(c_name)
   {
      if (document.cookie.length > 0)
      {
         c_start=document.cookie.indexOf(c_name + "=");
         if (c_start != -1)
         {
            c_start=c_start + c_name.length+1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1)
             c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
         }
      }
      return "";
   }

   function submitComment()
   {
      var url = subURL;
      var moniker = $("#britseyeview-TFC-moniker").val();
      if (moniker === "")
      {
         tfcAlert("BEV Feedback", "Please enter a reader name or nickname - it does not need to be real, but preferably be consistent.");
         return;
      }
      var topic = $("#britseyeview-TFC-topnew").val();
      if (topic === "")
      {
         topic = $("#britseyeview-TFC-topsel").val();
         if (topic === "")
         {
            tfcAlert("BEV Feedback",
                     "Please choose a topic from the drop list, or enter the name of new topic.");
            return;
         }
      }
      else
         newtopic = topic;
      var text = $("#britseyeview-TFC-newcomment").val();
      if (text === "")
      {
         tfcAlert("BEV Feedback", "You have not entered any feedback or comment.");
         return;
      }
      var rt = $("#britseyeview-TFC-randtime").val();
      if (rt === "")
      {
         tfcAlert("BEV Feedback", "Please enter the time from the little clock at the top left to prove you are not a computer.");
         return;
      }
      var a = rt.split(/[/:.-]/);
      var h, m;
      var ok = false;
      do {
         if (a.length != 2)
            break;
         if (a[0].length < 1 || a[0].length > 2)
            break;
         if (a[0].length == 2 && a[0].substr(0,1) === "0")
            h = parseInt(a[0].substr(1));
         else
            h = parseInt(a[0]);
         if (isNaN(h))
            break;
         if (h > 12 || h < 0)
            break;
         if (h == 12)
            h = 0;
         if (a[1].length != 2)
            break;
         if (a[1].substr(0,1) === "0")
            m = parseInt(a[1].substr(1));
         else
            m = parseInt(a[1]);

         if (isNaN(m))
            break;
         if (m > 55 || m < 0)
            break;
         ok = true;
         break;
      } while (false);
      if (!ok)
      {
         tfcAlert("BEV Feedback", "Time should be one or two digit hour, followed by a colon, followed by two digit minute - e.g. 1:05, 1:55, 10:05, 11:55.");
         return;
      }
      url += "?category="+params.category;
      moniker = encodeURIComponent(moniker);
      url += "&moniker="+moniker;
      topic = encodeURIComponent(topic);
      url += "&topic="+topic;
      text = encodeURIComponent(text);
      url += "&blurb="+text;
      url += "&now=" + seed;
      url += "&hour="+h;
      url += "&minute="+m;
      var ts = encodeURIComponent(city);
      url += "&city="+ts;
      ts = encodeURIComponent(region);
      url += "&region="+ts;
      ts = encodeURIComponent(country);
      url += "&country="+ts;
      $.get(url, function(data) { commentSaved(data); });
   }

   function loadComments(comments)
   {
      $("#britseyeview-TFC-comments").html(comments);
   }

   function toggleCommentDiv()
   {
      if (!enabled)
      {
         tfcAlert("BEV TFC", "Please wait until the page is fully loaded");
         return;
      }
      var comdiv = $("#britseyeview-TFC-container");
      if (showing)
      {
         comdiv.hide();
         showing = false;
      }
      else
      {
          if (!virgin)
          {
              seed = (""+Math.random()).substr(2);
              $("#britseyeview-TFC-clock").attr("src", clockURL+"?now="+seed);
          }
          comdiv.show();
          showing = true;
      }
      $("#britseyeview-TFC-moniker").val(getCookie("moniker")); 
      $("#britseyeview-TFC-topnew").val(""); 
      $("#britseyeview-TFC-randtime").val(""); 
      if (!topicsLoaded)
      {
         $.get(refreshURL+"&sort=time", function(data) {
            loadComments(data);
         });
         $.get(topicsURL+"&sort=time", function(data) {
            gotTopics(data);
         });             
         topicsLoaded = true;
      }
      virgin = false;
   } 

   function toggleSort()
   {
       if (sortorder == "topic")
          sortorder="time";
       else
          sortorder = "topic";
         $.get(refreshURL+"&sort="+sortorder, function(data) {
            loadComments(data);
         });
   }

   function loadHTML()
   {
      $.get("/tfchtml.txt", function(data) { fixupDlg(data); });
   }

   function fixupDlg(data)
   {
       $('#britseyeview-TFC-container').html(data);
       $('#britseyeview-TFC-ts1').click(toggleSort);
       $('#britseyeview-TFC-ts2').click(toggleSort);
       $('#britseyeview-TFC-clock').attr('src', clockURL+'?now='+seed);
       $("#britseyeview-TFC-submit").click(submitComment);
       $(".britseyeview-TFC-close").click(toggleCommentDiv);
       enabled = true;
   }
   
   function recordGeoData(data)
   {
      var gd = $.parseJSON(data);
      // to fit in with existing code above
      status = gd.status;
      ip = gd.ip;
      city = gd.city;
      region = gd.region;
      country = gd.country;
      path = gd.path;
      browser = gd.browser;
      bversion = gd.bversion;

      // record result on body element for use by other scripts
      $('body').data('logvisit_result', gd);
      if (params.lvcallback)
         params.lvcallback(gd);
   }

   function tfcAlert(title, text)
   {
      try {
         jqAlert(title, text);
      }
      catch(err) {
         alert(text);
      }
   }
   var now = new Date();
   var y = now.getFullYear();
   var m = now.getMonth();
   var ms = ""+(m+1);
   if (ms.length < 2) ms = "0"+ms;
   month = ""+y+ms;
   
   refreshURL += "?category="+params.category+"&month="+month;
   topicsURL += "?category="+params.category+"&month="+month;

   $.get("/php/hs_logvisit.php?cid=britseye&pid="+params.pid+"&path="+document.location.pathname,
         function(data) { recordGeoData(data); });

   //fixupDlg(params.divid);
   loadHTML();
  
   if (params.noToggle)
      toggleCommentDiv();
   else
      // this is (one of) the jQuery objects we were called on - the clickable item that will toggle the display
      this.click(toggleCommentDiv);

};
})( jQuery );


