
var ajax_register_r = make_new_ajax_request();
var user_tmp = null;

function handle_country_change()
{  
   el = document.getElementById("country_box");
   el_prov  = document.getElementById("province_box");

   is_us = (el.value == "US");

   el_state = document.getElementById("state_row");
   el_prov  = document.getElementById("province_row");
   el_state.style.display = (is_us ? "" : "none");
   el_prov.style.display = (!is_us ? "" : "none");
}

function process_registration(admin_mode)
{  
   clear_errors();
   form_ok = true;

   var first = trim(document.getElementById("first_box").value);
   var el = document.getElementById("first_error");
   if (first  == "")
   {  el.innerHTML = "Please enter a first name";
      form_ok = false;
   }

   var last = trim(document.getElementById("last_box").value);
   el = document.getElementById("last_error");
   if (last  == "")
   {  el.innerHTML = "Please enter a last name";
      form_ok = false;
   }  

   var company = trim(document.getElementById("company_box").value);

   el = document.getElementById("company_error");
   if (company == "")
   {  el.innerHTML = "Please enter a company";
      form_ok = false;
   }

   var country = trim(document.getElementById("country_box").value);

   var address = trim(document.getElementById("address_box").value);
   el = document.getElementById("address_error");
   if (address == "")
   {  el.innerHTML = "Please enter your address";
      form_ok = false;
   }

   var city = trim(document.getElementById("city_box").value);
   el = document.getElementById("city_error");
   if (city == "")
   {  el.innerHTML = "Please enter a city";
      form_ok = false;
   }

   var state = "";
   if (country != 'US')
   {
      state = trim(document.getElementById("province_box").value);
      el = document.getElementById("province_error");
      if (state == "")
      {  el.innerHTML = "Please enter a province";
         form_ok = false;
      }
   }
   else
   {
      state = trim(document.getElementById("state_box").value);
      el = document.getElementById("state_error");
      if (state == "--")
      {  el.innerHTML = "Please choose your state";
         form_ok = false;
      }
   }
   
   var zip = trim(document.getElementById("zip_box").value);
   el = document.getElementById("zip_error");
   if (zip == "")
   {  el.innerHTML = "Please enter your zip / postal code";
      form_ok = false;
   }

   var phone = trim(document.getElementById("phone_box").value);
   el = document.getElementById("phone_error");
   if (phone == "")
   {  el.innerHTML = "Please enter your phone number";
      form_ok = false;
   }

   var fax = trim(document.getElementById("fax_box").value);

   var email = trim(document.getElementById("email_box").value);
   el = document.getElementById("email_error");
   if (email == "")
   {  el.innerHTML = "Please enter your email address";
      form_ok = false;
   }
   else if (!isValidEmail(email) && !admin_mode)
   {  el.innerHTML = "Please enter a valid email address";
      form_ok = false;
   }

   var skip_password = false;


   var password = trim(document.getElementById("password_box").value);
   var confirmed = trim(document.getElementById("confirm_box").value);

   var radios = document.getElementsByName("file_naming_mode_box");

   var file_naming_mode = null;
   for (var i = 0; i < radios.length; i++)
   {  if (radios[i].checked)
      {  file_naming_mode = trim(radios[i].value);
         break;
      }
   }
   var el_fnm = document.getElementById("file_naming_error");
   if (file_naming_mode == null)
   {  el_fnm.innerHTML = "Please choose a file naming mode";
      form_ok = false;
   }
   else
   {  el_fnm.innerHTML = "";
   }


   var el_p = document.getElementById("password_error");
   var el_c = document.getElementById("confirm_error");
   if (password == "")
   {  if (register_form_mode != "user_edit")
      {  el_p.innerHTML = "Please choose a password";
         form_ok = false;
      }
      else
      {  skip_password = true;
      }
   }
   else if (!skip_password && password != confirmed)
   {  el_c.innerHTML = "Confirm password does not match";
      form_ok = false;
   }
   
   if (register_form_mode == "admin_edit" || register_form_mode == "admin_create")
   {
      admin_level = null;

      ip_required = trim(document.getElementById("ip_required_box").value);
      if (ip_required == null)
      {  ip_required = "";
      }

      el_al = document.getElementById("admin_level_box");
      if (el_al)
      {  
         admin_level = el_al.value;
      }
     
      bcc_license = document.getElementById("bcc_license_box").checked;
      preset_clientID = document.getElementById("preset_clientID_box").checked;
      ip_required_clientID = 
         document.getElementById("ip_required_clientID_box").checked;
      client_type = trim(document.getElementById("client_type_box").value);
      client_status = trim(document.getElementById("client_status_box").value);
      preset_id = trim(document.getElementById("preset_box").value);
      client_id = trim(document.getElementById("client_id_box").value);
      if (!client_id)
      {  client_id = 0;
      }
      if (preset_clientID)
      {  if (!confirm("Are you sure you all users " + 
            "with Client ID = " + client_id + 
            " to have preset " + preset_id + "?"))
         {  return;
         } 
      }
      if (ip_required_clientID)
      {  
         if (ip_required)
         {  pt = "Are you sure you all users " + 
            "with Client ID = " + client_id + 
            " to only work if coming from IP = " + ip_required + "?";
         }
         else
         {  pt = "Are you sure you all users " + 
            "with Client ID = " + client_id + 
            " to work from any IP address?";
         }
         if (!confirm(pt))
         {  return;
         } 
      }

   }

   if (register_form_mode == "admin_edit" || register_form_mode == "user_edit")
   {
      user_id = trim(document.getElementById("user_id_box").value);
   }

   if (form_ok)
   {
      // we make a copy of the user with the new settings so that
      //  if the 'save' goes thru we can swap this out - otherwise
      //  I'd have to pass all the user data back from Ajax and
      //  parse, etc.
      if (register_form_mode == "user_edit")
      {
         user_tmp = clone(user);

         user_tmp.first_name = first;
         user_tmp.last_name = last;
         user_tmp.company = company;
         user_tmp.address = address;
         user_tmp.city = city;
         user_tmp.state = state;
         user_tmp.zip = zip;
         user_tmp.country = country;
         user_tmp.phone = phone;
         user_tmp.fax = fax;
         user_tmp.file_naming_mode = file_naming_mode;
      }

      xml  = "<\?xml version=\"1.0\"\?>" +
               "<AccountEditRequest>" +
               "<Mode>" + register_form_mode + "</Mode>";

      xml += "<Email>" + xml_escape(email) + "</Email>";

// need to send over userId

      xml +=   "<FirstName>" + xml_escape(first)  +"</FirstName>" +
               "<LastName>" + xml_escape(last)  +"</LastName>" +
               "<Company>" + xml_escape(company)  +"</Company>" +
               "<Address>" + xml_escape(address)  +"</Address>" +
               "<City>" + xml_escape(city)  +"</City>" +
               "<State>" + xml_escape(state)  +"</State>" +
               "<Zip>" + xml_escape(zip)  +"</Zip>" +
               "<Country>" + xml_escape(country)  +"</Country>" +
               "<Phone>" + xml_escape(phone)  +"</Phone>" +
               "<Fax>" + xml_escape(fax)  +"</Fax>";

      if (!skip_password)
      {  xml += "<Password>" + xml_escape(password)  +"</Password>";
      }
      xml += "<FileNamingMode>" + xml_escape(file_naming_mode) + "</FileNamingMode>";

      if (register_form_mode == "admin_edit" ||
          register_form_mode == "user_edit")
      {
         xml += "<UserID>" + xml_escape(user_id) + "</UserID>";
      }

      if (register_form_mode == "admin_edit" || 
         register_form_mode == "admin_create")
      {  xml += "<ClientType>" + client_type + "</ClientType>" +
               "<Status>" + client_status + "</Status>" +
               "<IPRequired>" + ip_required+ "</IPRequired>" +
               "<ClientID>" + client_id + "</ClientID>" +
               "<PresetID>" + preset_id + "</PresetID>" + 
               "<BccLicense>" + (bcc_license ? "1" : "0") + "</BccLicense>" +
               "<PresetClientIDUpdate>" + (preset_clientID ? "1" : "0") + 
               "</PresetClientIDUpdate>" +
               "<IPRequiredClientIDUpdate>" + 
                  (ip_required_clientID ? "1" : "0") + 
               "</IPRequiredClientIDUpdate>";
         
         if (admin_level != null)
         {  xml += "<AdminLevel>" + xml_escape(admin_level) + "</AdminLevel>";
         } 
      }

      xml +=   "</AccountEditRequest>";
      xml = "xml=" + escape(xml);
      ajax_register_r.open("POST", "/account_edit_backend.php", true);
      ajax_register_r.onreadystatechange = user_register_callback;
      ajax_register_r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      ajax_register_r.send(xml);
   }
}

function clear_errors()
{
   document.getElementById("first_error").innerHTML = "";
   document.getElementById("last_error").innerHTML = "";
   document.getElementById("company_error").innerHTML = "";
   document.getElementById("address_error").innerHTML = "";
   document.getElementById("city_error").innerHTML = "";
   document.getElementById("province_error").innerHTML = "";
   document.getElementById("state_error").innerHTML = "";
   document.getElementById("zip_error").innerHTML = "";
   document.getElementById("phone_error").innerHTML = "";
   document.getElementById("fax_error").innerHTML = "";
   document.getElementById("email_error").innerHTML = "";
   document.getElementById("password_error").innerHTML = "";
   document.getElementById("confirm_error").innerHTML = "";
   document.getElementById("client_type_error").innerHTML = "";
   document.getElementById("client_status_error").innerHTML = "";
   document.getElementById("preset_error").innerHTML = "";
   document.getElementById("client_id_error").innerHTML = "";
   dump_registration_errors(null);
}

function prefill_register_form()
{  // set country US, state --
   document.getElementById("user_id_box").value = user.user_id;
   document.getElementById("first_box").value = user.first_name;
   document.getElementById("last_box").value = user.last_name;
   document.getElementById("company_box").value = user.company;
   document.getElementById("country_box").value = user.country;
   document.getElementById("address_box").value = user.address;
   document.getElementById("city_box").value = user.city;
   document.getElementById("province_box").value = user.state;
   document.getElementById("state_box").value = user.state;
   document.getElementById("zip_box").value = user.zip;
   document.getElementById("phone_box").value = user.phone;
   document.getElementById("fax_box").value = user.fax;
   document.getElementById("email_box").value = user.email;
   document.getElementById("password_box").value = '';
   document.getElementById("confirm_box").value = '';

   radios = document.getElementsByName("file_naming_mode_box");

   for (i = 0; i < radios.length; i++)
   {  if (radios[i].value == user.file_naming_mode)
      {  radios[i].checked = true;
      }
      else
      {  radios[i].checked = false;
      }
   }
}

function reset_register_form(test)
{  // set country US, state --
   document.getElementById("first_box").value = (!test ? "" : "Bob");
   document.getElementById("last_box").value = (!test ? "" : "Vance");
   document.getElementById("company_box").value = (!test ? "" : "Vance refrig");
   document.getElementById("country_box").value = (!test ? "" : "US");
   document.getElementById("address_box").value = (!test ? "" : "123 4th st");
   document.getElementById("city_box").value = (!test ? "" : "Scranton");
   document.getElementById("province_box").value = (!test ? "" : "");
   document.getElementById("state_box").value = (!test ? "" : "PA");
   document.getElementById("zip_box").value = (!test ? "" : "12345");
   document.getElementById("phone_box").value = (!test ? "" : "555-555-5555");
   document.getElementById("fax_box").value = (!test ? "" : "555-777-5555");
   document.getElementById("email_box").value = (!test ? "" : "bv@bv.com");
   document.getElementById("password_box").value = (!test ? "" : "p!");
   document.getElementById("confirm_box").value = (!test ? "" : "p!");
   el = document.getElementById("file_naming_mode_box");
   if (el)
   {  el.value = 0;
   }
}


function show_register(show, edit_mode)
{  el = document.getElementById("register_section");
   if (el == null || standalone)
   {  return;
   }
   el.style.display = (show ? "block" : "none");

   register_form_mode = "user_create";
   if (edit_mode)
   {  register_form_mode = "user_edit";
   }

   el = document.getElementById("client_type_row");
   el.style.display = "none";
   el = document.getElementById("client_status_row");
   el.style.display = "none";
   el = document.getElementById("client_preset_row");
   el.style.display = "none";
   el = document.getElementById("client_id_row");
   el.style.display = "none";

   showing_login = show;

   if (show != true)
   {  // all done now 
      return;
   }
   update_breadcrumb("REGISTER", false);
   set_status('', false); 
//   el = document.getElementById("account_submit_button");
//   el.value = "Submit";

   el = document.getElementById("account_submit_pretext");
   if (edit_mode)
   {
      el.innerHTML = "Edit your account details below<BR><BR>";
   }
   else
   {  el.innerHTML = "To create a new account, fill in the details below<BR><BR>";
   }
   if (register_form_mode == "user_create")
   {  el = document.getElementById("account_submit_subtext");
      el.innerHTML = "New accounts usually approved within one business day";
   }

   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);
   if (standalone)
   {  show_prefs(false);
      show_updater(false);
   }
   show_share(false, null);
   show_data_find(false);  
   show_new_releases(false);
   show_cue_sheets(false);
   update_cart_status_line();
   clear_errors();

   if (register_form_mode == "user_edit")
   {  prefill_register_form();
   }
   else
   {  reset_register_form(false);
   }
   handle_country_change();
}

function dump_registration_errors(e)
{
   el  = document.getElementById("registration_errors_section");
   if (e == null)
   {  out = "";
   }
   else
   {  out = 'Errors:<UL class="errorText">';
      for (i = 0; i < e.length; i++)
      {  out += "<LI class=\"errorText\">" + e[i] + "</LI>";
      }
      out += "</UL>";
   }
   el.innerHTML = out;
}


function user_register_callback()
{
   if (ajax_register_r.readyState == 4) {
      if (ajax_register_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_register_r.responseXML;

         node = d.getElementsByTagName('Result')[0];
         if (!node ||  node.childNodes[0].nodeValue != "Success")
         {  
            s = "Error talking to server";
            node = d.getElementsByTagName('Error')[0];
            if (node)
            {  s += "\n" + node.childNodes[0].nodeValue;
            }
            showAlert(s);
         }
         else
         {  
            node = d.getElementsByTagName('AccountResult')[0];
            if (node.childNodes[0].nodeValue != "Success")
            {  errors = new Array();
               node = d.getElementsByTagName('Error');
               if (node)
               {
                 for (i = 0; i < node.length; i++)
                  {  errors.push(node[i].childNodes[0].nodeValue);
                  }  
               }
               else
               {  errors.push("Unknown error talking to server");
               }
               dump_registration_errors(errors);
            }
            else
            {  if (register_form_mode == "admin_edit" || 
                   register_form_mode == "admin_create")
               {
                  //showAlert("Your changes have been saved");
                  window.location = "/webadmin/user_list.php";
               }
               else
               {
                  if (register_form_mode == "user_edit")
                  {
                     user = user_tmp;
                     showAlert("Your changes have been saved")
                     jump_to_last_breadcrumb();
                  }
                  else
                  {  
                     showAlert("Thank you for registering.  Someone at " + 
                        domain_info.display_name +  " will " +
                        "contact you soon and enable your account");
                     jump_to_last_breadcrumb();
                  }
               }
            }
         } 
      }
   }
}

