//languages
var lniBadURL = "Invalid YouTube video URL!";
var lniParsing = "Parsing the video URL...";
var lniSaving = "If not turn to download in 5 seconds, please right click on the link and select menu \"Save target as\", then fill with name \"get_video.flv\"<br>";
var lniSubmitting = "Submitting the request...";
var lniTaskOK = "Your request has been submitted, when the conversion is completed, a download link will be sent to you via email. Thanks!";
var lniTaskFailed = "I'm sorry, the task is not submitted because of ";
var lniDontSubAgain = "Please don't submit this task again.";

function ConvertAPI(api_root)
{
   var m_api_root = api_root;
   var m_types = new Array();
   var m_this = this;

   this.getTypes = function()
   {
     return m_types;
   } 

   this.loadTypes = function(fcallback)
   {
     var url = m_api_root + "?action=types" + "&rnd=" + Math.random();
     $.get(url, 

        function(data) {
           var arr = data.split("\r\n");
           for(var i=0; i<(arr.length-1)/2; ++i) {
              m_types[m_types.length] = new Array(arr[2*i], arr[2*i+1]);             
           }
           if (fcallback != undefined && fcallback != null) {
             fcallback(m_this, m_types);
           }
        }
     );
   }

   this.parseURL = function(url, fcallback) 
   {
     var api_url = m_api_root + "?action=parse_url&url=" + escape(url) + "&rnd=" + Math.random();
     $.get(api_url, 
        function(data) {
           if (fcallback != undefined && fcallback != null) {
             fcallback(m_this, data);
           }
        }
     );
   }  

   this.submitTask = function(email, urls, cvt_type, fOnOK, fOnFailed) 
   {
     var api_url = m_api_root + "?action=submit_task" + "&rnd=" + Math.random();
     $.post(api_url, {email: email, urls: urls, type: cvt_type}, 
           function(data) {
              var arr = data.split("\r\n");
              if (arr[0] == "OK") {
                if (fOnOK != undefined && fOnOK != null) {
                   fOnOK(m_this, arr[1]);
                }
              } else if (arr[0] == "BADURL") {
                if (fOnFailed != undefined && fOnFailed != null) {                                      
                   fOnFailed(m_this, arr[1], arr.slice(2, arr.length-1));
                }
              } else {
                  fOnFailed(m_this, arr[1]);  
              }
           }
     );
   }  
}

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}


function ConvertUI(cu, api_root)
{
  var m_ConvertUnit = cu;  
  var m_API = new ConvertAPI(api_root);

  m_API.loadTypes( function(sender, types) {
                      var html = "<select name=\"type\" id=\"type\" class=\"type\" style=\"width:100%\">";
                      for(var i=0; i<types.length; ++i) {
                          html += "<option value=\"" + escapeHTML(types[i][0]) + "\">" + escapeHTML(types[i][1]) + "</option>";
                      }
                      html += "</select>";
                      $("div",  m_ConvertUnit).filter(".types").html(html);
                      m_Type = $("select", m_ConvertUnit).filter(".type");
                   }
  );

  var m_Email = $("input", m_ConvertUnit).filter(".email");
  if ($.cookie("convertdirect_email") != undefined) {
     m_Email.val($.cookie("convertdirect_email"));
  } 
  var m_URLs = $("input", m_ConvertUnit).filter(".urls");
  var m_MessagePanel = $("div", m_ConvertUnit).filter(".message_panel");
  var m_Type = $("select", m_ConvertUnit).filter(".type");
  var m_btnDownloadFLV = $("input", m_ConvertUnit).filter(".download_flv");
  var m_btnSubmitTask = $("input", m_ConvertUnit).filter(".submit_conversion");
  var m_OldURLs = '';
  var m_OldType = '';

  function ShowURL(sender, url) 
  {
       if (url == undefined || url == "") {
          m_MessagePanel.html(lniBadURL);
          m_btnDownloadFLV.removeAttr("disabled");
       } else if (url == "parsing") {
          m_btnDownloadFLV.attr("disabled", "true");
          m_MessagePanel.html("<img src=\"images/loading.gif\" />" + lniParsing);
       } else if (url == "submitting") {
          m_btnSubmitTask.attr("disabled", "true");
          m_MessagePanel.html("<img src=\"images/loading.gif\" />" + lniSubmitting);
       } else {
          m_btnDownloadFLV.removeAttr("disabled");
          m_MessagePanel.html(lniSaving + "<a href=\"" + url + "\">" + url + "</a>" + "<iframe style=\"width: 1px; height: 1px\" src=\"" + url + "\"></iframe>");
       } 
  }

  function OnTaskOK(sender, taskNo)
  {
    m_MessagePanel.html(lniTaskOK);
    m_btnSubmitTask.removeAttr("disabled");
    window.alert(lniTaskOK);
    location.reload();
  }

  function OnTaskFailed(sender, msg, bad_urls)
  {
    m_OldURLs = '';
    m_OldType = '';
    m_MessagePanel.html(lniTaskFailed + "\`" + msg + "`");
    m_btnSubmitTask.removeAttr("disabled");
    window.alert(lniTaskFailed + "\`" + msg + "`");
  }

  m_btnDownloadFLV.bind("click", 
     function(e) {
       ShowURL(undefined, "parsing");           
       m_API.parseURL(m_URLs.val(), ShowURL);
     }
  );

 m_btnSubmitTask.bind("click", 
     function(e) {
       if (m_OldURLs == m_URLs.val() && m_OldType == m_Type.val()) {
          window.alert(lniDontSubAgain);
          return;
       }
       m_OldURLs = m_URLs.val();
       m_OldType = m_Type.val();
       ShowURL(undefined, "submitting");        
       m_API.submitTask(m_Email.val(), m_URLs.val(), m_Type.val(), OnTaskOK, OnTaskFailed); 
     }
  );

 m_Email.bind("blur", function() {$.cookie("convertdirect_email", m_Email.val(), { expires: 7, path: '/'});});

}
