var formSubmited = 0;
var FieldArray        = new Array();
var TypeArray         = new Array();
var FriendlyNameArray = new Array();
var MessageArray      = new Array();

function submitForm(frmname) {
  if (++formSubmited > 1) return false;
  if (frmname == null) var frmname = "newuser_form";
  if (!isNaN(frmname)) regForm = eval("document.forms[" + frmname + "]");
  else regForm = eval("document." + frmname);
  message = "";
  // get the language
  var lang = "english"; var langID = 0; // init to English
  if(existObject("Language") && (regForm.Language.value != "")) lang = regForm.Language.value.toLowerCase();
  if(existObject("language") && (regForm.language.value != "")) lang = regForm.language.value.toLowerCase();
  if (lang == "dutch") langID = 1; if (lang == "french") langID = 2; if (lang == "german") langID = 3;
  if (lang == "italian") langID = 4; if (lang == "portuguese") langID = 5; if (lang == "spanish") langID = 6;

  var zipType = 'notrequired';
  if(existObject("Country") && regForm.Country[regForm.Country.selectedIndex].value == 'US') zipType = 'zip';

  var zipBType = 'notrequired';
  if(existObject("CountryB") && regForm.CountryB[regForm.CountryB.selectedIndex].value == 'US') zipBType = 'zip';

  var phoneType = "phone";
  if (existObject("Country") && regForm.Country[regForm.Country.selectedIndex].value != 'US') phoneType = "intphone";

  if (existObject("SecretQ")) regForm.SecretQuestion.value = regForm.SecretQ.options[regForm.SecretQ.selectedIndex].value;

  var HeardHowType = "none";
  if (existObject("HeardHow") && (regForm.HeardHow.type == "select-one")) HeardHowType = "select";
  var HeardFromType = "none";
  if (existObject("HeardFrom") && (regForm.HeardFrom.type == "select-one")) HeardFromType = "select";

  fraudNames("FirstName", "LastName"); fraudNames("FirstNameB", "LastNameB");
  fraudAddressName("Address1", "FirstName"); fraudAddressName("Address1", "LastName");
  fraudAddressName("Address1B", "FirstNameB"); fraudAddressName("Address1B", "LastNameB");

  var TempFieldArray = new Array("Nickname", "PIN", "FirstName",
    "LastName",   "Address1",       "City",
    "State",      "Zip",            "email",
    "Country",    "HeardHow",       "HeardFrom",
    "Phone",      "Contact",
    "FirstNameB", "LastNameB",      "Address1B",
    "CityB",      "StateB",         "ZipB",
    "CountryB",   "CCNum",
    "cvv2",       "SecretQuestion", "SecretWord",	"sval");
  if (existObject("Username")) TempFieldArray[0] = "Username";

  var TempTypeArray = new Array("username", "pin", "word",
    "word",     "text",       "words",
    "words",    zipType,      "email",
    "select",   HeardHowType, HeardFromType,
    phoneType,  phoneType,
    "word",     "word",       "text",
    "words",    "words",      zipBType,
    "select",   "card",
    "cvv2",     "text",       "text",	"numeric");

  var TempFriendlyNameArray = new Array("Username", "PIN", "First Name",
    "Last Name",            "Address 1",         "City",
    "Province\/State",      "Postal Code",       "E-mail",
    "Country",              "Heard How",         "Heard From",
    "Home Phone",           "Contact Phone",
    "First Name",           "Last Name",         "Street Address",
    "City",                 "Province\/State",   "Postal Code",
    "Country",              "Credit Card Number",
    "Card Validation Code", "Secret Question",   "Secret Answer",	"Security Number");

  var plz = "Please enter your ";
  var TempMessageArray = new Array("Must be between 1 and 20 characters in length with no blank space(s), special characters, or quotes", "Please create your PIN", plz + "First Name",
    plz + "Last Name", plz + "Street Address", plz + "City",
    plz + "Province\/State", plz + "postal/zip code", "Enter a valid email account",
    plz + "country of residence", "Please tell us how you heard about Net2Phone", "Please be more specific how you heard about Net2Phone",
    plz + "home phone number including country and area code", plz + "contact phone number including country and area code",
    plz + "Billing Address First Name", plz + "Billing Address Last Name", plz + "Billing Address Street",
    plz + "Billing Address City", plz + "Billing Address Province\/State", plz + "Billing Address Postal/Zip Code",
    plz + "Billing Country", "Please enter a valid credit card number",
    plz + "card validation code", "Please create a Secret Question", "Please create an Answer to your Secret Question", plz + "Security Number");

// Get foreignTempMessageArray and foreignTempFriendlyNameArray from messages.js of corresponding language
  if (typeof foreignTempMessageArray != "undefined") TempMessageArray = foreignTempMessageArray;
  if (typeof foreignTempFriendlyNameArray != "undefined") TempFriendlyNameArray = foreignTempFriendlyNameArray;


/* validate optional fields only if they are not blank JSO 08.03.00
modified by AF 6/29/01 */
  var OptionalFields = "Address1, City, State, Contact, Nickname, Username";
  if(existObject("allow_non_required") && (regForm.allow_non_required.value == "1"))
    for(var k = 0; k < TempFieldArray.length; k++)
      if((OptionalFields.indexOf(TempFieldArray[k]) > -1) &&
         (existObject(TempFieldArray[k]) && eval("regForm." + TempFieldArray[k] + ".value") == ""))
        TempFieldArray[k] = "notRequired";

  var RechargeccFields = "FirstNameB, LastNameB, Address1B, CityB, StateB, ZipB, CountryB";
  if (existObject("chkAddr") && existObject("pin")) {
    if (regForm.chkAddr.checked == 1)
      for(var k = 0; k < TempFieldArray.length; k++)
        if(RechargeccFields.indexOf(TempFieldArray[k]) > -1) TempFieldArray[k] = "notRequired";
    var pin = document.newuser_form.pin.value;
    if (pin.length > 0 && !(pin.charCodeAt(0) >= 48 && pin.charCodeAt(0) <= 57)) // 0 - 9
      { var pinType = "pwd"; var pinMsg = "Please enter a valid password"; }
    else { var pinType = "pin"; var pinMsg = "Please enter a valid PIN"; }
    add2validation("pin", pinType, "PIN/Password", pinMsg);
  }

  for(var i = 0; i < TempFieldArray.length; i++)
    if(existObject(TempFieldArray[i])) {
      FieldArray[FieldArray.length] = TempFieldArray[i];
      TypeArray[TypeArray.length] = TempTypeArray[i];
      FriendlyNameArray[FriendlyNameArray.length] = TempFriendlyNameArray[i];
      MessageArray[MessageArray.length] = TempMessageArray[i];
    }

// if its a password, validate pwd not pin    
if (existObject("password")){
  for(var i = 0; i < TempFieldArray.length; i++){
    if (FieldArray[i]=='PIN'){
       FieldArray[i]='password';
       TypeArray[i]='pwd';
       FriendlyNameArray[i]='Password';
       MessageArray[i]="Invalid Password";
       break;
    } //if
  } //for
} //if

  message = fieldValidate(frmname, FieldArray, TypeArray, lang, FriendlyNameArray, MessageArray);

  if(existObject("PINConf") && (regForm.PIN.value != regForm.PINConf.value)) {
    var errMsgs = new Array("Confirmation PIN does not match PIN entry", "De bevestiging van uw PIN-code stemt niet overeen met de opgegeven PIN-code",
        "Votre NIP de confirmation ne correspond pas au NIP d'origine", "Bestätigungs-PIN stimmt nicht mit PIN-Eingabe überein",
        "Il PIN di conferma non corrisponde al PIN immesso.", "O Número de Identificação Pessoal de confirmação não é igual ao Número de Identificação Pessoal digitado",
        "La confirmación del PIN no coincide con el que ingresó");
    message += "\n" + errMsgs[langID] + ".";
    showErrImage("PINConf");
  } else if (existObject("PINConf") && regForm.PINConf.value.length > 0) showNormImage("PINConf");

  if(existObject("autorecharge") && regForm.autorecharge.checked == 1 &&
     (regForm.RechargeThreshold.options[regForm.RechargeThreshold.selectedIndex].value == "0"
      || regForm.RechargeAmount.options[regForm.RechargeAmount.selectedIndex].value == "0")) {
    var errMsgs = new Array("Please select your Auto-recharge Values", "Gelieve de waarden voor het automatisch aanvullen van uw rekening te selecteren",
        "Veuillez sélectionner les valeurs d'auto recharge", "Wählen Sie bitte die Werte für eine automatische Wiederauffüllung Ihres Kontos",
        "Selezionare i valori di ricarica automatica", "Selecione os valores de Auto-recarga",
        "Seleccione los valores de recarga automática");
    message += "\n" + errMsgs[langID] + ".";
    showErrImage("RechargeAmount");
  } else showNormImage("RechargeAmount");

// Issuing Bank
  if(existObject("CCName") && (regForm.CCName.options[regForm.CCName.selectedIndex].value == "Visa" ||
     regForm.CCName.options[regForm.CCName.selectedIndex].value == "Master Card") &&
     (regForm.issuingBank.value == "")) {
    var errMsgs = new Array("Issuing bank must be filled in", "Gelieve hier uw bank van uitgifte",
        "Veuillez entrer votre banque emettrice", "Geben Sie bitte ausstellende bank",
        "Immettere l'indirizzo di banca di emissione", "Digite o seu Banco da edição",
        "Ingrese su Banco Emisor");
    message += "\n" + errMsgs[langID] + ".";
    showErrImage("issuingBank");
  } else showNormImage("issuingBank");
  showNormImage("CCName");

/* Credit Card Expiration Date
The Validation is based on the problem of getYear which returns 100, 101,.. etc
for years following 2000, while our option boxes provide 2 digit values,
so we apply different rules to getting the same date Updated by PG 10-2000
Updated by AF 8/2/01*/
  if(existObject("CCExpYear")) {
    var curDate = new Date();
    curMonth = curDate.getMonth() + 1; //zero based so we add 1 to get current month
    curYear = curDate.getFullYear();

    ccMonth = regForm.CCExpMonth.options[regForm.CCExpMonth.selectedIndex].value;
    ccYear =  regForm.CCExpYear.options[regForm.CCExpYear.selectedIndex].value;
    ccYear = ccYear -0; ccMonth = ccMonth -0;
    ccYear = eval(ccYear + 2000); //options used are 00,01,02...
    ccDate = new Date(ccYear,ccMonth,1);

    if(ccDate.getTime() <= curDate.getTime()) {
      var errMsgs = new Array("Please check your expiration date", "Gelieve de vervaldatum te controleren",
          "Veuillez vérifier la date d'expiration", "Markieren Sie bitte das Gültigkeitsdatum",
          "Verificare la data di scadenza", "Verifique a data de validade",
          "Verifique la fecha de vencimiento");
      message += "\n" + errMsgs[langID] + ".";
      showErrImage("CCExpYear");
    } else showNormImage("CCExpYear");
  }

  if(existObject("cvv2conf") && (regForm.cvv2.value != regForm.cvv2conf.value)) {
    var errMsgs = new Array("Confirmation Card Validation Code does not match original entry", 
    "De bevestiging van uw Valideringscode van de kaart stemt niet overeen met de opgegeven Valideringscode van de kaart",
    "Votre Code de validation de carte de confirmation ne correspond pas au Code de validation de carte d'origine", 
    "Bestätigungs-Kartenbestätigungscode stimmt nicht mit Kartenbestätigungscode-Eingabe überein",
    "Il Codice di verifica della carta di credito di conferma non corrisponde al Codice di verifica della carta di credito immesso.",
    "O Código de validação do cartão de confirmação não é igual ao Código de validação do cartão digitado",
    "La confirmación del Código de validación de la tarjeta no coincide con el que ingresó");
    message += "\n" + errMsgs[langID] + ".";
    showErrImage("cvv2conf");
  } else if (existObject("cvv2conf") && regForm.cvv2conf.value.length > 0) showNormImage("cvv2conf");

  if (message == "") return true;
  alert(message);
  formSubmited = 0;
  // clear the arrays so that they don't build up
  FieldArray = new Array();
  TypeArray = new Array();
  FriendlyNameArray = new Array();
  MessageArray = new Array();
  return false;
} //  submitForm()

// adds to fieldArray, typeArray, fnameArray and msgArray to the alert
function add2validation(field, type, friendlyname, message) {
  FieldArray[FieldArray.length] = field;
  TypeArray[TypeArray.length] = type;
  FriendlyNameArray[FriendlyNameArray.length] = friendlyname;
  MessageArray[MessageArray.length] = message;
} // add2validation()

// Sets select object fieldName to queryValue
function setSelects(fieldName, queryValue) {
  var fieldObj = eval("document.newuser_form." + fieldName);
  for(i = 0; i < fieldObj.length; i++)
    if(fieldObj[i].value == queryValue) { fieldObj[i].selected = true; break; }
} // setSelects()

function setRadio(name, value) {
  var fieldObj = eval("document.newuser_form." + name);
  if (typeof fieldObj.value != "undefined") { // if single
    if (fieldObj.value == value) fieldObj.checked = true;
    else fieldObj.checked = false;
  } else // if multiple
    for(i = 0; i < fieldObj.length; i++)
      if(fieldObj[i].value == value) { fieldObj[i].checked = true; break; }
      else fieldsObj[i].checked = false;
} // setRadio()

function populate() {
  var fm = document.newuser_form;
  /*Use this code on top of page that calls on this function:
<%
Dim FName, FValue, FNameArray, FValueArray
For Each Item In Request.QueryString
  FName = Item
  FValue = Request.QueryString(Item)
  if FName <> "ani" then
     if len(FNameArray) > 0 then
        FNameArray = FNameArray + ", "
        FValueArray = FValueArray + ", "
     end if
     FNameArray = FNameArray + chr(34) + FName + chr(34)
     FValueArray = FValueArray + chr(34) + FValue + chr(34)
  end if
Next
%>
<script language=JavaScript>
  var names = new Array(<%=FNameArray%>);
  var values = new Array(<%=FValueArray%>);
</script>*/
  for(var i = 0; i < names.length; i++) {
    switch (eval("fm." + names[i] + ".type")) {
      case "text": case "password": case "hidden": eval('fm.' + names[i] + '.value = "' + values[i] + '"'); break;
      case "select-one": setSelects(names[i], values[i]); break;
      case "radio": case "checkbox": setRadio(names[i], values[i]); break;
    } // switch
  }
} // populate()

function getBillingAddress(fm) {
  if(fm.chkAddr.checked) {
    fm.FirstNameB.value = fm.FirstName.value;
    if (fm.FirstNameB.value.length > 0) { showNormImage("FirstNameB"); showNormImage("FirstName"); }
    else { showErrImage("FirstNameB"); showErrImage("FirstName"); }
    fm.LastNameB.value = fm.LastName.value;
    if (fm.LastNameB.value.length > 0) { showNormImage("LastNameB"); showNormImage("LastName"); }
    else { showErrImage("LastNameB"); showErrImage("LastName"); }
    fm.Address1B.value = fm.Address1.value;
    if (fm.Address1B.value.length > 0) { showNormImage("Address1B"); showNormImage("Address1"); }
    else { showErrImage("Address1B"); showErrImage("Address1"); }
    fm.Address2B.value = fm.Address2.value;
    fm.CityB.value = fm.City.value;
    if (fm.CityB.value.length > 0) { showNormImage("CityB"); showNormImage("City"); }
    else { showErrImage("CityB"); showErrImage("City"); }
    fm.StateB.value = fm.State.value;
    if (fm.StateB.value.length > 0) { showNormImage("StateB"); showNormImage("State"); }
    else { showErrImage("StateB"); showErrImage("State"); }
    fm.ZipB.value = fm.Zip.value;
    if (fm.ZipB.value.length > 0) { showNormImage("ZipB"); showNormImage("Zip"); }
    else { showErrImage("ZipB"); showErrImage("Zip"); }
  } else {
    fm.FirstNameB.value = ""; showErrImage("FirstNameB");
    fm.LastNameB.value = ""; showErrImage("LastNameB");
    fm.Address1B.value = ""; showErrImage("Address1B");
    fm.Address2B.value = "";
    fm.CityB.value = ""; showErrImage("CityB");
    fm.StateB.value = ""; showErrImage("StateB");
    fm.ZipB.value = ""; showErrImage("ZipB");
    fm.FirstNameB.focus();
  }
  setSelects('CountryB', fm.Country[fm.Country.selectedIndex].value);
} // getBillingAddress(fm)

function openWind(url, width, height) {
  remote = eval("window.open(url, 'Window', 'scrollbars=yes,width=" + width + ",height=" + height + "')");
}

// AF 7/31/01
function existObject(obj) { return document.newuser_form.elements[obj]; }

/* Expects a field name and makes sure name contain a vowels and length is bigger than 3
AF */
function fraudName(Name) {
  var name = eval("regForm." + Name + ".value.toLowerCase()");
  if (Name.indexOf("LastName") > -1 && name == "ng") return;
  if (name.length < 2 || !(name.indexOf("a") > -1 || name.indexOf("e") > -1 ||
     name.indexOf("i") > -1 || name.indexOf("o") > -1 || 
     name.indexOf("u") > -1 || name.indexOf("y") > -1)) eval("regForm." + Name + ".value = ''");
} // fraudName()
   
/* Expects two field names to compare and make sure they do not have the same values
   Calls the fraudName for each field
   AF */
function fraudNames(fName, lName) {
  if (existObject(fName)) {
    var fname = eval("regForm." + fName + ".value.toLowerCase()");
    var lname = eval("regForm." + lName + ".value.toLowerCase()");
    fraudName(fName); fraudName(lName);
    if (fname == lname) eval("regForm." + fName + ".value = ''");
  }
} // fraudNames()

/* Expects two field names to compare and make sure they do not contain the same values
   AF */
function fraudAddressName(Address, Name) {
  if (existObject(Address) && existObject(Name)) {
    var name = eval("regForm." + Name + ".value.toLowerCase()");
    var address = eval("regForm." + Address + ".value.toLowerCase()");
    if (name == address) eval("regForm." + Name + ".value = ''");
  }
} // fraudAddressName()

// Adjust ad window problem AF 7/25/01
if (window.name == "240x240") {
  window.open(window.location,"regWindow");
  window.history.back();
}