function validateForm() {
  isValid = true;
  isValid = checkNotEmpty('entry_1');
  isValid = (checkNotEmpty('entry_13') && isValid);
  isValid = (checkNotEmpty('entry_14') && isValid);

  var dateOneNotEmpty = checkNotEmpty('entry_10');
  isValid = (dateOneNotEmpty && isValid);
  if (dateOneNotEmpty) {
    isValid = (checkValidDate('entry_10') && isValid);
  }
  var dateTwoNotEmpty = checkNotEmpty('entry_11');
  isValid = (isValid && dateTwoNotEmpty);
  if (dateTwoNotEmpty) {
    isValid = (checkValidDate('entry_11') && isValid);
  }
  
  var numPeopleNotEmpty = checkNotEmpty('entry_3');
  isValid = (numPeopleNotEmpty && isValid);
  if (numPeopleNotEmpty) {
    var numPeopleValid = checkValidNumber('entry_3');
    isValid = (isValid && numPeopleValid);
    if (numPeopleValid) {
      if (parseInt(getNumberForField(document.booking_form.entry_3)) > 1) {
        isValid = (checkNotEmpty('entry_16') && isValid);
      }
      isValid = (checkSmallFieldsAddToTotalNumber() && isValid);
    }
  }
  isValid = (checkValidNumber('entry_4') && isValid);
  isValid = (checkValidNumber('entry_5') && isValid);
  isValid = (checkValidNumber('entry_6') && isValid);
  isValid = (checkValidNumber('entry_7') && isValid);
  isValid = (checkValidNumber('entry_8') && isValid);
  isValid = (checkValidNumber('entry_9') && isValid);
  return isValid;
}

function checkNotEmpty(id) {
  if (getFullId(id).value == '') {
    showError(id);
    return false;
  } else {
    hideError(id);
    return true;
  }
}

function checkSmallFieldsAddToTotalNumber() {
  var sum = 0;
  sum += getNumberForField(document.booking_form.entry_4);
  sum += getNumberForField(document.booking_form.entry_5);
  sum += getNumberForField(document.booking_form.entry_6);
  sum += getNumberForField(document.booking_form.entry_7);
  sum += getNumberForField(document.booking_form.entry_8);
  sum += getNumberForField(document.booking_form.entry_9);
  if (sum != getNumberForField(document.booking_form.entry_3)) {
    showError('num_mismatch');
    return false;
  } else {
    hideError('num_mismatch');
    return true;
  }
}

function getNumberForField(field) {
  var num = parseInt(field.value);
  if (!isNaN(num)) {
    return num;
  } else {
    return 0;
  }
}

function checkValidNumber(id) {
  if (getFullId(id).value != '') {
    if (isNaN(parseInt(getFullId(id).value))) {
      showError(id);
      return false;
    } else {
      hideError(id);
      return true;
    }
  } else {
    hideError(id);
    return true;
  }
}

function checkValidDate(id) {
  var dateString = getFullId(id).value;
  var firstSlashPosition = dateString.indexOf("/");
  var secondSlashPosition = dateString.indexOf("/", firstSlashPosition + 1);
  if (firstSlashPosition <= 0 ||
      secondSlashPosition <= 0) {
    showError(id);
    return false;
  }
  var day = dateString.substring(0, firstSlashPosition);
  var month = dateString.substring(firstSlashPosition + 1,
                                   secondSlashPosition);
  var year = dateString.substring(secondSlashPosition + 1);
  var dateMillis = 0;
  dateMillis = Date.UTC(year, month, day);
  if (!isNaN(dateMillis) && dateMillis > 0) {
    var dateObj = new Date(dateMillis);
    if (dateObj.getFullYear() < 2009) {
      showError(id);
      return false;
    } else {
      hideError(id);
      return true;
    }
  } else {
    showError(id);
    return false;
  }
}

function getFullId(id) {
  return eval('document.booking_form.' + id);
}

function showError(id) {
  document.getElementById(id + '_err_box').className='errorbox-bad';
  document.getElementById(id + '_err_msg').style.display='inline';
}

function hideError(id) {
  document.getElementById(id + '_err_box').className='errorbox-good';
  document.getElementById(id + '_err_msg').style.display='none';
}
