﻿var txtName;

var telDetails;
var emailDetails;
var postalDetails;

var telCheck;
var emailCheck;
var postalCheck;

var dayTelephone;
var eveningTelephone;
var emailAddress;
var postalAddress;

var submitButton;

function IsChecked(checkbox) { return checkbox.checked; }

function HasContactDetails() {
  var invalidControls = []
  
  if(txtName.value == '')
    invalidControls.push(txtName);

  if( ![telCheck, emailCheck, postalCheck].any(IsChecked) )
  {
    invalidControls.push(telCheck);
    invalidControls.push(emailCheck);
    invalidControls.push(postalCheck);
  }

  if(telCheck.checked)
    if(dayTelephone.value == '' && eveningTelephone.value == '')
    {
      invalidControls.push(dayTelephone);
      invalidControls.push(eveningTelephone);
    }
  
  if(emailCheck.checked)
    if(emailAddress.value == '')
      invalidControls.push(emailAddress);
  
  if(postalCheck.checked)
    if(postalAddress.value == '')
      invalidControls.push(postalAddress);
  
  [txtName, dayTelephone, eveningTelephone, emailAddress, postalAddress, telCheck, emailCheck, postalCheck]
    .reject( Enumerable.include, invalidControls )
    .invoke('removeClassName', 'mandatory');
    
  invalidControls.invoke('addClassName', 'mandatory');
  
  return invalidControls.length == 0;
}

function CheckContactDetails() {
  submitButton.disabled = !HasContactDetails();
}

Event.observe(window, 'load', function() {
  
  txtName = $('name');
  
  telDetails = $('telephoneDetails');
  emailDetails = $('emailDetails');
  postalDetails = $('postalDetails');
  
  telCheck = $('telephone');
  emailCheck = $('email');
  postalCheck = $('letter');
  
  dayTelephone = $('dayTelephone');
  eveningTelephone = $('eveningTelephone');
  emailAddress = $('emailAddress');
  postalAddress = $('postalAddress');
  
  submitButton = $('submit');
  
  telDetails.setHidden( !telCheck.checked );
  emailDetails.setHidden( !emailCheck.checked );
  postalDetails.setHidden( !postalCheck.checked );
  
  CheckContactDetails();
  
  function bindContactDetails(check, details)
  {
    new Form.Element.EventObserver( check, function() {
      if( check.checked )
      {
        details.blindDown( {
            duration: 0.5, 
            afterFinish: function(){
              details.select('input.text, textarea').first().focus();
            }
          });
      }
      else 
        details.blindUp( {duration: 0.5} );

      CheckContactDetails();
    });
  }
  
  bindContactDetails(telCheck, telDetails);
  bindContactDetails(emailCheck, emailDetails);
  bindContactDetails(postalCheck, postalDetails);
  
  [txtName, dayTelephone, eveningTelephone, emailAddress, postalAddress].each( function(e) {
    e.observe("keyup", function(){
      CheckContactDetails();
    });
  });
  
});