/*
http://simonwillison.net/2004/May/26/addLoadEvent/
*/
function addLoadEvent(func)
{
  var oldonload = window.onload;
  if (typeof window.onload != 'function')
  {
    window.onload = func;
  }
  else
  {
    window.onload = function()
    {
      if (oldonload)
      {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(form_setup);

function form_setup()
{
  var elObj;
  if (!document.getElementById)
  {
    return;
  }
  if (elObj = document.getElementById("mininav"))
  {
    for (i=0; i<=3; i++)
    {
      registerEventListener('regfee'+i,'registration_fee');
    }
    registerEventListener('regfee3_sel','registration_fee');
/*
    for (i=1; i<=3; i++)
    {
      registerEventListener('regfee1_sel_'+i,'registration_fee');
    }
    for (i=1; i<=3; i++)
    {
      registerEventListener('regfee4_sel_'+i,'registration_fee');
    }
*/
    for (i=1; i<=7; i++)
    {
      registerEventListener('network'+i,'network');
    }
    for (i=0; i<=11; i++)
    {
      registerEventListener('accom'+i,'accommodation');
    }
    registerEventListener('in1','accommodation');
    registerEventListener('out1','accommodation');
    for (i=1; i<=2; i++)
    {
      registerEventListener('conference'+i,'conference');
    }
    for (i=1; i<=3; i++)
    {
      registerEventListener('profiling'+i,'profiling');
    }
    registerEventListener('paymentmethod','paymentmethod');
    registerEventListener('gate','gate');
  }
  else
  {
    setTimeout("form_setup()",10);
  }
}

function registerEventListener(pId,pSection)
{
  if (!document.getElementById)
  {
    return;
  }

  var elObjReg;

  if (elObjReg = document.getElementById(pId))
  {
    if (pId == 'paymentmethod')
    {
      elObjReg.onclick = computeGrandTotal;
    }
    else if (pId == 'gate')
    {
      elObjReg.onclick = function () { return checkForm(this); }
    }
    else if ((pSection == 'network') || ((pSection == 'profiling') && (pId == 'profiling2')))
    {
      elObjReg.onchange = function () { computeSubTotal(pSection); }
    }
    else
    {
      elObjReg.onclick = function () { computeSubTotal(pSection); }
    }
  }
}

function computeSubTotal(pSection)
{
  if (!document.getElementById)
  {
    return;
  }

  total = 0;

  if (pSection == 'registration_fee')
  {
    days_booked = 0;

/*
    if (document.getElementById('regfee1').checked)
    {
/ *
      document.getElementById('regfee1_label').value = '0';

      for (i=1; i<=3; i++)
      {
        if (document.getElementById('regfee1_sel_'+i).checked)
        {
          document.getElementById('regfee1_label').value = '' + document.getElementById('regfee1_sel_price_'+i).value;
          days_booked++;
        }
      }
* /
      if ((document.getElementById('regfee1_sel').value == 'Tendering') || (document.getElementById('regfee1_sel').value == 'Toolbox'))
      {
        newprice = 405;
      }
      else if (document.getElementById('regfee1_sel').value == 'Climate')
      {
        newprice = 610;
      }
      else
      {
        newprice = 0;
      }

      document.getElementById('regfee1_label').value = '' + newprice;
      if (newprice > 0)
      {
        days_booked++;
      }
    }
    else
    {
      document.getElementById('regfee1_label').value = '0';
    }
*/

    if (document.getElementById('regfee0').checked)
    {
      document.getElementById('regfee0_label').value = '' + document.getElementById('regfee0').value;
      days_booked++;
    }
    else
    {
      document.getElementById('regfee0_label').value = '0';
    }

    if (document.getElementById('regfee1').checked)
    {
      document.getElementById('regfee1_label').value = '' + document.getElementById('regfee1').value;
      days_booked++;
    }
    else
    {
      document.getElementById('regfee1_label').value = '0';
    }

    if (document.getElementById('regfee2').checked)
    {
      document.getElementById('regfee2_label').value = '' + document.getElementById('regfee2').value;
      days_booked++;
    }
    else
    {
      document.getElementById('regfee2_label').value = '0';
    }

    if (document.getElementById('regfee3').checked)
    {
/*
      document.getElementById('regfee3_label').value = '0';

      for (i=1; i<=3; i++)
      {
        if (document.getElementById('regfee3_sel_'+i).checked)
        {
          document.getElementById('regfee3_label').value = '' + document.getElementById('regfee3_sel_price_'+i).value;
          days_booked++;
        }
      }
*/
      if ((document.getElementById('regfee3_sel').value == 'Trip1') || (document.getElementById('regfee3_sel').value == 'Trip2'))
      {
        newprice = 535;
      }
      else if (document.getElementById('regfee3_sel').value == 'Workshop1')
      {
        newprice = 650;
      }
      else if ((document.getElementById('regfee3_sel').value == 'Workshop2') || (document.getElementById('regfee3_sel').value == 'Workshop3'))
      {
        newprice = 410;
      }
      else if (document.getElementById('regfee3_sel').value == 'Workshop4')
      {
        newprice = 120;
      }
      else if ((document.getElementById('regfee3_sel').value == 'Workshop24') || (document.getElementById('regfee3_sel').value == 'Workshop34'))
      {
        newprice = 530;
      }
      else
      {
        newprice = 0;
      }

      document.getElementById('regfee3_label').value = '' + newprice;
      if (newprice > 0)
      {
        days_booked++;
      }
    }
    else
    {
      document.getElementById('regfee3_label').value = '0';
    }


    for (i=0; i<=3; i++)
    {
      total += parseFloat(document.getElementById('regfee'+i+'_label').value*1);
    }

/*
    if (days_booked == 2)
    {
      reg_discount = total * 0.05;
      reg_discount = reg_discount.toFixed(2);
      total -= reg_discount;
      document.getElementById('regfee5_label').value = ''+ reg_discount;
      document.getElementById('regfee6_label').value = '0';
      document.getElementById('regfee7_label').value = '0';
    }
    else if (days_booked == 3)
    {
      reg_discount = total * 0.175;
      reg_discount = reg_discount.toFixed(2);
      total -= reg_discount;
      document.getElementById('regfee5_label').value = '0';
      document.getElementById('regfee6_label').value = ''+ reg_discount;
      document.getElementById('regfee7_label').value = '0';
    }
    else if (days_booked == 4)
    {
      reg_discount = total * 0.25;
      reg_discount = reg_discount.toFixed(2);
      total -= reg_discount;
      document.getElementById('regfee5_label').value = '0';
      document.getElementById('regfee6_label').value = '0';
      document.getElementById('regfee7_label').value = ''+ reg_discount;
    }
    else
    {
      document.getElementById('regfee5_label').value = '0';
      document.getElementById('regfee6_label').value = '0';
      document.getElementById('regfee7_label').value = '0';
    }
*/

    if (days_booked == 2)
    {
      total = 1235;
      document.getElementById('regfee5_label').value = '1235';
      document.getElementById('regfee6_label').value = '0';
      document.getElementById('regfee7_label').value = '0';
    }
    else if (days_booked == 3)
    {
      total = 1615;
      document.getElementById('regfee5_label').value = '0';
      document.getElementById('regfee6_label').value = '1615';
      document.getElementById('regfee7_label').value = '0';
    }
    else if (days_booked == 4)
    {
      total = 1875;
      document.getElementById('regfee5_label').value = '0';
      document.getElementById('regfee6_label').value = '0';
      document.getElementById('regfee7_label').value = '1875';
    }
    else
    {
      document.getElementById('regfee5_label').value = '0';
      document.getElementById('regfee6_label').value = '0';
      document.getElementById('regfee7_label').value = '0';
    }

//    total = total.toFixed(2);
  }
  else if (pSection == 'accommodation')
  {
    for (i=0; i<=11; i++)
    {
      if (document.getElementById('accom'+i).checked)
      {
        document.getElementById('accom'+i+'_label').value = '' + document.getElementById('accom_price_'+i).value;
        total += parseFloat(document.getElementById('accom_price_'+i).value*1);
      }
      else
      {
        document.getElementById('accom'+i+'_label').value = '0';
      }
    }

    days_staying = document.getElementById('out1').value - document.getElementById('in1').value;

    if (days_staying >= 0)
    {
      total = total * days_staying;
    }
    else
    {
      document.getElementById('out1').value = document.getElementById('in1').value;
      total = 0;
      window.alert('Check-out date can not be earlier than check-in date.');
    }
  }
  else if (pSection == 'network')
  {
    for (i=1; i<=7; i++)
    {
      if (parseFloat(document.getElementById(pSection+i).value*1) > 0)
      {
        newvalue = document.getElementById(pSection+i).value * document.getElementById(pSection+i+'_price').value;

        document.getElementById(pSection+i+'_label').value = '' + newvalue;
        total += newvalue;
      }
      else
      {
        document.getElementById(pSection+i+'_label').value = '0';
      }
    }
  }
  else if (pSection == 'profiling')
  {
    if (document.getElementById('profiling1').checked)
    {
      document.getElementById('profiling1_label').value = '' + document.getElementById('profiling1').value;
      total += parseFloat(document.getElementById('profiling1').value*1);
    }
    else
    {
      document.getElementById('profiling1_label').value = '0';
    }

    if (parseFloat(document.getElementById('profiling2').value*1) > 0)
    {
      newvalue = document.getElementById('profiling2').value * document.getElementById('profiling2_price').value;

      document.getElementById('profiling2_label').value = '' + newvalue;
      total += newvalue;
    }
    else
    {
      document.getElementById('profiling2_label').value = '0';
    }

    if (document.getElementById('profiling3').checked)
    {
      document.getElementById('profiling3_label').value = '' + document.getElementById('profiling3').value;
      total += parseFloat(document.getElementById('profiling3').value*1);
    }
    else
    {
      document.getElementById('profiling3_label').value = '0';
    }
  }
  else
  {
    number_of_options = 0;

    if (pSection == 'network')
      number_of_options = 7;
    else if (pSection == 'conference')
      number_of_options = 2;
    else if (pSection == 'profiling')
      number_of_options = 3;

    if (number_of_options > 0)
    {
      for (i=1; i<=number_of_options; i++)
      {
        if (document.getElementById(pSection+i).checked)
        {
          document.getElementById(pSection+i+'_label').value = '' + document.getElementById(pSection+i).value;
          total += parseFloat(document.getElementById(pSection+i).value*1);
        }
        else
        {
          document.getElementById(pSection+i+'_label').value = '0';
        }
      }
    }
  }


  document.getElementById(pSection + '_subtotal').value = ''+total;
  document.getElementById(pSection + '_subtotal_hid').value = ''+total;
  document.getElementById(pSection + '_total').value = ''+total;

  computeGrandTotal();
}

function computeGrandTotal()
{
  if (!document.getElementById)
  {
    return;
  }
  grand = document.getElementById('grand_total');

  //add up event values
  total = parseFloat(document.getElementById('registration_fee_total').value*1) + parseFloat(document.getElementById('network_total').value*1) + parseFloat(document.getElementById('accommodation_total').value*1) + parseFloat(document.getElementById('conference_total').value*1) + parseFloat(document.getElementById('profiling_total').value*1);

  //add credit card surcharge where applicable
  if(document.getElementById('paymentmethod').value=='Visa' || document.getElementById('paymentmethod').value=='MasterCard')
  {
    total = total*1.025;
  }
  else if(document.getElementById('paymentmethod').value=='Amex')
  {
    total = total*1.035;
  }

  total = total.toFixed(2);
  grand.value = total;
  document.getElementById('grand_total_field').value=total;
}



var err;

function checkForm(sendid)
{
  err = true;
  formid = sendid.form;

  if (formid.firstname.value.length < 1)
  {
    error('You haven\'t provided a first name.');
    formid.firstname.focus();
    formid.firstname.select();
  }
  else if (formid.surname.value.length < 1)
  {
    error('You haven\'t provided a surname.');
    formid.surname.focus();
    formid.surname.select();
  }
  else if (formid.organisation.value.length < 1)
  {
    error('You haven\'t said which organisation you represent.');
    formid.organisation.focus();
    formid.organisation.select();
  }
  else if (formid.state.value.length < 1)
  {
    error('You haven\'t said which state you are from.');
    formid.state.focus();
  }
  else if (formid.phone.value.length < 1)
  {
    error('You haven\'t said provided a telephone number.');
    formid.phone.focus();
    formid.phone.select();
  }
  else if (formid.email.value.length < 1)
  {
    error('You haven\'t provided an email address.');
    formid.email.focus();
    formid.email.select();
  }

  if (err && (formid.email.value.length > 0))
  {
    if (formid.email.value.length < 5)
    {
      error('The email address you have entered is not a valid email address.');
      formid.email.focus();
      formid.email.select();
    }
    else if ((formid.email.value.indexOf('@') == -1) || (formid.email.value.indexOf('.') == -1))
    {
      error('The email address you have entered is not a valid email address.');
      formid.email.focus();
      formid.email.select();
    }
    else if (formid.email.value.indexOf('@') > formid.email.value.lastIndexOf('.'))
    {
      error('The email address you have entered is not a valid email address.');
      formid.email.focus();
      formid.email.select();
    }
    else if (stringcontains(formid.email.value,'()[]<>;:," ') == true)
    {
      error('The email address you have entered is not a valid email address.');
      formid.email.focus();
      formid.email.select();
    }
  }

  if (err)
  {
    if ((formid.regfee1.checked) && (formid.regfee1_sel.value == ''))
    {
      error('You haven\'t specified which workshop you want to register for.');
      formid.regfee1_sel.focus();
    }
    else if ((formid.regfee4.checked) && (formid.regfee4_sel.value == ''))
    {
      error('You haven\'t specified which study tour (or summit) you want to register for.');
      formid.regfee4_sel.focus();
    }
    else if (formid.paymentmethod.value.length < 1)
    {
      error('You haven\'t specified a payment method.');
      formid.paymentmethod.focus();
    }
    else if (!(formid.cancelpolicy.checked))
    {
      error('You must select the box to indicate your acceptance of the cancellation policy.');
      formid.cancelpolicy.focus();
    }
  }

  if (err)
  {
    err = window.confirm('Are you sure you have entered everything correctly?');
  }

  return err;
}

function stringcontains(haystack,needles)
{
  var result;
  result = false;

  for (i=0;i<needles.length;i++)
  {
    if (haystack.indexOf(needles.charAt(i))>0)
    {
      result = true;
    }
  }

  return result;
}

function error(txt)
{
  err = false;
  window.alert(txt);
}
