// include our JavaScript stuff for Ajax
// the ajaxml object we need to make our calls

// need way to keep track things already added to a cart!

var ajax_cart_r = make_new_ajax_request();
var cart_timeout;
var ajax_cart_busy = false;
var cart_rows = null;

var showing_cart = false;
var needs_clearance = true;

function cart_clear_callback_lite()
{
   if (ajax_cart_r.readyState == 4) {
      if (ajax_cart_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_cart_r.responseXML;
         node = d.getElementsByTagName('Result')[0];
         if (node)
         {  if (node.childNodes[0].nodeValue == 'Success')
            {  
               node = d.getElementsByTagName('Mode')[0];
               mode = node.childNodes[0].nodeValue;
               if (mode == 'Clear')
               {  
                  cart_order = new Array();             
                  update_login_bar();
                  reset_cart_icons();
                  clear_cart_table();
               }
            }
            else
            {  showAlert('Something unexpected has gone wrong');
            }
         }
      }       
   }
}

function cart_add_callback()
{
   if (ajax_cart_r.readyState == 4) {
      if (ajax_cart_r.status == 200) {
         // Get the response from the server - conveniently already
         //  as an XML tree (requires some subtle header settings in 
         //  the server script
         ajax_cart_busy = false;
         clearTimeout(cart_timeout);
         var d = ajax_cart_r.responseXML;
         node = d.getElementsByTagName('Result')[0];
         if (node)
         {  if (node.childNodes[0].nodeValue == 'Success')
            {  
               node = d.getElementsByTagName('Mode')[0];
               mode = node.childNodes[0].nodeValue;
               if (mode == 'Clear')
               {  
                  clear_cart_table();
                  cart_order = new Array();             
                  reset_cart_icons();
                  jump_to_last_breadcrumb();
               }
               else
               {
                  cue_id = d.getElementsByTagName('ItemID')[0].
                     childNodes[0].nodeValue;
                  cart_count = d.getElementsByTagName('CartCount')[0].
                     childNodes[0].nodeValue;

                  icon = document.getElementById("cart_" + cue_id);
                  if (mode == 'Add')
                  {  if (icon) {  
                        icon.src = "/img/cart_full_" +
                           (domain_info.white_on_black_results_bin ? "light" : "dark") 
                           + ".gif";
                     }
                  }
                  else
                  {  
            // ugly way to remove something from the cart order
                     c_t = cart_order;
                     cart_order = new Array();
                     for (i = 0; i < c_t.length; i++)
                     {  if (c_t[i] != cue_id)
                        {  cart_order.push(c_t[i]);
                        }
                     }
                     if (icon)
                     {
                        icon.src = "/img/cart_empty_" +
                           (domain_info.white_on_black_results_bin ? "light" : "dark") 
                           + ".gif";
                     }
                     if (cart_rows && cart_rows[cue_id] != undefined)
                     {  
                        table = document.getElementById("cart_table");
                        if (table != undefined)
                        {  table.deleteRow(cart_rows[cue_id].rowIndex);
                        }
                        delete cart_rows[cue_id];
                     }
                  }
               }
               update_cart_status_line();
               if (showing_cart)
               {  show_cart(true);
               }
            }
            else
            {  node = d.getElementsByTagName('Error')[0];
               err = node.childNodes[0].nodeValue;
               showAlert('Something unexpected has gone wrong' + err);
            }
         }
      }       
   }
}

function reset_cart_icons()
{  if (cart_rows)
   {  for(cue_id in cart_rows)
      {  icon = document.getElementById("cart_" + cue_id);
         if (icon)
         {  
            icon.src = "/img/cart_empty_" +
               (domain_info.white_on_black_results_bin ? "light" : "dark") 
               + ".gif";
}  }  }  }

function handle_clear_cart(fire_and_forget)
{  
   if (!standalone && (!user || user.is_guest))
   {  return;
   }

   xml = "<\?xml version=\"1.0\"\?><CartRequest>";
   xml += "<Mode>Clear</Mode>";
   xml += "</CartRequest>";
   xml = "xml=" + escape(xml);

   ajax_cart_r.open("POST", "/cart_backend.php", true);
   if (fire_and_forget)
   {  ajax_cart_r.onreadystatechange = cart_clear_callback_lite;
   }
   else
   {  ajax_cart_r.onreadystatechange = cart_add_callback;
   }
   ajax_cart_r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   ajax_cart_r.send(xml);
}

function clear_cart_table()
{
   table = document.getElementById("cart_table");
   row_count = table.rows.length;

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

function clear_export_status()
{
   var el = document.getElementById("export_status");
   last_export_status_el = null;
   removeChildren(el);
}

var last_export_status_el = null;

function add_export_status(t, append)
{
   var el = document.getElementById("export_status");
  
   if (!append || last_export_status_el == null)
   {  last_export_status_el = document.createElement('DIV');
      last_export_status_el.innerHTML = t;
      el.appendChild(last_export_status_el);
   }
   else
   {  last_export_status_el.innerHTML = last_export_status_el.innerHTML + t;
   }
}


function show_cart(show)
{  
   showing_cart = show;
   table = document.getElementById("cart_section");
   if (!table)
   {  return;
   }
   table.style.display = (show ? "block" : "none"); 
   if (!show)
   {  return;
   }
   update_breadcrumb("CART", false);  

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

   clear_cart_table();
   table = document.getElementById("cart_table");
   cart_rows = new Array();

   el = document.getElementById("intro_text");
   el.innerHTML = '';

   col = 0;
   row = table.insertRow(0);
   row.className = "result_title";
   cell = row.insertCell(col++);
   cell.className = "mainTextTableHeader";
   cell.innerHTML = "";

   cell = row.insertCell(col++);
   cell.className = "mainTextTableHeader";
   cell.innerHTML = "<B>Cue Code</B>";

   cell = row.insertCell(col++);
   cell.className = "mainTextTableHeader";
   cell.innerHTML = "<B>Cue Title</B>";

   cell = row.insertCell(col++);
   cell.className = "mainTextTableHeader";
   cell.innerHTML = "<B>Length</B>";

   cell = row.insertCell(col++);
   cell.className = "mainTextTableHeader";
   cell.innerHTML = "";

   i = 1;
   any_drawn = false;
   // we go out of our way to have an array just for cart order,
   //  because safari doesn't give back assoc arrays in the order you
   //  put them in (but FF does)
   for (j = 0; j < cart_order.length; j++)
   {  a = cart_order[j];
      c = all_cue_data[a]; 
      row = table.insertRow(i);
      row.className = "result_" + (j%2 ? "odd" : "even");  
      col = 0;
      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.innerHTML = '<A class="mainTextTable" HREF="javascript:add_to_cart(' + a + ');">Remove</A>';

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.innerHTML = c.cue_code;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.innerHTML = c.cue_title;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.innerHTML = c.cue_length;

      cell = row.insertCell(col++);
      cell.className = "mainTextTable";
      cell.style.vAlign="middle";
      cell.style.align="center";
      cell.innerHTML = "<A HREF=\"javascript:play_preview_mini(" + a + ");\"><img src=\"/img/speaker_" +
               (domain_info.white_on_black_results_bin ? "light" : "dark") + ".gif\"" +
         " style=\"border-style:none;\"></A>&nbsp;&nbsp;"

      if (!search_only)
      {
         popup_control = document.createElement('img');
         button_id = "cart_button_" + c.cue_id;
         popup_control.setAttribute('id', button_id);
         popup_control.style.cursor = "pointer";
         popup_control.src = '/img/gear_' +
            (domain_info.white_on_black_results_bin ? "light" : "dark") +".gif";
         popup_control.cue_id = c.cue_id;
         popup_control.onclick = show_gear_menu;
         cell.appendChild(popup_control);
      }

//<A HREF=\"javascript:show_info_request(true, " + a + ");\"><img src=\"/img/info.gif\" style=\"border-style:none;\"></A>";

   // store up so I can easily delete a row later
      cart_rows[a] = row;
      any_drawn = true;
      i++;
   }
   if (!any_drawn)
   {  col = 0;
      row = table.insertRow(i);
      row.className = "mainTextTable result_even";
      cell = row.insertCell(col++);
      cell.innerHTML = "<center>(Your cart is empty)</center>";
      cell.colSpan = "5";
   }
   update_cart_status_line();
}

function handle_share_cart() 
{ 
   cues = new Array();
   for (j = 0; j < cart_order.length; j++)
   {  cues.push(cart_order[j]);
   }

   if (cues.length <= 0)
   {  showAlert('You must have at least one cue in your cart to share');
      return;
   }

   show_share(true, cues);  
}

function draw_cart_in_table()
{
   update_preview_cart();

   var el = document.getElementById("cart_in_table");
   if (el)
   {
      cart_count = 0;

      // this counting business is needed b/c I wanted to use a JS associative
      //  array, and there is no direct way to count an assoc array
      if (standalone || !user.is_share_guest)
      {  cart_count = cart_order.length;
      }

      var out;
      if (cart_count)
      {
      out = '<A class="mainTextTableHeader" HREF="javascript:show_cart(true);">';
      out += /*'<IMG align="absmiddle" style="border:0" SRC="/img/cart_full_' +
               (domain_info.white_on_black ? "light" : "dark") 
               + '.gif">' +*/
               '&lt;' + cart_count + '&gt;';
      out += '</A>';
      }
      else
      {
      out = /*'<IMG align="absmiddle" style="border:0" SRC="/img/cart_empty_' +
               (domain_info.white_on_black ? "light" : "dark") 
               + '.gif">' + */
               '&lt;0&gt;';

      }
      el.innerHTML = out;
   }
   el = document.getElementById("cart_in_preview");
   if (el)
   {  
      if (cart_count)
      {
      out= '<A HREF="javascript:show_cart(true);">';
      out+= '<IMG align="absmiddle" style="border:0" SRC="/img/cart_full_' +
               (domain_info.white_on_black ? "light" : "dark") 
               + '.gif"> Items in cart: ' +
               '&lt;' + cart_count + '&gt;';
      out += '</A>';
      }
      else
      {
      out = '<IMG align="absmiddle" style="border:0" SRC="/img/cart_empty_' +
               (domain_info.white_on_black ? "light" : "dark") 
               + '.gif"> Items in cart: ' + 
               '&lt;0&gt;';
      }
      el.innerHTML = out;
   }
}

function update_cart_status_line()
{  if (!standalone && user.is_share_guest)
   {  return;
   }

   // update the cart in the preview
// last_preview_cue_id;

   cart_count = 0;
   bin_count = 0;
   // this counting business is needed b/c I wanted to use a JS associative
   //  array, and there is no direct way to count an assoc array
   if (standalone || !user.is_share_guest)
   {  cart_count = cart_order.length;

      for (var a in bin_data)
      {  if (bin_data[a])
         {  bin_count++;
         }
      }
   }
   draw_cart_in_table();


   el = document.getElementById("my_bins_link");
   out = '<TABLE class="minimal_table">';
   out += '<TR valign=middle>';
   if (!search_only)
   {  out += '<TD><A class="loginBarText" HREF="javascript:unhide_search_results(true);">' + mk_button("SEARCH") + '</A></TD>';
   }
   if (standalone || (user.is_annual && bin_count && !search_only))
   {  out += '<TD><A border=0 HREF="javascript:show_my_bins(true);">' +
         mk_button("MY BINS") + '</A></TD>';
   }
   if (!standalone && !search_only)
   {  out += '<TD><A class="loginBarText" HREF="javascript:show_data_find(true);">' +
         mk_button("COMP/PUB INFO") + '</A></TD>';
   }
  
   if (!disable_cue_sheets && (standalone || (user.is_annual && !search_only)))
   { 
      out += '<TD><A class="loginBarText" HREF="javascript:show_cue_sheets(true);">' +
         mk_button("CUE SHEETS (beta)") + '</A></TD>';
   }
   out += "</TR></TABLE>";
   el.innerHTML = out;

   out = '';

   el = document.getElementById("cart_status");

   // only annual users get to mess with bins
   if (showing_cart && (standalone || user.is_annual) && cart_count)
   {  el2 = document.getElementById("cart_pulldown");

      out2 = '<select class="pickerUnpicked textBoxBackground" id="add_to_bin_picker" ' + 
         'onchange="handleAddCartToBin();">';
      out2 += '<option value="">Add items in cart to bin...</Option>';
      out2 += '<option value="">&nbsp;&nbsp;(new bin)</Option>';
      for (var b in bin_data)
      {
         out2 += '<option value="'+b+'">&nbsp;&nbsp;' + 
            bin_data[b].bin_name + '</Option>';
      }
      out2 += '</select>';
      el2.innerHTML = out2;
   }

   if (showing_login == false && showing_DF == false)
   { /*
      if (cart_count)
      {
         if (!showing_cart) 
         {  out += '<A HREF="javascript:show_cart(true);">';
            out += '<IMG style="border:0" SRC="/img/cart_empty_' +
                     (domain_info.white_on_black ? "light" : "dark") 
                     + '.gif">' +
                     '&nbsp;Items in Cart: ' + cart_count;
            out += '</A>';
         }
      }
      else
      {  out += '<IMG style="border:0" SRC="/img/cart_empty_' +
                  (domain_info.white_on_black ? "light" : "dark") 
                  + '.gif">&nbsp;Items in Cart: 0';
      }
      */
   } 
   el.innerHTML = out;
   update_login_bar(); // to draw the cart count there too
}

function get_cart_link(cue_id, row)
{  cart_added = is_in_cart(cue_id);
   return "<A HREF=\"javascript:add_to_cart(" + cue_id + ");" + 
      "\"><img id=\"cart_" +cue_id + "\" src=\"/img/" + (cart_added ? 
      "cart_full_" : "cart_empty_") + 
      (domain_info.white_on_black_results_bin ? "light" : "dark") 
      + '.gif" ' +
      "style=\"border-style:none;\"></A>";
}

function is_in_cart(cue_id)
{
   for (j = 0; j < cart_order.length; j++)
   {  if (cart_order[j] == cue_id) 
      {  return true;  
      } 
   }
    
   return false;
}

function handle_clearances()
{
   show_needledrop(true);
}

function handle_cart_download()
{
   cues_to_download = new Array();
   for (j = 0; j < cart_order.length; j++)
   {  cues_to_download.push(cart_order[j]);
   }

   if (cues_to_download.length <= 0)
   {  showAlert('You must have at least one cue in your cart to start a download');
      return;
   }

   if (standalone)
   {  if (start_export(cues_to_download))
      {  jump_to_last_breadcrumb();
      }
   } 
   else
   {  show_order_summary(true, cues_to_download);
   }
}


function add_to_cart(cue_id)
{ 
   if (!standalone)
   {
      if (!user || user.is_guest)
      {  show_login(true, cue_id);
         return;
      }
      if (needs_clearance)
      {  if (user.is_annual)
         {  needs_clearance = false;
         }
         else
         {  handle_clearances();
         }
      }
   }
   is_add = !is_in_cart(cue_id);
   if (is_add)
   {
      cue_data = all_cue_data[cue_id];
      c = new Object();
      c.is_pending_cart = 1;
      cart_order.push(cue_id);
   }
   if (ajax_cart_busy)
   {  return;
   }

   ajax_cart_busy = true;

   // just in case the ajax doesn't come back or something screws up,
   //  give up waiting for the timeout after 3 secs
   cart_timeout = setTimeout("ajax_cart_busy = false;", 3000);
   xml = "<\?xml version=\"1.0\"\?><CartRequest>";
   xml += "<Mode>" + (is_add ? "Add" : "Remove") + "</Mode>";
   xml += "<ItemID>" + cue_id + "</ItemID>";
   xml += "</CartRequest>";
   xml = "xml=" + escape(xml);

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

