// confirms integer >= 1
var regex_posInt = /^[1-9](\d)*$/;

var regex_zipcode = /^\d{5}(-?\d{4})?$/;
var regex_postalcode = /^[A-Za-z]{1}\d{1}[A-Za-z]{1}[\s]{1}\d{1}[A-Za-z]{1}\d{1}$/;
var regex_canada = /^((Canada)|(CANADA)|(canada))$/;

var regex_email = /^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*\.\w{2,3}$/;

var regex_phone = /^\d{3}-?\d{3}-?\d{4}[\s]*((x|ext)[\s]*\d+)?$/;
  
// confirms text entry fields not just white space
var regexWhiteSpace  = /^\s+$/;	

// question constants
var regPref                = "quest2";
var seminarTypeWithExam    = "quest4";
var seminarTypeNoExam      = "quest5";
var seminarDateCISSP5day   = "quest8";
var seminarDateCISSPmulti  = "quest9";
var seminarDateCAP2day     = "quest10";
var seminarDateCAPmulti    = "quest52";
var examType               = "quest7";
var examDateCISSP          = "quest14";
var examDateCAP            = "quest15";
var examFormCAP            = "quest12";
var examFormCISSP          = "quest13";
var CISSP5dayNoExam        = "quest16";
var CISSP5dayWithExam      = "quest17";
var CISSPmultiNoExam       = "quest18";
var CISSPmultiWithExam     = "quest19";
var CAP2dayNoExam          = "quest20";
var CAP2dayWithExam        = "quest21";
var CAPmultiNoExam         = "quest20";
var CAPmultiWithExam       = "quest21";
var CISSPExamOnly          = "quest24";
var CAPExamOnly            = "quest25";
var ISSAChapter            = "quest22";
var ISSAMembership         = "quest23";
var studentName            = "quest27";
var studentPhone           = "quest28";
var studentEmail           = "quest29";
var billingName            = "quest31";
var billingAddress         = "quest32";
var billingCity            = "quest33";
var billingState           = "quest34";
var billingZip             = "quest35";
var billingCountry         = "quest36";
var billingPhone           = "quest37";
var billingEmail           = "quest38";
var specialNeeds           = "quest39";
var paymentMethod          = "quest45";
var billingInfoFrom        = "quest46";

// Registration preferences
var SEMINAR_AND_EXAM       = "Seminar and Exam";
var SEMINAR_ONLY           = "Seminar Only";
var EXAM_ONLY              = "Exam Only";

// Seminar types
var CISSP_5DAY             = "CISSP 5-Day";
var CISSP_MULTI_WK         = "CISSP Multi-Week";
var CAP_2DAY               = "CAP 2-Day";
var CAP_MULTI_WK           = "CAP Multi-Week";


// Exam type
var CISSP_EXAM             = "CISSP";
var CAP_EXAM               = "CAP";

var SKIP                   = "NOT USED -- SKIP";
var ONLINE                 = "Credit Card Online";
var PROMPT                 = "Prompt Me";
var BILLING_ADDR           = "Billing Address";

// If a date has the following text in it, don't allow user to select that date
var CLASS_FULL             = "Sold Out";
var WAIT_LIST              = "Wait List";

// Messages
var NO_OBJECT   = "Requested question not found: ";

var NO_REG_PREF = "Select a REGISTRATION PREFERENCE to continue.";
var NO_SEM_TYPE = "Select a SEMINAR TYPE to continue.";
var NO_SEM_DATE = "Select a SEMINAR DATE to continue.";
var MO_EXAM_DATE= "Select an EXAM DATE to continue.";
var NO_REG_TYPE = "Select a REGISTRATION TYPE to continue.";
var NO_PAY_METH = "Select a PAYMENT METHOD to continue.";
var NO_BILLING_INFO_FROM  = 
     "Select a BILLING INFO FROM to continue.";

var NO_STUDENT_NAME    = "Enter STUDENT NAME to continue.";
var NO_STUDENT_PHONE   = "Enter STUDENT PHONE to continue.";
var NO_STUDENT_EMAIL   = "Enter STUDENT E-MAIL to continue.";

var INV_STUDENT_PHONE  = "Invalid STUDENT PHONE : ";
var INV_STUDENT_EMAIL  = "Invalid STUDENT EMAIL : ";
var INV_BILLING_PHONE  = "Invalid BILLING PHONE : ";
var INV_BILLING_EMAIL  = "Invalid BILLING EMAIL : ";
var INV_BILLING_ZIP    = "Invalid BILLING ZIPCODE : ";
var INV_BILLING_POST   = "Invalid BILLING POSTAL CODE : ";

var VALID_PHONE_FORMAT = "Valid format: NNN-NNN-NNNN extNNNN \n"+
                         "\tWhere N is a digit 0-9 and \n"+
                         "\tand extNNNN is optional.";
var VALID_POST_FORMAT  = "Valid format: ANA NAN \n"+
                         "\tWhere N is a digit 0-9 and \n"+
                         "\tand A is a letter A-Z.";

var NO_BILLING_NAME    = "Enter BILLING NAME to continue.";
var NO_BILLING_ADDRESS = "Enter BILLING ADDRESS to continue.";
var NO_BILLING_CITY    = "Enter BILLING CITY to continue.";
var NO_BILLING_STATE   = "Enter BILLING STATE to continue.";
var NO_BILLING_ZIP     = "Enter BILLING ZIP to continue.";

// variables for input fields maxLength - Verisign limits
var nameMaxLength    = 60;
var addressMaxLength = 60;
var cityMaxLength    = 32;
var stateMaxLength   = 20;
var countryMaxLength = 32;
var zipMaxLength     = 15;
var emailMaxLength   = 40;
var phoneMaxLength   = 20;

// types of spans
var DAYSPAN     = "dayspan";
var MONTHSPAN   = "monthspan";
var DAYONLYSPAN = "dayonlyspan";

function trimSpaces(obj)
{
  if (obj==null)  return obj;
  if (obj.value==null) return obj;

  var i;
  s1 = obj.value;
  
  // strips leading whitespace
  for(i=0; (i < s1.length) && (s1.charAt(i) == ' '); i++);

  if (i==s1.length)
  {
    obj.value = "";
    return obj;
  }

  s1 = s1.substring(i, s1.length);

  // strips trailing whitespace
  for(i=s1.length-1; (i >= 0) && (s1.charAt(i) == ' '); i--);
  
  s1 = s1.substring(0, i+1);
  obj.value = s1;
  
  return obj;
}

// Determine if selected registration type allowed.
// If user registrating for course less than 16 days from now,
// user required to pay standard rate.  This is enforced by
// "whiting" out the color of the <tr> for the discounted rate
// options.
function registrationOptionAllowed ( obj )
{
   var trObj = obj.parentNode.parentNode;    // retrieve <tr>
   var divObj= trObj.parentNode;      // retrieve outer <div>

   var cName = trObj.style.color;
   if ( cName=="white" )
   {
      // selection registration type not allowed!
      // reset to standard rate.

      // ensure ISSA divs are closed.
      document.getElementById (ISSAChapter+"OuterDiv")
         .style.display="none";
      document.getElementById (ISSAMembership+"OuterDiv")
         .style.display="none";

      alert ( "Discounted rate not applicable - Less than 16 days until course." );

      // reset standard rate
      var regTypeOption = divObj
             .getElementsByTagName("input");
      regTypeOption[0].checked = false;  // turn off
      regTypeOption[1].checked = true;   // standard rate
      regTypeOption[2].checked = false;  // turn off
   }
}

   // MMMMM DD-DD, YYYY
   var regexDaySpan = /(Jan|Feb|March|April|May|June|July|Aug|Sept|Oct|Nov|Dec|January|February|August|September|October|November|December)[\s]{1}(\d{1}|\d{2})-(\d{1}|\d{2}),[\s]{1}(\d{4})/;
   // MMMMM DD, YYYY
   var regexDayOnlySpan = /(Jan|Feb|March|April|May|June|July|Aug|Sept|Oct|Nov|Dec|January|February|August|September|October|November|December)[\s]{1}(\d{1}|\d{2}),[\s]{1}(\d{4})/;
   // MMMMM DD - MMMMM DD, YYYY
   var regexMonthSpan = /(Jan|Feb|March|April|May|June|July|Aug|Sept|Oct|Nov|Dec)[\s]{1}(\d{1}|\d{2})[\s]-[\s](Jan|Feb|March|April|May|June|July|Aug|Sept|Oct|Nov|Dec|January|February|August|September|October|November|December)[\s]{1}(\d{1}|\d{2}),[\s]{1}(\d{4})/;

function retrieveStartDate( datespan )
{
   if( datespan=="")  return datespan;

   var ar = regexDaySpan.test(datespan);
   if (ar)
       var dString = RegExp.$1+" "+RegExp.$2+", "+RegExp.$4;
   else
   {
      ar = regexMonthSpan.test(datespan);
      if (ar)
          var dString = RegExp.$1+" "+RegExp.$2+", "+RegExp.$5;
      else
      {
          ar = regexDayOnlySpan.test(datespan);
          if (ar)
             var dString = RegExp.$1+" "+RegExp.$2+", "+RegExp.$3;
          else
          {
             alert( "retrieveStartDate: date format not recognized - "+ datespan);
             return "";
          }
      }
   }
   return dString;
}

// Determine if discounted rate options apply to seminar/exam
// date(s) selected.  If course already passed, inform user that
// another date selection is required.  If 16 or more days, all
// rate options displayed.  Otherwise, standard rate option 
// selected and discount rate options are "whited" out.
//
function displayMonthDaySpan( obj, idx )
{
   var diff = 0;

   if (idx!=0)
   {
      // Retrieve display text of option selected.
      var lst = obj.getElementsByTagName( "option");
      var str = lst[idx].innerHTML;

      if ( str && str.indexOf(CLASS_FULL) != -1 )
      {
           alert("The selected class/exam is full ."+
                     " Please make another selection.");
           obj.selectedIndex = 0;
           return;
      }
      else if ( str && str.indexOf(WAIT_LIST) != -1 )
      {
           alert("The selected class/exam is only accepting entries to a wait list."+
                     " Please contact training@enginsol.com to be added to the wait list.");
           obj.selectedIndex = 0;
           return;
      }

      var dateString = retrieveStartDate( str );
      if (dateString =="")  return;  // error check

      var currentDate = new Date();  // today
      fixDate( currentDate );

      var classDate = new Date(dateString);  // start of course
      var diff = classDate - currentDate;
   }
   // check if date past
   if (diff <0)
   {
       alert("The selected date has passed."+
             " Please select a date in the future.");
       obj.selectedIndex = 0;
   }
   else
   {
       // calculate the number of days until seminar/exam
       var days = Math.ceil( diff/86400000 ); // nbr millsecs in day

       // determine what to do       
       var q8=document.getElementById(seminarDateCISSP5day+"OuterDiv" )
                      .style.display;
       var q9=document.getElementById(seminarDateCISSPmulti+"OuterDiv" )
                      .style.display;
       var q10=document.getElementById(seminarDateCAP2day+"OuterDiv")
                      .style.display;
       var qCAPmulti=document.getElementById(seminarDateCAPmulti+"OuterDiv")
                      .style.display;
       var q14=document.getElementById(examDateCISSP+"OuterDiv")
                      .style.display;
       var q15=document.getElementById(examDateCAP+"OuterDiv")
                      .style.display;

       // close all registration type questions
       document.getElementById(CISSP5dayNoExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CISSP5dayWithExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CISSPmultiNoExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CISSPmultiWithExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CAP2dayNoExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CAP2dayWithExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CAPmultiNoExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CAPmultiWithExam+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CISSPExamOnly+"OuterDiv")
                      .style.display= "none";
       document.getElementById(CAPExamOnly+"OuterDiv")
                      .style.display= "none";

       if (idx==0)  return;  // closed registration types only 

       var quest = "";
       var questExamDate = "";
       var questSeminarDate = "";

       // find out how we got here and what registration type 
       // question should be displayed.
       if ( q8=="block" )
          if ( q14=="block" )
          {
             quest = CISSP5dayWithExam;
             questExamDate = examDateCISSP;
             questSeminarDate = seminarDateCISSP5day;
          }
          else
          {
             quest = CISSP5dayNoExam;
          }
       else if ( q9=="block" )
          if ( q14=="block" )
          {
             quest = CISSPmultiWithExam;
             questExamDate = examDateCISSP;
             questSeminarDate = seminarDateCISSPmulti;
          }
          else
          {
             quest = CISSPmultiNoExam;
          }
       else if ( q10=="block" )
          if ( q15=="block" )
          {
             quest = CAP2dayWithExam;
             questExamDate = examDateCAP;
             questSeminarDate = seminarDateCAP2day;
          }
          else
          {
             quest = CAP2dayNoExam;
          }
       else if ( qCAPmulti=="block" )
          if ( q15=="block" )
          {
             quest = CAPmultiWithExam;
             questExamDate = examDateCAP;
             questSeminarDate = seminarDateCAPmulti;
          }
          else
          {
             quest = CAPmultiNoExam;
          }
       else if ( q14=="block" )
       {
          quest = CISSPExamOnly;
       }
       else if ( q15=="block" )
       {
          quest = CAPExamOnly;
       }

       var regTypeObject = document
             .getElementById(quest+"OuterDiv");
       regTypeObject.style.display= "block";
       var regTypeOption = regTypeObject
             .getElementsByTagName("input");
       var regTypeRow = regTypeObject
             .getElementsByTagName("tr");

       // deselect buttons
       for (var i=0; i<regTypeOption.length; i++)
       {
          regTypeOption[i].checked = false;
       }

       if (days<16)
       {
          // discounted rates no longer apply; "white" out
          regTypeRow[0].style.color="white";
          regTypeRow[2].style.color="white";
          regTypeOption[1].checked = true;
       }
       else
       {
          //if seminar and exam, have to verify BOTH dates > 16 
          if ( getRegistrationPreference() == SEMINAR_AND_EXAM )
          {
             var sd=document.getElementById(questSeminarDate);
             sdidx = sd.selectedIndex;
             var ed=document.getElementById(questExamDate);
             edidx = ed.selectedIndex;

             // Retrieve display text of option selected.
             var sobj=document
                  .getElementById(questSeminarDate+"OuterDiv");
             var slst = sobj
                  .getElementsByTagName( "option");
             var sstr = slst[sdidx].innerHTML;
             var eobj=document
                  .getElementById(questExamDate+"OuterDiv");
             var elst = eobj.getElementsByTagName( "option");
             var estr = elst[edidx].innerHTML;

             //let's find out which date needs to be checked
             var newstring = "";
             if (str==sstr) { if (edidx!=0) newstring=estr; }
             else  { if (sdidx!=0) newstring=sstr; }

             dString = retrieveStartDate( newstring );
             var currentDate = new Date();  // today
             fixDate( currentDate );

             var classDate = new Date(dString);  // start
             var diff = classDate - currentDate;
             var days = Math.ceil( diff/86400000 );
             if( days<16)
             {
                // discounted rates no longer apply; "white" out
                regTypeRow[0].style.color="white";
                regTypeRow[2].style.color="white";
                regTypeOption[1].checked = true;
             }else
             {
                // reset color incase previously "whited" out
                regTypeRow[0].style.color="#121F48";
                regTypeRow[2].style.color="#121F48";
             }
          }
          else
          {
             // reset color incase previously "whited" out
             regTypeRow[0].style.color="#121F48";
             regTypeRow[2].style.color="#121F48";
          }
       }
    }
}

function grayOutDates()
{
   grayOut (seminarDateCISSP5day, DAYSPAN );
   grayOut (seminarDateCISSPmulti, MONTHSPAN );
   grayOut (seminarDateCAP2day, DAYONLYSPAN );
   grayOut (examDateCISSP, DAYONLYSPAN );
   grayOut (examDateCAP, DAYONLYSPAN );
}

// Traverse given question's selection list of dates
// "graying" out dates that had already passed.
function grayOut( questName, typespan )
{
   var currentDate = new Date();  // today
   fixDate( currentDate );

   var obj = document.getElementById (questName);
   var lst = obj.getElementsByTagName( "option");

   // loop through options graying out dates that are "old"
   // note: option zero is "Please select ..."
   for (var ii=1; ii<obj.length; ii++)
   {
      // Retrieve display text of option selected.
      var str = lst[ii].innerHTML;

      if ( str && str.indexOf(CLASS_FULL) != -1 )
      {
           lst[ii].style.color = "#CCCCCC";
      }
      else if ( str && str.indexOf(WAIT_LIST) != -1 )
      {
           lst[ii].style.color = "#CCCCCC";
      }
      else
      {
           var dateString = retrieveStartDate( str );
           var classDate = new Date(dateString);  // start of course
           var diff = classDate - currentDate;
    
           // check if date past
           if (diff <0)
           {
                 lst[ii].style.color = "#CCCCCC";
           }
      }
   }
}

function fixDate( date )
{
   var base = new Date(0);
   var skew = base.getTime();
   if (skew>0)   date.setTime( date.getTime - skew);
}

function setMaxLengths()
{
   // name
   document.getElementById ("quest27").maxLength = nameMaxLength;
   document.getElementById ("quest31").maxLength = nameMaxLength;
   // address
   document.getElementById ("quest32").maxLength = addressMaxLength;
   // city
   document.getElementById ("quest33").maxLength = cityMaxLength;
   // state
   document.getElementById ("quest34").maxLength = stateMaxLength;
   // zip
   document.getElementById ("quest35").maxLength = zipMaxLength;
   // country
   document.getElementById ("quest36").maxLength = countryMaxLength;
   // phone
   document.getElementById ("quest28").maxLength = phoneMaxLength;
   document.getElementById ("quest37").maxLength = phoneMaxLength;
   // e-mail
   document.getElementById ("quest29").maxLength = emailMaxLength;
   document.getElementById ("quest38").maxLength = emailMaxLength;
}

function getPrice()
{
   var preference = getRegistrationPreference();
   if (preference==null) return null;

   var quest = "";

   if (preference==SEMINAR_AND_EXAM)
   {
      var seminarTypeObject = document.getElementById (seminarTypeWithExam);

      if (seminarTypeObject!=null)
      {
         var semtype = seminarTypeObject.value;
         if (semtype==CISSP_5DAY)
         {
            quest = CISSP5dayWithExam;
         }
         else if (semtype==CISSP_MULTI_WK)
         {
            quest = CISSPmultiWithExam;
         }
         else if (semtype==CAP_2DAY)
         {
            quest = CAP2dayWithExam;
         }
         else if (semtype==CAP_MULTI_WK)
         {
            quest = CAPmultiWithExam;
         }
         else
         {
            var msg = "Unrecognized SEMINAR TYPE: " +
                      semtype + ".";
            alert (msg);
            return null;
         }
      }
   }
   else if (preference==SEMINAR_ONLY)
   {
      var seminarTypeObject = document.getElementById (seminarTypeNoExam);

      if (seminarTypeObject!=null)
      {
         var semtype = seminarTypeObject.value;
         if (semtype==CISSP_5DAY)
         {
            quest = CISSP5dayNoExam;
         }
         else if (semtype==CISSP_MULTI_WK)
         {
            quest = CISSPmultiNoExam;
         }
         else if (semtype==CAP_2DAY)
         {
            quest = CAP2dayNoExam;
         }
         else if (semtype==CAP_MULTI_WK)
         {
            quest = CAPmultiNoExam;
         }
         else
         {
            var msg = "Unrecognized SEMINAR TYPE: " +
                      semtype + ".";
            alert (msg);
            return null;
         }
      }
   }
   else if (preference==EXAM_ONLY)
   {
      var examTypeObject = document.getElementById (examType);

      if (examTypeObject!=null)
      {
         var etype = examTypeObject.value;
         if (etype==CISSP_EXAM)
         {
            quest = CISSPExamOnly;
         }
         else if (etype==CAP_EXAM)
         {
            quest = CAPExamOnly;
         }
         else
         {
            var msg = "Unrecognized EXAM TYPE: " +
                      etype + ".";
            alert (msg);
            return null;
         }
      }
   }
   else
   {
      var WARN_MSG = "unrecognized REGISTRATION " +
                     "PREFERENCE - " + preference;
      alert (WARN_MSG);
      return null;
   }

   var costObject = document.getElementsByName (quest);
   if (costObject!=null)
   {
      //find selected value
      var selectedValue = null;
      for (ii=0; ii<costObject.length; ii++)
      {
         if (costObject[ii].checked)
         {
            selectedValue = costObject[ii].value;
            break;
         }
      }

      if (selectedValue==null)
      {
         alert (NO_REG_TYPE);
         return null;
      }

      if (!regex_posInt.test( selectedValue))
      {
         var ERROR_MSG = "ERROR: invalid cost for class" +
                     " - " + selectedValue;
         alert (ERROR_MSG);
         return null;
      }
      else
      {
         return selectedValue;
      }
   }
   else
   {
      var ERROR_MSG = "ERROR: invalid cost for class" +
                      " - " + costObject.value;
      alert (ERROR_MSG);
      return null;
   }
}

function getRegistrationPreference ()
{
   var rObject = document.getElementsByName (regPref);

   if (rObject!=null)
   {
      //find selected value

      var selValue = null;
      for (ii=0; ii<rObject.length; ii++) 
      {
         if (rObject[ii].checked)
         {
            selValue = rObject[ii].value;
            break;
         }
      }
      
      if (selValue!=null)
      {
         return selValue;
      }
      else
      {
         alert (NO_REG_PREF);
         return null;
      }
   }
   else
   {
      alert (NO_OBJECT + "REGISTRATION PREFERENCE.");
      return null;
   }
}

function getSeminarType()
{
   var preference = getRegistrationPreference();

   if (preference==null)  return null;

   var quest = null;
   if (preference==SEMINAR_AND_EXAM)
   {
      quest = seminarTypeWithExam;
   }
   else if (preference==SEMINAR_ONLY)
   {
      quest = seminarTypeNoExam;
   }
   else if (preference==EXAM_ONLY)
   {
      return SKIP;
   }
   else
   {
      var msg = "Unrecognized REGISTRATION PREFERENCE: " +
                preference + ".";
      alert (msg);
      return null;
   }

   var seminarTypeObject = document.getElementById( quest);
   if (seminarTypeObject!=null)
   {
      if (seminarTypeObject.value!=null && 
          seminarTypeObject.value!="")
      {
         return seminarTypeObject.value;
      }
      else
      {
         alert (NO_SEM_TYPE);
         return null;
      }
   }
   else
   {
      alert (NO_OBJECT + "SEMINAR TYPE.");
      return null;
   }
}

function getSeminarDate()
{
   var preference = getRegistrationPreference();

   if (preference==null)  return null;

   if (preference==SEMINAR_AND_EXAM||preference==SEMINAR_ONLY)
   {
      var semtype = getSeminarType();
      if (semtype!=null)
      {
         var quest = "";
         if (semtype==CISSP_5DAY)
         {
            quest = seminarDateCISSP5day;
         }
         else if (semtype==CISSP_MULTI_WK)
         {
            quest = seminarDateCISSPmulti;
         }
         else if (semtype==CAP_2DAY)
         {
            quest = seminarDateCAP2day;
         }
         else if (semtype==CAP_MULTI_WK)
         {
            quest = seminarDateCAPmulti;
         }
         else
         {
            var msg = "Unrecognized SEMINAR TYPE: " +
                      semtype + ".";
            alert (msg);
            return null;
         }

         var semDateObject = document.getElementById(quest);
         if (semDateObject!=null)
         {
            if (semDateObject.value!=null && 
                semDateObject.value!="")
            {
               return semDateObject.value;
            }
            else
            {
               alert (NO_SEM_DATE);
               return null;
            }
         }
         else
         {
            alert (NO_OBJECT + "SEMINAR DATE.");
            return null;
         }
      }
      else
      {
         alert (NO_OBJECT + "SEMINAR TYPE.");
         return null;
      }
   }
   else if (preference==EXAM_ONLY)
   {
      return SKIP;
   }
   else
   {
      var msg = "Unrecognized REGISTRATION PREFERENCE: " +
                preference + ".";
      alert (msg);
      return null;
   }
}

function getExamType()
{
   var preference = getRegistrationPreference();

   if (preference==null)  return null;

   var quest = "";

   if (preference==EXAM_ONLY)
   {
      var examTypeObject = document.getElementById(examType);
      if (examTypeObject!=null)
      {
         if (examTypeObject.value!=null && 
             examTypeObject.value!="")
         {
            return examTypeObject.value;
         }
         else
         {
            alert (NO_EXAM_TYPE);
            return null;
         }
      }
      else
      {
         alert (NO_OBJECT + "EXAM TYPE.");
         return null;
      }
   }
   else if (preference==SEMINAR_AND_EXAM)
   {
      var semtype = getSeminarType();
      if (semtype!=null)
      {
         if (semtype==CISSP_5DAY||semtype==CISSP_MULTI_WK)
         {
            return CISSP_EXAM;
         }
         else if (semtype==CAP_2DAY||semtype==CAP_MULTI_WK)
         {
            return CAP_EXAM;
         }
         else
         {
            var msg = "Unrecognized SEMINAR TYPE: " +
                       semtype + ".";
            alert (msg);
            return null;
         }
      }
      else
      {
         return null;
      }
   }
   else if (preference==SEMINAR_ONLY)
   {
      return SKIP;
   }
   else
   {
      var msg = "Unrecognized REGISTRATION PREFERENCE: " +
                preference + ".";
      alert (msg);
      return null;
   }
}

function getExamDate()
{
   var preference = getRegistrationPreference();

   if (preference==null)  return null;

   if (preference==SEMINAR_ONLY)
   {
      return SKIP;
   }
   else if (preference==EXAM_ONLY)
   {
      var examTypeObject = document.getElementById(examType);
      if (examTypeObject!=null)
      {
         if (examTypeObject.value!=null && 
             examTypeObject.value!="")
         {
            var etype = examTypeObject.value;
            var quest = "";
            if (etype==CISSP_EXAM)
            { 
               quest = examDateCISSP;
            }
            else if (etype==CAP_EXAM)
            {
               quest = examDateCAP;
            }
            else
            {
                var msg = "Unrecognized EXAM TYPE: " +
                          etype + ".";
                alert (msg);
                return null;
            }

            var eDateObject = document.getElementById(quest);
            if (eDateObject!=null)
            {
               if (eDateObject.value!=null && 
                   eDateObject.value!="")
               {
                  return eDateObject.value;
               }
               else
               {
                  alert (NO_EXAM_DATE);
                  return null;
               }
            }
            else
            {
               alert (NO_OBJECT + "EXAM DATE.");
               return null;
            }
         }
         else
         {
            alert (NO_EXAM_TYPE);
            return null;
         }
      }
      else
      {
         alert (NO_OBJECT + "EXAM TYPE.");
         return null;
      }
   }
   else if (preference==SEMINAR_AND_EXAM)
   {
      var quest = "";
      var semtype = getSeminarType();
      if (semtype==CISSP_5DAY||semtype==CISSP_MULTI_WK)
      {
         quest = examDateCISSP;
      }
      else if (semtype==CAP_2DAY||semtype==CAP_MULTI_WK)
      {
         quest = examDateCAP;
      }
      else
      {
         var msg = "Unrecognized SEMINAR TYPE: " +
                   semtype + ".";
         alert (msg);
         return null;
      }

      var eDateObject = document.getElementById(quest);
      if (eDateObject!=null)
      {
         if (eDateObject.value!=null && 
             eDateObject.value!="")
         {
            return eDateObject.value;
         }
         else
         {
            alert (NO_EXAM_DATE);
            return null;
         }
      }
      else
      {
         alert (NO_OBJECT + "EXAM DATE.");
         return null;
      }
   }
   else
   {
      var msg = "Unrecognized REGISTRATION PREFERENCE: " +
                preference + ".";
      alert (msg);
      return null;
   }
}

function getStudentName()
{
   var studentNameObject = document.getElementById(studentName);
   if (studentNameObject!=null)
   {
      studentNameObject = trimSpaces(studentNameObject);
      if (studentNameObject.value.length>0 && 
          !regexWhiteSpace.test (studentNameObject.value))
      {
         return studentNameObject.value;
      }
      else
      { 
         alert (NO_STUDENT_NAME);
         return null;
      }
   }
   else
   {
      return null;
   }
}

function getStudentPhone()
{
   var studentPhoneObject = document.getElementById(studentPhone);
   if (studentPhoneObject!=null)
   {
      studentPhoneObject = trimSpaces(studentPhoneObject);
      if (studentPhoneObject.value.length>0 && 
          !regexWhiteSpace.test (studentPhoneObject.value))
      {
         if (regex_phone.test (studentPhoneObject.value))
         {
            return studentPhoneObject.value;
         }
         else
         {
            var studentPhoneDiv = document.getElementById(studentPhone+"Div");
            studentPhoneDiv.className = "questBackgroundRequired";
            alert (INV_STUDENT_PHONE + studentPhoneObject.value+
                   "\n" + VALID_PHONE_FORMAT);
            return null;
         }
      }
      else
      { 
         alert (NO_STUDENT_PHONE);
         return null;
      }
   }
   else
   {
      return null;
   }
}

function getStudentEmail()
{
   var studentEmailObject = document.getElementById(studentEmail);
   if (studentEmailObject!=null)
   {
      studentEmailObject = trimSpaces(studentEmailObject);
      if (studentEmailObject.value.length>0 && 
          !regexWhiteSpace.test (studentEmailObject.value))
      {
         if (regex_email.test (studentEmailObject.value))
         {
            return studentEmailObject.value;
         }
         else
         {
            var studentEmailDiv = document.getElementById(studentEmail+"Div");
            studentEmailDiv.className = "questBackgroundRequired";
            alert (INV_STUDENT_EMAIL + studentEmailObject.value);
            return null;
         }
      }
      else
      { 
         alert (NO_STUDENT_EMAIL);
         return null;         
      }
   }
   else
   {
      return null;
   }
}

function getBillingName()
{
   var billingNameObject = document.getElementById(billingName);
   if (billingNameObject!=null)
   {
      billingNameObject = trimSpaces(billingNameObject);
      if (billingNameObject.value.length>0 && 
          !regexWhiteSpace.test (billingNameObject.value))
      {
         return billingNameObject.value;
      }
      else
      { 
         alert (NO_BILLING_NAME);
         return null;         
      }
   }
   else
   {
      return null;
   }
}

function getBillingAddress()
{
   var billingAddressObject = document.getElementById(billingAddress);
   if (billingAddressObject!=null)
   {
      billingAddressObject = trimSpaces(billingAddressObject);
      if (billingAddressObject.value.length>0 && 
          !regexWhiteSpace.test (billingAddressObject.value))
      {
         return billingAddressObject.value;
      }
      else
      { 
         alert (NO_BILLING_ADDRESS);
         return null;          
      }
   }
   else
   {
      return null;
   }
}

function getBillingCity()
{
   var billingCityObject = document.getElementById(billingCity);
   if (billingCityObject!=null)
   {
      billingCityObject = trimSpaces(billingCityObject);
      if (billingCityObject.value.length>0 && 
          !regexWhiteSpace.test (billingCityObject.value))
      {
         return billingCityObject.value;
      }
      else
      { 
         alert (NO_BILLING_CITY);
         return null;           
      }
   }
   else
   {
      return null;
   }
}

function getBillingState()
{
   var billingStateObject = document.getElementById(billingState);
   if (billingStateObject!=null)
   {
      billingStateObject = trimSpaces(billingStateObject);
      if (billingStateObject.value.length>0 && 
          !regexWhiteSpace.test (billingStateObject.value))
      {
         return billingStateObject.value;
      }
      else
      { 
         alert (NO_BILLING_STATE);
         return null;           
      }
   }
   else
   {
      return null;
   }
}

function getBillingCountry()
{
   var billingCountryObject = document.getElementById(billingCountry);
   if (billingCountryObject!=null)
   {
      billingCountryObject = trimSpaces(billingCountryObject);
      if (billingCountryObject.value.length>0 && 
          !regexWhiteSpace.test (billingCountryObject.value))
      {
         return billingCountryObject.value;
      }
      else
      { 
         alert (NO_BILLING_COUNTRY);
         return null;           
      }
   }
   else
   {
      return null;
   }
}

function getBillingZip()
{
   var billingZipObject = document.getElementById(billingZip);
   if (billingZipObject!=null)
   {
      billingZipObject = trimSpaces(billingZipObject);
      if (billingZipObject.value.length>0 && 
          !regexWhiteSpace.test (billingZipObject.value))
      {
         //check if country is Canada
         var billingCountryObject = document.getElementById(billingCountry);
         if (billingCountryObject!=null && 
             billingCountryObject.value.length>0)
         {
            if (regex_canada.test (billingCountryObject.value))
            {
               if (regex_postalcode.test (billingZipObject.value))
               {
                  return billingZipObject.value;
               }
               else
               {
            var billingZipDiv = document.getElementById(billingZip+"Div");
            billingZipDiv.className = "questBackgroundRequired";
                  alert (INV_BILLING_POST+
                         billingZipObject.value + "\n" +
                         VALID_POST_FORMAT);
                  return null;
               }
            }
            else
            {
               if (regex_zipcode.test (billingZipObject.value))
               {
                  return billingZipObject.value;
               }
               else
               {
            var billingZipDiv = document.getElementById(billingZip+"Div");
            billingZipDiv.className = "questBackgroundRequired";
                  alert (INV_BILLING_ZIP + 
                         billingZipObject.value);
                  return null;
               }
            }
         }
         else
         {
            if (regex_zipcode.test (billingZipObject.value))
            {
               return billingZipObject.value;
            }
            else
            {
            var billingZipDiv = document.getElementById(billingZip+"Div");
            billingZipDiv.className = "questBackgroundRequired";
               alert (INV_BILLING_ZIP + billingZipObject.value);
               return null;
            }
         }
      }
      else
      { 
         alert (NO_BILLING_ZIP);
         return null;           
      }
   }
   else
   {
      return null;
   }
}

function getBillingPhone()
{
   var billingPhoneObject = document.getElementById(billingPhone);
   if (billingPhoneObject!=null && billingPhoneObject.value!=null)
   {
      billingPhoneObject = trimSpaces(billingPhoneObject);
      if (billingPhoneObject.value.length>0 && 
          !regexWhiteSpace.test (billingPhoneObject.value))
      {
         if (regex_phone.test (billingPhoneObject.value))
         {
            return billingPhoneObject.value;
         }
         else
         {
            var billingPhoneDiv = document.getElementById(billingPhone+"Div");
            billingPhoneDiv.className = "questBackgroundRequired";
            alert (INV_BILLING_PHONE + billingPhoneObject.value+
                   "\n" + VALID_PHONE_FORMAT );
            return null;
         }
      }
      else
      { 
         return "";     
      }
   }
   else
   {
      return "";
   }
}

function getBillingEmail()
{
   var billingEmailObject = document.getElementById(billingEmail);
   if (billingEmailObject!=null && billingEmailObject.value!=null)
   {
      billingEmailObject = trimSpaces(billingEmailObject);
      if (billingEmailObject.value.length>0 && 
          !regexWhiteSpace.test (billingEmailObject.value))
      {
         if (regex_email.test (billingEmailObject.value))
         {
            return billingEmailObject.value;
         }
         else
         {
            var billingEmailDiv = document.getElementById(billingEmail+"Div");
            billingEmailDiv.className = "questBackgroundRequired";
            alert (INV_BILLING_EMAIL + billingEmailObject.value);
            return null;
         }
      }
      else
      { 
         return "";    
      }
   }
   else
   {
      return "";
   }
}

function getPaymentMethod()
{
   var paymentMethodObject = document.getElementsByName(paymentMethod);
   if (paymentMethodObject!=null)
   {
      //find selected value

      var selValue = null;
      for (ii=0; ii<paymentMethodObject.length; ii++) 
      {
         if (paymentMethodObject[ii].checked)
         {
            selValue = paymentMethodObject[ii].value;
            break;
         }
      }
      
      if (selValue!=null)
      {
         return selValue;
      }
      else
      {
         alert (NO_PAY_METH);
         return null;
      }
   }
   else
   {
      alert (NO_OBJECT + "PAYMENT METHOD.");
      return null;
   }
}

function getBillingInfoFrom()
{
   var bifObject = document.getElementsByName(billingInfoFrom);
   if (bifObject!=null)
   {
      //find selected value

      var selValue = null;
      for (ii=0; ii<bifObject.length; ii++) 
      {
         if (bifObject[ii].checked)
         {
            selValue = bifObject[ii].value;
            break;
         }
      }
      
      if (selValue!=null)
      {
         return selValue;
      }
      else
      {
         alert (NO_BILLING_INFO_FROM);
         return null;
      }
   }
   else
   {
      alert (NO_OBJECT + "BILLING INFO FROM.");
      return null;
   }
}

function isHowOld ( dateStr )
{
   var ar = regexDaySpan.test(dateStr);
   if (ar)
       dateString = RegExp.$1+" "+RegExp.$2+", "+RegExp.$4;
   else
   {
      ar = regexMonthSpan.test(dateStr);
      if (ar)
          dateString = RegExp.$1+" "+RegExp.$2+", "+RegExp.$5;
      else
      {
          ar = regexDayOnlySpan.test(dateStr);
          if (ar)
             dateString = RegExp.$1+" "+RegExp.$2+", "+RegExp.$3;
          else
          {
             alert( "date format not recognized - "+ dateStr);
             return null;
          }
      }
   }

   var currentDate = new Date();  // today
   fixDate( currentDate );

   var classDate = new Date(dateString);  // start of course
   var diff = classDate - currentDate;
    
   // check if date past
   if (diff <0)
   {
      return diff;
   }
   // calculate the number of days until seminar/exam
   var days = Math.ceil( diff/86400000 ); // nbr millsecs in day

   return days;
}

// Date range is under 16 days and verifying that standard rate 
// selected (radio button 1 of 1-2 is standard rate)
function verifyCost( preferenceType, sType, eType)
{
   var regTypeQuest = "";
   if (preferenceType==SEMINAR_AND_EXAM)
   {
       if (sType==CISSP_5DAY)
          regTypeQuest = CISSP5dayWithExam;
       else if (sType==CISSP_MULTI_WK)
          regTypeQuest = CISSPmultiWithExam;
       else if (sType==CAP_2DAY)
          regTypeQuest = CAP2dayWithExam;
       else if (sType==CAP_MULTI_WK)
          regTypeQuest = CAPmultiWithExam;
       else
       {
          alert("unrecognized seminarType : " + sType);
          return false;
       }
   }
   else if(preferenceType==SEMINAR_ONLY)
   {
       if (sType==CISSP_5DAY)
          regTypeQuest = CISSP5dayNoExam;
       else if (sType==CISSP_MULTI_WK)
          regTypeQuest = CISSPmultiNoExam;
       else if (sType==CAP_2DAY)
          regTypeQuest = CAP2dayNoExam;
       else if (sType==CAP_MULTI_WK)
          regTypeQuest = CAPmultiNoExam;
       else
       {
          alert("unrecognized seminarType : " + sType);
          return false;
       }
   }
   else if(preferenceType==EXAM_ONLY)
   {
       if (eType==CISSP_EXAM)
          regTypeQuest = CISSPExamOnly;
       else if (eType==CAP_EXAM)
          regTypeQuest = CAPExamOnly;
       else
       {
          alert("unrecognized examType : " + eType);
          return false;
       }
   }

   if (regTypeQuest=="")
   {
      alert("unrecognized preferenceType : " + 
                  preferenceType);
      return false;
   }

   var regTypeObject = document
             .getElementById(regTypeQuest+"OuterDiv");
   var regTypeOption = regTypeObject
             .getElementsByTagName("input");
   var regTypeRow = regTypeObject
             .getElementsByTagName("tr");

   if ( regTypeOption[1].checked==true)
          return true;
 
   return false;
}

//populate correct fields to send to VERISIGN
//(verify chosen dates in the future)
function submitOnlinePayment()
{
	// verify selected seminar and/or exam date(s) not "old"

	var returnValue = true;
	var payMethod = getPaymentMethod();
	if (payMethod==null)
	{
		alert ("Payment Method not selected.");
		returnValue = false;
	}
	else
	{
		var preference = getRegistrationPreference();
		var seminarType  = "";
		var seminarDate  = "";
		var examType     = "";
		var examDate     = "";
		var descrip      = "";

		if (preference==null)
		{
			alert ("Registration Preference not selected.");
			returnValue = false;
		}
		else
		{
			if (preference==SEMINAR_AND_EXAM)
			{
				seminarType  = getSeminarType();
				seminarDate  = getSeminarDate();
				examDate     = getExamDate();

				if (seminarType==null || seminarDate==null || 
						examType==null)
				{
					alert ("Seminar And Exam type and date not selected.");
					returnValue = false;
				}
				else
				{
					var semOld = isHowOld( seminarDate);
					var examOld= isHowOld( examDate);
					if (semOld != null && semOld < 0 && 
							examOld != null && examOld < 0)
					{
						alert ("Selected Seminar And Exam dates have passed. Please select dates in the future.");
						returnValue = false;
					}
					else if (semOld != null && semOld < 0)
					{
						alert ("Selected Seminar date has passed. Please select date in the future.");
						returnValue = false;
					}
					else if (examOld != null && examOld < 0)
					{
						alert ("Selected Exam date has passed. Please select date in the future.");
						returnValue = false;
					}
					else
					{
						if (semOld != null && semOld < 16)
						{
							if ( !verifyCost( preference, seminarType, examType))
							{
								alert( "Discounted rate inapplicable -- Less than 16 days to seminar - Standard rate applies.");
								returnValue = false;
							}
						}
						if (examOld != null && examOld < 16)
						{
							if ( !verifyCost( preference, seminarType, examType))
							{
								alert( "Discounted rate inapplicable -- Less than 16 days to exam - Standard rate applies.");
								returnValue = false;
							}
						}
						if (semOld != null && examOld != null && 
								examOld < semOld)
						{
							alert( "Seminar date MUST be before Exam date.  Please reselect dates.");
							returnValue = false;
						}
						descrip = seminarType + " training on " +
						seminarDate + " and an exam on " +
						examDate;
					}
				}
			}
			else if (preference==SEMINAR_ONLY)
			{
				seminarType  = getSeminarType();
				seminarDate  = getSeminarDate();

				if (seminarType==null || seminarDate==null)
				{
					alert ("Seminar type and date not selected.");
					returnValue = false;
				}
				else
				{
					var semOld = isHowOld( seminarDate);
					if (semOld != null && semOld < 0)
					{
						alert ("Selected Seminar date has passed. Please select date in the future.");
						returnValue = false;
					}
					else
					{
						if (semOld != null && semOld < 16)
						{
							if ( !verifyCost( preference, seminarType, examType))
							{
								alert( "Discounted rate inapplicable -- Less than 16 days to seminar - Standard rate applies.");
								returnValue = false;
							}
						}
						descrip = seminarType + " training on " +
						seminarDate;
					}
				}
			}
			else if (preference==EXAM_ONLY)
			{
				examType     = getExamType();
				examDate     = getExamDate();

				if (examType==null || examDate==null)
				{
					alert ("Exam type and date not selected.");
					returnValue = false;
				}
				else
				{
					var examOld= isHowOld( examDate);
					if (examOld != null && examOld < 0)
					{
						alert ("Selected Exam date has passed. Please select date in the future.");
						returnValue = false;
					}
					else
					{
						if (examOld != null && examOld < 16)
						{
							if ( !verifyCost( preference, seminarType, examType))
							{
								alert( "Discounted rate inapplicable -- Less than 16 days to exam - Standard rate applies.");
								returnValue = false;
							}
						}
						descrip = examType + " exam on " + examDate;
					}
				}
			}
			else
			{
				var msg = "Unrecognized REGISTRATION PREFERENCE: " +
				preference + ".";
				alert (msg);
				returnValue = false;
			}
			if (payMethod==ONLINE)
			{
				if (returnValue==true)
				{
					var price = getPrice();
					if (price==null)
					{
						returnValue = false;
					}
					else
					{
						var billingInfo = getBillingInfoFrom();
						if (billingInfo==null)
						{
							returnValue = false;
						}
						else
						{
							var alertText    = "";

							var pname        = getStudentName();

							if (pname.length > nameMaxLength)
							{
								alertText += "Student's Name must be less than " +
								nameMaxLength + " characters long.\n";
							}

							var paddress     = "";
							var pcity        = "";
							var pstate       = "";
							var pzip         = "";
							var pcountry     = "";
							var pphone       = "";
							var pemail       = "";
							var sphone       = "";
							var semail       = "";

							if (billingInfo==BILLING_ADDR)
							{
								pname        = getBillingName();

								if (pname.length > nameMaxLength)
								{
									alertText += "Billing Name must be less than " +
									nameMaxLength + " characters long.\n";
								}

								sphone       = getStudentPhone();
								semail       = getStudentEmail();
								paddress     = getBillingAddress();
								pcity        = getBillingCity();
								pstate       = getBillingState();
								pzip         = getBillingZip();
								pcountry     = getBillingCountry();
								pphone       = getBillingPhone();
								pemail       = getBillingEmail();

								if (pphone=="")
								{
									pphone = sphone;
								}

								if (pemail=="")
								{
									pemail = semail;
								}

								if (pname==null || paddress==null ||
										pcity==null || pstate==null   || 
										pzip==null || pcountry==null ||
										pphone==null || pemail==null ||
										sphone==null || semail==null)
								{
									returnValue = false;
								}
							}
							if (returnValue==true)
							{
								if (paddress.length > addressMaxLength)
								{
									alertText += "Billing address must be less than " +
									addressMaxLength + " characters long.\n";
								}
								if (pcity.length > cityMaxLength)
								{
									alertText += "City must be less than " +
									cityMaxLength + " characters long.\n";
								}
								if (pstate.length > stateMaxLength)
								{
									alertText += "State/Province must be less than " +
									stateMaxLength + " characters long.\n";
								}
								if (pcountry.length > countryMaxLength)
								{
									alertText += "Country must be less than " +
									countryMaxLength + " characters long.\n";
								}
								if (pzip.length > zipMaxLength)
								{
									alertText += "Zip/Postal Code must be less than " +
									zipMaxLength + " characters long.\n";
								}
								if (pemail.length > emailMaxLength)
								{
									alertText += "E-mail must be less than " +
									emailMaxLength + " characters long.\n";
								}
								if (pphone.length > phoneMaxLength)
								{
									alertText += "Phone must be less than " +
									phoneMaxLength + " characters long.\n";
								}

								if (alertText.length > 0)
								{
									alertText = "Please correct the following:\n" +
									alertText;
									alert (alertText);
									returnValue = false;
								}
								else
								{
									// Submit our training form BEFORE we set up the PayPal "redirect"
									// for CC processing. First, call DynamicForms "prepareForSubmission"
									// to get rid of hidden input (normally, this is called automatically
									// as part of standard dyn. form submission, but we are going to submit
									// the form, via javascript, in here...
									prepareForSubmission(document.forms[0]);
									document.forms[0].submit();

									// Continue on building form to display/submit to Verisign/PayPal
									// We set up the HTML form as specified by Pay Flow Link guide. Note
									// however, that via the forms "onload" method, we immediately submit
									// the form (vs. making the user click a button). As specified, Pay
									// flow will respond to the submission with the appropriate form to
									// prompt user for CC info...

									var htmlStr = "<html>\n<head>\n<title>Verisign Payment Form - Engineering Solutions Inc.</title>\n";
									htmlStr += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n</head>";
									htmlStr += "<body bgcolor=\"#FFFFFF\" onload=\"document.getElementById('vsPymtForm').submit();\">\n";
									htmlStr += "<form method=\"POST\" id=\"vsPymtForm\" action=\"https://payflowlink.paypal.com\">\n";
									htmlStr += "<input type=\"hidden\" name=\"LOGIN\" value=\"enginsol\">\n";
									htmlStr += "<input type=\"hidden\" name=\"PARTNER\" value=\"Verisign\">\n";
									htmlStr += "<input type=\"hidden\" name=\"AMOUNT\" value=\"" + price+ "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"TYPE\" value=\"S\">\n";

									htmlStr += "<input type=\"hidden\" name=\"NAME\" value=\"" + pname + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"ADDRESS\" value=\"" + paddress + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"CITY\" value=\"" + pcity + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"STATE\" value=\"" + pstate + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"ZIP\" value=\"" + pzip + "\">\n";
									htmlStr += "<input type =\"hidden\" name=\"COUNTRY\" value=\"" + pcountry + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"PHONE\" value=\"" + pphone + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"EMAIL\" value=\"" + pemail + "\">\n";
									htmlStr += "<input type=\"hidden\" name=\"DESCRIPTION\" value=\"" + descrip + "\">\n";

									htmlStr += "</form></body></html>"

									// Set return to false so training form doesn't get re-submitted, since
									// we already submitted it above (forms[0].submit() call)
									returnValue=false;

									// Open up a second window for the Verisign CC payment process.
									openHTMLWindowImmed(htmlStr, 560, 600);
								}
							} //end else
						}
					} // end else
				}
			}
		}
	}
	return returnValue;
}

//show form for user to print and mail with check
function showCheckRemitForm()
{
   var preference = getRegistrationPreference();
   if (preference==null)
   {
      return;
   }

   var seminarType  = getSeminarType();
   var seminarDate  = getSeminarDate();
   var examType     = getExamType();
   var examDate     = getExamDate();
   var seminarPrice = getPrice();

   if (seminarType==null || seminarDate==null || 
       examType==null || examDate==null || seminarPrice==null)
   {
      return;
   }

   var sname  = getStudentName();
   var sphone = getStudentPhone();
   var semail = getStudentEmail();

   if (sname==null || sphone==null || semail==null)
   {
      return;
   }
	
   var remitWin = window.open('', '', 'width=350,' +
                              'height=450,scrollbars=yes,' +
                              'resizable=yes, menubar=yes');
   if (!remitWin.opener)
   {
      remitWin.opener = self;
   }
	
   var head = "<head>\n<title>ESI Training Remittance Form for Check or Money Order</title>\n<style type=\"text/css\">\n";
   head += "body { font-size:0.8em; font-family: Verdana, Arial, Helvetica, sans-serif; }\ntable { width:100%; border-collapse:collapse; font-size:1em; }\n";
   head += "td { border:1px solid #000000; margin:0; padding:5px; }\ntd.label { background-color:#CCCCCC; }\ntd.header { font-weight:bold; background-color:#999999; }\n";
   head += "div#title { font-weight:bold; font-size:1.2em; text-align:center; margin:10px 0; }\ndiv#address { padding-left:25px; }\n";
   head += "div#buttons { text-align:center; margin-top:10px; }\ndiv#buttons button { margin:0 10px; }\n";
   head += "</style>\n<style type=\"text/css\" media=\"print\">\ndiv#buttons { display:none; }\n</style>\n</head>\n";
   //extra style block is so buttons don't print
	
   var body = "<body>\n<div id=\"title\">ESI Training Payment Remittance Form</div>\n<table>\n";
   body += "<tr>\n<td class=\"header\" colspan=\"2\">Student Information</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Name:</td>\n<td>" + sname + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Phone:</td>\n<td>" + sphone + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">E-mail:</td>\n<td>" + semail + "</td>\n</tr>\n";

   if (preference==SEMINAR_AND_EXAM ||
       preference==SEMINAR_ONLY)
   {
      body += "<tr>\n<td class=\"header\" colspan=\"2\">Seminar Information</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Type:</td>\n<td>" + seminarType + "</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Date:</td>\n<td>" + seminarDate + "</td>\n</tr>\n";
      if (examDate!=SKIP)
      {
         body += "<tr>\n<td class=\"label\">Exam Date:</td>\n";
         body += "<td>" + examDate + "</td>\n</tr>\n";
      }
   }
   else if (preference==EXAM_ONLY)
   {
      body += "<tr>\n<td class=\"header\" colspan=\"2\">Exam Information</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Type:</td>\n<td>" + examType + "</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Date:</td>\n<td>" + examDate + "</td>\n</tr>\n";
   }

   body += "<tr>\n<td class=\"label\">Price:</td>\n<td>$" + seminarPrice + "</td>\n</tr>\n</table>\n";
   body += "<p>Please make check or money order payable to <strong>Engineering Solutions, Inc.</strong> and send it with this form to:</p>\n<div id=\"address\">\n";
   body += "ESI Training<br />\n7030 Dorsey Road, Suite 201<br />\nHanover, MD  21076</br>\n";
   body += "</div>\n<div id=\"buttons\">\n<button type=\"button\" onclick=\"window.print();\">Print</button>\n";
   body += "<button type=\"button\" onclick=\"window.close();\">Close</button>\n</div>\n</body>\n";
	
   var html = "<html>\n" + head + body + "</html>";
	
   with (remitWin.document)
   {
      open("text/html");
      write(html);
      close();
   }
}

//show form for user to print and mail with credit card info
function showCreditRemitForm()
{
   var preference = getRegistrationPreference();
   if (preference==null)
   {
      return;
   }

   var seminarType  = getSeminarType();
   var seminarDate  = getSeminarDate();
   var examType     = getExamType();
   var examDate     = getExamDate();
   var seminarPrice = getPrice();

   if (seminarType==null || seminarDate==null || 
       examType==null || examDate==null || seminarPrice==null)
   {
      return;
   }

   var sname        = getStudentName();
   var sphone       = getStudentPhone();
   var semail       = getStudentEmail();

   if (sname==null || sphone==null || semail==null)
   {
      return;
   }

   var pname        = getBillingName();
   var paddress     = getBillingAddress();
   var pcity        = getBillingCity();
   var pstate       = getBillingState();
   var pzip         = getBillingZip();
   var pcountry     = getBillingCountry();
   var pphone       = getBillingPhone();
   var pemail       = getBillingEmail();

   if (pname==null  || paddress==null || pcity==null    ||
       pstate==null || pzip==null     || pcountry==null ||
       pphone==null || pemail==null)
   {
      return;
   }

   if (pphone=="")
   {
      pphone = getStudentPhone();
   }

   if (pemail=="")
   {
      pemail = getStudentEmail();
   }

   var remitWin = window.open('', '', 'width=350,' +
                              'height=500,scrollbars=yes,' +
                              'resizable=yes, menubar=yes');
   if (!remitWin.opener)
   {
      remitWin.opener = self;
   }
	
   var head = "<head>\n<title>ESI Training Remittance Form for Credit Card</title>\n<style type=\"text/css\">\n";
   head += "body { font-size:0.8em; font-family: Verdana, Arial, Helvetica, sans-serif; }\ntable { width:100%; border-collapse:collapse; font-size:1em; }\n";
   head += "td { border:1px solid #000000; margin:0; padding:5px; }\ntd.label { background-color:#CCCCCC; }\ntd.header { font-weight:bold; background-color:#999999; }\n";
   head += "div#title { font-weight:bold; font-size:1.2em; text-align:center; margin:10px 0; }\ndiv#address { padding-left:25px; }\n";
   head += "div#buttons { text-align:center; margin-top:10px; }\ndiv#buttons button { margin:0 10px; }\n</style>\n";
   head += "<style type=\"text/css\" media=\"print\">\ndiv#buttons { display:none; }\n</style>\n</head>\n";
	
   var body = "<body>\n<div id=\"title\">ESI Training Payment Remittance Form</div>\n<table>\n";
   body += "<tr>\n<td class=\"header\" colspan=\"2\">Student Information</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Name:</td>\n<td>" + sname + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Phone:</td>\n<td>" + sphone + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">E-mail:</td>\n<td>" + semail + "</td>\n</tr>\n";

   if (preference==SEMINAR_AND_EXAM ||
       preference==SEMINAR_ONLY)
   {
      body += "<tr>\n<td class=\"header\" colspan=\"2\">Seminar Information</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Type:</td>\n<td>" + seminarType + "</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Date:</td>\n<td>" + seminarDate + "</td>\n</tr>\n";
      if (examDate!=SKIP)
      {
         body += "<tr>\n<td class=\"label\">Exam Date:</td>\n";
         body += "<td>" + examDate + "</td>\n</tr>\n";
      }
   }
   else if (preference==EXAM_ONLY)
   {
      body += "<tr>\n<td class=\"header\" colspan=\"2\">Exam Information</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Type:</td>\n<td>" + examType + "</td>\n</tr>\n";
      body += "<tr>\n<td class=\"label\">Date:</td>\n<td>" + examDate + "</td>\n</tr>\n";
   }

   body += "<tr>\n<td class=\"label\">Price:</td>\n<td>$" + seminarPrice + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"header\" colspan=\"2\">Credit Card Information</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Credit Card Number:</td>\n<td> </td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\"><a href=\"/docs/csc.doc\">CSC</a>:</td>\n<td> </td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Expiration Date:</td>\n<td> </td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Amount:</td>\n<td>$" + seminarPrice + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"header\" colspan=\"2\">Billing Information</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Billing Name:</td>\n<td>" + pname + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Billing Address:</td>\n<td>" + paddress + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">City:</td>\n<td>" + pcity + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">State:</td>\n<td>" + pstate + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Zip:</td>\n<td>" + pzip + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Country:</td>\n<td>" + pcountry + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Billing E-mail:</td>\n<td>" + pemail + "</td>\n</tr>\n";
   body += "<tr>\n<td class=\"header\" colspan=\"2\">Comments</td>\n</tr>\n";
   body += "<tr>\n<td colspan=\"2\"><br /><br /><br /><br /><br /></td>\n</tr>\n";
   body += "<tr>\n<td class=\"header\" colspan=\"2\">ESI Processing</td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Date Received:</td>\n";
   body += "<td> </td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Date Approved:</td>\n<td> </td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Transaction ID:</td>\n<td> </td>\n</tr>\n";
   body += "<tr>\n<td class=\"label\">Authorization Number:</td>\n<td> </td>\n</tr>\n</table>\n";
   body += "<p>Please fill out this form and fax it to <strong>410-694-0780</strong> or send it to:</p>\n<div id=\"address\">\n";
   body += "ESI Training<br />\n7030 Dorsey Road, Suite 201<br />\nHanover, MD  21076</br>\n";
   body += "</div>\n<p>Notice: ESI does not keep credit card information. Once the transaction is processed, your credit card information will be destroyed.</p>";
   body += "</div>\n<div id=\"buttons\">\n<button type=\"button\" onclick=\"window.print();\">Print</button>\n";
   body += "<button type=\"button\" onclick=\"window.close();\">Close</button>\n</div>\n</body>\n";
	
   var html = "<html>\n" + head + body + "</html>";
	
   with (remitWin.document)
   {
      open("text/html");
      write(html);
      close();
   }
}
