// Site-wide Functions

function toggleDisplay(to_show, the_link, show_text, hide_text)
{
  var e = document.getElementById(to_show);
  if(e.style.display == 'none' || e.style.display == '')
  {
    e.style.display = 'block';
    the_link.innerHTML = (hide_text == null ? 'Hide' : hide_text);
  }
  else
  {
    e.style.display = 'none';
    the_link.innerHTML = (show_text == null ? 'Show' : show_text);
  }
}

function toggleDisplayAll(container_div, the_link, div_class)
{
  var container = document.getElementById(container_div);
  var all_divs = container.getElementsByTagName('div');
  for(var i = 0; i < all_divs.length; i++)
  {
    if(all_divs[i].className == div_class)
      all_divs[i].style.display = 'block';
  }
}

function swapSearch()
{
  var the_button = document.getElementById('searchbutton');
  var the_search = document.getElementById('searchform');
  the_button.style.display = (the_button.style.display == 'none' ? 'block' : 'none');
  the_search.style.display = (the_search.style.display == 'none' ? 'block' : 'none');
}

// Hover Pop-Up Functions

function showPopup(container_div, hoveritem, hoverid)
{
  // To restrict it so only 1 div can be shown, loop through all and get them
  var container = document.getElementById(container_div);
  var all_divs = container.getElementsByTagName('div');
  for(var i = 0; i < all_divs.length; i++)
  {
    if(all_divs[i].className == 'hoverdiv'  ||  all_divs[i].className == 'hoverdivactive')
    {
      if(all_divs[i].style.display == 'block')
      {
        all_divs[i].style.display = 'none';
        all_divs[i].style.className = 'hoverdiv';
      }
    }
  }
  // Finally, set the display to "block" for just the current <div>
  document.getElementById(hoverid).style.display = 'block';
  document.getElementById(hoverid).className = 'hoverdivactive';
}

function closeHover(hoverid)
{
  document.getElementById(hoverid).style.display = 'none';
  document.getElementById(hoverid).className = 'hoverdiv';
}

function delayCloseHover(hoverid, timeout)
{
  setTimeout("closeHover('" + hoverid + "');", timeout);
}

// Admin Functions

function limitText(limitField, limitCount, limitNum)
{
  if(limitField.value.length > limitNum)
    limitField.value = limitField.value.substring(0, limitNum);
  else
  {
    var remaining = (limitNum - limitField.value.length);
    document.getElementById(limitCount).innerHTML = 'You have ' + remaining + ' character' + (remaining != 1 ? 's' : '') + ' remaining.';
  }
}

function countChecks(divName, checkName, maxNum)
{
  var allChecks = document.getElementById(divName).getElementsByTagName('input');
  var total = 0;
  for(var i = 0; i < allChecks.length; i++)
  {
    if(allChecks[i].checked == true)
      total++;
    if(total > maxNum)
    {
      alert('Error: You may only choose ' + maxNum + ' option' + (maxNum > 1 ? 's' : '') + '.  Please uncheck some options before checking new ones.');
      checkName.checked = false;
      total = maxNum;
    }
  }
}

function removeSelectedOption(theSelect, theDiv)
{
  var allChecks = document.getElementById(theDiv).getElementsByTagName('input');
  var choice = '{' + theSelect.value + '}';
  for(var i = 0; i < allChecks.length; i++)
  {
    if(allChecks[i].value == choice)
    {
      allChecks[i].checked = false;
      allChecks[i].disabled = true;
    }
    else
      allChecks[i].disabled = false;
  }
}

function checkShortcut()
{
  var reg = /^[0-9A-Za-z]+$/;
  if(reg.test(document.getElementById('desired_shortcut').value) == false)
  {
    alert('Invalid entry.  Only letters (A-Z, a-z) and numbers (0-9) are accepted..');
    return false;
  }
  return true;
}

function showHideCustomEmail(selected_value, div_id)
{
  if(selected_value == '')
    document.getElementById(div_id).style.display = 'block';
  else
    document.getElementById(div_id).style.display = 'none';
}

function checkCouponForm()
{
  if(document.getElementById('date_mm').value == ''  &&  document.getElementById('date_dd').value == ''  &&  document.getElementById('date_yyyy').value == '')
    return true;
  else
  {
    if(document.getElementById('date_mm').value == ''  ||  document.getElementById('date_dd').value == ''  ||  document.getElementById('date_yyyy').value == '')
    {
      alert('If you\'re defining an expiration date, you must choose a month, day, and year.');
      return false;
    }
    return true;
  }
  return true;
}

function checkFreeUserForm()
{
  if(document.getElementById('user_email').value == '')
  {
    alert('Please enter a email address (user name).');
    document.getElementById('user_email').select();
    return false;
  }
  if(document.getElementById('user_fname').value == '')
  {
    alert('Please enter a first name.');
    document.getElementById('user_fname').select();
    return false;
  }
  if(document.getElementById('user_lname').value == '')
  {
    alert('Please enter a last name.');
    document.getElementById('user_lname').select();
    return false;
  }
  return true;
}

// Form Checking Functions

function validateEmail(address)
{
  var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
  if(reg.test(address) == false)
    return false;
  return true;
}

function validatePhone(phone)
{
  var reg = /^[2-9]\d{2}-\d{3}-\d{4}$/;
  if(reg.test(phone) == false)
    return false;
  return true;
}

// Other Form Functions

function checkContactPractitionerForm()
{
  if(document.getElementById('your_name').value == '')
  {
    alert('Please enter your name.');
    document.getElementById('your_name').select();
    return false;
  }
  if((document.getElementById('your_email').value == '')  ||  (validateEmail(document.getElementById('your_email').value) == false))
  {
    alert('Please enter a valid email address.');
    document.getElementById('your_email').select();
    return false;
  }
  if(document.getElementById('your_comments').value == '')
  {
    alert('Please enter some comments/questions for the practitioner.');
    document.getElementById('your_comments').select();
    return false;
  }
  return true;
}

function checkAdminDecisionForm()
{
  if(document.getElementById('decision_action').value == 'deny'  &&  document.getElementById('decision_comments').value == '')
  {
    alert('When denying a request, please provide comments as to why it was denied.');
    document.getElementById('decision_comments').select();
    return false;
  }
  return true;
}

function checkUpdateSubmit()
{
  if(document.getElementById('terms_and_conditions').checked == false)
  {
    alert('You must agree to the terms and conditions before submitting this form.');
    return false;
  }
  return true;
}

function checkRegistrationForm()
{
  if(document.getElementById('prefix').value == '')
  {
    alert('Please choose your prefix.');
    return false;
  }
  if(document.getElementById('first_name').value == '')
  {
    alert('Please enter your first name.');
    document.getElementById('first_name').select();
    return false;
  }
  if(document.getElementById('last_name').value == '')
  {
    alert('Please enter your last name.');
    document.getElementById('last_name').select();
    return false;
  }
  if(document.getElementById('gender').value == '')
  {
    alert('Please choose your gender.');
    return false;
  }
  if(document.getElementById('name_on_card').value == '')
  {
    alert('Please enter your name, exactly as it appears on your credit card.');
    return false;
  }
  if(document.getElementById('credit_card_type').value == '')
  {
    alert('Please choose your credit card type.');
    return false;
  }
  if(document.getElementById('credit_card_number').value == '')
  {
    alert('Please enter your credit card number, 16 characters, no spaces or dashes.');
    return false;
  }
  if(document.getElementById('expiration_date_month').value == '')
  {
    alert('Please choose your cards expiration month.');
    return false;
  }
  if(document.getElementById('expiration_date_year').value == '')
  {
    alert('Please choose your cards expiration year.');
    return false;
  }
  if(validateEmail(document.getElementById('email_address').value) == false)
  {
    alert('"Email" is invalid.  Please enter a valid email address in the following format: email@domain.com.');
    document.getElementById('email_address').select();
    return false;
  }
  if(document.getElementById('mobile_phone_number').value != '')
  {
    if(validatePhone(document.getElementById('mobile_phone_number').value) == false)
    {
      alert('"Mobile Phone Number" is invalid.  Please enter a valid number in the following format: 123-456-7890.');
      document.getElementById('mobile_phone_number').select();
      return false;
    }
  }
  if(!document.getElementById('i_agree').checked)
  {
    alert('You must verify that you have read and agree to the Health Source Now, <a href="/TermsService.pdf" target="_blank">Terms and Conditions of Use</a> (PDF) and agree to all restrictions and notes on this form before submitting.');
    return false;
  }
  return true;
}