// VALIDATE.JS
// Functions to validate form elements

function validMail(form) {
  var field = form.email; // email field
  var str = field.value; // email string
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid
  if (!reg1.test(str) && reg2.test(str))  // if syntax is valid
  {
    return true;
  }
  alert("\"" + str + "\" is an invalid e-mail!"); // this is also optional
  field.focus();
  field.select();
  return false;
}

///////////////////////////////////////////////////////////////////////////////

function validStory(form) {
  var n = form.rname;
  var p = form.pname;
  var l = form.location;
  var e = form.email;
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid


  if (n.value == '')
  {
    alert("Please enter your real name");
    n.focus();
    n.select();
    return false;
  }
  if (p.value == '')
  {
    alert("Please enter your pen name");
    p.focus();
    p.select();
    return false;
  }
  if (l.value == '')
  {
    alert("Please enter your location");
    l.focus();
    l.select();
    return false;
  }
  if (reg1.test(e.value) || !reg2.test(e.value))
  {
    alert("\"" + e.value + "\" is an invalid e-mail!");
    e.focus();
    e.select();
    return false;
  }

  if ((!form.agecert.checked) || (!form.solecert.checked) || (!form.grantcert.checked))
  {
    alert("You must read and agree to each of the items");
    form.agecert.focus();
    return false;
  }

  // there can be one or the other but not both
  if (((form.story.value == "") && (form.storyfile.value == "")) ||
      ((form.story.value != "") && (form.storyfile.value != "")))
  {
    alert("Please choose ONE of the upload methods.");
    form.story.focus();
    form.story.select();
    return false;
  }

  if (form.storyfile.value != "")
  {
    var temp = form.storyfile.value.split(".");
    var ext = temp[(temp.length -1)];
    if ((ext.toLowerCase() != "txt") || (ext.toLowerCase() != "txt") ||
      (ext.toLowerCase() != "txt") || (ext.toLowerCase() != "txt"))
    {
      alert ("Only files with extensions of .txt, .doc, .wpd, and .rtf are acceptable.");
      return false;
    }
  }
  return true;
}

///////////////////////////////////////////////////////////////////////////////

function validFeedback(form) {
  var n = form.name;
  var e = form.email;
  var c = form.comments;
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid

  if (n.value == '')
  {
    alert("Please enter your name");
    n.focus();
    n.select();
    return false;
  }
  if (reg1.test(e.value) || !reg2.test(e.value))
  {
    alert("\"" + e.value + "\" is an invalid e-mail!");
    e.focus();
    e.select();
    return false;
  }
  if (c.value == '')
  {
    alert("Please let us hear your comments");
    c.focus();
    c.select();
    return false;
  }
  return true;
}

///////////////////////////////////////////////////////////////////////////////

function validModelApp(form) {
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid

  if (form.fname.value == '')
  {
    alert("Please enter your real first name ");
    form.fname.focus();
    form.fname.select();
    return false;
  }
  if (form.lname.value == '')
  {
    alert("Please enter your real last name ");
    form.lname.focus();
    form.lname.select();
    return false;
  }
  if (form.sname.value == '')
  {
    alert("Please enter your Stage name ");
    form.sname.focus();
    form.sname.select();
    return false;
  }
  if (form.streetAddress.value == '')
  {
    alert("Please enter your Address ");
    form.streetAddress.focus();
    form.streetAddress.select();
    return false;
  }
  if (form.city.value == '')
  {
    alert("Please enter the name of your City ");
    form.city.focus();
    form.city.select();
    return false;
  }
  if (form.state.value == 'NA')
  {
    alert("Please enter the name of your State/Province ");
    form.state.focus();
    return false;
  }
  if (form.postalCode.value == '')
  {
    alert("Please enter your Postal/Zip Code ");
    form.postalCode.focus();
    form.postalCode.select();
    return false;
  }
  if (reg1.test(form.email.value) || !reg2.test(form.email.value))
  {
    alert("\"" + form.email.value + "\" is an invalid e-mail! ");
    form.email.focus();
    form.email.select();
    return false;
  }
  if (form.DOBMonth.value == '')
  {
    alert("Please enter your month of birth ");
    form.DOBMonth.focus();
    return false;
  }
  if ((form.DOBDay.value < 1) || (form.DOBDay.value > 31))
  {
    alert("Please enter your day of birth ");
    form.DOBDay.focus();
    return false;
  }
  if (form.DOBYear.value == 'year')
  {
    alert("Please enter your year of birth ");
    form.DOBYear.focus();
    form.DOBYear.select();
    return false;
  }
  if ((form.videoWork[0].checked) && (form.videoTitles.value == ''))
  {
    alert("Please tell us who you have done video with before ");
    form.videoTitles.focus();
    form.videoTitles.select();
    return false;
  }
  if ((form.printWork[0].checked) && (form.printTitles.value == ''))
  {
    alert("Please tell us who you have modeled for. ");
    form.printTitles.focus();
    form.printTitles.select();
    return false;
  }
  if (form.menTurnOn.value == '')
  {
    alert("Tell us about the men that turn you on.");
    form.menTurnOn.focus();
    return false;
  }
  if (form.specialTalents.value == '')
  {
    alert("Tell us what you are really good at in bed.");
    form.specialTalents.focus();
    return false;
  }
  if (form.videoFantasy.value == '')
  {
    alert("Tell us about your ultimate video fantasy.");
    form.videoFantasy.focus();
    return false;
  }
  if (form.hardon.value == '')
  {
    alert("Tell us how you think you'll do on camera.");
    form.hardon.focus();
    return false;
  }
  if (form.cumming.value == '')
  {
    alert("Tell us how you think you'll do on camera.");
    form.cumming.focus();
    return false;
  }

  return true;
}

///////////////////////////////////////////////////////////////////////////////

function validOfferForm(form) {

  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid

  if (form.fname.value == '')
  {
    alert("Please enter your real first name ");
    form.fname.focus();
    form.fname.select();
    return false;
  }
  if (form.lname.value == '')
  {
    alert("Please enter your real last name ");
    form.lname.focus();
    form.lname.select();
    return false;
  }
  if (form.streetAddress1.value == '')
  {
    alert("Please enter your Address ");
    form.streetAddress.focus();
    form.streetAddress.select();
    return false;
  }
  if (form.city.value == '')
  {
    alert("Please enter the name of your City ");
    form.city.focus();
    form.city.select();
    return false;
  }
  if (form.state.value == '')
  {
    alert("Please enter the name of your State/Province ");
    form.state.focus();
    form.state.select();
    return false;
  }
  if (form.postalCode.value == '')
  {
    alert("Please enter your Postal/Zip Code ");
    form.postalCode.focus();
    form.postalCode.select();
    return false;
  }
  if (reg1.test(form.email.value) || !reg2.test(form.email.value))
  {
    alert("\"" + form.email.value + "\" is an invalid e-mail! ");
    form.email.focus();
    form.email.select();
    return false;
  }
  return true;
}

function validChangePasswords(form)
{
  if (form.newpass.value == form.newpassconfirm.value)
  {
    alert('Your password has been changed');
    return true;
  }
  else
  {
    alert("The new passwords do not match");
    form.newpassconfirm.value = '';
    form.newpass.focus();
    form.newpass.select();
    return false;
  }
}
function validChangeEmail(form)
{
  if (form.newEmail.value == form.newEmailConfirm.value)
  {
    alert('Your email has been changed');
    return true;
  }
  else
  {
    alert("The email addresses do not match");
    form.newEmailConfirm.value = '';
    form.newEmail.focus();
    form.newEmail.select();
    return false;
  }


}


function validLocationApp(form)
{
  var firstError;
  var trimName = trim(form.fullName.value);
  var nameReg = /^[a-zA-Z.''\s]/ ;
  var nameMsg = '';
  var emailMsg = '';
  var phoneMsg = '';
  var cityMsg = '';
  var stateMsg = '';
  var timeMsg = '';
  var descMsg = '';

  var errorMessage = '';

  if (trimName.length > 0 )
  {
    if (!nameReg.test(trimName))
    {
      nameMsg = 'Name contains invalid characters.  Please re-enter.\n';
      firstError = form.fullName;
    }
  }
  else
  {
    nameMsg = 'Name is a required field.\n';
    firstError = form.fullName;
  }

  emailMsg = validateEmail(trim(form.email.value));
  if (emailMsg.length > 0 && firstError == null) firstError = form.email;

  phoneMsg = validatePhone(trim(form.contactPhone.value));
  if (phoneMsg.length > 0 && firstError == null) firstError = form.contactPhone;

  trimCity = trim(form.locationCity.value);
  if (trimCity.length > 0 )
  {
    if (!nameReg.test(trimCity))
    {
      cityMsg = 'City contains invalid characters.  Please re-enter.\n';
      if (firstError == null) firstError = form.locationCity;
    }
  }
  else
  {
    cityMsg = 'City is a required field.\n';
    if (firstError == null) firstError = form.locationCity;
  }

  if (form.state.value == 'NA')
  {
    stateMsg = 'Please select a state.\n' +
      '---If outside the United States or Canada, please choose Outside the US/Canada.\n';
    if (firstError == null) firstError = form.state;
  }

  trimTime = trim(form.timeAvailable.value);
  if (trimTime.length == 0 )
  {
    timeMsg = 'Best time to use location is a required field.\n';
    if (firstError == null) firstError = form.timeAvailable;
  }

  trimDescription = trim(form.locationDesc.value);
  if (trimDescription.length == 0 )
  {
    descMsg = 'Description is a required field.\n';
    if (firstError == null) firstError = form.locationDesc;
  }

  errorMessage = nameMsg + emailMsg + phoneMsg + cityMsg
    + stateMsg + timeMsg + descMsg;

  if (firstError != null)
  {
    firstError.focus();
    if (firstError.type != 'select-one') firstError.select();
  }

  if (errorMessage.length > 0)
  {
    alert(errorMessage);
    return false;
  }
  else
  {
    return true;
  }

  return false;
}

function validFictionApp(form)
{
  var firstError;
  var trimRealName = trim(form.realName.value);
  var trimPenName = trim(form.penName.value);
  var nameReg = /^[a-zA-Z.''\s]/ ;
  var realNameMsg = '';
  var penNameMsg = '';
  var emailMsg = '';
  var cityMsg = '';
  var stateMsg = '';
  var storyMsg = '';
  var agreeMsg = '';

  var errorMessage = '';

  if (trimRealName.length > 0 )
  {
    if (!nameReg.test(trimRealName))
    {
      realNameMsg = 'Real Name contains invalid characters.  Please re-enter.\n';
      firstError = form.realName;
    }
  }
  else
  {
    realNameMsg = 'Real Name is a required field.\n';
    firstError = form.realName;
  }

  if (trimPenName.length > 0 )
  {
    if (!nameReg.test(trimPenName))
    {
      penNameMsg = 'Publish Name contains invalid characters.  Please re-enter.\n';
      if (firstError == null) firstError = form.penName;
    }
  }
  else
  {
    penNameMsg = 'Publish Name is a required field.\n';
    if (firstError == null) firstError = form.penName;
  }

  emailMsg = validateEmail(trim(form.email.value));
  if (emailMsg.length > 0 && firstError == null) firstError = form.email;

  trimCity = trim(form.city.value);
  if (trimCity.length > 0 )
  {
    if (!nameReg.test(trimCity))
    {
      cityMsg = 'City contains invalid characters.  Please re-enter.\n';
      if (firstError == null) firstError = form.city;
    }
  }
  else
  {
    cityMsg = 'City is a required field.\n';
    if (firstError == null) firstError = form.city;
  }

  if (form.state.value == 'NA')
  {
    stateMsg = 'Please select a state.\n' +
      '---If outside the United States or Canada, please choose Outside the US/Canada.\n';
    if (firstError == null) firstError = form.state;
  }

  trimStory = trim(form.storyText.value);
  if (trimStory.length == 0 )
  {
    storyMsg = 'Story is a required field. Please paste your story in the box provided.\n';
    if (firstError == null) firstError = form.storyText;
  }
  else if (trimStory.length > 20000)
  {
    storyMsg = 'Story is too long.  Please limit to 20,000 characters (about 3,500 words) or less.\n';
    if (firstError == null) firstError = form.storyText;
  }

  if (false == form.agreeBox.checked)
  {
      agreeMsg = 'You must agree to the terms to submit your story.\n';
      if (firstError == null) firstError = form.agreeBox;
  }

  errorMessage = realNameMsg + penNameMsg + emailMsg + cityMsg + stateMsg + storyMsg + agreeMsg;

  if (firstError != null)
  {
    firstError.focus();
    if (firstError.type != 'select-one') firstError.select();
  }

  if (errorMessage.length > 0)
  {
    alert(errorMessage);
    return false;
  }
  else
  {
    return true;
  }

  return false;
}




function validatePhone(phoneField)
{
  var phoneReg = /^\+?[0-9 ()-]+[0-9]$/  ;

  if (phoneField.length > 0)
  {
    if (!phoneReg.test(phoneField)) {
      return "Phone number has invalid characters: digits, space ()- and leading + are permitted\n";
    }

    var numdigits = 0;
    for (var j=0; j<phoneField.length; j++)
      if (phoneField.charAt(j)>='0' && phoneField.charAt(j)<='9') numdigits++;

    if (numdigits == 0)
    {
      return 'Phone number is a required field.\n';
    }

    if (numdigits<6) {
      return "Phone number has only " + numdigits + " digits - Please re-enter the phone number.\n";
    }

    if (numdigits>14)
      return "Phone number has " + numdigits + " digits - Please re-enter the phone number.\n";
    else
    {
      if (numdigits<10)
        return "Phone Number has only " + numdigits + " digits - Please re-enter the phone number.\n";
      else
        return "";
    }

  }
  else
  {
      return 'Phone number is a required field.\n';
  }
}

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function validateEmail(emailField)
{
  if (emailField.length == 0)
  {
    return 'Email address is a required field.\n';
  }
  else
  {
    if ((emailField.indexOf('@') > 0) && (emailField.indexOf('.') > 0 ))
    {
      return '';
    }
    else
    {
      return 'Invalid email address.  Please re-enter.\n';
    }

  }
}
