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)
{
  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 true;
  }

    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 wtCheckFieldVisibility(id) {
  var show = true;

  show = eval(g_fieldConditions[id]);
  var rowid = 'row' + id.substring(5);
  var rowelement = document.getElementById(rowid);
  if(typeof(rowelement) != 'undefined') {
    if(show) {
      rowelement.style.display = '';
    } else {
      rowelement.style.display = 'none';
    }
  }
}


function wtCheckPhoneNumber(theForm, field) {
  var value = theForm[field].value;
  if(value == '') {
    return true;
  }

  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;

    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;
    }
  }
  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 = 'row' + field.substring(5);
    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(!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(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) {

    if(theForm.getAttribute('id')) {
      g_formErrors[theForm.getAttribute('id')] = errorFields;
    }

    errorFields = errorFields.replace('&amp;', '&');

    if(fieldcount == 1) {
      alert('Please check the value you have entered for:\n\n' + errorFields);
    } else {
      alert('Please check the values you have entered for:\n\n' + errorFields);
    }
    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);

  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); });
}
