function checkCountry(){
  var country = getElementById("country").value;
  var postcodeLookup = getElementById("postcodeLookup");
  if (country == "United Kingdom") postcodeLookup.style.display = "block";
  else postcodeLookup.style.display = "none";
}

function checkDependent(){
  var job = getElementById("job").value;
  if (job == "Student" || job == "Housewife/Homemaker" || job == "Retired" || job == "Not working"){
    document.getElementById("industry").disabled = true;
    document.getElementById("company_size").disabled = true;
  }else{
    document.getElementById("industry").disabled = false;
    document.getElementById("company_size").disabled = false;
  }
}

function showPostcodeButton(){
  if (getElementById("country").value == "United Kingdom") getElementById("postcodeLookup").style.display = "block";
}

function validatePostcode() {
  var error = "";

  // So, do we have a postcode?
  var postcode = trim(getElementById("postcode").value);
  if (postcode.length == 0) error = error + "<li>Please enter a postcode to lookup</li>";

  var country = getElementById("country").value;
  if (country != "United Kingdom") error = error + "<li>This only works for United Kingdom address</li>";

  if (error.length > 0){
    // Show error in error box
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = '<ul>' + error + '</ul><p>Please try again once this issue has been corrected.</p>';
    removeClass(errorBox, "hidden")
    return false;
  }else{
    getElementById("registrationForm2").action = "/postcode-lookup.do";
  }
}

function validateRegForm1(){
  // Stop further attempts by disabling the submit button
  var submit = getElementById("submit");
  submit.disabled = true;

  var error = "";

  // Do we have responses for email, password, password_confirm, firstname, lastname?
  var aRequired = new Array("username", "password", "password_confirm", "firstname", "lastname", "email");
  var value = "";
  for (var i=0; i<aRequired.length; i++){
    value = getElementById(aRequired[i]).value;
    if (value.length == 0) {
      switch (aRequired[i]){
        case "email":
          error = error + "<li>Email Address</li>";
          break;
        case "password":
          error = error + "<li>Password</li>";
          break;
        case "password_confirm":
          error = error + "<li>Re-type Password</li>";
          break;
        case "firstname":
          error = error + "<li>First Name</li>";
          break;
        case "lastname":
          error = error + "<li>Last Name</li>";
          break;
        case "username":
          error = error + "<li>Username</li>";
          break;
      }
    }
  }
  if (error.length > 0) error = "<li>Please ensure that you have completed the following fields:<ul>" + error + "</ul></li>";

  // Does password match password_confirm?
  if (getElementById("password").value != getElementById("password_confirm").value) error = error + "<li>The two password values do not match.</li>";

  if (error.length > 0){
    // Show errors in error box
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = '<ul>' + error + '</ul><p>Please try again once these issues have been corrected.</p>';
    removeClass(errorBox, "hidden")
    submit.disabled = false;
    return false;
  }else{
    return true;
  }
}

function validateProdForm(){
  // Stop further attempts by disabling the submit button
  var submit = getElementById("submit");
  submit.disabled = true;

  var error = "";

  // Have they selected one of the subscription options?
  var form = getElementById("premiumProducts");
  var aProducts = getElementsByClassName(form, "input", "radio");
  var bProduct = false;
  for (var i=0; i<aProducts.length; i++){
    if (aProducts[i].checked == true){
      bProduct = true;
      break;
    }
  }
  if (!bProduct) error = error + '<p>Please select a Subscription Type.</p>';

  // Have they agreed to the T&C
  if (!getElementById("tandc").checked) error = error + "<p>Please confirm that you have read and understood the Terms and Conditions.</p>";

  if (error.length > 0){
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = error;
    removeClass(errorBox, "hidden")
    submit.disabled = false;
    return false;
  }else{
    return true;
  }
}

function validateCCard(){
  // Stop further attempts by disabling the submit button
  var submit = getElementById("submit");
  submit.disabled = true;
  submit.value = "Processing...";

  var error = "";

  var cardType = getElementById("type").value;
  if (cardType == 'SOLO'){
    var issueNumber = trim(getElementById("issue-number").value);
    issueNumber = parseInt(issueNumber);
  }
  var ccNumber = trim(getElementById("ccnumber").value);
  ccNumber = parseInt(ccNumber);

  // Payment details: require number and name (solo also needs issue no and valid). Also, are they numeric (where applicable)?
  var payError = "";
  var cardType = getElementById("type").value;
  if (cardType == 'SOLO'){
    var issueNumber = trim(getElementById("issue-number").value) + "";
    issueNumber = parseInt(issueNumber);
    if (issueNumber == '') payError = payError + "<li>No Issue Number has been supplied</li>";
    else if (isNaN(issueNumber)) payError = payError + "<li>The Issue Number is not a number</li>";
  }
  if (isNaN(ccNumber)) payError = payError + "<li>The Card Number is not a number</li>";
  else if (ccNumber.length < 13) payError = payError + "<li>Card Numbers cannot be less than 13 digits</li>";
  if (trim(getElementById("ccholdername").value) == '') payError = payError + "<li>No Card Holder's Name</li>";
  if (payError.length > 0) error = error + payError;

  // get this month & year
  var date = new Date();
  var thisMonth = date.getMonth() + "";
  thisMonth = parseInt(thisMonth) + 1;
  var thisYear = date.getFullYear();

  // check dates
  var dateError = "";
  if (cardType == 'SOLO'){
    var validMonth = getElementById("validmonth").value + "";
    var validYear = getElementById("validyear").value + "";
    if (validMonth == "-" || validYear == "-") dateError = dateError + "<li>Valid from Date</li>";
  }
  var expiryMonth = getElementById("expirymonth").value + "";
  var expiryYear = getElementById("expiryyear").value + "";
  if (expiryMonth == "-" || expiryYear == "-") dateError = dateError + "<li>Expiry Date</li>";

  if (dateError.length > 0){
    error = error + "<li>Please check the supplied dates for:<ul>" + dateError + "</ul></li>";
  }else{
    if (cardType == 'SOLO'){
      validMonth = parseInt(validMonth);
      validYear = parseInt(validYear);
      if (thisYear == validYear && thisMonth < validMonth) error = error + "<li>The card cannot be used yet.</li>";
    }
    expiryMonth = parseInt(expiryMonth);
    expiryYear = parseInt(expiryYear);
    if (thisYear == expiryYear && thisMonth > expiryMonth) error = error + "<li>The card has expired.</li>";
    if (cardType == 'SOLO'){
      if (validYear == expiryYear && validMonth > expiryMonth) error = error + "<li>The 'Expiry Date' preceeds the 'Valid from Date'.</li>";
    }
  }

  if (error.length > 0){
    // Show errors in error box
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = '<p>Please correct the following issues:</p><ul>' + error + '</ul><p>Please try again once these issues have been corrected.</p>';
    removeClass(errorBox, "hidden")
    submit.value = "Submit";
    submit.disabled = false;
    return false;
  }else{
    return true;
  }
}

function validateCompletePremium(){
  // Stop further attempts by disabling the submit button
  var submit = getElementById("submit");
  submit.disabled = true;

  var error = "";

  // Have they selected one of the subscription options?
  var form = getElementById("completePremium");
  var aProducts = getElementsByClassName(form, "input", "radio");
  var bProduct = false;
  for (var i=0; i<aProducts.length; i++){
    if (aProducts[i].checked == true){
      bProduct = true;
      break;
    }
  }

  // check address & telephone
  // Do we have responses for address1, town, postcode, telephone?
  var aRequired = new Array("address1", "town", "postcode", "telephone");
  var addressValue = "";
  for (var i=0; i<aRequired.length; i++){
    addressValue = trim(getElementById(aRequired[i]).value);
    if (addressValue.length == 0) {
      switch (i){
        case 0:
          error = error + "<li>The first line of the address field</li>";
          break;
        case 1:
          error = error + "<li>Town</li>";
          break;
        case 2:
          error = error + "<li>Postcode</li>";
          break;
        case 3:
          error = error + "<li>Telephone</li>";
          break;
      }
    }
  }
  if (error.length > 0) error = "<p>Please complete the following address fields:</p><ul>" + error + "</ul>";

  if (!bProduct) error = "<p>Please select a Subscription Type.</p>" + error;
  if (error.length > 0){
    // Show errors in error box
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = error;
    removeClass(errorBox, "hidden")
    submit.disabled = false;
    return false;
  }else{
    return true;
  }
}

function validateRegForm3() {
  // Stop further attempts by disabling the submit button
  var submit = getElementById("submit");
  submit.disabled = true;
  submit.value = "Processing...";

  var error = "";

  var cardType = getElementById("type").value;
  if (cardType == 'SOLO'){
    var issueNumber = trim(getElementById("issue-number").value) + "";
    issueNumber = parseInt(issueNumber);
  }
  var ccNumber = trim(getElementById("ccnumber").value);
  ccNumber = parseInt(ccNumber);

  // Payment details: require number and name (solo also needs issue no and valid). Also, are they numeric (where applicable)?
  var payError = "";
  var cardType = getElementById("type").value;
  if (cardType == 'SOLO'){
    var issueNumber = trim(getElementById("issue-number").value) + "";
    issueNumber = parseInt(issueNumber);
    if (issueNumber == '') payError = payError + "<li>Issue Number</li>";
    else if (isNaN(issueNumber)) payError = payError + "<li>Issue Number</li>";
  }
  if (ccNumber == '') payError = payError + "<li>Card Number</li>";
  else if (isNaN(ccNumber)) payError = payError + "<li>Card Number</li>";
  if (trim(getElementById("ccholdername").value) == '') payError = payError + "<li>Card Holder's Name</li>";
  if (payError.length > 0) error = error + "<li>Please ensure that you have completed the following payment fields:<ul>" + payError + "</ul></li>";

  // get this month & year
  var date = new Date();
  var thisMonth = date.getMonth() + "";
  thisMonth = parseInt(thisMonth) + 1;
  var thisYear = date.getFullYear();

  // check dates
  var dateError = "";
  if (cardType == 'SOLO'){
    var validMonth = getElementById("validmonth").value + "";
    var validYear = getElementById("validyear").value + "";
    if (validMonth == "NONE" || validYear == "NONE") dateError = dateError + "<li>Valid from Date</li>";
  }
  var expiryMonth = getElementById("expirymonth").value + "";
  var expiryYear = getElementById("expiryyear").value + "";
  if (expiryMonth == "NONE" || expiryYear == "NONE") dateError = dateError + "<li>Expiry Date</li>";

  if (dateError.length > 0){
    error = error + "<li>Please check the supplied dates for:<ul>" + dateError + "</ul></li>";
  }else{
    if (cardType == 'SOLO'){
      validMonth = parseInt(validMonth);
      validYear = parseInt(validYear);
      if (thisYear == validYear && thisMonth < validMonth) error = error + "<li>The card cannot be used yet.</li>";
    }
    expiryMonth = parseInt(expiryMonth);
    expiryYear = parseInt(expiryYear);
    if (thisYear == expiryYear && thisMonth > expiryMonth) error = error + "<li>The card has expired.</li>";
    if (cardType == 'SOLO'){
      if (validYear == expiryYear && validMonth > expiryMonth) error = error + "<li>The 'Expiry Date' preceeds the 'Valid from Date'.</li>";
    }
  }

  // check address & telephone
  // Do we have responses for address1, town, postcode, telephone?
  var aRequired = new Array("address1", "town", "postcode", "telephone");
  var addressValue = ""; var addressError = "";
  for (var i=0; i<aRequired.length; i++){
    addressValue = trim(getElementById(aRequired[i]).value);
    if (addressValue.length == 0) {
      switch (i){
        case 0:
          addressError = addressError + "<li>The first line of the address field</li>";
          break;
        case 1:
          addressError = addressError + "<li>Town</li>";
          break;
        case 2:
          addressError = addressError + "<li>Postcode</li>";
          break;
        case 3:
          addressError = addressError + "<li>Telephone</li>";
          break;
      }
    }
  }
  if (addressError.length > 0) error = error + "<li>Please complete the following address fields:<ul>" + addressError + "</ul></li>";

  // Has an investor type selected?
  if (!getElementById("professional").checked && !getElementById("private").checked) error = error + "<li>Please indicate what investor type you are.</li>";

  if (error.length > 0){
    // Show errors in error box
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = '<ul>' + error + '</ul><p>Please try again once these issues have been corrected.</p>';
    removeClass(errorBox, "hidden")
    submit.value = "Submit Payment";
    submit.disabled = false;
    return false;
  }else{
    return true;
  }
}

function validateRegForm4(){
  // Do we have a telephone number?
  var iTel = trim(getElementById("telephone").value);
  if (iTel.length == 0){
    // Show errors in error box
    var errorBox = getElementById("error");
    var errorBoxDivs = getElementsByTagName(errorBox, "div");
    errorBoxDivs[0].innerHTML = '<p>Please supply a telephone number and try again.</p>';
    removeClass(errorBox, "hidden")
    return false;
  }
}