function calcECbook()
{
  document.form1.ecbooknetcost.value =
    document.form1.ecbookshiphandle.value =
      document.form1.ecbookgst.value =
        document.form1.ecbooktotal.value = '';

  if ( document.form1.ecbookquantity.value == '' )
  {
    calcGrandTotal();
    return true;
  }

  if ( document.form1.ecbookquantity.value == 0 ||
       !integerRE.exec( document.form1.ecbookquantity.value ) )
  {
    alert( 'Number of books must be a positive number' );
    document.form1.ecbookquantity.value = '';
    document.form1.ecbookquantity.focus();
    return false;
  }

  if ( document.form1.destinationprovince.selectedIndex == 0 )
  {
    alert( 'Please select a destination province' );
    document.form1.ecbookquantity.value = '';
    document.form1.destinationprovince.focus();
    return false;
  }

  if ( !document.form1.destinationpostalcode.value )
  {
    alert( 'Please enter a destination postal code' );
    document.form1.ecbookquantity.value = '';
    document.form1.destinationpostalcode.focus();
    return false;
  }
  else
  {
    // check that the province matches the postal code
    if ( matchProvincePostal( document.form1.destinationprovince,
                              document.form1.destinationpostalcode ) )
    {
      alert( 'The postal code is not valid for this province' );
      document.form1.ecbookquantity.value = '';
      document.form1.destinationpostalcode.focus();
      return false;
    }
  }

  shipHandl = calcSH();
  if ( shipHandl == '' )
  {
    alert( 'Please enter a valid destination postal code' );
    document.form1.ecbookquantity.value = '';
    document.form1.destinationpostalcode.focus();
    return false;
  }

  document.form1.ecbooknetcost.value =
             formatCurrency( document.form1.ecbookquantity.value * 74.95 );
  document.form1.ecbookshiphandle.value = 
             formatCurrency( document.form1.ecbookquantity.value * shipHandl );
  document.form1.ecbookgst.value =
             formatCurrency( ( 1.0 * document.form1.ecbooknetcost.value +
                               1.0 * document.form1.ecbookshiphandle.value )
                             * 0.07 );

  document.form1.ecbooktotal.value =
             formatCurrency( 1.0 * document.form1.ecbooknetcost.value +
                             1.0 * document.form1.ecbookshiphandle.value +
                             1.0 * document.form1.ecbookgst.value );

  calcGrandTotal();
}
function calcGrandTotal()
{
  if ( document.form1.ecbooktotal.value == '' &&
       document.form1.pdbooktotal.value == '' )
  {
    document.form1.grandtotal.value = '';
  }
  else
  {
    document.form1.grandtotal.value =
               formatCurrency( 1.0 * document.form1.ecbooktotal.value +
                               1.0 * document.form1.pdbooktotal.value );
  }
}
function calcPDbook()
{
  document.form1.pdbooknetcost.value =
    document.form1.pdbookshiphandle.value =
      document.form1.pdbookgst.value =
        document.form1.pdbooktotal.value = '';

  if ( document.form1.pdbookquantity.value == '' )
  {
    calcGrandTotal();
    return true;
  }


  if ( document.form1.pdbookquantity.value == 0 ||
       !integerRE.exec( document.form1.pdbookquantity.value ) )
  {
    alert( 'Number of books must be a positive number' );
    document.form1.pdbookquantity.value = '';
    document.form1.pdbookquantity.focus();
    return false;
  }

  if ( document.form1.destinationprovince.selectedIndex == 0 )
  {
    alert( 'Please select a destination province' );
    document.form1.pdbookquantity.value = '';
    document.form1.destinationprovince.focus();
    return false;
  }

  if ( !document.form1.destinationpostalcode.value )
  {
    alert( 'Please enter a destination postal code' );
    document.form1.pdbookquantity.value = '';
    document.form1.destinationpostalcode.focus();
    return false;
  }
  else
  {
    // check that the province matches the postal code
    if ( matchProvincePostal( document.form1.destinationprovince,
                              document.form1.destinationpostalcode ) )
    {
      alert( 'The postal code is not valid for this province' );
      document.form1.pdbookquantity.value = '';
      document.form1.destinationpostalcode.focus();
      return false;
    }
  }

  shipHandl = calcSH();
  if ( shipHandl == '' )
  {
    alert( 'Please enter a valid destination postal code' );
    document.form1.pdbookquantity.value = '';
    document.form1.destinationpostalcode.focus();
    return false;
  }

  document.form1.pdbooknetcost.value =
             formatCurrency( document.form1.pdbookquantity.value * 74.95 );
  document.form1.pdbookshiphandle.value = 
             formatCurrency( document.form1.pdbookquantity.value * shipHandl );
  document.form1.pdbookgst.value =
             formatCurrency( ( 1.0 * document.form1.pdbooknetcost.value +
                               1.0 * document.form1.pdbookshiphandle.value )
                             * 0.07 );

  document.form1.pdbooktotal.value =
             formatCurrency( 1.0 * document.form1.pdbooknetcost.value +
                             1.0 * document.form1.pdbookshiphandle.value +
                             1.0 * document.form1.pdbookgst.value );

  document.form1.grandtotal.value =
             formatCurrency( 1.0 * document.form1.ecbooktotal.value +
                             1.0 * document.form1.pdbooktotal.value );

  calcGrandTotal();
}
function calcSH()
{
  postalCode = new String( document.form1.destinationpostalcode.value );
  referenceCode = postalCode.substr( 0, 1 );

  if ( referenceCode == 'K' ||
       referenceCode == 'L' ||
       referenceCode == 'M' ||
       referenceCode == 'N' ||
       referenceCode == 'P' )
  {
    return ( 7 );
  }

  if ( referenceCode == 'A' ||
       referenceCode == 'B' ||
       referenceCode == 'C' ||
       referenceCode == 'E' ||
       referenceCode == 'G' ||
       referenceCode == 'H' ||
       referenceCode == 'J' )
  {
    return ( 12 );
  }

  if ( referenceCode == 'R' ||
       referenceCode == 'S' ||
       referenceCode == 'T' ||
       referenceCode == 'V' )
  {
    return ( 20 );
  }

  if ( referenceCode == 'X' ||
       referenceCode == 'Y' )
  {
    return ( 22 );
  }

  return( '' );
}
function validate()
{
  if ( document.form1.destinationprovince.selectedIndex == 0 )
  {
    alert( 'Please select a destination province' );
    document.form1.destinationprovince.focus();
    return false;
  }

  if ( !document.form1.destinationpostalcode.value )
  {
    alert( 'Please enter a destination postal code' );
    document.form1.destinationpostalcode.focus();
    return false;
  }
  else
  {
    // check that the province matches the postal code
    if ( matchProvincePostal( document.form1.destinationprovince,
                              document.form1.destinationpostalcode ) )
    {
      alert( 'The postal code is not valid for this province' );
      document.form1.destinationpostalcode.focus();
      return false;
    }
  }

  // check for null quantities
  if ( document.form1.ecbookquantity.value == '' &&
       document.form1.pdbookquantity.value == '' )
  {
    alert( 'Please enter a quantity for at least one product' );
    document.form1.ecbookquantity.focus();
    return false;
  }

  return true;
}
function updatePostalCode( postalCode )
{
  formatPostalCode( postalCode );
  if ( document.form1.ecbooknetcost.value ) calcECbook();
  if ( document.form1.pdbooknetcost.value ) calcPDbook();
}
