
var ajax_DF_r = make_new_ajax_request();
var ajax_DF_ss_r = make_new_ajax_request();

var DF_ajax_busy = false;

var DF_search_data = null;
var DF_page_now = null;
var DF_sort_col_index_now =null;
var DF_sort_col_desc = false;
var DF_sort_page_last = null;

var DF_timer;
//var DF_search_timer;

var max_DF_results_per_page = 5;

var showing_DF = false;

var DF_report_cues = new Array();

function clear_DF()
{  document.getElementById("DF_search_text_box").value = ''; 
   clear_DF_results_table();
}

function show_DF_intro_text()
{
   el = document.getElementById("DF_intro_text");
   el.innerHTML = 
      'Use the text box below to look up Cue Sheet Data for various tracks.<BR>'+
      'You can enter a Cue Code like this: <B>=AHCD1001_01</B><BR>' +
      'Or search for a Track Title by entering all or part of the ' + 
      'Title in quotes: <B>"Some Track"</B><BR><BR>' +
      'Then add cues from the search results to your report ' + 
      'and click \'Generate Report\'<BR><BR>';
}

function handle_DF_text_box_changed(keyCode, val) 
{
//   clearTimeout(DF_search_timer);
   if (keyCode == 13)
   {  clearTimeout(DF_timer);
      handle_DF_changed();
   }
   // character or delete key pressed; reschedule
   else if (keyCode > 40 || keyCode == 8) 
   {  clearTimeout(DF_timer);
      DF_timer = setTimeout(handle_DF_changed, 200);
   }
}

function handle_DF_changed()
{
   needs_search = false;

   DF_search_data = new Object;
   DF_search_data.attributes = new Array();
   text_in = trim(document.getElementById('DF_search_text_box').value);

   if (text_in)
   {  DF_search_data.search_text_box = text_in;
      needs_search = true;
   }

   if (DF_ajax_busy)
   {  return;
   }
   // do a 'clean' search
   if (needs_search)
   {  do_DF_search(1, null);
   }
   else
   {  clear_DF_results_table();
   }
}

function make_DF_page_link(page_num, txt)
{
   return "<A HREF=\"javascript:do_DF_search(" + page_num + "," +
      sort_col_index_now + ");\">" + txt + "</A>&nbsp;";
}

function do_DF_search(page, sort_col_index)
{
   // if we're in the midst of a search already, schedule ourselves to
   //  do the search after 1000 ms.  Also, cancel any other delayed &
   //  scheduled searchces 

//   if (DF_ajax_busy)
//   {  clearTimeout(DF_search_timer);
//      DF_search_timer = 
//         setTimeout('do_DF_search(' + page + ',' + sort_col_index + ')', 500);
//      return;
//   }
  
//   DF_ajax_busy = true;
   DF_page_now = page;

   // if this is the same page and column, then toggle the desc
   if (DF_sort_page_last == page && DF_sort_col_index_now == sort_col_index)
   {  DF_sort_col_desc = !DF_sort_col_desc;
   }
   // if it's a different sort column, reset to sort ascend
   else if (DF_sort_col_index_now != sort_col_index)
   {  DF_sort_col_desc = false;
   }
   // else, leave the sorting along

   DF_sort_col_index_now = sort_col_index;
   DF_sort_page_last = page;
//var search_retry_timer = null;

   if (!DF_search_data)
   {  return -1;
   }
   xml = "<\?xml version=\"1.0\"\?><SearchRequest>";
   xml += "<MaxResultsPerPage>" + max_DF_results_per_page +"</MaxResultsPerPage>";

   // if this is an initial search, we have no sort columns yet.  We want
   //  to search by added_date.  This is a funky case.  But bascially if
   //  sort_col_index is null, we won't tell the backend what to order by,
   //  and so it will order by its default, which is added_date
   if (DF_sort_col_index_now != null)
   {
      xml += "<SortBy>" + columns[DF_sort_col_index_now].ajax_name + "</SortBy>";
   }
   xml += "<SortDesc>" + (DF_sort_col_desc ? '1' : '0') + "</SortDesc>";
   xml += "<Page>" + page + "</Page>";
   xml += "<SkipTitleSearch>1</SkipTitleSearch>";

   if (DF_search_data.search_text_box)
   {
      xml += "<SearchTextBox>" + xml_escape(DF_search_data.search_text_box) +
         "</SearchTextBox>";
   }

   xml += "</SearchRequest>";
   xml = "xml=" + escape(xml);
   ajax_r.open("POST", "/search_backend.php", true);
   ajax_r.onreadystatechange = DF_callback;
   ajax_r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   ajax_r.send((xml));
}

function add_DF(cue_id)
{ 
   for (i = DF_report_cues.length - 1; i >= 0; i--)
   {  if (DF_report_cues[i] == cue_id)
      {  return;
      }
   }
   
   DF_report_cues.push(cue_id);
   draw_DF_report_list();
   re_enable_DF_report_generation();
}

function delete_DF(cue_id)
{ 
   for (i = DF_report_cues.length - 1; i >= 0; i--)
   {  if (DF_report_cues[i] == cue_id)
      {  DF_report_cues.splice(i, 1);
      }
   }
   draw_DF_report_list();
   re_enable_DF_report_generation();
}

function re_enable_DF_report_generation()
{
   el = document.getElementById("DF_download_message");
   el.style.display = "none";

   el = document.getElementById("DF_report_button");
   el.style.display = "inline";
}

function handle_DF_report_box_changed(keyCode, val)
{
   if (keyCode == 13)
   {  make_DF_report();  
   }
}


function draw_DF_report_list()
{  clear_DF_report_list();

   report_count = DF_report_cues.length;
   drawn = 0;
   table = document.getElementById("DF_report_table");

   out = (report_count ? report_count : "(none)");
   el = document.getElementById("DF_report_count");
   el.innerHTML = out;

   el = document.getElementById("DF_report_button");
   if (report_count)
   {
      draw_DF_results_table_title(true);
      el.disabled = false;
   }
   else
   {
      el.disabled = true;
   }

   for (i = report_count - 1; i >= 0; i--)
   {  
      cue_id = DF_report_cues[i] 
      cue = all_cue_data[cue_id];
 
      row = table.insertRow(drawn + 1);
      col = 0;

      row.className = "result_" + (drawn%2 ? "odd" : "even");
      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.width = "100";
      cell.innerHTML = cue.cue_code;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.width = 300;
      cell.innerHTML = cue.cue_title;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.width = 300;
      cell.innerHTML = cue.cue_description;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.width = 50;
      cell.innerHTML = cue.cue_length;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.valign="middle";
      cell.width = 90;

      out2 = "<A HREF=\"javascript:play_preview('" + cue_id + "');\"><img src=\"/img/speaker_" + 
         (domain_info.white_on_black_results_bin ? "light" : "dark") + ".gif\"" + 
         " style=\"border-style:none;\" ALIGN=\"ABSMIDDLE\"></A>&nbsp;&nbsp;";

      out2 += "&nbsp;<A class=\"mainTextTable\" HREF=\"javascript:delete_DF(" + cue_id + ")\">Remove</A>";
      cell.innerHTML = out2;
      drawn++;
   }
}

function clear_DF_report()
{  
   el = document.getElementById("DF_report_name");
   el.value = "";

   re_enable_DF_report_generation();
   DF_report_cues = new Array();
   clear_DF_report_list();
   draw_DF_report_list();
}

function clear_DF_results_table()
{
   document.getElementById("DF_search_count").innerHTML = '';
   document.getElementById("DF_page_picker_bottom").innerHTML = '';

   table = document.getElementById("DF_results_table");
   row_count = table.rows.length;

   for (i = row_count; i > 0; i--)
   {  table.deleteRow(0);
   }
}

function clear_DF_report_list()
{
   table = document.getElementById("DF_report_table");
   row_count = table.rows.length;

   for (i = row_count; i > 0; i--)
   {  table.deleteRow(0);
   }
}


function show_data_find(show)
{  
   el = document.getElementById("data_find_section_top");
   if (el == null)
   {  return;
   }
   el.style.display = (show ? "block" : "none");

   el = document.getElementById("data_find_section_middle");
   if (el == null)
   {  return;
   }
   el.style.display = (show ? "block" : "none");

   el = document.getElementById("data_find_section_bottom");
   if (el == null)
   {  return;
   }
   el.style.display = (show ? "block" : "none");

   // needed?
   showing_DF = show;

   if (show != true)
   {  // all done now 
      clear_preview();
      return;
   }

   update_breadcrumb("DATA_FIND", false);

   clear_preview();
   show_login(false);
   show_cart(false);
   show_my_bins(false); 
   show_bin(false, 0); 
   show_info_request(false, 0);
   show_order_summary(false, null);
   show_search(false);
   show_search_form(false);
   show_share(false, null);
   update_cart_status_line();
   show_register(false, null);
   if (standalone)
   {  show_prefs(false);
      show_updater(false);
   }
   show_new_releases(false);
   show_cue_sheets(false);

   show_DF_intro_text();
   draw_DF_report_list();
}

function draw_DF_results_table_title(report_section)
{
   table = document.getElementById(
      report_section ? "DF_report_table" : "DF_results_table");

   row = table.insertRow(0);
   row.className = "result_title";
   for (i = 0; i < columns.length; i++)
   {
      cell = row.insertCell(i);

      if (report_section)
      {
         cell.innerHTML = '<B><span class="mainTextTableHeader">' + 
            columns[i].pretty_name + '&nbsp;</span></B>';
      }
      else
      {
         cell.innerHTML = '<B>' +
            '<A class="mainTextTableHeader" HREF="javascript:'+
            'do_DF_search(' + page_now + ',' + i + ');">' +
            columns[i].pretty_name + '</B>' + "</A>&nbsp;";
      }
   }
   cell = row.insertCell(i);
   cell.innerHTML = ''; //Preview

}

function standalone_data_find_callback(filename)
{
   if (filename == null)
   {  return; // cancel
   }
   if (filename == "")
   {  showAlert("Please enter in a report file name");
      return;
   }
   submit_make_report_request(filename);
}

function make_DF_report()
{
   if (DF_report_cues.length < 1)
   {  showAlert("Please add at least one cue to your report first");  
      return;
   }

   if (!standalone)
   {
      el = document.getElementById("DF_report_name");
      report_name = trim(el.value);

      if (!report_name)
      {  showAlert("Please enter in a report name");
         return;
      }

      if (report_name.length > 20)
      {  showAlert("Please enter a report name with 20 characters or less");
         return;
      }

      el = document.getElementById("DF_report_button");
      el.style.display = "none";

      el = document.getElementById("DF_progress_indicator");
      el.style.display = "inline";

   //   el = document.getElementById("DF_download_message");
   //   el.innerHTML = "Please wait for your download...a link will appear when ready<BR>Please do not navigate away from this page.<BR>";
      submit_make_report_request(report_name);
   }
   else
   {
      get_dir_callback = standalone_data_find_callback;

showAlert("FIX ME! USE NEW BROWSER");

   }
}


function submit_make_report_request(report_name)
{
   xml  = "<\?xml version=\"1.0\"\?><DownloadRequest>";
   xml += "<LicenseMode>DATAF</LicenseMode>";

   xml += "<ReportName>" + xml_escape(report_name) + "</ReportName>";

   for (i = 0; i < DF_report_cues.length; i++)
   {  xml += "<CueID>" + DF_report_cues[i] + "</CueID>";
   }
   xml += "</DownloadRequest>";
   xml = "xml=" + escape(xml);

   ajax_DF_ss_r.open("POST", "/download_backend.php", true);
   ajax_DF_ss_r.onreadystatechange = DF_ready_callback;
   ajax_DF_ss_r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   ajax_DF_ss_r.send(xml);
}

function DF_ready_callback()
{
   if (ajax_DF_ss_r.readyState == 4) {
      if (ajax_DF_ss_r.status == 200) {
         var d = ajax_DF_ss_r.responseXML;
         node = d.getElementsByTagName('Result')[0];
         if (node)
         {  if (node.childNodes[0].nodeValue == 'Success')
            {
               node = d.getElementsByTagName('URL')[0];
               url = node.childNodes[0].nodeValue;
   
               el = document.getElementById("DF_progress_indicator");
               el.style.display = "none";

               el = document.getElementById("DF_download_message");
               if (!standalone)
               {  el.innerHTML = '<A HREF="/' + url +
                     '">Click here to download your report<BR></A>';
               }
               else
               {  el.innerHTML = 'Your report has been created and saved';
               }
               el.style.display = "inline";
            }
            else
            {  err_msg = "???";
               node = d.getElementsByTagName('Error')[0];
               if (node)
               {  error_msg = node.childNodes[0].nodeValue;
               }
               showAlert('Sorry, something went wrong with the download:' +
                  error_msg);
               re_enable_DF_report_generation();
            }
         }
      }
   }
}

function DF_callback()
{  
   if (ajax_r.readyState == 4) {
      if (ajax_r.status == 200) {

         // Get the response from the server - conveniently already
         //  as an XML tree (requires some subtle header settings in 
         //  the server script
         var d = ajax_r.responseXML;
         node = d.getElementsByTagName('TotalTitleCount')[0];
         count = 0;
         if (node)
         {  count = Number(node.childNodes[0].nodeValue);
         }
  /* 
         show_search(true);
         show_search_form(true);
  */
         search_string = null;
         node = d.getElementsByTagName('SearchDescrip')[0];
         if (node && node.childNodes[0])
         {  search_string = node.childNodes[0].nodeValue;
         }

         node = d.getElementsByTagName('SearchWarning')[0];

         el = document.getElementById("DF_search_warning");   
         if (node)
         {  search_warning = node.childNodes[0].nodeValue;
            el.innerHTML = search_warning;
         }
         else
         {  el.innerHTML = "";
         }

      if (count)
      {  
         out = "Found " + count + " possible matches";
         if (search_string)
         {  out += " for <B>" + search_string + "</B>";
         }
         clear_DF_results_table();
         draw_DF_results_table_title(false);

         node = d.getElementsByTagName('Page')[0];

      // get the page number we are currently showing.  if we don't cast
      //  this as a number we get into trouble as we do arithmetic on it
      //  below in drawing the page links
         if (node)
         {  page_num = Number(node.childNodes[0].nodeValue);
         }
         
         if (Number(count) > Number(max_DF_results_per_page))
         {  first = 1 + ((page_num - 1)*max_DF_results_per_page);
            last = count - first > max_DF_results_per_page ? 
               page_num*max_DF_results_per_page : count; 
            out += " - showing results " + first + " to " + last;
         }

      // how many pages total do we have?
         last_page = Math.ceil(count / (max_DF_results_per_page));


      // the var where we prep what we're going to dump out the page links
         page_pick_out = "";

         if (last_page > 1)
         {
            first_page_link = (page_num - Math.round(max_page_links_to_draw/2) + 
               max_page_links_to_draw % 2);
            if (first_page_link < 1)
            {  first_page_link = 1;
            }

            last_page_link = (first_page_link + max_page_links_to_draw - 1);
            if (last_page_link > last_page)
            {  last_page_link = last_page;
            }
            if (first_page_link > 1)
            {  page_pick_out += make_DF_page_link(1, "(first)") +"&nbsp;";
               left = Math.max(1, page_num - max_page_links_to_draw);
               page_pick_out += make_DF_page_link(left, "&lt;&lt;") +"&nbsp;";
            }
      // previous page link            
            if (page_num > 1)
            {  page_pick_out += make_DF_page_link(page_num - 1, "&lt;") +"&nbsp;";
            }
            for (i = first_page_link; i <= last_page_link; i++)
            {  if (i > first_page_link) 
               {  page_pick_out += " ";
               }
               if (i == page_num)
               {  page_pick_out += "<B>" + i + "</B>";
               }
               else
               {  page_pick_out += make_DF_page_link(i, i);
               }
               page_pick_out += "&nbsp;";
            }
      // previous page link            
            if (page_num < last_page)
            {  page_pick_out += make_DF_page_link((page_num + 1), '&gt;') + 
                  '&nbsp';
            }
            if (last_page_link < last_page)
            {  right = Math.min(last_page, page_num + max_page_links_to_draw);
               page_pick_out += make_DF_page_link(right, '&gt;&gt;') + 
                  "&nbsp;";
               page_pick_out += make_DF_page_link(last_page, '(last)');
            }            
         }
      // find the elemend where we draw our page links
         page_el = document.getElementById("DF_page_picker_bottom");
         page_el.innerHTML = page_pick_out;

      // now draw the results in a table
         table = document.getElementById("DF_results_table");
         items = d.getElementsByTagName('Item');

         if (items.length > 0)
         {  
            for (i = 0; i < items.length; i++)
            {  //title = items[i].getElementsByTagName("CueTitle").textContent;
               row = table.insertRow(i + 1);
               col = 0;

               row.className = "result_" + (i%2 ? "odd" : "even");
               cat_id = XML_val(items[i], "CatalogID");
               cell = row.insertCell(col++);
               cell.className = "mainTextTable";
               cell.width = "100";
               cell.innerHTML = cat_id;

               cue_title = XML_val(items[i], "CueTitle");
               if (!cue_title)
               {  cue_title = "-";
               }

               cell = row.insertCell(col++);
               cell.className = "mainTextTable";
               cell.width = 225;
               cell.style.padding = "1px 5px 1px 0px";
               cell.innerHTML = cue_title;

               album_title = XML_val(items[i], "AlbumTitle");
               if (!album_title)
               {  album_title = "-";
               }

               composer = XML_val(items[i], "Composer");
               if (!composer)
               {  composer = "";
               }

               publisher = XML_val(items[i], "Publisher");
               if (!publisher)
               {  publisher = "";
               }

               cue_description = XML_val(items[i], "CueDescription");
               if (!cue_description)
               {  cue_description = "-";
               }

               cell = row.insertCell(col++);
               cell.className = "mainTextTable";
               cell.width = 375;
               cell.style.padding = "1px 5px 1px 0px";
               cell.innerHTML = cue_description;

               cue_length = XML_val(items[i], "Length");
               cell = row.insertCell(col++);
               cell.className = "mainTextTable";
               cell.width = 50;
               cell.innerHTML = cue_length;

               cue_id= XML_val(items[i], "CueKey");
               preview_id = XML_val(items[i], "PreviewCode");
               cell = row.insertCell(col++);
               cell.className = "mainTextTable";
               cell.valign="middle";
               cell.width = 90;

	            this_row = new Object();
               this_row.el = row;
               this_row.cue_id = cue_id;
               this_row.cue_code = cat_id;
               this_row.cue_title = cue_title;
               this_row.cue_length = cue_length;
               this_row.disc_title = album_title;
               this_row.cue_description = cue_description;
               this_row.preview_id = preview_id;
               this_row.composer = composer;
               this_row.publisher = publisher;

               all_cue_data[cue_id] = this_row;

               out2 = "<A HREF=\"javascript:play_preview_mini('" + cue_id + "');\"><img src=\"/img/speaker_" + 
               (domain_info.white_on_black_results_bin ? "light" : "dark") + ".gif\"" + 
               " style=\"border-style:none;\" ALIGN=\"ABSMIDDLE\"></A>&nbsp;&nbsp;";


               out2 += "&nbsp;<A class=\"mainTextTable\" HREF=\"javascript:add_DF(" + cue_id + ")\">Add</A>";

               cell.innerHTML = out2;
            }
         }
         
      }
      else if (count == 0)
      {  if (search_string)
         {  out = "Found no results for <B>" + search_string + "</B>";
         }
         else
         {  out = "Found no results";
         }
         clear_DF_results_table();
      } 
      else if (count == -1)
      {  out = "SEARCH ERROR";
      }
//      DF_ajax_busy = false;
   }


  el = document.getElementById("DF_search_count");   
  el.innerHTML = out;
      
   }
}






