// Hidden Earth Booking Form
// Copyright 2007,2008,2009,2010 David Gibson
// This file is catalogue-specific - not a 'shared' file

// When dinner is sold out, you must un-comment lower down, at "if (s == 'dinner')"

// --------------------------------------------------------------------------------

// global variables

var  $persist_summary, $persist_people, $persist_grandtotal, $persist_qualify, $persist_package;
var $persist_rxGrpDiscount, $persist_justStaffDiscount;
var  $summary, $people, $grandtotal, $qualify, $package, $rxGrpDiscount, $justStaffDiscount;
var  $discount, $footer;
var freeitems, virgin;
var firefoxFlag = false;

// manifest constants

var addressOptional = '(address optional)';
var telephoneOptional = '(optional)';

function money(m)
  // Make a money string, right-aligned, 3 pounds digits and two decimal places
   {
  var m0 = m; m = ' ' + Math.abs(m); // forces m to be a string
  var dp = m.indexOf('.');
  if (dp == -1) 		{ m += '.00' ; }
  else if (dp == m.length -1) 	{ m += '00'; }
  else if (dp == m.length -2) 	{ m += '0'; }
  if (dp == 0)			{ m = '0' + m; }
  m = '  ' + m;
  m = m.substr(m.length -6);
  m = '£' + m;
  if (m0 < 0) { m += '-'; } else { m += ' '; }
  return m;
  }



function readMoney(m)
  // read a string and extract the amount of money
  {
  if (m=='') { return 0; }
  var sign = 2 * (m.indexOf('-') == -1) - 1;
  var amt = parseFloat(m.substr(2));
  return (sign * amt);
  }



function writeTestMoney(m)
  {
  document.writeln( money(m), ' <== ', m, '  :  ', readMoney(money(m)) );
  }



function testMoney()
  {
  document.writeln('<pre>');
  writeTestMoney(1);
  writeTestMoney(12);
  writeTestMoney(1.);
  writeTestMoney(12.);
  writeTestMoney(1.9);
  writeTestMoney(12.9);
  writeTestMoney(1.98);
  writeTestMoney(12.98);
  writeTestMoney(212.98);
  writeTestMoney(9212.98);
  writeTestMoney(.9);
  writeTestMoney(.98);
  writeTestMoney(-1);
  writeTestMoney(-12);
  writeTestMoney(-1.);
  writeTestMoney(-12.);
  writeTestMoney(-1.9);
  writeTestMoney(-12.9);
  writeTestMoney(-1.98);
  writeTestMoney(-12.98);
  writeTestMoney(-212.98);
  writeTestMoney(-9212.98);
  writeTestMoney(-.9);
  writeTestMoney(-.98);
 document.writeln('</pre>');
  document.close()
  }

// --------------------------------------------------------------------------------

function punctuate(s)
  {
  if (s != '') { return ', ' + s; }
  else         { return '' }
  }

// --------------------------------------------------------------------------------

function reportError(s1,e)
  {
  if (s1 != '') { return s1; }
  else          { return 'ERROR: ' + e; }
  }

// --------------------------------------------------------------------------------

function pluralise(number, singular, plural)
  {
  if (number==1) { return number + ' ' + singular; }
  else           { return number + ' ' + plural;   }
  }

// --------------------------------------------------------------------------------

function warnNoUserAlteration()
    { window.alert('You cannot change this box yourself.\nThe value is calculated for you.'); }


// ================================================================================
//       RECALCULATE DISPLAYED FORM
// ================================================================================

function recalculate(s)
  {
  df = document.form;
  df2 = document.form2;
  
  
  if (s == 'summary')
    { window.alert('You cannot type here!'); }
    
  var days=0;
  var adm, admD1, admDg;
  
  if (s.substr(0,3)=='fee') { warnNoUserAlteration(); }

  if ((s == 'firstname') & (df.firstname.value == '%%'))
    { 
      df.firstname.value = 'David';
      df.surname.value   = 'Gibson';
      df.street.value   = '12 Well House Drive';
      // df.locality.value = 'Roundhay';
      df.posttown.value = 'LEEDS';
      df.postcode.value = 'LS8 4BX';
    }
    
  if ($persist_people == 0)
  {
      df2.firstname.value = df.firstname.value;
      df2.surname.value   = df.surname.value;
      df2.street.value    = df.street.value;
      df2.locality.value  = df.locality.value;
      df2.posttown.value  = df.posttown.value;
      df2.postcode.value  = df.postcode.value;
      df2.country.value   = df.country.value;
   }


    
  // the following simulates a group of four radio buttons

  if (s == 'saturday')
    {
    df.saturday.checked = true;
    df.sunday.checked = false;
    df.weekend.checked = false;
    df.none.checked = false;
    }

  if (s == 'sunday')
    {
    df.saturday.checked = false;
    df.sunday.checked = true;
    df.weekend.checked = false;
    df.none.checked = false;
    }

  if (s == 'weekend')
    {
    df.saturday.checked = false;
    df.sunday.checked = false;
    df.weekend.checked = true;
    df.none.checked = false;
    }

  if (s == 'none')
    {
    df.saturday.checked = false;
    df.sunday.checked = false;
    df.weekend.checked = false;
    df.none.checked = true;
    }
    
/*  if (s == 'dinner')
  {
    df.dinner.selectedIndex = 0;
    window.alert ('The conference dinner is sold out');
  }
*/  

  if (df.none.checked) 	        { days=0; adm = 0;       df.fee_weekend.value = ''; }
  if (df.saturday.checked) 	{ days=1; adm = fees[3]; df.fee_weekend.value = money(adm); }
  if (df.sunday.checked)   	{ days=1; adm = fees[4]; df.fee_weekend.value = money(adm); }
  if (df.weekend.checked)  	{ days=2; adm = fees[5]; df.fee_weekend.value = money(adm); }

  if (df.member.checked)   	{ admD1 = fees[6]; df.fee_member.value  = money(-admD1 * days); }
  else				{ admD1 = 0;		 df.fee_member.value  = ''; }

// redo this so that the group box is checked if the booking QUALIFIES as as group booking
//
//  if (df.group.checked)
//    { 
//    if (days == 2)  		{ admDg = fees[7]; df.fee_group.value  = money(-admDg); }
//    else
//      { 
//      window.alert('Group discount only applies\nto weekend bookings.'); 
//      df.group.checked = false;
//      admDg = 0; df.fee_group.value  = money(-admDg); 
//      }
//    }
//  else				{ admDg = 0; df.fee_group.value  = ''; }

  df.group.checked = (days == 2) & !df.child.selectedIndex;
  
  admDg = 0; 
  // no longer use admDg
  
  if (df.lecturer.selectedIndex == 0) { df.fee_lecturer.value = ''; }
  
  if (df.lecturer.selectedIndex == 1) 
    {
    if (df.none.checked)
      { 
      window.alert('You cannot claim more days discount\nthan you have booked for.');
      df.lecturer.selectedIndex = 0;  df.fee_lecturer.value = '';
      }
    else if (df.weekend.checked) { df.fee_lecturer.value = money((-adm + admD1*days + admDg)/2); }
    else                         { df.fee_lecturer.value = money((-adm + admD1*days + admDg)  ); }
    // The lecturer is claiming one day's discount. If he has booked for the weekend then 
    // he can claim a package discount but we need to prevent him claiming a group discount.
    }
    
  if (df.lecturer.selectedIndex == 2) 
    {
    if (df.weekend.checked)     
      { 
      df.fee_lecturer.value = money((-adm + admD1*days + admDg)  ); 
    // The lecturer is claiming two days' discount. He can still a package discount
    // but we need to prevent him claiming a group discount.
      }
    else
      { 
      window.alert('You cannot claim more days discount\nthan you have booked for.');
      df.lecturer.selectedIndex = 0;  df.fee_lecturer.value = '';
      }
    }

 
  if ( (s=='member') | (s=='lecturer') | (s == 'child') )  // no longer: (s=='group')
    {
    if (df.fee_weekend.value == '')
      { 
      window.alert('You cannot claim a discount on admission\n' + 
                   'without first booking an admission ticket.');
      df.member.checked = false;
      // df.group.checked = false;
      df.lecturer.selectedIndex = 0;
      df.child.selectedIndex = 0;
      }
    }
    
  if ((s=='bcanumber')    & (df.bcanumber.value == '%%'))    {df.bcanumber.value = 'D1234'; }
  if ((s=='placeofstudy') & (df.placeofstudy.value == '%%')) {df.placeofstudy.value = 'University of Leeds'; }
  if ((s=='lecturetitle') & (df.lecturetitle.value == '%%')) {df.lecturetitle.value = 'Something about Bats'; }

  if ((s=='lecturetitle') & (df.lecturetitle.value != ''))
    {
     firefoxFlag = true;  // Firefox behaviour requires this to cure the "footleg" bug
     var q = window.confirm('To claim the lecturer\'s discount you must have received \n' +
                  'a confirmation from the lecture secretary that your offer \n' +
                  'of a presentation has been accepted. \n\n' +

                  'Do not just write anything in this box and expect to get in free! \n\n' +

                  'If your name is not on our list of lecturers and essential staff \n' +
                  'you will have to pay the full balance of the admission fee when \n' +
                  'you arrive. \n\n' +

                  'Do you want to record \n\n' + 

                  '    "' + df.lecturetitle.value + '"\n\n' +

                  'on this form? \n');

     if (!q) { df.lecturetitle.value = ''; df.lecturer.selectedIndex = 0; df.fee_lecturer.value=''; }
     firefoxFlag = false;  // Firefox behaviour requires this to cure the "footleg" bug
    }

    
  if (s=='group')
    {
     window.alert('This box will be checked automatically if this delegate\'s \n' +
                  'booking meets the criteria for counting towards a \n' +
                  'Group Booking discount. If you have at least six such \n' + 
                  'delegates in your booking, then the appropriate discount \n' +
                  'will be shown in the Booking Summary in Step 2, below. ');
    }

  if (s == 'child')
    {
    if ( df.child.selectedIndex & (df.member.checked | df.lecturer.selectedIndex | df.stomp.checked)) 
      {
      question = 'A child discount is not compatible with your\n' + 
                 'selection of another discount (BCA, student \n' +
                 'or lecturer) or stomp admission. If you go ahead, all\n' +
                 'these other check boxes will be cleared.';
      if (window.confirm(question))
        {
        df.member.checked = 0;         df.fee_member.value = '';
//      df.group.checked = 0;          df.fee_group.value = '';
        df.lecturer.selectedIndex = 0; df.fee_lecturer.value = '';
        df.stomp.checked = 0;          df.fee_stomp.value = '';
        }
      else 
        {
        df.child.selectedIndex = 0; df.fee_child.value = '';
        }
      }
    }
  else // (s != 'child')
    {
    if ( df.child.selectedIndex & (df.member.checked | df.lecturer.selectedIndex | df.stomp.checked))
      {
      question = 'This item is not compatible with your selection\n' +
                 'of a child discount, which will be cleared.';
      window.alert(question);
      df.child.selectedIndex = 0; df.fee_child.value = '';
      }
    }


  if (df.child.selectedIndex == 0)    { df.fee_child.value = ''; }
  if (df.child.selectedIndex == 1)    { df.fee_child.value = money(-adm * 0.5); }
  if (df.child.selectedIndex == 2)    { df.fee_child.value = money(-adm * 1); }



  if (df.dinner.selectedIndex == 0)	{ df.fee_dinner.value = '' }
  else					{ df.fee_dinner.value = money(fees[9]); }

  if (!df.stomp.checked)		{ df.fee_stomp.value = '' }
  else					{ df.fee_stomp.value = money(fees[10]); }

  if (df.tshirt.selectedIndex == 0)	{ df.fee_tshirt.value = '' }
  else					{ df.fee_tshirt.value = money(fees[11]); }


  if (df.camping.selectedIndex == 0)	{ df.fee_camping.value = '' }
  else					{ df.fee_camping.value = money(fees[12] * df.camping.selectedIndex); }

  if ( df.weekend.checked & (df.dinner.selectedIndex != 0) & df.stomp.checked & 
       (df.tshirt.selectedIndex != 0) )
    {
    df.packagedeal.checked = true;
    df.fee_package.value = money(-fees[8]);
    }
  else
    {
    df.packagedeal.checked = false
    df.fee_package.value = '';
    }

  if (s == 'packagedeal') 
    { window.alert('This box will be checked automatically\nif you qualify for a discount.'); }
    
  if ((s=='clubname') & (df.clubname.value == '%%')) {df.clubname.value = 'Cave Radio & Electronics Group'; }

  if (s == 'stand')
    {
    if (!df.stand.checked)  		{ df.fee_tables.value = ''; df.tables.selectedIndex = 0; 
					  df.fee_power.value = '' ; df.power.checked = 0;  }
    }

  if (s == 'tables')
    {
    if (df.tables.selectedIndex == 0)	{ df.fee_tables.value = ''; df.tables.selectedIndex = 0; }
    else				{ df.fee_tables.value = money(fees[13] * df.tables.selectedIndex);
    					  df.stand.checked = true; }
    }

  if (s == 'power')
    {
    if (!df.power.checked)		{ df.fee_power.value = '' }
    else				{ df.fee_power.value = money(fees[14]); 
					  df.stand.checked = true; }
    }
    

  // ===== now calculate the sum of the fee boxes =============================================

  df.fee_total.value = money(readMoney(df.fee_weekend.value) + 
    readMoney(df.fee_member.value) + 
//  readMoney(df.fee_group.value) +  
    readMoney(df.fee_lecturer.value) + 
    readMoney(df.fee_child.value) + 
    readMoney(df.fee_dinner.value) + 
    readMoney(df.fee_stomp.value) +  
    readMoney(df.fee_tshirt.value) + 
    readMoney(df.fee_camping.value) + 
    readMoney(df.fee_package.value) + 
    readMoney(df.fee_tables.value) + 
    readMoney(df.fee_power.value)       );

  // ===== now write the summary info to string s =============================================

  s = 'Booking for ...\n';

  s += df.firstname.value;
    if (df.firstname.value != '') s += ' ';
  
  s += reportError(df.surname.value, 'name not given') + '\n';
  
  var addr = df.street.value;
  if (addr == addressOptional) { addr = ''; }
  addr += punctuate(df.locality.value);
  addr += punctuate(df.posttown.value);
  addr += punctuate(df.postcode.value);
  if (addr !='') { addr += '\n'; }
  s += addr;

  if (df.previousref.value != '')  { s += 'Previous ref: ' + df.previousref.value + '\n'; }

  if ((df.telephone.value != '') & (df.telephone.value != telephoneOptional) )
    { s += 'Telephone: ' + df.telephone.value + '\n'; }
  // else { s += 'Telephone: not given\n'; }

  s += '\n';



  if (df.fee_weekend.value != '')
    {
    if (df.saturday.checked) { s += 'Saturday admission ticket  ' };
    if (df.sunday.checked)   { s += 'Sunday admission ticket    ' };
    if (df.weekend.checked)  { s += 'Weekend admission ticket   ' };
    } 
  else                       { s += 'No admission ticket booked!' };
  s += df.fee_weekend.value + '\n' ;

  if (df.member.checked)     
    { 
                               s += 'BCA or Student discount    ' + df.fee_member.value + '\n'
    if (df.bcanumber.value != '')
                             { s += ' BCA #: ' + df.bcanumber.value + '\n'; }
    if (df.placeofstudy.value != '')
                             { s += ' Studying @: ' + df.placeofstudy.value + '\n'; }
    if ((df.bcanumber.value == '') & (df.placeofstudy.value == ''))
                             { s += ' ERROR: BCA # or Student info not given\n'; }
    }
                             
//if (df.group.checked)
//                           { s +='Group discount             ' + df.fee_group.value + '\n' }
  if (df.lecturer.selectedIndex)
                             { s +='Lecturer discount: ' + df.lecturer.selectedIndex + 
                                                    ' day   ' + df.fee_lecturer.value + '\n';

                               s += ' Title: ' + reportError(df.lecturetitle.value, 'lecture info not given') + '\n'; }

  if (df.child.selectedIndex)
    {
    if (df.child.selectedIndex == 1)
                             { s +='Child under 18, -50%       ' + df.fee_child.value + '\n' }
    if (df.child.selectedIndex == 2)
                             { s +='Child under 14, -100%      ' + df.fee_child.value + '\n' }
    }

  if (df.dinner.selectedIndex != 0)
    {
    if (df.dinner.selectedIndex == 1)
                             { s +='Dinner ticket: meat option ' + df.fee_dinner.value + '\n' }
    if (df.dinner.selectedIndex == 2)
                             { s +='Dinner ticket: vege option ' + df.fee_dinner.value + '\n' }
    }

  if (df.stomp.checked)
                             { s +='Stomp ticket               ' + df.fee_stomp.value + '\n' }
  if (df.tshirt.selectedIndex != 0)
    {
    if (df.tshirt.selectedIndex == 1)
                             { s +='T-shirt: size Small        ' + df.fee_tshirt.value + '\n' }
    if (df.tshirt.selectedIndex == 2)
                             { s +='T-shirt: size Medium       ' + df.fee_tshirt.value + '\n' }
    if (df.tshirt.selectedIndex == 3)
                             { s +='T-shirt: size Large        ' + df.fee_tshirt.value + '\n' }
    if (df.tshirt.selectedIndex == 4)
                             { s +='T-shirt: size X-Large      ' + df.fee_tshirt.value + '\n' }
    if (df.tshirt.selectedIndex == 5)
                             { s +='T-shirt: size XX-Large     ' + df.fee_tshirt.value + '\n' }
    }
  if (df.camping.selectedIndex != 0)
    {
    if (df.camping.selectedIndex == 1)
                             { s +='Camping: 1 Tent            ' + df.fee_camping.value + '\n' }
    if (df.camping.selectedIndex == 2)
                             { s +='Camping: 2 Tents           ' + df.fee_camping.value + '\n' }
    if (df.camping.selectedIndex == 3)
                             { s +='Camping: 3 Tents           ' + df.fee_camping.value + '\n' }
    }
  if (df.packagedeal.checked)
                             { s +='Package discount           ' + df.fee_package.value + '\n' }

  if (df.poster.checked)     { s +='Science poster display       free' + '\n' }
  if (df.display.checked)    { s +='Free-standing club display   free' + '\n' }
  if (df.stand.checked)      { s +='Club stand: single table     free' + '\n' }
  
  if (df.poster.checked | df.display.checked | df.stand.checked )
                             { s += ' Club: ' + reportError(df.clubname.value, 'name of club not given') + '\n'; 
                               freeitems = true;
                             }
  else {freeitems = false; }                             

  if (df.tables.selectedIndex != 0)
                             { s +='Club stand: ' + df.tables.selectedIndex + ' extra tables ' + df.fee_tables.value + '\n';}

  if (df.power.checked)
                             { s +='Club stand: power sockets  ' + df.fee_power.value + '\n' }
   
  s += '                           ' + '  =====\n' +
       'TOTAL AMOUNT DUE           ' + df.fee_total.value + '\n';
       
  if ((df.group.checked) & !(df.packagedeal.checked) & (df.lecturer.selectedIndex == 0) )
    { s += '[A group discount may apply: see below]\n' ; } 

  $summary = s;
  
 
  // ============================= The booking info is now in $Summary
  
  
  // Having done that, we're now going to undo it all if the booking was blank.
  // The reason for this strange procedure is that Im shoehorning this in at the end
    
  if ( (readMoney(df.fee_total.value) == 0) & (!freeitems) & (df.child.selectedIndex == 0) & (df.lecturer.selectedIndex == 0)) 
  // has anything been booked?  This is a clumsy way to check
    {
    $people     = $persist_people;        // number of people in booking
    $grandtotal = $persist_grandtotal;    // total money for all people
    $qualify    = $persist_qualify;       // qualifying for group discount
    $package    = $persist_package;       // qualifying for package discount
    $rxGrpDiscount =  $persist_rxGrpDiscount; // Qualifiers less (package or lecturer discount)
    $justStaffDiscount = $persist_justStaffDiscount; //  lecturer discount
    $summary = '';
    virgin = true;
    }
  else
    {
      // Now deal with the persistent variables. These are the values that are maintained
      // when the booking form is cleared.
      // $ symbol used merely to indicate persistent vbls or similar "final" data

    $people     = $persist_people     + 1;                               // number of people in booking
    $grandtotal = $persist_grandtotal + +readMoney(df.fee_total.value);  // total money for all people
    $qualify    = $persist_qualify    + +df.group.checked;               // qualifying for group discount
    $package    = $persist_package    + +df.packagedeal.checked;         // qualifying for package discount
    
    $rxGrpDiscount = $persist_rxGrpDiscount;
    if ((df.group.checked) & (df.lecturer.selectedIndex == 0) & (df.packagedeal.checked == 0) )
      { $rxGrpDiscount += 1; }    

    $justStaffDiscount = $persist_justStaffDiscount;
    if ((df.group.checked) & (df.lecturer.selectedIndex != 0) & (df.packagedeal.checked == 0) )
      { $justStaffDiscount += 1; } 
      
  // $qualify is the number of bookings for which df.GROUP.checked is true
  // $package is  -------------------- " ---------   PACKAGEDEAL
  // $rxGrpDiscount ------------------ " ---------   GROUP & !LECTURER & !PACKAGEDEAL
  // $justStaffDiscount -------------- " ---------   GROUP &  LECTURER & !PACKAGEDEAL 
  // Thus: $qualify = $justStaffDiscount + $rxGrpDiscount + $package
  
      
    
    $summary = $people + ') ' + $summary + '\n---------------------------\n';
    virgin = false;
    }
  
  $group = $rxGrpDiscount; // was ($qualify - $package);
  if ($group < 10) { $group = ' ' + $group; }

  if ($qualify > 5)
    { $discount  = fees[7] * $group; }
  else 
    { 
      $discount  =  0;
      $group = ' 0';
    }
   
  $footer = 'Total delegates: ' + $people + '\n' +
       '                           ' + '  =====\n' +
       'TOTAL FOR ALL DELEGATES    ' + money($grandtotal) + '\n' +
       'Group Discount (' + pluralise($group, 'person) ', 'people) ') + money(-$discount) + '\n';
  
  if ($qualify != 0)
    { $footer += '(' + pluralise($qualify, 'is ', 'are ')   + 'eligible; need 6)\n'; }
  if ($package != 0)
    { $footer += '(' + pluralise($package, 'gets ', 'get ') + 'package discount instead)\n'; 
      var more = 'more ';
    }
  else { more = ''; }  
    
  if ($justStaffDiscount != 0)
    { $footer += '(' + pluralise($justStaffDiscount, more + 'gets ', more + 'get ') + 'lecturer\'s discount instead)\n'; }
    
  $footer +=
       '                           ' + '  =====\n' +
       'TOTAL AFTER DISCOUNT       ' + money($grandtotal - $discount);
       
     
  df.summary.value = '*** scroll down to see complete booking *** \n\n---------------------------\n' + 
    $persist_summary + $summary + $footer;
  
  }

// ================================================================================
//       BOOKING RESULT IS NOW IN document.form.summary.value
// ================================================================================

/*  what have we just done?
    IF present form does not contain anything "bookable" then...
      - reset running totals from persistent values
      - clear $summary
      - set virgin = true
    ELSE 
      - increment running totals from persistant values
      - set $summary
      - set virgin = false
    END
    set DF.SUMMARY.VALUE = $persist_summary + $summary + $footer
*/    

function checkForm(s2)
{

// Check the info in form, and process the buttons in form2

  if (s2 == 'scroll')
  { 
     location.hash = '#bookingform';
     return false;
  }

  if (firefoxFlag == true)   // Firefox behaviour requires this to cure the "footleg" bug
  { return false; }
  
  df = document.form; 
  df2 = document.form2;
  
  var s = "";
  if (df.surname.value == "") { s += "- Delegate\'s name not given.\n"; }

  var addressIncomplete = (df.street.value  == "") | (df.posttown.value == "");
  addressIncomplete &= !$persist_people;

  
  if ( addressIncomplete & (df.previousref.value == "") ) 
                               { s += "- Address is missing or incomplete,\n" +
                                      "  or previous booking ref. not given.\n"; }
                                      
  if ( (df.bcanumber.value == '') & (df.placeofstudy.value == '') & df.member.checked ) 
    {
    s += '- BCA number or student\'s \n  place-of-study not given.\n';
    }
    
  if ( (df.poster.checked | df.display.checked | df.stand.checked) & (df.clubname.value == '') )
    {
    s += '- Name of club not given. \n';
    }

  if ( (df.lecturer.selectedIndex != 0) & (df.lecturetitle.value == '') )
    {
    s += '- Title of lecture not given. \n';
    }
  
  if ( (readMoney(df.fee_total.value) == 0) & (!freeitems) & (df.child.selectedIndex == 0) & (df.lecturer.selectedIndex == 0)) 
    {
    s += '- Nothing appears to have been booked. \n';
    }
    
  // The string S is 'not blank' if the form was incomplete.
  // The variable VIRGIN tells us if anything has been booked, and controls the textarea display.
  // If the form is not VIRGIN and INCOMPLETE then we alert the user
  // If the form is VIRGIN we can still submit it if there are previous delegates
  // alert user if:  !VIRGIN & !COMPLETE or VIRGIN & !PREVIOUS_DELEGATES
  
//  if ((s != "") & !(virgin & $persist_people))

  if ( ((s != "") & !virgin) | (virgin & !$persist_people) )
  {
    window.alert("Some information is missing from \nthis form...\n\n" + s);
    return false
  }

  if (s2 == 'doNext')
    {
    var question = 'Confirm and Pay?';  //\n\n' +
    //'Depending on your browser and your\n' +
    //'personal settings the next page may\n' +
    //'open in a new Window or Tab.';
    
    // no longer open in a new window. Target removed from form
    
    if ( !window.confirm(question)) return false;
    if (officeClosed()) return false;
    var today = new Date();
    var digits = (Math.floor(today.getTime()/1000) - 800000000) % 10000;
    digits = '0000' + digits;
    digits = digits.substr(digits.length - 4);
    df2.ref.value  = "ORIG-" + digits; // No longer need: + "/0";   // over-written by HE07 later
    df2.total.value = money($grandtotal - $discount);
    df2.order.value = $persist_summary + $summary + $footer + "\n";
    df2.jsversion.value = jsversion;
    df2.submit(); 
    }

  else if (s2 == 'addMore')
    { 
    if ( !window.confirm('Add another delegate to this booking?') ) return false;
    $persist_summary = $persist_summary + $summary;
    $persist_people     = $people;
    $persist_grandtotal = $grandtotal;
    $persist_qualify    = $qualify;
    $persist_package    = $package;
    $persist_rxGrpDiscount = $rxGrpDiscount;
    $persist_justStaffDiscount = $justStaffDiscount;
    df.reset();
    df.telephone.value = telephoneOptional;
    if ($persist_people > 0) { df.street.value = addressOptional; }
    virgin = true;
    location.hash = '#bookingform';
    return false;
    }
    
  else window.alert('ERROR: program error, please report to webmaster')
}

function clearForm(s2)
{

// Check the info in form, and process the buttons in form2

  df = document.form; 
  df2 = document.form2;

  if (s2 == 'eraseCurrent')
    { 
    if ( !window.confirm('Erase the most recent delegate?') ) return false;
    
    if (virgin) { window.alert('There is nothing to delete'); return false; }
    // $persist_summary
    // $persist_people     = $people + 1;
    // $persist_grandtotal = $grandtotal;
    // $persist_qualify    = $qualify;
    // $persist_package    = $package;
    df.reset();
    df.telephone.value = telephoneOptional;
    if ($persist_people > 0) { df.street.value = addressOptional; }
    virgin = true;
    location.href = '#bookingform';
    return false;
    }

  else if (s2 == 'eraseAll')
    { 
    if ( !window.confirm('Erase everything?') ) return false;
    initPersistentVbls();
    df.reset();
    virgin = true;
    location.href = '#bookingform';
    return false;   // for clarity, always return false from these tests
    }

  else window.alert('ERROR: program error, please report to webmaster')
}

function initPersistentVbls()
{

    document.form.reset();
    /* The above was added on 28 Aug 07 to cure the following bug.  
    If data was added to the form for ONE person and then the page reloaded, this function 
    had the effect of flagging the form as virgin; but with "no previous (persistent) data"
    so it could not be submitted even though it did contain valid data */ 
    
    $persist_summary    = '';
    $persist_people     = 0;
    $persist_grandtotal = 0;
    $persist_qualify    = 0;
    $persist_package    = 0;
    $persist_rxGrpDiscount = 0;
    $persist_justStaffDiscount = 0;
    document.form.telephone.value = telephoneOptional;
    virgin = true;
    officeClosed();
    


}   