function initializeForm () {
  // global variable to hold the calendar
  _calendar = null;
  
  // remove or change to true to enable validation
  _validate = true;
  
  /*var btnDoe = document.getElementById('btnDoe');
  var dateofenquiry = document.getElementById('dateofenquiry');
  btnDoe.dateField = dateofenquiry.id;
  
  var btnDob = document.getElementById('btnDob');
  var dateofbirth = document.getElementById('dateofbirth');
  btnDob.dateField = dateofbirth.id;
    //btnDoe.addEventListener('click', showCalendar, false);
  //btnDob.addEventListener('click', showCalendar, false);*/
}

function showCalendar (id) {
  var el = document.getElementById(id);
  
  if (_calendar != null) {
    // we already have some calendar created
    _calendar.hide(); // so hide the calendar fist
  }else{
    // first time call - create the calendar
    var cal = new Calendar(1, null, selected, closeHandler);
    
    // remember the global var
    _calendar = cal;
    cal.setRange(1900, 2070); // set the min, max year
    cal.create(); // create the calendar object
  }
  
  _calendar.setDateFormat('%d/%m/%Y');  // set the date format
  _calendar.parseDate(el.value);  // try to parse the value in the field
  _calendar.sel = el; // inform it what input field we use
  
  _calendar.showAtElement(el, 'Br');  
}

function selected (cal, date) {
  cal.sel.value = date;
  if(cal.dateClicked)
    cal.callCloseHandler();
}

function closeHandler (cal) {
  cal.hide(); // hide the calendar
  _calendar = null;
}

function validateForm(){
  if (!_validate)
    return true;
  
  var counter = 0;
  var errors = new Array();
  
  // get value of the form elements
  var divError = document.getElementById('divError');
  var form = document.getElementById('enqform');
  var doe = form.dateofenquiry.value;
  var modePhone = (form.modePhone.checked) ? form.modePhone.value : '';
  var modeMobile = (form.modePhone.checked) ? form.modeMobile.value : '';
  var modeDirect = (form.modeDirect.checked) ? form.modeDirect.value : '';
  var fullName = form.fullName.value;
  var dob = form.dateofbirth.value;
  var qualification = form.qualification.value;
  var year = form.year.value;
  var address1 = form.address1.value;
  var address2 = form.address2.value;
  var address3 = form.address3.value;
  
  var c_countrycode = form.c_countrycode.value;
  var c_stdcode = form.c_stdcode.value;
  var c_number = form.c_number.value;
  var contactNumber = '';
  
  var m_countrycode = form.m_countrycode.value;
  var m_number = form.m_number.value;
  var mobileNumber = '';
  
  var email = form.email.value;
  
  /*var location = form.location.value;
    var shiftdetails = form.shiftdetails.value;
    
    var level1rt = (form.level1rt.checked) ? form.level1rt.value : '';
    var level1ut = (form.level1ut.checked) ? form.level1ut.value : '';
    var level1mt = (form.level1mt.checked) ? form.level1mt.value : '';
    var level1pt = (form.level1pt.checked) ? form.level1pt.value : '';
    var level1ndt = (form.level1ndt.checked) ? form.level1ndt.value : '';
    
    var level2rt = (form.level2rt.checked) ? form.level2rt.value : '';
    var level2ut = (form.level2ut.checked) ? form.level2ut.value : '';
    var level2mt = (form.level2mt.checked) ? form.level2mt.value : '';
    var level2pt = (form.level2pt.checked) ? form.level2pt.value : '';
    var level2uttky = (form.level2uttky.checked) ? form.level2uttky.value : '';
    var level2others = (form.level2others.checked) ? form.level2others.value : '';
    var level2aws = (form.level2aws.checked) ? form.level2aws.value : '';
    
    var reference = form.reference.value;*/
 
  var c_entered = false;
  var m_entered = false;
  
  // validate required fields values  
  // date of enquirry
  if (doe == '') {
    errors[counter++] = "Choose date of birth";
  } else{
    // validate the date
  }
  
  // mode
  if (modePhone == '' && modeMobile == '' && modeDirect == '') {
    errors[counter++]="Select mode of enquiry";
  }
  
  // full name
  if (fullName == '') {
    errors[counter++]="Enter your full name";
  }
  
  // date of birth
  if (dob == '') {
    errors[counter++]="Choose your date of birth";
  } else {
    // validate the date
  }
  
  // qualification
  if (qualification == '') {
    errors[counter++]="Enter your qualification";
  }
  
  // year of passing
  if (year == '') {
    errors[counter++]="Enter year of passing";
  } else if (year.length < 4) {
    errors[counter++]="Enter a valid year";
  }
  
  // address
  if (address1 == '' && address2 == '' && address3 == '') {
    errors[counter++]="Enter address";
  }
  
  // contact number
  if (c_countrycode == '' || c_stdcode == '' || c_number == '') {
    c_entered = false;
  } else if (c_countrycode != '' && c_stdcode != '' && c_number != '') {
    // TODO: check for correct length
    
    c_entered = true;
    contactNumber = c_countrycode + '-' + c_stdcode + '-' + c_number;
  }
  
  // mobile number
  if (m_countrycode == '' || m_number == '') {
    m_entered = false;
  }  else if (m_countrycode != '' && m_number != '') {
    // TODO: check mobile number length
    m_entered = true;
    mobileNumber = m_countrycode + '-' + m_number;
  }
  
  if (!c_entered && !m_entered) {
    errors[counter++]="Enter your contact/mobile number";
  }
  
  // email
  if (email == '') {
    errors[counter++]="Enter your email address";
  } else {
    // Validate email using RegEx
    // TODO: Change the email validation regular expression & uncomment the block
    var emailexp = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
    if(!emailexp.test(email)){
      errors[counter++] = "Please enter a valid email address";
    }
  }
  
  if(errors.length == 0){
    divError.className = "error hidden";
    return true;
  } else {
    var error = "<h2>Please correct the following errors:</h2>\n<ul>\n";
    for (var i=0; i < errors.length; i++) {
      error += "  <li>" + errors[i] + "</li>\n";
    };
    
    error += "</ul>";
    
    divError.className = "error";
    divError.innerHTML = error;
    
    alert('Please correct the errors found in the form');
    return false;
  }
}
