var width = 256;
var height = 192;
var quality = 100;
var watermark = "";
var token = "";
var text = "";
var sid = "";
var timeoutTimerID = -1;
var checkTimerID = -1;
var current_status = -1;
var answer = "";

function StopTimers()
{
   if(timeoutTimerID != -1)
   {
      clearTimeout(timeoutTimerID);
   }
   if(checkTimerID != -1)
   {
      clearInterval(checkTimerID);
   }
   timeoutTimerID = -1;
   checkTimerID = -1;
}

function StartTimers(timeout, interval)
{
   StopTimers();
   checkTimerID = setInterval("GetScreenshotStatus()", interval);
   timeoutTimerID = setTimeout("OnTimeout()", timeout);
}

function GetScreenshotStatus()
{
   if(token)
   {
      var request = "/preview/check.php?sid=" + sid + "&token=" + token;
      ajax.sendRequest(request, OnReceivedStatus);
   }
}

function OnReceivedStatus(response)
{
   if(response && response.length > 0)
   {
      var status = parseInt(response);
      ProcessStatus(status);
   }
}

function OnTimeout()
{
   StopTimers();
   ProcessStatus(5);
}

function DisplayStatusMessage(message)
{
   var statusDiv = document.getElementById("status");
   if(statusDiv) statusDiv.innerHTML = message;
}

function Print(url, width, height)
{
   var preview_window = window.open(url, "preview_window", "status=0,toolbar=0,location=0,menubar=0,resizable=1,scrollbars=0,width=" + (width + 20) + ",height=" + (height + 20));
   preview_window.onload = function() { this.print(); };
}

function Popup(url, width, height)
{
   window.open(url, "preview_window", "status=0,toolbar=0,location=0,menubar=0,resizable=1,scrollbars=0,width=" + (width + 20) + ",height=" + (height + 20));
}

function ResetLinks()
{
   var request = "/preview/preview.php?sid=" + sid + "&";

   for (i = 0; i < 7; i++)
   {
      var download = document.getElementById("download" + i);
      download.href = request + "download=1";
      download.title = "";

      var print = document.getElementById("print" + i);
      print.href = "#";

      var preview = document.getElementById("preview" + i);
      preview.href = "#";

      if(i == 0)
      {
         var preview2 = document.getElementById("preview20");
         preview2.href = "#";

         var img = document.getElementById("shot0");
         img.title = "Preview";
      }
   }
}

function UpdateLinks()
{
   var currentDate = new Date();
   var request = "/preview/preview.php?sid=" + sid + "&tmp=" + currentDate.getSeconds() + "&token=" + token + "&watermark=" + watermark + "&text=" + text + "&quality=" + quality;
   var sizes = [
      {width: width, height: height, tw: 160, th: 120},
      {width: 1024, height: 768, tw: 140, th: 105},
      {width: 800, height: 600, tw: 130, th: 97},
      {width: 640, height: 480, tw: 120, th: 90},
      {width: 400, height: 300, tw: 110, th: 82},
      {width: 256, height: 192, tw: 100, th: 75},
      {width: 128, height: 96}
   ];

   for (i = 0, j = sizes.length; i < j; i++)
   {
       var query2 = request + "&width=" + sizes[i].width + "&height=" + sizes[i].height;
      var resolution = " (" + sizes[i].width + "x" + sizes[i].height + ")";

      var download = document.getElementById("download" + i);
      download.href = query2 + "&download=1";
      download.title = "Download" + resolution;

      var preview = document.getElementById("preview" + i);
      preview.href = "javascript:Popup('" + query2 + "'," + sizes[i].width + "," + sizes[i].height + ")";

      var print = document.getElementById("print" + i);
      print.href = "javascript:Print('" + query2 + "'," + sizes[i].width + "," + sizes[i].height + ")";

      if(i == 0)
      {
         var preview2 = document.getElementById("preview20");
         preview2.href = "javascript:Popup('" + query2 + "', " + sizes[i].width + ", " + sizes[i].height + ")";

         var img = document.getElementById("shot0");
         img.src = query2 + "&twidth=" + sizes[i].tw + "&theight=" + sizes[i].th;
         img.style.display = "block";
         img.title = "Preview" + resolution;
      }
   }

   ShowPreviewPanel();
}

function ProcessStatus(status)
{
   var request = "/preview/preview.php?sid=" + sid + "&token=" + token + "&watermark=" + watermark + "&text=" + text + "&quality=" + quality;

   if(status != current_status)
   {
      current_status = status;

      switch(status)
      {
         case 0:
            ShowPreviewPanel();
            DisplayStatusMessage("Waiting in queue...");
             break;

         case 1:
            StopTimers();
            HideLoaders();
            DisplayStatusMessage("Screenshot is not accessible.");
             break;

         case 2:
            ShowPreviewPanel();
            StopTimers();
            ResetImages();
            UpdateLinks();
            HideLoaders();
            ShowImages();
            DisplayStatusMessage("Your ScreenThumb is Ready!");
            break;

         case 3:
            ShowPreviewPanel();
            DisplayStatusMessage("Processing...");
             break;

         case 5:
            StopTimers();
            ResetImages();
            UpdateLinks();
            HideLoaders();
            ShowImages();
            DisplayStatusMessage("Timeout.");
             break;

         case 6:
            StopTimers();
            HideLoaders();
            DisplayStatusMessage("Invalid security code.");
            HidePreviewPanel();
            break;

         default:
            current_status = status;
            StopTimers();
            HideLoaders();
            DisplayStatusMessage("An error occured. Please make sure the URL is valid.");
      }
   }
}

function OnReceivedToken(response)
{
   if(response && response.length > 0)
   {
      var status = parseInt(response.substring(0, 1));
      if(response.length > 1) token = response.substring(1);

      ProcessStatus(status);
   }
}

function HideLoaders()
{
   var loader = document.getElementById("loader0");
   loader.style.display = "none";
   loader = document.getElementById("loader");
   loader.style.display = "none";
}

function ShowLoaders()
{
   var loader = document.getElementById("loader0");
   loader.style.display = "block";
   loader = document.getElementById("loader");
   loader.style.display = "block";
}

function ShowImages()
{
   var img = document.getElementById("shot0");
   img.style.display = "block";
}

function HideImages()
{
   var img = document.getElementById("shot0");
   img.style.display = "none";
}

function ResetImages()
{
   var img = document.getElementById("shot0");
   img.src = "/images/generating.gif";
}

function ShowPreviewPanel()
{
   var panel = document.getElementById("preview-panel");
   panel.style.display = "block";
}

function HidePreviewPanel()
{
   var panel = document.getElementById("preview-panel");
   panel.style.display = "none";
}

function GenerateScreenshot(the_sid)
{
   var the_url = document.getElementById("url");
   var the_quality = document.getElementById("quality");
   var the_size = document.getElementById("size");
   var the_watermark = document.getElementById("watermark");
   var the_text = document.getElementById("text");
   var the_width = document.getElementById("width");
   var the_height = document.getElementById("height");
   var the_answer = document.getElementById("captcha_answer");

   if(the_url.value.length <= 0)
   {
      alert("Please complete the URL field.");
      return;
   }

   if(the_url.value.length < 4)
   {
      alert("The URL must be at least 4 characters long.");
      return;
   }

   if(the_answer && the_answer.value.length <= 0)
   {
      alert("Please complete the Security Code field.");
      return;
   }

   if(the_watermark.value)
   {
      watermark = the_watermark.value;
   }
   else
   {
        watermark = "";
    }

   if(the_answer && the_answer.value)
   {
      answer = the_answer.value;
   }

   if(the_width.value > 0 && the_height.value > 0)
   {
      width = the_width.value;
      height = the_height.value;
   }
   else
   {
       var s = parseInt(the_size.value);

      switch(s)
      {
         case 6:
             width = 1024;
             height = 768;
             break;

         case 1:
            width = 128;
            height = 96;
             break;

          case 3:
             width = 400;
             height = 300;
             break;

          case 4:
             width = 640;
             height = 480;
             break;

          case 5:
             width = 800;
             height = 600;
             break;

          default:
                width = 256;
             height = 192;
      }
   }

   if(the_quality.value >= 40)
   {
      quality = the_quality.value;
   }

   if(the_text.value)
   {
      text = the_text.value;
   }

   current_status = -1;
   sid = the_sid;
   token = "";

   StopTimers();
   ResetImages();
   HideImages();
   ResetLinks();
   ShowLoaders();

   DisplayStatusMessage("Checking for screenshot availability...");
   StartTimers(30000, 1500);

   var request = "/preview/check.php?sendtoken=1&sid=" + sid + "&url=" + the_url.value + "&answer=" + answer;
   ajax.sendRequest(request, OnReceivedToken);

   var img = document.getElementById("captcha_img");
   if(img)
   {
      img.src = "/preview/captcha.php?ajax_rand=" + Math.random();
   }

   if(the_answer)
   {
      the_answer.value = "";
   }
}
