var g_IsMember = false;
var g_IsECC    = false;
var g_IsTest   = false;
var g_EccNumMembers = 0;
var g_EccNumMembersSelected = 0;
var g_bEcc = false;
var g_bEcc_team = false;


function dumpManySelect(sName, params, on_change_func)
{
  var sHtml = "<select name='" + sName + "' id='" + sName + "'";

  if (on_change_func != null)
    sHtml += " onchange='" + on_change_func + "(this.value)'";

  sHtml += ">";

  for (var i=0; i<params.length; i++)
  {
    var val;
    var text;

    if (typeof params[i] === "object")
    {
      val = params[i][0];
      text = params[i][1];
      if (text == null)
        text = params[i][0];
    }
    else
      val = text = params[i];

    sHtml += "<option value='" + val + "'>" + text + "</option>";
  }

  sHtml += "</select>";

  document.writeln(sHtml);
}

function dumpSelectNumbers(sName, start, end, bAsc, sOnSelect, sFirstFld)
{
  var sHtml = "<select name='" + sName + "' id='" + sName + "'" + ((sOnSelect != null) ? (" onchange='" + sOnSelect + "(this.value)'") : "") + ">\n";

  if (sFirstFld != null)
    sHtml += "<option value='" + sFirstFld + "'>" + sFirstFld + "</option>\n";

  if (bAsc)
    for (var i=start; i<=end; i++)
      sHtml += "<option value='" + i + "'>" + i + "</option>\n";
  else
    for (var i=end; i>=start; i--)
      sHtml += "<option value='" + i + "'>" + i + "</option>\n";

  sHtml += "</select>\n";

  return sHtml;
}

var selectMonths =
  [[0,'January'],[1,'February'],[2,'March'],[3,'April'],[4,'May'],[5,'June'],[6,'July'],[7,'August'],[8,'September'],[9,'October'],[10,'November'],[11,'December']];


function numbersonly(e, bBrackets)
{
  var key;
  var keychar;

  if (window.event)
    key = window.event.keyCode;
  else
  if (e)
    key = e.which;
  else
    return true;

  keychar = String.fromCharCode(key);

  // control keys
  if ((key==null) || (key== 0) || (key== 8) ||
      (key==   9) || (key==13) || (key==27) )
    return true;

  // numbers
  else if ((("0123456789").indexOf(keychar) > -1))
    return true;

  else if ((bBrackets) && ((".()-").indexOf(keychar) > -1))
    return true;

  return false;
}

function dumpDateSelect(prefix,yearmin,yearmax,yearsort)
{
  dumpManySelect   (prefix+'_month', selectMonths);
  document.writeln(dumpSelectNumbers(prefix+'_day'  ,1      ,31     ,true    ,null,"day" ));
  document.writeln(dumpSelectNumbers(prefix+'_year' ,yearmin,yearmax,yearsort,null,"year"));
}

function dumpBirthday()
{
  var year = (new Date()).getFullYear();
  return dumpDateSelect("birthday", 1920, year-17, false);
}

function dumpExpiry()
{
  var year = (new Date()).getFullYear();
  return dumpDateSelect("expiry", year, year+2, true);
}

function dumpRepack()
{
  var year = (new Date()).getFullYear();
  return dumpDateSelect("repack", year-2, year, true);
}

function heightType(type)
{
  document.getElementById('height_imperial').style.display = (type=='imperial') ? "inline" : "none";
  document.getElementById('height_metric'  ).style.display = (type=='metric'  ) ? "inline" : "none";
}

function referrerSelect(referrer)
{
  var bShow = false;
  var sDesc = "";

  if (referrer == 'search')
  {
    bShow = true;
    sDesc = "What search engine did you use?";
  }
  else
  if (referrer == 'Newspaper') // wow, really??
  {
    bShow = true;
    sDesc = "What newspaper did you see our ad in?";
  }
  else
  if (referrer == 'Radio')
  {
    bShow = true;
    sDesc = "What radio station were you listening to?";
  }
  else
  if (referrer == 'Poster')
  {
    bShow = true;
    sDesc = "Where did you see our poster?";
  }
  else
  if (referrer == 'tv')
  {
    bShow = true;
    sDesc = "What tv station were you watching?";
  }
  else
  if (referrer == 'Friend')
  {
    bShow = true;
    sDesc = "Please tell us your friend's name so that they can receive a referral credit";
  }
  else
  if (referrer == 'Other')
  {
    bShow = true;
    sDesc = "Where did you find out about us?";
  }

  var descElem = document.getElementById('referrerDetailsDescDiv');
  var inpElem  = document.getElementById('referrerDetailsInputDiv');

  if (bShow)
  {
    descElem.style.display = "block";
    inpElem .style.display = "block";
    descElem.innerHTML = sDesc;
  }
  else
  {
    descElem.style.display = "none";
    inpElem .style.display = "none";
  }
}

function bookNowSelect(val)
{
  document.getElementById('bookNowTable').style.display = (val == "true") ? "block"     : "none";
  document.getElementById('submitBtn'   ).value         = (val == "true") ? "Book Now!" : "Register Now!";
}


function JumpDate(mm,dd,fjc,times)
{
  this.Date = new Date();
  this.Date.setFullYear(this.Date.getFullYear(),mm-1,dd);
  this.value = this.Date.getFullYear() + "-" + ((mm<10) ? "0" : "") + mm + "-" + ((dd<10) ? "0" : "") + dd;
  this.day   = this.Date.toDateString().substring(0,10);
  this.fjc   = fjc;
  this.times = times;
  return this;
}

var jump_dates = new Array(
  new JumpDate( 1,  7, true , "000000000000"), // Sat
  new JumpDate( 1,  8, true , "000000000000"), // Sun
  new JumpDate( 1, 14, true , "000000000000"), // Sat
  new JumpDate( 1, 15, true , "000000000000"), // Sun
  new JumpDate( 1, 21, true , "000000000000"), // Sat
  new JumpDate( 1, 22, true , "000000000000"), // Sun
  new JumpDate( 1, 28, true , "000000000000"), // Sat
  new JumpDate( 1, 29, true , "000000000000"), // Sun
  new JumpDate( 2,  4, true , "000000000000"), // Sat
  new JumpDate( 2,  5, true , "000000000000"), // Sun
  new JumpDate( 2, 11, true , "000000000000"), // Sat
  new JumpDate( 2, 12, true , "000000000000"), // Sun
  new JumpDate( 2, 18, true , "000000000000"), // Sat
  new JumpDate( 2, 19, true , "000000000000"), // Sun
  new JumpDate( 2, 20, true , "000000000000"), // Mon (Family Day)
  new JumpDate( 2, 25, true , "000000000000"), // Sat
  new JumpDate( 2, 26, true , "000000000000"), // Sun
  new JumpDate( 3,  3, true , "000000000000"), // Sat
  new JumpDate( 3,  4, true , "000000000000"), // Sun
  new JumpDate( 3, 10, true , "000000000000"), // Sat
  new JumpDate( 3, 11, true , "000000000000"), // Sun
  new JumpDate( 3, 17, true , "000000000000"), // Sat
  new JumpDate( 3, 18, true , "000000000000"), // Sun
  new JumpDate( 3, 24, true , "000000000000"), // Sat
  new JumpDate( 3, 25, true , "000000000000"), // Sun
  new JumpDate( 3, 31, true , "000000000000"), // Sat
  new JumpDate( 4,  1, true , "000000000000"), // Sun
  new JumpDate( 4,  6, true , "000000000000"), // Fri (Good Friday)
  new JumpDate( 4,  7, true , "000000000000"), // Sat
  new JumpDate( 4,  8, true , "000000000000"), // Sun
  new JumpDate( 4, 14, true , "000000000000"), // Sat
  new JumpDate( 4, 15, true , "000000000000"), // Sun
  new JumpDate( 4, 21, true , "000000000000"), // Sat
  new JumpDate( 4, 22, true , "000000000000"), // Sun
  new JumpDate( 4, 28, true , "000000000000"), // Sat
  new JumpDate( 4, 29, true , "000000000000"), // Sat

  new JumpDate( 5,  3, false, "000000001111"), // Thu
  new JumpDate( 5,  4, false, "000000001111"), // Fri
  new JumpDate( 5,  5, true , "111111111100"), // Sat
  new JumpDate( 5,  6, true , "011111111100"), // Sun
  new JumpDate( 5,  7, false, "000000001111"), // Mon
  new JumpDate( 5, 10, false, "000000001111"), // Thu
  new JumpDate( 5, 11, false, "000000001111"), // Fri
  new JumpDate( 5, 12, true , "111111111100"), // Sat
  new JumpDate( 5, 13, true , "011111111100"), // Sun
  new JumpDate( 5, 14, false, "000000001111"), // Mon
  new JumpDate( 5, 17, false, "000000001111"), // Thu
  new JumpDate( 5, 18, false, "000000001111"), // Fri
  new JumpDate( 5, 19, true , "111111111100"), // Sat
  new JumpDate( 5, 20, true , "011111111100"), // Sun
  new JumpDate( 5, 21, true , "011111111111"), // Mon (Victoria Day Holiday)
  new JumpDate( 5, 24, false, "000000001111"), // Thu
  new JumpDate( 5, 25, false, "000000001111"), // Fri
  new JumpDate( 5, 26, true , "111111111100"), // Sat
  new JumpDate( 5, 27, true , "011111111100"), // Sun
  new JumpDate( 5, 28, false, "011111111100"), // Mon
  new JumpDate( 5, 31, false, "000000001111"), // Thu deleted 1 day AM

  new JumpDate( 6,  1, false, "000000001111"), // Fri
  new JumpDate( 6,  2, true , "111111111100"), // Sat
  new JumpDate( 6,  3, true , "011111111100"), // Sun
  new JumpDate( 6,  4, false, "000000001111"), // Mon
  new JumpDate( 6,  7, false, "000000001111"), // Thu
  new JumpDate( 6,  8, false, "000000001111"), // Fri
  new JumpDate( 6,  9, true , "111111111100"), // Sat
  new JumpDate( 6, 10, true , "011111111100"), // Sun
  new JumpDate( 6, 11, false, "000000001111"), // Mon
  new JumpDate( 6, 14, false, "000000001111"), // Thu
  new JumpDate( 6, 15, false, "000000001111"), // Fri
  new JumpDate( 6, 16, true , "111111111100"), // Sat
  new JumpDate( 6, 17, true , "011111111100"), // Sun
  new JumpDate( 6, 18, false, "000000001111"), // Mon
  new JumpDate( 6, 21, false, "000000001111"), // Thu
  new JumpDate( 6, 22, false, "000000001111"), // Fri
  new JumpDate( 6, 23, true , "111111111100"), // Sat
  new JumpDate( 6, 24, true , "011111111100"), // Sun
  new JumpDate( 6, 25, false, "000000001111"), // Mon
  new JumpDate( 6, 28, false, "000000001111"), // Thu
  new JumpDate( 6, 29, false, "000000001111"), // Fri
  new JumpDate( 6, 30, true , "011111111100"), // Sat added 1 day AM

  new JumpDate( 7,  1, true , "011111111100"), // Sun
  new JumpDate( 7,  2, true , "011111111111"), // Mon (Canada Day observed?)
  new JumpDate( 7,  5, false, "000000001111"), // Thu
  new JumpDate( 7,  6, false, "000000001111"), // Fri
  new JumpDate( 7,  7, true , "111111111100"), // Sat
  new JumpDate( 7,  8, true , "011111111100"), // Sun
  new JumpDate( 7,  9, false, "000000001111"), // Mon
  new JumpDate( 7, 12, false, "000000001111"), // Thu
  new JumpDate( 7, 13, false, "000000001111"), // Fri
  new JumpDate( 7, 14, true , "111111111100"), // Sat
  new JumpDate( 7, 15, true , "011111111100"), // Sun
  new JumpDate( 7, 16, false, "000000001111"), // Mon
  new JumpDate( 7, 19, false, "000000001111"), // Thu
  new JumpDate( 7, 20, false, "000000001111"), // Fri
  new JumpDate( 7, 21, true , "111111111100"), // Sat
  new JumpDate( 7, 22, true , "011111111100"), // Sun
  new JumpDate( 7, 23, false, "000000001111"), // Mon
  new JumpDate( 7, 26, false, "000000001111"), // Thu
  new JumpDate( 7, 27, false, "000000001111"), // Fri
  new JumpDate( 7, 28, true , "111111111100"), // Sat
  new JumpDate( 7, 29, true , "011111111100"), // Sun
  new JumpDate( 7, 30, false, "000000001111"), // Mon deleted 1 day AM

  new JumpDate( 8,  2, false, "000000001111"), // Thu
  new JumpDate( 8,  3, false, "000000001111"), // Fri
  new JumpDate( 8,  4, true , "111111111100"), // Sat
  new JumpDate( 8,  5, true , "011111111100"), // Sun
  new JumpDate( 8,  6, true , "011111111111"), // Mon (Civic holiday)
  new JumpDate( 8,  9, false, "000000001111"), // Thu
  new JumpDate( 8, 10, false, "000000001111"), // Fri
  new JumpDate( 8, 11, true , "111111111100"), // Sat
  new JumpDate( 8, 12, true , "011111111100"), // Sun
  new JumpDate( 8, 13, false, "000000001111"), // Mon
  new JumpDate( 8, 16, false, "000000001111"), // Thu
  new JumpDate( 8, 17, false, "000000001111"), // Fri
  new JumpDate( 8, 18, true , "111111111100"), // Sat
  new JumpDate( 8, 19, true , "011111111100"), // Sun
  new JumpDate( 8, 20, false, "000000001110"), // Mon
  new JumpDate( 8, 23, false, "000000001110"), // Thu
  new JumpDate( 8, 24, false, "000000001110"), // Fri
  new JumpDate( 8, 25, true , "111111111100"), // Sat
  new JumpDate( 8, 26, true , "011111111100"), // Sun
  new JumpDate( 8, 27, false, "000000001110"), // Mon
  new JumpDate( 8, 30, false, "000000001110"), // Thu
  new JumpDate( 8, 31, false, "000000001110"), // Fri added 1 day AM

  new JumpDate( 9,  1, true , "111111111100"), // Sat
  new JumpDate( 9,  2, true , "011111111100"), // Sun
  new JumpDate( 9,  3, true , "011111111100"), // Mon (Labour Day)
  new JumpDate( 9,  6, false, "000000001110"), // Thu
  new JumpDate( 9,  7, false, "000000001110"), // Fri
  new JumpDate( 9,  8, true , "111111111100"), // Sat
  new JumpDate( 9,  9, true , "011111111100"), // Sun
  new JumpDate( 9, 10, false, "000000001110"), // Mon
  new JumpDate( 9, 13, false, "000000001110"), // Thu
  new JumpDate( 9, 14, false, "000000001110"), // Fri
  new JumpDate( 9, 15, true , "111111111100"), // Sat
  new JumpDate( 9, 16, true , "011111111100"), // Sun
  new JumpDate( 9, 17, false, "000000001110"), // Mon
  new JumpDate( 9, 20, false, "000000001100"), // Thu
  new JumpDate( 9, 21, false, "000000001100"), // Fri
  new JumpDate( 9, 22, true , "111111111100"), // Sat
  new JumpDate( 9, 23, true , "011111111100"), // Sun
  new JumpDate( 9, 24, false, "000000001100"), // Mon
  new JumpDate( 9, 27, false, "000000001100"), // Thu
  new JumpDate( 9, 28, false, "000000001100"), // Fri
  new JumpDate( 9, 29, true , "111111111100"), // Sat
  new JumpDate( 9, 30, true , "011111111100"), // Sun

  new JumpDate(10,  1, false, "000000001100"), // Mon
  new JumpDate(10,  4, false, "000000001100"), // Thu
  new JumpDate(10,  5, false, "000000001100"), // Fri
  new JumpDate(10,  6, true , "111111111100"), // Sat
  new JumpDate(10,  7, true , "011111111100"), // Sun
  new JumpDate(10,  8, true , "011111111100"), // Mon (Thanksgiving)
  new JumpDate(10, 11, false, "000000001100"), // Thu
  new JumpDate(10, 12, false, "000000001100"), // Fri
  new JumpDate(10, 13, true , "111111111100"), // Sat
  new JumpDate(10, 14, true , "011111111100"), // Sun
  new JumpDate(10, 15, false, "000000001100"), // Mon
  new JumpDate(10, 18, false, "000000001100"), // Thu
  new JumpDate(10, 19, false, "000000001100"), // Fri
  new JumpDate(10, 20, true , "111111111100"), // Sat
  new JumpDate(10, 21, true , "011111111100"), // Sun
  new JumpDate(10, 22, false, "000000001100"), // Mon
  new JumpDate(10, 25, false, "000000001100"), // Thu
  new JumpDate(10, 26, false, "000000001100"), // Fri
  new JumpDate(10, 27, true , "111111111100"), // Sat
  new JumpDate(10, 28, true , "011111111100"), // Sun
  new JumpDate(10, 29, false, "000000001100"), // Mon deleted 1 day AM

  new JumpDate(11,  3, true , "000000000000"), // Sat
  new JumpDate(11,  4, true , "000000000000"), // Sun
  new JumpDate(11, 10, true , "000000000000"), // Sat
  new JumpDate(11, 11, true , "000000000000"), // Sun
  new JumpDate(11, 17, true , "000000000000"), // Sat
  new JumpDate(11, 18, true , "000000000000"), // Sun
  new JumpDate(11, 24, true , "000000000000"), // Sat
  new JumpDate(11, 25, true , "000000000000"), // Sun
  new JumpDate(12,  1, true , "000000000000"), // Sat
  new JumpDate(12,  2, true , "000000000000"), // Sun
  new JumpDate(12,  8, true , "000000000000"), // Sat
  new JumpDate(12,  9, true , "000000000000"), // Sun
  new JumpDate(12, 15, true , "000000000000"), // Sat
  new JumpDate(12, 16, true , "000000000000")  // Sun
//  new JumpDate(12, 22, true , "000000000000")  // Sat - have to comment these two out because registration.shtml can't handle them for some reason.  AM
//  new JumpDate(12, 23, true , "000000000000")  // Sun

);

function dump_dates()
{
  return do_dump_dates(document.getElementById('jumpTypeSelect').value == "tandem");
}

function do_dump_dates(bTandem)
{
  var sHtml = "<select name='jump_date' id='jumpDateSelect' onchange='onJumpDateSelect(" + bTandem + ")'>"
            + "<option value='-'>select date</option>";

  var minDate=new Date();
//  minDate.setFullYear(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()+1);
  var maxDate=new Date();
  maxDate.setFullYear(maxDate.getFullYear(), 11, 31);

  if (bTandem)
  {
//    minDate.setFullYear(minDate.getFullYear(),3,30);
    maxDate.setFullYear(maxDate.getFullYear(),10,1);
  }

  for (var i=0; i<jump_dates.length; i++)
    if ((jump_dates[i].Date > minDate) && (jump_dates[i].Date <= maxDate) && (bTandem || jump_dates[i].fjc))
      sHtml += "<option value='" + jump_dates[i].value + "'>" + jump_dates[i].day + "</option>"

  sHtml += "</select>";

  document.getElementById('JumpDateTd').innerHTML = sHtml;
  document.getElementById('JumpTimeTd').innerHTML = "&nbsp;";

  do_dump_times(bTandem);
}

function dump_times()
{
  return do_dump_times(document.getElementById('jumpTypeSelect').value == "tandem");
}

function do_dump_times(bTandem)
{
  var jump_date =  document.getElementById('jumpDateSelect').value;
  var timetd    =  document.getElementById('JumpTimeTd');

  if (jump_date == "-")
    return;

  if (!bTandem)
    return (timetd.innerHTML = "&nbsp;");

  for (var i=0; (i<jump_dates.length) && (jump_dates[i].value != jump_date); i++)
    ;

  if (i == jump_dates.length)
    return;

  var the_date = jump_dates[i];

  var sHtml = "<select name='jump_time' id='jumpTimeSelect'>"
            + "<option value='-'>select time</option>";

  if (the_date.times.charAt( 0) == "1") sHtml += "<option value='0800'> 8:00 am  </option>";
  if (the_date.times.charAt( 1) == "1") sHtml += "<option value='0900'> 9:00 am  </option>";
  if (the_date.times.charAt( 2) == "1") sHtml += "<option value='1000'>10:00 am  </option>";
  if (the_date.times.charAt( 3) == "1") sHtml += "<option value='1100'>11:00 am  </option>";
  if (the_date.times.charAt( 4) == "1") sHtml += "<option value='1200'>12:00 noon</option>";
  if (the_date.times.charAt( 5) == "1") sHtml += "<option value='1300'> 1:00 pm  </option>";
  if (the_date.times.charAt( 6) == "1") sHtml += "<option value='1400'> 2:00 pm  </option>";
  if (the_date.times.charAt( 7) == "1") sHtml += "<option value='1500'> 3:00 pm  </option>";
  if (the_date.times.charAt( 8) == "1") sHtml += "<option value='1600'> 4:00 pm  </option>";
  if (the_date.times.charAt( 9) == "1") sHtml += "<option value='1700'> 5:00 pm  </option>";
  if (the_date.times.charAt(10) == "1") sHtml += "<option value='1800'> 6:00 pm  </option>";
  if (the_date.times.charAt(11) == "1") sHtml += "<option value='1900'> 7:00 pm  </option>";

  sHtml += "</select>";

  timetd.innerHTML = sHtml;
}

function onJumpDateSelect(bTandem)
{
  var jtwarn    =  document.getElementById('jumpTypeWarning');
  var jdwarn    =  document.getElementById('jumpDateWarning');
  var jump_date =  document.getElementById('jumpDateSelect').value;

  if (!bTandem)
  {
    document.getElementById('JumpTimeTd').innerHTML = "&nbsp;";
    if (jdwarn != null) jdwarn.innerHTML = "";
    if (jtwarn != null) jtwarn.innerHTML = "The Solo First Jump Course runs weekends and holidays.  Please show up between 9:00 and 9:30 for the class.<br/>";
    return;
  }

  if (jtwarn != null)
    jtwarn.innerHTML = "Tandems are available Saturdays, Sundays, and holidays from 9 a.m. through 4 or 5 p.m., and Mondays, "
                     + "Thursdays, and Fridays starting at 4 p.m. - from the beginning of May through the end of October.<br/>  There is "
                     + "not really a 'best' time of day to book - you will love your jump regardless of what time you book it for! "
                     + "Please note that the reserved time is when we're expecting you to arrive on site here.  You will likely "
                     + "be jumping an hour or two after you arrive - weather permitting, of course.<br/>";

  var month = parseInt(jump_date.substring(5, 7),10)-1;
  var day   = parseInt(jump_date.substring(8,10),10);

  var jumpDate=new Date(); jumpDate.setFullYear(jumpDate.getFullYear(), month,              day);
  var  minDate=new Date();  minDate.setFullYear( minDate.getFullYear(), minDate.getMonth(), minDate.getDate()+7);

  if (jdwarn != null)
    jdwarn.innerHTML = (minDate > jumpDate) ? ("<br/><b><i>Be aware that we have very limited availability for tandems within 7 days from now. "
                                             + "Please submit your booking and then call us to confirm.</i></b>")
                                            : "";

  do_dump_times(bTandem);
}

function onBookingQtySelect(val)
{
  var jqwarn = document.getElementById('jumpQtyWarning');
  var jump_qty = parseInt(val,10);

  jqwarn.innerHTML = (jump_qty > 1) ? "<br/>When booking multiple people please have as many jumpers as possible go to this page to preregister - this will save time "
                                    + "when you arrive to jump.  Instructions will be emailed to you as part of your confirmation.<br/>"
                                    : "&nbsp;";
}

function get_url_param(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return null;
  else
    return results[1];
}

function leading_zero(iNum)
{
  return ((iNum < 10) ? "0" : "") + iNum;
}

function ecc_create_member(member_num,bVisible)
{
  var str=
    "<li id='li_ecc_team_member_" + member_num + "' style='display:" + (bVisible?"block":"none") + ";'>"
  +   "Member " + member_num + ":\n "
  +   "<select name='ecc_team_member_" + member_num + "_type' id='ecc_team_member_" + member_num + "_type'>"
  +     "<option value='0'>-- Select Type --</option>"
  +     "<option value='1'>Jumper</option>"
  +     "<option value='2'>Videographer</option>"
  +     "<option value='3'>Jumper Alternate</option>"
  +     "<option value='4'>Videographer Alternate</option>"
  +     "<option value='5'>Groupie</option>"
  +   "</select>\n "
  +   "<input type='text' name='ecc_team_member_" + member_num + "_name' id='ecc_team_member_" + member_num + "_name' size='30' maxlength='30'/> "
  + "</li>";

  return str;
}

function ecc_enable_select(bValue)
{
  if ((typeof bValue) != "boolean")
    bValue = (bValue == "true");
  g_bEcc = bValue;
  document.getElementById('ecc_div').style.display = bValue ? "block" : "none";
}

function ecc_team_select(bValue)
{
  if ((typeof bValue) != "boolean")
    bValue = (bValue == "true");
  g_bEcc_team = bValue;
  document.getElementById('ecc_team_div'        ).style.display = bValue ? "block" : "none";
  document.getElementById('ecc_div_group_events').style.display = bValue ? "block" : "none";

  if (!bValue)
    return;

  var sName = document.getElementById("firstname").value + " " + document.getElementById("lastname").value;
  document.getElementById("ecc_team_member_1_name").value = sName;
}

function ecc_create_members(iNumMembers)
{
  var sHtml =
      "<table>"
    + "<tr>"
    +   "<td class='descTdWide'>Number of team members:</td>"
    +   "<td>"
    +   dumpSelectNumbers('ecc_team_member_qty',2,12,true,"ecc_onchange_member_qty",null)
    +   "</td>"
    + "</tr>"
    + "<tr>"
    +   "<td colspan='2'>"
    +   "<ul>";

  g_EccNumMembers = iNumMembers;
  for (var iMember=1; iMember<=iNumMembers; iMember++)
    sHtml += ecc_create_member(iMember, false) + "\n";

  sHtml +=
        "</ul>"
   +    "</td>"
   +  "</tr>"
   +  "</table>";

  return sHtml;
}

function ecc_onchange_member_qty(iNumMembers)
{
  if (isNaN(iNumMembers))
  {
    alert("You can't select that value");
//    document.getElementById("ecc_team_member_qty").selectedIndex = 2;
    return false;
  }

  g_EccNumMembersSelected = iNumMembers;
  for (var i=1; i<=g_EccNumMembers; i++)
    document.getElementById("li_ecc_team_member_" + i).style.display = (i<=iNumMembers) ? "block" : "none";
}

function on_load()
{
  dump_dates();

  g_IsECC    = (get_url_param('ecc'   ) == "1");
  g_IsMember = (get_url_param('member') == "1") || g_IsECC;

  document.getElementById('reservationDiv').style.display = g_IsMember ? "none"   : "block";
  document.getElementById('memberDiv'     ).style.display = g_IsMember ? "block"  : "none" ;
  document.getElementById('regtype'       ).value         = g_IsMember ? "member" : "firsttime";
  document.getElementById('eccDiv'        ).style.display = g_IsECC    ? "block"  : "none" ;
  document.getElementById('eccNoteDiv'    ).style.display = g_IsECC    ? "block"  : "none" ;

  document.getElementById('ecc_div_teammates').innerHTML = ecc_create_members(12);
  ecc_onchange_member_qty(2);

  if (g_IsTest = (get_url_param('test') == "1"))
    document.getElementById('testDiv').style.display = "block";
}

function doSubmit()
{
  return validate(document.forms.namedItem('registration'));
}

function rentalGearSelect()
{
  var bIsRental = (getElem('rental_gear').value == "Yes");
  getElem('reserveTable' ).style.display = bIsRental ? "block" : "none";
  getElem('rentalGearDiv').style.display = bIsRental ? "none"  : "block";
}


var form = new Array();
var errs = '';

function clearErrors()
{
  var flds = ['referrer','trGend','trJDat','trExpr','trMembJumps','trRsrv','trBirt','trHigh','trWeig','trEmai','trFirN','trLasN','trPhn1','trENam','trPhn2','trEpn1','trEpn2','trCont','trMemb','trCoPN','trECCTeamName','trECCTeamPos'];

  for (var i=0; i<flds.length; i++)
  {
    var elem = document.getElementById(flds[i]);
    if (elem != null) elem.style.backgroundColor = "white";
  }
}

function getElem(elem) { return document.getElementById(elem); }

function sanitize(text)
{
  var textneu = text.replace(/&/g,"&amp;");
  textneu = textneu.replace(/</g,"&lt;");
  textneu = textneu.replace(/>/g,"&gt;");
  textneu = textneu.replace(/"/g,"&quot;");
  textneu = textneu.replace(/'/g,"&#39;");
  textneu = textneu.replace(/\r\n/g,"<br>");
  textneu = textneu.replace(/\n/g,"<br>");
  textneu = textneu.replace(/\r/g,"<br>");
  return(textneu);
}

function getFormElem(str)
{
  return document.forms.namedItem('registration').elements[str];
}

function new_val(step)
{
  clearErrors();

  form = new Array();
  var target = document.forms.namedItem('registration');
  for (i = 0; i < target.length; i++)
  {
    e = target.elements.item(i);
    form[e.name] = (e.type == "checkbox") ? e.checked : e.value;
  }

  var ok = true;
  // Doing it this way to make sure that every line is checked (otherwise javascript does conditional optimization)

  if (step == "1")
  {
    if (getFormElem("group_type") == null)
      ok = addError("Please select a", "booking/registration type before proceeding");
  }
  else
  if (step == "1a")
  {
    var elem = getFormElem("group_info");
    if (elem == null)
    {
      ok = addError("Please select a", "booking/registration type before proceeding");
    }
    else
    if (elem.value == "email")
    {
      if (!validateEmail('bookerEmail', false))
        ok = addError("Please enter a", "valid email address before proceeding");
    }
    else
    if (elem.value == "booking_id")
    {
      var elem = getFormElem("bookingId");
      if ((elem.length == 0) || (elem.value == "0") || (isNaN(parseInt(elem.value,10))))
        ok = addError("Please enter a", "valid booking id before proceeding");
    }
  }
  else
  if ((step == "2a") || (step == "2b"))
  {
    if (getFormElem("jump_type") == null)
      ok = addError("Please select a", "jump type before proceeding");
  }
  else
  if (step == "3a")
  {
    if (getFormElem("jump_qty_tandem").value == "#")
      ok = addError("Please select a", "quantity for tandems before proceeding");
  }
  else
  if (step == "3b")
  {
    if (getFormElem("jump_qty_solo").value == "#")
      ok = addError("Please select a", "quantity for solos before proceeding");
  }
  if (step == "4")
  {
    if (getFormElem("jump_date").value == "-")
      ok = addError("Please select a", "jump date before proceeding");
    else
    if (getFormElem("jump_type").value.indexOf("tandem") != -1)
    {
      var elem = getFormElem("jump_time");
      if ((elem == null) || (elem.value == "-"))
        ok = addError("Please select a", "jump time before proceeding");
    }
  }
  else
  if (step == "5")
  {
    if (getFormElem("jumped_before") == null)
      ok = addError("Please select", "whether or not you have jumped before");
  }
  else
  if (step == "6")
  {
    ok = validateNotMissing ('firstname' , 'First Name'              , "trFirN") && ok;
    ok = validateNotMissing ('lastname'  , 'Last Name'               , "trLasN") && ok;
    ok = validatePhone      ('phone_home', 'Phone Number'            , "trPhn1") && ok;
    ok = validateEmail      ('email', true) && ok;
    ok = validateContactType() && ok;
    ok = validateBirthday   () && ok;
    ok = validateHeight     () && ok;
    ok = validateWeight     () && ok;
    ok = validateGender     () && ok;

    if (isPresent('phone_other'))
      ok &= validatePhone('phone_other', 'Alternate phone number', 'trPhn2');

    if (ok)
      if (isPresent('phone_other_ext'))
        getElem('phone_other').value += " x" + getElem('phone_other_ext').value;
  }
  else
  if (step == "7")
  {
    ok = validateNotMissing ('emerg_name', 'Emergency Contact - Name', "trENam") && ok;

    if (isPresent('emerg_phone_other'))
      ok &= validatePhone('emerg_phone_other', 'Emergency contact - Alternate phone number', 'trEpn2');

    if (!validatePhone('emerg_phone_home'  , 'Emergency Contact - Phone Number', 'trEpn1'))
    {
      if (!(validateNotMissing('emerg_address', 'Emergency Contact - Address')
         && validateNotMissing('emerg_city'   , 'Emergency Contact - City')))
      {
        ok = addError('Emergency contact', 'requires either a phone number or address+city', 'trEpn1');
      }
      else
      if (confirm("Although we do not require both a mailing and phone number\n"
                + "for your emergency contact in the event of an emergency it\n"
                + "is better to be able to contact someone immediately.  Do\n"
                + "you wish to continue without providing a phone number?") == false)
      {
        ok = addError('Emergency contact', 'should have a phone number', 'trEpn1');
      }
    }

    if (ok)
      if (isPresent('emerg_phone_other_ext'))
        getElem('emerg_phone_other').value += " x" + getElem('emerg_phone_other_ext').value;
  }
  else
  if (step == "9")
  {
    ok = validateReferrer() && ok;
  }
  else
  if (step == "10")
  {
    ok = validateRepack  () && ok;
    ok = validateExpiry  () && ok;

    var elem = getFormElem("member_number");
    if ((elem.length == 0) || (elem.value == "0") || (isNaN(parseInt(elem.value,10))))
      ok = addError("Please enter a", "valid membership number before proceeding", "trMemb");

    var elem = getFormElem("member_cop");
    if (elem.value.length == 1)
    {
      var elem = getFormElem("member_cop_number");
      if ((elem.length == 0) || (elem.value == "0") || (isNaN(parseInt(elem.value,10))))
        ok = addError("Please enter a", "valid CoP number before proceeding", "trCoPN");
    }
  }

  return (ok ? true : invalid());
}

function validate(target)
{
  clearErrors();

  form = new Array();
  for (i = 0; i < target.length; i++)
  {
    e = target.elements.item(i);
    form[e.name] = (e.type == "checkbox") ? e.checked : e.value;
  }

  // Doing it this way to make sure that every line is checked (otherwise javascript does conditional optimization)
  var ok = true;
  ok = validateNotMissing ('firstname' , 'First Name'              , "trFirN") && ok;
  ok = validateNotMissing ('lastname'  , 'Last Name'               , "trLasN") && ok;
  ok = validatePhone      ('phone_home', 'Phone Number'            , "trPhn1") && ok;
  ok = validateNotMissing ('emerg_name', 'Emergency Contact - Name', "trENam") && ok;
  ok = validateEmail      ('email', true)                                      && ok;
  ok = validateContactType()                                                   && ok;
  ok = validateWeight     ()                                                   && ok;
  ok = validateHeight     ()                                                   && ok;
  ok = validateBirthday   ()                                                   && ok;
  ok = validateRepack     ()                                                   && ok;
  ok = validateExpiry     ()                                                   && ok;
  ok = validateReferrer   ()                                                   && ok;
  ok = validateGender     ()                                                   && ok;
  ok = validateJumpDate   ()                                                   && ok;

  if (isPresent('phone_other'))
    ok &= validatePhone('phone_other', 'Alternate phone number', 'trPhn2');

  if (isPresent('emerg_phone_other'))
    ok &= validatePhone('emerg_phone_other', 'Emergency contact - Alternate phone number', 'trEpn2');

  if (!validatePhone('emerg_phone_home'  , 'Emergency Contact - Phone Number', 'trEpn1'))
  {
    if (!(validateNotMissing('emerg_address', 'Emergency Contact - Address')
       && validateNotMissing('emerg_city'   , 'Emergency Contact - City')))
    {
      ok = addError('Emergency contact', 'requires either a phone number or address+city', 'trEpn1');
    }
    else
    if (confirm("Although we do not require both a mailing and phone number\n"
              + "for your emergency contact in the event of an emergency it\n"
              + "is better to be able to contact someone immediately.  Do\n"
              + "you wish to continue without providing a phone number?") == false)
    {
      ok = addError('Emergency contact', 'should have a phone number', 'trEpn1');
    }
  }

  if (g_IsMember)
  {
    //- # of jumps not checked (member_jumps)
    //- CoP not checked (member_cop is != '-', and if not 'None' then check member_cop_number)

    var elem = getFormElem("member_jumps");
    if ((elem.length == 0) || (elem.value == "0") || (isNaN(parseInt(elem.value,10))))
      ok = addError("Please enter a", "valid number of jumps before proceeding", "trMembJumps");

    var elem = getFormElem("member_number");
    if ((elem.length == 0) || (elem.value == "0") || (isNaN(parseInt(elem.value,10))))
      ok = addError("Please enter a", "valid membership number before proceeding", "trMemb");

    var elem = getFormElem("member_cop");
    if (elem.value == "-")
    {
      ok = addError("Please enter a", "membership CoP type", "trCoPN");
    }
    else
    if (elem.value.length == 1)
    {
      var elem = getFormElem("member_cop_number");
      if ((elem.length == 0) || (elem.value == "0") || (isNaN(parseInt(elem.value,10))))
        ok = addError("Please enter a", "valid CoP number before proceeding", "trCoPN");
    }
  }

  if (g_bEcc)
  {
    if (g_bEcc_team)
    {
      ok &= validateNotMissing('ecc_team',     'ECC Team Name',     'trECCTeamName');
      ok &= validateNotMissing('ecc_position', 'ECC Team Position', 'trECCTeamPos' );

      // validate at least one team event selected
      var bTeamEventSelected =
         getElem('ecc_event_2scf').checked
      || getElem('ecc_event_4rcf').checked
      || getElem('ecc_event_fref').checked
      || getElem('ecc_event_4vfs').checked
      || getElem('ecc_event_4fso').checked
      || getElem('ecc_event_4fsi').checked
      || getElem('ecc_event_10fs').checked;

      if (!bTeamEventSelected)
        ok = addError('Team Event', 'requires at least one selection');

      var vJumpers = 0;

      // validate team member names, at least 2 jumpers
      for (var i=1; i<=g_EccNumMembersSelected; i++)
      {
        var vType = getElem("ecc_team_member_" + i + "_type").value;
        var vName = getElem("ecc_team_member_" + i + "_name").value;

        if (vType == "0")
        {
          ok = addError("ECC Jumper " + i + " type error", "must select jumper type");
        }
        else if (vType == "1")
          vJumpers++;

        if (!isPresent("ecc_team_member_" + i + "_name"))
          ok = addError("ECC Jumper " + i + " name error", "must enter jumper name");
      }

      if (vJumpers < 2)
        ok = addError("ECC Jumpers", "must be at least 2 jumpers");
    }
    else
    {
      // validate at least one solo event selected

      var bSoloEventSelected =
         getElem('ecc_event_clao').checked
      || getElem('ecc_event_claj').checked
      || getElem('ecc_event_spao').checked
      || getElem('ecc_event_spaj').checked
      || getElem('ecc_event_capi').checked
      || getElem('ecc_event_noch').checked
      || getElem('ecc_event_swch').checked;

      if (!bSoloEventSelected)
        ok = addError('Solo Event', 'requires at least one selection');
    }
  }

  if (ok)
  {
    if (isPresent('phone_other_ext'))
      getElem('phone_other').value += " x" + getElem('phone_other_ext').value;

    if (isPresent('emerg_phone_other_ext'))
      getElem('emerg_phone_other').value += " x" + getElem('emerg_phone_other_ext').value;
  }

  return (ok ? true : invalid());
}

function invalid()
{
  alert(errs);
  errs = '';

  return false;
}

function addError(field, error, fld)
{
  if (fld != null)
  {
    try { document.getElementById(fld).style.backgroundColor = "yellow"; }
    catch (ex) { alert('error finding: ' + fld); }
  }

  errs += field + ' ' + error + '\n';
  return false;
}

function validateContactType()
{
  if (form['contact_type'] != 'telepathy')
    return true;

  alert("Attempting to contact you telepathically...\n\nPlease wait...");
  alert("Still trying...");
  return addError('Unfortunately we cannot seem to reach you telepathically.\n    This could be due to wearing a tin foil or aluminum hat\n',
                  '    or perhaps you have a defective delta wave brain pattern.\n    Please select a different contact method.', 'trCont');
}

function validateReferrer()
{
  var sReferrer = document.getElementById('referrer').value;

  if (sReferrer == "-")
    return addError('Please tell us', 'where you heard about us', 'referrer');

  return true;
}

function validateGender()
{
  var sGender = document.getElementById('gender').value;

  if (sGender == "0")
    return addError('Please tell us', 'your gender', 'trGend');

  return true;
}

function validateJumpDate()
{
  var book_now_elem = document.getElementById('booknow');

  if (document.getElementById('regtype').value != "firsttime")
  {
    book_now_elem.value = "false";
    return true;
  }

  if (book_now_elem.value != "true")
    return true;

  var is_tandem = (document.getElementById('jumpTypeSelect').value == "tandem");
  var jump_date =  document.getElementById('jumpDateSelect').value; // YYYY-MM-DD

  if (jump_date == "-")
    return addError('You must select', 'a date for your jump', 'trJDat');
  if (!is_tandem)
    return true;

  var jump_time =  document.getElementById('jumpTimeSelect').value; // HHMM

  if (jump_time == "-")
    return addError('You must select', 'a time for your jump', 'trJDat');

  return true;
}

function validateExpiry()
{
  if (document.getElementById('regtype').value == "firsttime")
    return true;

  if (form['expiry_year'] == "year")
    return addError('You must select', 'a year for your membership expiry', 'trExpr');
  if (form['expiry_day' ] == "day")
    return addError('You must select', 'a day of the month for your membership expiry', 'trExpr');

  var expiry_year  = parseInt(form['expiry_year' ],10);
  var expiry_month = parseInt(form['expiry_month'],10);
  var expiry_day   = parseInt(form['expiry_day'  ],10);

  var todayDate  = new Date();
  var expiryDate = new Date();
  expiryDate.setFullYear(expiry_year, expiry_month, expiry_day);

  if (expiryDate < todayDate)
    alert('Please be aware that your membership will need to be renewed before you jump');

  document.getElementById('reg_exp').value = expiry_year + '-' + (expiry_month+1) + '-' + expiry_day;

  return true;
}

function validateRepack()
{
  if ((getElem('regtype').value == "firsttime") || (getElem('rental_gear').value == "No"))
  {
    getElem('repacked').value = "0000-00-00";
    return true;
  }

  if (form['repack_year'] == "year")
    return addError('You must select', 'a year for your reserve repack', 'trRsrv');
  if (form['repack_day' ] == "day")
    return addError('You must select', 'a day of the month for your reserve repack', 'trRsrv');

  var repack_year  = parseInt(form['repack_year' ],10);
  var repack_month = parseInt(form['repack_month'],10);
  var repack_day   = parseInt(form['repack_day'  ],10);

  var repackDate=new Date();
  repackDate.setFullYear(repack_year, repack_month, repack_day);

  var todayDate = new Date();
  var minRepack = new Date(); minRepack.setFullYear(todayDate.getFullYear(), todayDate.getMonth()-6, todayDate.getDate());

  if (repackDate > todayDate)
    return addError('Time travel', 'is not possible - reserve cannot have been repacked in the future!', 'trRsrv');

  if (minRepack > repackDate)
    alert("Please be aware that your reserve will need to be\nrepacked before you jump (every 6 months)");

  document.getElementById('repacked').value = repack_year + '-' + (repack_month+1) + '-' + repack_day;

  return true;
}

function validateBirthday()
{
  var birthDate=new Date();
  var minBirthDate=new Date();
  var jump_date = document.getElementById('jumpDateSelect').value; // YYYY-MM-DD

  if (form['birthday_year' ] == "year")
    return addError('You must select', 'a year for your birthday', 'trBirt');
  if (form['birthday_day'  ] == "day")
    return addError('You must select', 'a day of the month for your birthday', 'trBirt');

  var birth_year  = parseInt(form['birthday_year' ],10);
  var birth_month = parseInt(form['birthday_month'],10);
  var birth_day   = parseInt(form['birthday_day'  ],10);

  var jump_year   = parseInt(jump_date.substring(0, 4),10);
  var jump_month  = parseInt(jump_date.substring(5, 7),10);
  var jump_day    = parseInt(jump_date.substring(8,10),10);

  birthDate   .setFullYear(birth_year,   birth_month, birth_day);
  minBirthDate.setFullYear(jump_year-18, jump_month-1, jump_day);

  if (!g_IsMember && (minBirthDate < birthDate))
    return addError('You must be', 'at least 18 years old on the day of your jump', 'trJDat');

  document.getElementById('birthday').value = birth_year + '-' + (birth_month+1) + '-' + birth_day;

  return true;
}

function validateHeight()
{
  var height = 0;
  if (form['height_type'] == 'imperial')
  {
    var height_ft = parseInt(form['height_ft'],10);
    var height_in = parseInt(form['height_in'],10);

    if (form['height_ft'] == "ft")
      return addError('You must select', 'the feet for your height', 'trHigh');
    if (form['height_in'] == "in")
      return addError('You must select', 'the inches for your height', 'trHigh');

    height = Math.floor((height_ft*12 + height_in) * 2.54);
  }
  else
  {
    if ((form['height_cm'].length == 0) || (isNaN(form['height_cm'])))
      return addError('You must enter', 'the centimeters for your height', 'trHigh');

    height = parseInt(form['height_cm'],10);
  }

  if ((height < 152) || (height > 213))
  {
    alert("Although we will do our best to accomodate you, please note that\n" +
          "because of your height it may not be possible for you to jump.");
//    return addError('You must be', 'between 4\'10"/147cm and 7\'0"/213cm to jump');
  }

  if (height > 213)
    return addError('You must be', 'between 4\'10"/147cm and 7\'0"/213cm to jump', 'trHigh');

  document.getElementById('height').value = height;

  return true;
}

function validateWeight()
{
  var weight = parseFloat(form['weight_raw']);
  if (form['weight_type'] == 'kgs')
    weight = Math.floor(weight*2.2);
  else
  if (form['weight_type'] == 'stone')
    weight = Math.floor(weight*14);
  else
    weight = Math.floor(weight);

  if (isNaN(weight))
    return addError('Weight', 'is missing', 'trWeig');

  if ((weight < 70) || (weight > 250))
    return addError('You must be', 'between 70 and 250 lbs to jump', 'trWeig');

  document.getElementById('weight').value = weight;

  return true;
}

function validateChecked(field, desc)
{
  if (form[field] != true)
    return addError(desc, 'is not checked');
  else
    return true;
}

function isPresent(field)
{
  return !((form[field] == null) || (form[field].length == 0));
}

function validateNotMissing(field,desc,fld)
{
  if (isPresent(field))
    return true;

  return addError(desc, 'is missing', fld);
}

function validatePhone(field,desc,fld)
{
  if (!validateNotMissing(field,desc,fld)) return false;

  if (/^[1-9][0-9][0-9]-[1-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/.test(form[field]))
    return true;

  if (/^[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/.test(form[field]))
    return true;

  return addError(desc, 'is not valid - must be in format ###-###-####', fld);
}

function validatePhoneNum(n)
{
  return /^[1-9][0-9][0-9]{8,}/.test(n);
}


function validateEmail(fld,bOptional)
{
  var formField = form[fld];

  if (formField.length < 1)
  {
    if (bOptional &&
        confirm("Warning: no email address specified\n\n"
              + "Although it is not necessary to provide an email address\n"
              + "we cannot send you an email confirmation without one, and\n"
              + "it may take a couple of days to call you back to confirm.\n\n"
              + "Do you wish to continue without one?") == true)
    {
      return true;
    }
    return addError('Email address', 'is empty', 'trEmai');
  }
  if (noAtSign       (formField)) return addError('Email address', 'does not contain "@"', 'trEmai');
  if (nothingBeforeAt(formField)) return addError('Email address', 'does not contain anything before "@"', 'trEmai');
  if (noLeftBracket  (formField)) return addError('Email address', 'contains ] but no [', 'trEmai');
  if (noRightBracket (formField)) return addError('Email address', 'contains [ but no ]', 'trEmai');
  if (noValidPeriod  (formField)) return addError('Email address', 'does not contain a period', 'trEmai');
  if (noValidSuffix  (formField)) return addError('Email address', 'must contain a two, three or four character suffix.', 'trEmai');

  return true;
}

function noAtSign (formField)
{
  // check that there is an '@' character in the string
  return (formField.indexOf('@', 0) == -1);
}

function nothingBeforeAt (formField)
{
  // check there is at least one character before the '@' character
  return (formField.indexOf('@', 0) < 1);
}

function noLeftBracket (formField)
{
  // if email address in form 'user@[255,255,255,0]', then check for left bracket
  return ( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']');
}

function noRightBracket (formField)
{
  // if email address in form 'user@[255,255,255,0]', then check for right bracket
  return (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']');
}

function noValidPeriod (formField)
{
  // if email address in form 'user@[255,255,255,0]', then we are not interested
  if (formField.indexOf ( '@', 0 ) > 1 && formField.charAt (formField.length - 1 ) == ']')
      return ( false );

  // check that there is at least one period in the string
  if (formField.indexOf ( '.', 0 ) == -1)
      return ( true );

  return ( false );
}

function noValidSuffix(formField)
{
  // if email address in form 'user@[255,255,255,0]', then we are not interested
  if (formField.indexOf('@', 0) > 1 && formField.charAt(formField.length - 1) == ']') {
      return ( false );
  }

  // check that there is a two or three character suffix after the last period
  var len = formField.length;
  var pos = formField.lastIndexOf ( '.', len - 1 ) + 1;
  if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
      return ( true );
  } else {
      return ( false );
  }
}

