if(typeof g_wtFormErrors == 'undefined') {
  var g_wtFormErrors = [];
}

function wtFTrim(str, chars) {
  return wtFLtrim(wtFLtrim(str, chars), chars);
}

function wtFLtrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function wtFRtrim(str, chars) {
  chars = chars || "\\s";
  return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}



function wtClearFormImage(fieldID) {
  var valueElement = document.getElementById(fieldID + 'value');
  if(valueElement) {
    valueElement.value = "";
  }

  var imageElement = document.getElementById(fieldID + 'Image');
  if(imageElement) {
    imageElement.innerHTML = '';
  }
}


function wtGetKeyCode(e)
{
  if (window.event)
  {
    return window.event.keyCode;
  }
  else if (e)
  {
     return e.which;
  }
  else
  {
     return null;
  }
}

function wtAllowKeys(e, goodkeys, allowControlKeys)
{

  if(typeof allowControlKeys == 'undefined') {
    allowControlKeys = true;
  }
  var key, keychar;
  key = wtGetKeyCode(e);
  if (key == null)
  {
    return true;
  }

  // get character
  keychar = String.fromCharCode(key);
  keychar = keychar.toLowerCase();
  goodkeys = goodkeys.toLowerCase();

  // check goodkeys
  if (goodkeys.indexOf(keychar) != -1)
  {
        return true;
  }

  // control keys
  if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
  {
     return allowControlKeys;
  }

    return false;
}

function wtGetKey(e)
{
  if (window.event)
  {
    return window.event.keyCode;
  }
  else if (e)
  {
     return e.which;
  }
  else
  {
     return null;
  }
}

function wtCheckKeys(e, goodkeys)
{
  var key, keychar;
  key = wtGetKey(e);
  if (key == null)
  {
    return true;
  }

  // get character
  keychar = String.fromCharCode(key);
  keychar = keychar.toLowerCase();
  goodkeys = goodkeys.toLowerCase();

  // check goodkeys
  if (goodkeys.indexOf(keychar) != -1)
  {
        return true;
  }

  // control keys
  if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
  {
     return true;
  }

    return false;
}



function wtFormValue(id) {
  var element = document.getElementById(id);
  var subelement = document.getElementById(id + "_1");
  var value = '';
  if( subelement || (!element) || typeof(element) == 'undefined') {
    element = document.getElementById(id + "_1");
    if(element) {
      var i = 1;
      for(i = 1; i < 100; i++) {
        element = document.getElementById(id + '_' + i);
        if(!element) {
          break;
        }
        if(element.checked) {
          if(value != '') {
            value += ',';
          }
          value += element.value;
        }
      }
    }
    return value;
  }
  return element.value;
}

function wtSetFieldVisibility() {
  for(var key in g_fieldConditions) {
    wtCheckFieldVisibility(key);
  }
}

function wtOptionChanged(id) {
  if(typeof(g_fieldDependencies) != 'undefined') {
    if(typeof(g_fieldDependencies[id]) != 'undefined') {
      for(var i = 0; i < g_fieldDependencies[id].length; i++) {
        wtCheckFieldVisibility(g_fieldDependencies[id][i]);
      }
    }
  }
}

function wtOptionSelected(options, value) {
  var optionsArray = options.split(',');
  for(var i = 0; i < optionsArray.length; i++) {
    if(optionsArray[i] == value) {
      return true;
    }
  }
  return false;
}

function wtChangeCountry(countryFieldID, stateFieldID) {
  var country = $('#' + countryFieldID).val();
  var html = '';
  if(country == 'Australia') {
    html += '<select name="' + stateFieldID + '" class="selectinput" id="' + stateFieldID + '">\n';
    html += '  <option value="">Please Choose</option>\n';
    html += '  <option value="Australian Capital Territory">Australian Capital Territory</option>\n';
    html += '  <option value="New South Wales">New South Wales</option>\n';
    html += '  <option value="Northern Territory">Northern Territory</option>\n';
    html += '  <option value="Queensland">Queensland</option>\n';
    html += '  <option value="South Australia">South Australia</option>\n';
    html += '  <option value="Tasmania">Tasmania</option>\n';
    html += '  <option value="Victoria">Victoria</option>\n';
    html += '  <option value="Western Australia">Western Australia</option>\n';
    html += '</select>\n';
  } else {
    html += '<input type="text" name="' + stateFieldID + '" id="' + stateFieldID + '" value="" class="textinput">\n';
  }
  $('#' + stateFieldID + 'States').html(html);

}


function wtCheckFieldVisibility(id) {
  var show = true;

  show = eval(g_fieldConditions[id]);
  var rowid = '';

  if(id.indexOf('Field') == 0) {
    rowid = 'row' + id.substring(5);
  } else {
    rowid = id + 'Field';
  }

  var rowelement = document.getElementById(rowid);
  if(rowelement != null && typeof(rowelement) != 'undefined') {
    if(show) {
      rowelement.style.display = '';
    } else {
      rowelement.style.display = 'none';
    }
  }
}


function wtCheckPhoneNumber(theForm, field) {
  var value = theForm[field].value.trim();
  if(value == '') {
    return true;
  }

  value = value.replace(/\s+/g, '');
 
  if(value.length < 8) {
    return false;
  }

  if(value.charAt(0) == '0' && value.length != 10) {
    return false;
  } 

  if((value.charAt(0) == '1' 
     || value.charAt(0) == '2'
     || value.charAt(0) == '3'
     || value.charAt(0) == '4'
     || value.charAt(0) == '5'
     || value.charAt(0) == '6'
     || value.charAt(0) == '7'
     || value.charAt(0) == '8'
     || value.charAt(0) == '9') && value.length != 8) {
    return false;
  }

  
  var reg = /^([0-9_\(\)\-\+\.\ ])+$/;
  return reg.test(value);
//  return /^\w+([\.\+-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value);
}

function wtCheckRequiredPhoneNumber(theForm, field) {
  var ok = false;
  ok = wtCheckRequiredField(theForm, field);
  if(!ok) {
    return false;
  }
  return wtCheckPhoneNumber(theForm, field);

}


function wtCheckEmail(theForm, field) {
  var value = theForm[field].value;
  if(value == '') {
    return true;
  }

  var reg = /^([A-Za-z0-9_\-\+\.\'])+\@([A-Za-z0-9_\-\.\'])+\.([A-Za-z]{2,20})$/;
  return reg.test(value);
//  return /^\w+([\.\+-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(value);
}

function wtCheckRequiredEmail(theForm, field) {
  var ok = false;
  ok = wtCheckRequiredField(theForm, field);
  if(!ok) {
    return false;
  }
  return wtCheckEmail(theForm, field);
}

function wtCheckFileExtension(theForm, field, allowedExtensions) {
  var value = theForm[field].value;
  value = value.replace(/^\s+|\s+$/g, '') ;
  if(value == '') {
    return true;
  }

  var extnArray = allowedExtensions.split(",");
  var pos = value.lastIndexOf('.');
  var extension = '';
  if(pos != -1) {
    extension = value.substr(pos + 1);
  }
  extension = extension.toLowerCase();

  for(var i = 0; i < extnArray.length; i++) {
    var allowedExtension = extnArray[i].replace(/^\s+|\s+$/g, '') ;
    allowedExtension = allowedExtension.toLowerCase();
    if(extension == allowedExtension) {
      return true;
    }
  }

  return false;

}


function wtCheckRequiredField(theForm, field) {
  if(theForm[field] && typeof(theForm[field].value) != 'undefined') {
    var value = theForm[field].value;
    if(value == '' && theForm[field].checked) value = 'true';;

    value = wtFTrim(value);


    if(value == '') {
      return false;
    } else {
    }
  } else {
    var yearelement = document.getElementById(field + "Year");
    if(yearelement) {
      // field is a date
      var dayelement = document.getElementById(field + "Day");
      var monthelement = document.getElementById(field + "Month");

      var year = yearelement.value;
      var month = monthelement.value;
      var day = 'day';
      if(dayelement) {
        day = dayelement.value;
      }

      if(year.length != 4 || month == '' || day == '') {
        return false;
      }

      return true;
    }
    var inputs = document.getElementsByTagName('input');
    var foundField = false;
    var fieldHasValue = false;
    for(var i = 0; i < inputs.length; i++) {
      if(inputs[i].id.indexOf(field + "_") == 0) {
        if(inputs[i].checked) {
          return true;
        }
        foundField = true;
      }
    }
    if(foundField) {
      return false;
    }
    
    if(typeof wtCustomCheckRequiredField == 'function') {
      var returnValue = wtCustomCheckRequiredField(theForm, field);
      if(typeof returnValue != 'undefined') {
        return returnValue;
      }
    }
  }
  return true;
}


var g_formErrors = new Object();

function wtFormError(formID) {
  if(g_formErrors[formID]) {
    return g_formErrors[formID];
  } else {
    return null;
  }
}

function wtFormCheck(theForm, definition) {
  var action = '';
  var invalidFields = new Array();
  var error = false;
  var fieldcount = 0;
  var errorFields = '';

  for(var field in definition) {
    var visible = true;
    var rowid = '';

    if(field.indexOf('Field') == 0) {
      rowid = 'row' + field.substring(5);
    } else {
      rowid = field + 'Field';
    }

    var rowElement = document.getElementById(rowid);
    var errorinfo = '';
    if(rowElement) {
      visible = rowElement.style.display != 'none';
    }
    action = definition[field];
    var fieldok = true;
    if(visible) {
      switch(action) {
        case 'required':
          fieldok = wtCheckRequiredField(theForm, field);
          break;
        case 'email':
          fieldok = wtCheckEmail(theForm, field);         
          break;
        case 'requiredemail':
          fieldok = wtCheckRequiredEmail(theForm, field);
          break;
        case 'phone':
          fieldok = wtCheckPhoneNumber(theForm, field);
          break;
        case 'requiredphone':
          fieldok = wtCheckRequiredPhoneNumber(theForm, field);
          break;
      }
      if(action.indexOf('filefilter') == 0) {
        var filterparts = action.split('=');
        if(filterparts.length > 1) {
          fieldok = wtCheckFileExtension(theForm, field, filterparts[1]);
          if(!fieldok) {
            var allowedExtensions = filterparts[1].split(',');
            errorinfo = '';
            for(var i = 0; i < allowedExtensions.length; i++) {
              if(i != 0) {
                if(i == allowedExtensions.length - 1) {
                  errorinfo += ' or ';
                } else {
                  errorinfo += ', ';
                }
              }
              errorinfo += allowedExtensions[i].replace(/^\s+|\s+$/g, '');
            }
            errorinfo = " (Must have an extension of " + errorinfo + ")";
          }
        }
      }
    } 

    if(action.indexOf('maxsize') == 0) {
      var sizeparts = action.split('=');
      if(sizeparts.length > 1) {
        var maxsize = sizeparts[1];
        var pos = maxsize.indexOf('MB');
        if(pos != -1) {
          maxsize = maxsize.substr(0, pos);
          maxsize *= 1024 * 1024;
        }
        var fileField = theForm[field];
        if(fileField.files && fileField.files[0]) {
          var filesize = fileField.files[0].size;

          if(filesize > maxsize) {
            fieldok = false;

            errorinfo = "Maximum file size is " + sizeparts[1];
          }
        }
      }
    }

    if(!fieldok) {
      if(fieldcount == 0) {
        if(typeof(theForm[field]) != 'undefined') {
//          theForm[field].focus();
        }
      }
      fieldcount++;
      error = true;
    }
    var labelelement = document.getElementById(field + "Label");
    if(labelelement && labelelement.childNodes[0]) {
      labelelement = labelelement.childNodes[0];
    }
    
    if(labelelement) {
      if(fieldok) {
        labelelement.className = labelelement.className.replace(/wtfielderror/i, '');
      
      } else { 
        var errorlabelelement = document.getElementById(field + "ErrorLabel");
        var label = '';
        if(errorlabelelement) {
          label = errorlabelelement.innerHTML;
        } else {
	//alert(field + labelelement + labelelement.name);
          label = labelelement.innerHTML;
	  //alert(label);
          if(labelelement.className.indexOf('wtSingleCheckbox') != -1) {
            //console.log('wtSingleCheckboxLabel'+field);
            label = document.getElementById('wtSingleCheckboxLabel'+field).innerHTML;
          }
          if(label.indexOf('<span') != -1) {
            label = label.substring(0, label.indexOf('<span'));
          }
          if(label.indexOf('<S') != -1) {
            label = label.substring(0, label.indexOf('<S'));
          }
          label += errorinfo;
        }
				  
        errorFields += '  - ' + label + '\n';
        if(labelelement.className.indexOf('wtfielderror') == -1) {
          labelelement.className += ' wtfielderror';
        }
      }
    }
  }

  if(theForm.getAttribute('id')) {
    g_formErrors[theForm.getAttribute('id')] = '';
  }

  if(error || (typeof g_wtFormErrors != 'undefined' && g_wtFormErrors.length > 0)) {

    if(theForm.getAttribute('id')) {
      g_formErrors[theForm.getAttribute('id')] = errorFields;
    }

    if(!error) {
      var message =  g_wtFormErrors.join('\n');
      alert(message);
    } else if(fieldcount == 1) {
      var message = 'Please check the value you have entered for:\n\n' + errorFields;
      if(typeof g_wtFormErrors != 'undefined' && g_wtFormErrors.length > 0) {
        message += "\n" + g_wtFormErrors.join('\n');
      }

      alert(message);
    } else {
      var message = 'Please check the values you have entered for:\n\n' + errorFields;
      if(typeof g_wtFormErrors != 'undefined' && g_wtFormErrors.length > 0) {
        message += "\n" + g_wtFormErrors.join('\n');
      }

      alert(message);
    }
    return false;
  } else {
    if(theForm.wtSubmitted) {
      if(theForm.wtSubmitted.value == "yes") {
        return false;
      }
      theForm.wtSubmitted.value = "yes";
    }
    
    return true;
  }
}

function wtCheckUsernameResponse(response, elementid) {
  var usernameElement = document.getElementById(elementid);
  var noteelement = document.getElementById(elementid + 'note');
  username = usernameElement.value;

  if(noteelement) {
    noteelement.innerHTML = response;
/*
    if(response == 'ok') {
      noteelement.value = 'The username ' + username + ' is already in use. Please log in or choose a different username.';
    } else {
      noteelement.value = 'The username ' + username + ' is available';
    }*/
  }
}

function wtCheckUsername(elementid) {
  var usernameElement = document.getElementById(elementid);
  var username = usernameElement.value;
  $.post("?wtCmd=checkusername", { username: username }, function(response) { wtCheckUsernameResponse(response, elementid); });
}


function wtCheckMemberEmailResponse(response, elementid) {
  var noteelement = document.getElementById(elementid + 'note');
  if(noteelement) {
    noteelement.innerHTML = response;
  }
}

function wtCheckMemberEmail(elementid) {
  var emailElement = document.getElementById(elementid);
  var email = emailElement.value;
  $.post("?wtCmd=checkemail", { email: email }, function(response) { wtCheckMemberEmailResponse(response, elementid); });
}

function wtCheckPasswordResponse(response, elementid) {
  var noteelement = document.getElementById(elementid + 'note');
  if(noteelement) {
    noteelement.innerHTML = response;
  }
}

function wtCheckPassword(elementid) {
  var passwordElement = document.getElementById(elementid);
  var password = passwordElement.value;

  $.post("?wtCmd=checkpassword", { password: password }, function(response) { wtCheckPasswordResponse(response, elementid); });
  
}

function wtCheckMemberFieldResponse(response, elementid) {
  var noteelement = document.getElementById(elementid + 'note');
  if(noteelement) {
    noteelement.innerHTML = response;
  }
}

function wtCheckMemberField(type, elementid) {
  var element = document.getElementById(elementid);
  var value = element.value;
  $.post("?wtCmd=checkmemberfield", { type: type, value: value }, function(response) { wtCheckMemberFieldResponse(response, elementid); });
}


function wtCheckPasswordConfirmResponse(response, elementid) {
  var noteelement = document.getElementById(elementid + 'note');
  if(noteelement) {
    noteelement.innerHTML = response;
  }
}

function wtCheckPasswordConfirm(elementid, passwordelementid) {
  var confirmElement = document.getElementById(elementid);
  var passwordElement = document.getElementById(passwordelementid);

  var type = 'passwordconfirm';
  var value = 'ok';
  if(confirmElement.value != passwordElement.value) {
    value = 'notok';
  } else {
    value = 'ok';

  }

  $.post("?wtCmd=checkmemberfield", { type: type, value: value }, function(response) { wtCheckMemberFieldResponse(response, elementid); });
}
 
function wtCheckEmailConfirm(elementid, emailelementid) {
  var confirmElement = document.getElementById(elementid);
  var emailElement = document.getElementById(emailelementid);

  if(!confirmElement || !emailElement) {
    return;
  }

  var type = 'emailconfirm';
  var value = 'ok';
  if(confirmElement.value != emailElement.value) {
    value = 'notok';
//    noteelement.innerHTML = 'The email addresses do not match';
  } else {
    value = 'ok';
//    noteelement.innerHTML = 'Email addresses match!';
  }
  $.post("?wtCmd=checkmemberfield", { type: type, value: value }, function(response) { wtCheckMemberFieldResponse(response, elementid); });
}
