var specialCharacters = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
var specialEmailCharacters = "!#$%^&*()+=-[]\\\';,/{}|\":<>?";
var numbers = "1234567890";
var alphabetical = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

function confirmChange()
{
  var numUsers = document.getElementsByName("userId").length;
  var terminateFound = 0;

  for (i = 0; i < numUsers; i++)
  {
    if (document.getElementsByName("unlock")[i] != null &&
        document.getElementsByName("unlock")[i].checked == true) {
      var j = document.getElementsByName("unlock")[i].value;
      document.getElementsByName("modifiedFlag")[j].value = "U";
    }

    //Terminate check.
    if (document.getElementsByName("terminate")[i] != null &&
        document.getElementsByName("terminate")[i].checked == false &&
        document.getElementsByName("unlock")[i] != null &&
        document.getElementsByName("unlock")[i].checked == false) {
      document.getElementsByName("modifiedFlag")[i].value = "Y";
    }

    if (document.getElementsByName("terminate")[i] != null &&
        document.getElementsByName("terminate")[i].checked == true) {
      document.getElementsByName("modifiedFlag")[i].value = "T";
      terminateFound++;
    }
  }

  if (terminateFound > 0){
      return true;
  }
  return false;
}

function terminateUser(i)
{
  if (document.getElementsByName("terminate")[i] != null) {
    if (!document.getElementsByName("terminate")[i].checked) {
      document.getElementsByName("modifiedFlag")[i].value = document.getElementsByName("modifiedFlag")[i].defaultValue;
    }
  }
}

//Check Password
function checkPassword(field) {
  return $.wex.isPciCompliant($(field).val());
}

//Email Check
function checkEmail()
{
  return echeck(document.getElementsByName("emailAddress"));
}

function echeck(strEmail) {
  var email = document.getElementsByName(strEmail);
  //avoid null issues by marching down the chain one at a time
  if (email) {
    email = email[0];
  }
  if (email) {
    email = email.value;
  }
  if (email && email != "") {
    if (!( /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(email) )) {
      alert("Please enter a valid email address");
      return false;
    }
  } else {
    alert("Please enter a valid email address");
    return false;
  }
  return true;
}

function echeckEdit(str) {
  var at = "@"
  var dot = "."
  var bgBad = "#cccc99";
  var bgGood = "white";
  var flag = true;
  var lat = str.indexOf(at);
  var lstr = str.length;
  var ldot = str.indexOf(dot)
  if (str.indexOf(at) == -1) {
    flag = false;
  }

  if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || (str.indexOf(at) + 1) == lstr) {
    flag = false;
  }

  if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || (str.indexOf(dot) + 1) == lstr) {
    flag = false;
  }

  if (str.indexOf(at, (lat + 1)) != -1) {
    flag = false;
  }

  if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
    flag = false;
  }

  if (str.indexOf(dot, (lat + 2)) == -1) {
    flag = false;
  }

  if (str.indexOf(" ") != -1) {
    flag = false;
  }

  return flag;
}

function checkMandatory()
{
  var flag = false;
  var userFirstName = document.getElementsByName("userFirstName");
  var userLastName = document.getElementsByName("userLastName");
  var requestedUserId = document.getElementsByName("requestedUserId");
  var emailAddress = document.getElementsByName("emailAddress");
  var password = document.getElementsByName("password");

  var pass = document.getElementsByName("currentPassword");
  var newPass = document.getElementsByName("newPassword");
  var confirmNewPass = document.getElementsByName("newPasswordConfirm");
  var assignedUserType = document.getElementsByName("assignedUserType");
  var host = document.getElementsByName("host");
  var type = null;
  if (assignedUserType != null && assignedUserType[0].value == "") {
    alert("Please select User Type.");
    return false;
  }
  else {
    type = assignedUserType[0].value;
  }
  var childProgram = document.getElementsByName("childProgram");
  if (childProgram != null && childProgram[0].value == "" && type != "AdminUser") {
    alert("Please select a Program and submit." + childProgram[0].value);
    childProgram[0].focus();
    return false;
  }
  if (host[0].value != null && host[0].value == "" && ((type == "DealerSuperUser") || (type == "DealerAdminUser"))) {
    alert("Please select a National Id and submit.");
    host[0].focus();
    return false;
  }

  if (userFirstName[0])
  {
    var userFirstNameVal = userFirstName[0].value;
    var userLastNameVal = userLastName[0].value;
    var requestedUserIdVal = requestedUserId[0].value;
    var emailAddressVal = emailAddress[0].value;
    var passwordVal = password[0].value;

    if ((userFirstNameVal.length > 0) && (userLastNameVal.length > 0) && (requestedUserIdVal.length > 0) && (emailAddressVal.length > 0) && (passwordVal.length > 0))
    {
      var ret = false;

      //Check for space in the User ID
      if (requestedUserIdVal.indexOf(' ') > -1)
      {
        alert("User ID must not contain a space character.  Please correct it and then click Submit.");
        requestedUserId[0].focus();
        return false;
      }

      if (requestedUserIdVal.length > 10 || requestedUserIdVal.length < 6)
      {
        alert("User ID must between 6 and 10 characters.Please correct it and then click Submit.");
        requestedUserId[0].focus();
        return false;
      }
      ret = validate();

      if (ret)
      {
        flag = true;
      }
    }
    else
    {
      alert("All fields are mandatory.Please fill them and then click Submit.");
      requestedUserId[0].focus();
      return false;
    }
  }
  else
  {
    var passVal = pass[0].value;
    var newPassVal = newPass[0].value;
    var confirmNewPassVal = confirmNewPass[0].value;

    if (newPassVal != confirmNewPassVal)
    {
      document.getElementsByName("currentPassword")[0].value = "";
      document.getElementsByName("newPassword")[0].value = "";
      document.getElementsByName("newPasswordConfirm")[0].value = "";
      alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
      return false;
    }

    if ((passVal.length > 0) && (newPassVal.length > 0) && (confirmNewPassVal.length > 0))
    {
      var ret = false;

      retPass = checkPassword("currentPassword");
      if (!retPass)
      {
        alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
        document.getElementsByName("currentPassword")[0].value = "";
        document.getElementsByName("newPassword")[0].value = "";
        document.getElementsByName("newPasswordConfirm")[0].value = "";
      }
      else
      {
        retNewPass = checkPassword("newPassword");
        if (!retNewPass)
        {
          alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
          document.getElementsByName("currentPassword")[0].value = "";
          document.getElementsByName("newPassword")[0].value = "";
          document.getElementsByName("newPasswordConfirm")[0].value = "";
        }
        else
        {
          retConfirmNewPass = checkPassword("newPasswordConfirm");
          if (!retConfirmNewPass)
          {
            alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
            document.getElementsByName("currentPassword")[0].value = "";
            document.getElementsByName("newPassword")[0].value = "";
            document.getElementsByName("newPasswordConfirm")[0].value = "";
          }
        }
      }

      if (retPass && retNewPass && retConfirmNewPass)
      {
        flag = true;
      }
    }
    else if (passVal.length == 0)
    {
      alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
      pass[0].select();
      flag = false;
    }
    else if (newPassVal.length == 0)
      {
        alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
        newPass[0].select();
        flag = false;
      }
      else if (confirmNewPassVal.length == 0)
        {
          alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
          confirmNewPass[0].select();
          flag = false;
        }
  }

  return flag;
}
// Check upon submit
function validate()
{
  var flag = false;

  var userFirstName = document.getElementsByName("userFirstName");
  var userLastName = document.getElementsByName("userLastName");
  var requestedUserId = document.getElementsByName("requestedUserId");

  var searchUserID = document.getElementsByName("searchUserID");
  var searchUserName = document.getElementsByName("searchUserName");
  var searchHostName = document.getElementsByName("searchHostName");


  var userFirstNameFlag = checkSpecial(userFirstName);
  var userLastNameFlag = checkSpecial(userLastName);
  var requestedUserIdFlag = checkSpecial(requestedUserId);
  var numFirstName = checkAlpha(userFirstName[0]);
  if (numFirstName == false)
  {
    userFirstName[0].select();
    alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
    return false;
  }
  var numLastName = checkAlpha(userLastName[0]);
  if (numLastName == false)
  {
    userLastName[0].select();
    alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
    return false;
  }

  var passwordFlag = checkPassword("password");

  if (passwordFlag == false)
  {
    return false;
  }
  var emailFlag = echeck("emailAddress");

  var searchUserIDFlag = checkSpecial(searchUserID);
  var searchUserNameFlag = checkSpecial(searchUserName);
  var searchHostNameFlag = checkSpecial(searchHostName);

  if ((userFirstNameFlag && numFirstName && userLastNameFlag && numLastName && requestedUserIdFlag && passwordFlag && emailFlag) && (searchUserIDFlag && searchUserNameFlag && searchHostNameFlag))
  {
    flag = true;
  }
  else
  {
    if (emailFlag && passwordFlag)
    {
      alert("One or more required fields are missing or contain invalid characters.  Please complete and then click Submit.");
      flag = false;
    }
  }

  return flag;
}

//Check alphabetical
function checkAlpha(field)
{
  var fieldValue = field.value;
  var flag = true;
  for (var j = 0; j < fieldValue.length; j++)
  {
    if (isNaN(fieldValue.charAt(j)))
    {
      flag = true;
    }
    else
    {
      return false;
    }

  }
  return flag;
}

// Check the special characters
// Accepts an array of fields.
function checkSpecial(field)
{
  var fieldName = field;
  var returnFlag = true;
  var bgBad = "#cccc99";
  var bgGood = "white";

  for (i = 0; i < fieldName.length; i++)
  {
    var flag = true;
    var fieldVal = fieldName[i].value;

    for (var j = 0; j < fieldVal.length; j++)
    {
      if (specialCharacters.indexOf(fieldVal.charAt(j)) != -1)
      {
        flag = false;
        returnFlag = false;
        fieldName[i].select();
      }

    }
    if (flag)
    {
      setColor(fieldName[i], bgGood);
    }
  }
  return returnFlag;
}

function checkSpecialEmail(field) {

  var specialCharactersDetected = false;
  var bgBad = "#cccc99";
  var bgGood = "white";

  for (var j = 0; j < field.value.length; j++) {
    if (specialEmailCharacters.indexOf(field.value.charAt(j)) != -1) {
      specialCharactersDetected = true;
      field.select();
      break;
    }
  }
  if (specialCharactersDetected == false) {
    setColor(field, bgGood);
  }

  return specialCharactersDetected;
}

function setColor(el, bg)
{
  if (el.style) el.style.backgroundColor = bg;
}

// Check the special characters
function checkSpecialEdit(str)
{
  var returnFlag = 'false';
  var fieldVal = str;

  for (var j = 0; j < fieldVal.length; j++)
  {
    if (specialCharacters.indexOf(fieldVal.charAt(j)) != -1)
    {
      returnFlag = 'true';
    }

  }
  return returnFlag;
}


function changeStatus(field)
{
  var cell = field.parentElement;
  var row = field.parentElement.parentElement;
  var cellUnlock = row.cells[7];
  if (field.checked) {
    cellUnlock.innerHTML = 'N<html:hidden name="userStatusCode" value="N"/>';
  }
  else {
    cellUnlock.innerHTML = 'L<html:hidden name="userStatusCode" value="L"/>';
  }
}


//populate error elements
function getErrorFeilds(){
    var uiErrorElements = "";
   $('div.errorMessage > :input').not(":hidden, :submit, :reset, :image, :button").each(function(index, element) {
       uiErrorElements += index==0?element.id:"|"+element.id;
   });
   return uiErrorElements;
}

function loadMarketers()
{
  var childProgramValue = document.forms[0].childProgram.value;
  var chosenUserType = document.forms[0].assignedUserType.value;
  var hostNumber = document.forms[0].host.value;

  //Preserve form values during HTTP GETs for drop-down refiltering...
  var userLastName = document.forms[0].userLastName.value;
  var userFirstName = document.forms[0].userFirstName.value;
  var requestedUserId = document.forms[0].requestedUserId.value;
  var password = document.forms[0].password.value;
  var emailAddress = document.forms[0].emailAddress.value;

  var uiValidationErrFeilds = getErrorFeilds();
  var uiValidationAlertMsg =  $("#noOfErrorsMessageTxt").text();
    
  if (childProgramValue != "")
  {
    location.href = "./dealer.do?dispatch=loadMarketersForUser&childProgram=" + childProgramValue + "&assignedUserType=" + chosenUserType + "&fromDropDown=true" + "&hostNumber=" + hostNumber +
                    "&userLastName=" + userLastName +
                    "&userFirstName=" + userFirstName +
                    "&requestedUserId=" + requestedUserId +
                    "&password=" + password +
                    "&emailAddress=" + emailAddress +
                    "&uiValidationErrFeilds=" + uiValidationErrFeilds +
                    "&uiValidationAlertMsg="  + uiValidationAlertMsg;

    location.target = "_self";
  }
}

function loadPrograms()
{
  var assignedUserType = document.forms[0].assignedUserType.value;
  var brand = document.forms[0].brand.value;
  var childProgramValue = document.forms[0].childProgram.value;
  var hostNumber = document.forms[0].host.value;

  var userLastName = document.forms[0].userLastName.value;
  var userFirstName = document.forms[0].userFirstName.value;
  var requestedUserId = document.forms[0].requestedUserId.value;
  var password = document.forms[0].password.value;
  var emailAddress = document.forms[0].emailAddress.value;

  var uiValidationErrFeilds = getErrorFeilds();
  var uiValidationAlertMsg =  $("#noOfErrorsMessageTxt").text();

  var targetLoc = "./dealer.do?dispatch=loadProgramsForChosenUser&childProgram=" + childProgramValue + "&assignedUserType=" + assignedUserType + "&fromDropDown=true" + "&hostNumber=" + hostNumber +
                  "&userLastName=" + userLastName +
                  "&userFirstName=" + userFirstName +
                  "&requestedUserId=" + requestedUserId +
                  "&password=" + password +
                  "&emailAddress=" + emailAddress +
                  "&uiValidationErrFeilds=" + uiValidationErrFeilds+
                  "&uiValidationAlertMsg="  + uiValidationAlertMsg;

  location.href = targetLoc;
  location.target = "_self";
}
