var validEmail = function (e) 
{
  var re1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; //not valid
  var re2=/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,6}|[0-9]{1,6})(\]?)$/; // valid
  if (!re1.test(e) &&re2.test(e)) return true;
  return false;
}

var isPhoneNumber = function (n)
{
  var nvValidChars = '0123456789()+- ';
  var j = parseInt(n.length);
  for (var i=0;i<j;i++) 
  {
    if (nvValidChars.indexOf(n.charAt(i)) == -1) return false;
  }
  return true;
}

String.prototype.trim = function () 
{
  str = this.replace(/^\s+/, '');
  return str.replace(/\s+$/, '');
};

String.prototype.stripHTML = function ()
{
  var el = /<(?:.|\s)*?>/g;
  return this.replace(el, '');
};

var confirmFormInput = function ()
{

  if (!document.getElementById('nvContactName').value.trim())
  {
    alert('Please enter the ' + document.getElementById('nvContactName_title').innerHTML.stripHTML() + ' field');
    document.getElementById('nvContactName').select();
    return false;
  }  

  if (!document.getElementById('nvEmail').value)
  {
    alert('Please enter the ' + document.getElementById('nvEmail_title').innerHTML.stripHTML() + ' field');
    document.getElementById('nvEmail').select();
    return false;
  }  

  if (!validEmail(document.getElementById('nvEmail').value))
  {
    alert("Please enter a valid email address...");
    document.getElementById('nvEmail').select();
    return false;
  }  

  if (document.getElementById('nvEmailConfirmation'))
  {

    if (bDisplayEmailConfirmation_Required)
    {
      if (!document.getElementById('nvEmailConfirmation').value.trim())
      {
          alert('Please confirmation your email address.');
          document.getElementById('nvEmailConfirmation').select();
          return false;
      }  

      if (document.getElementById('nvEmail').value.trim() != document.getElementById('nvEmailConfirmation').value.trim())
      {
        alert('The email confirmation does not match your email address.  Please re-confirm your email address.');
        document.getElementById('nvEmail').select();
        return false;
      }  
    }  
  }  

  if (document.getElementById('ncGender'))
  {
    if (bDisplayGender_Required)
    {
      if (!document.getElementById('ncGender').value)
      {
        alert('Please enter the ' + document.getElementById('nvGenderHeading_title').innerHTML.stripHTML() + ' field');
        document.getElementById('ncGender').focus();
        return false;
      }  
    }  
  }  

  if (document.getElementById('dBirthDate'))
  {
    if (bDisplayDOB_Required)
    {
      if (!document.getElementById('dBirthDate').value)
      {
        alert('Please enter the ' + document.getElementById('nvDOBHeading_title').innerHTML.stripHTML() + ' field');
        document.getElementById('dBirthDate').select();
        return false;
      }  
    }  
  }  
  
  if (document.getElementById('nvCompanyName'))
  {
    if (bDisplayCompany_Required)
    {
      if (!document.getElementById('nvCompanyName').value.trim())
      {
        alert('Please enter the ' + document.getElementById('nvCompanyName_title').innerHTML.stripHTML() + ' field');
        document.getElementById('nvCompanyName').select();
        return false;
      }  
    }  
  }  
  
  if (document.getElementById('nvPhone'))
  {
    if (bDisplayPhone_Required)
    {
      if (!document.getElementById('nvPhone').value)
      {
        alert('Please enter the ' + document.getElementById('nvPhone_title').innerHTML.stripHTML() + ' field');
        document.getElementById('nvPhone').select();
        return false;
      }  

      if (!isPhoneNumber(document.getElementById('nvPhone').value)) 
      {
        alert("Please enter a valid phone number...");
        document.getElementById('nvPhone').select();
        return false;
      }
    }    
  }    

  if (document.getElementById('nvAddress1'))
  {
    if (bDisplayStreet_Required)
    {
      if (!document.getElementById('nvAddress1').value)
      {
        alert('Please enter the ' + document.getElementById('nvAddress1_title').innerHTML.stripHTML() + ' field');
        document.getElementById('nvAddress1').select();
        return false;
      }  
    }  
  }  
  
  if (document.getElementById('nvCity'))
  {
    if (bDisplayCity_Required)
    {
      if (!document.getElementById('nvCity').value)
      {
        alert('Please enter the ' + document.getElementById('nvCity_title').innerHTML.stripHTML() + ' field');
        document.getElementById('nvCity').select();
        return false;
      }  
    }  
  }  

  if (document.getElementById('nvState'))
  {
    if (bDisplayState_Required)
    {
      if (!document.getElementById('nvState').value)
      {
        alert('Please enter the ' + document.getElementById('nvState_title').innerHTML.stripHTML() + ' field');
        document.getElementById('nvState').select();
        return false;
      }  
    }  
  }  

  if (document.getElementById('nvPostCode'))
  {
    if (bDisplayPostCode_Required)
    {
      if (!document.getElementById('nvPostCode').value)
      {
        alert('Please enter the ' + document.getElementById('nvPostCode_title').innerHTML.stripHTML() + ' field');
        document.getElementById('nvPostCode').select();
        return false;
      }  
    }  
  }  

  if (document.getElementById('nvNotes'))
  {
    if (document.getElementById('nvNotes').value.trim())
    {
      var testStr = document.getElementById('nvNotes').value.trim();
      if (testStr.length > 2000)
      {
        alert('You have exceeded the maximum length permitted\r\nfor your notes.\r\n\r\nPlease limit your text notes to less than 2k or\r\napproximately 30 lines of text...');
        document.getElementById('nvNotes').select();
        return false;
      }  
    }  
  }  

  return true;
}  

var isValidData = function() 
{
  if (confirmFormInput()) 
  {
    submitForm('/admin/tp_SubscriberOptionsForm.asp'); 
    return true;
  }  
  return false;
}
