<!--
String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g, "");
}

function hideElement(elem) {
  //elem.style.display = "none";
  var titleDiv = document.getElementById("CLTITLE_" + elem.name);
  titleDiv.style.display = "none";
}

function applyCSS(myForm) {
  var elems = myForm.elements;
  var elem;
  for (var i = 0; i < elems.length; i++) {
    elem = elems[i];
    if (elem.tagName == "INPUT") {
      var inputType = elem.type.toUpperCase();
      if ((inputType == "SUBMIT") || (inputType == "BUTTON") || (inputType == "RESET")) {
        elem.className = "content-button-text";
      }
      else if ((inputType == "CHECKBOX") || (inputType == "RADIO")) {
        // do not set style
      }
      else /*if (inputType == "TEXT") */{
        elem.className = "content-textfield";
        /*
                  if (typeof (elem.vtype) != "undefined") {
                    elem.maxLength = getvalidateLength(elem.vtype);
                  }
                  */
      }

    }
    else if (elem.tagName == "TEXTAREA") {
      elem.className = "content-textfield";
    }
    else if (elem.tagName == "SELECT") {
      elem.className = "content-textfield";
      if (elem.vtype == "CL") {
        if ((elem.multiple == false)
                && (typeof (elem.options) != "undefined")
                && (elem.options.length == 1)) {
          // if only 1 selectable option, hide for modulization issue
          hideElement(elem);
        }
      }
    }

  }

}


/////////////////////////////
//
// 	error messages
//
/////////////////////////////

function errMsgRequired(vmessage) {
  return vmessage + clformtag_error_required;
}

function errMsgStr(vmessage, length) {
  return vmessage + clformtag_error_format + clformtag_str_should + length;
}

function errMsgInt(vmessage, lbound, ubound) {
  return vmessage + clformtag_error_format + clformtag_int_should + lbound + "~" + ubound;
}

function errMsgFloat(vmessage, lbound, ubound) {
  return vmessage + clformtag_error_format + clformtag_float_should + lbound + "~" + ubound;
}

/////////////////////////////
//
// 	validators
//
/////////////////////////////
function clisInt(num) {
  var charset = "-0123456789";
  for (var i = 0; i < num.length; i++) {
    if (charset.indexOf(num.charAt(i)) == -1)
      return(false);
  }
  if (num.indexOf('-') > 0)
    return(false);
  if (num.indexOf('-') == 0 && num.length == 1)
    return(false);
  return(true);
}

function validateStr(vmessage, value, length) {
  if (value.length > length) {
    alert(errMsgStr(vmessage, length));
    return false;
  }
  return true;
}

function validateInt(vmessage, value, lbound, ubound) {
  if (typeof(value) == 'undefined' || value == '') {
    return true;
  }
  if (!clisInt(value)) {
    alert(errMsgInt(vmessage, lbound, ubound));
    return false;
  }
  if (!((value <= ubound) && (value >= lbound))) {
    alert(errMsgInt(vmessage, lbound, ubound));
    return false;
  }
  return true;
}

function validateFloat(vmessage, value, lbound, ubound) {
  if (typeof(value) == 'undefined' || value == '') {
    return true;
  }
  if (!((value <= ubound) && (value >= lbound))) {
    alert(errMsgFloat(vmessage, lbound, ubound));
    return false;
  }
  return true;
}


function getvalidateLength(vtype) {
  switch (vtype) {
    case "S":
      return 30;
    case "M":
      return 80;
    case "L":
      return 250;
    case "XL":
      return Number.MAX_VALUE;
    default:
      return Number.NaN;
  }
}

function validateElementText(elem, vtype, vmessage, isMandatory) {
  var value = elem.value.trim();
  if (isMandatory) {
    if (value.length == 0) {
      alert(errMsgRequired(vmessage));
      return false;
    }
  }

  var c = vtype.charAt(0);
  if (('I' == c) || ('F' == c)) {
    // validate integer or float
    var i = vtype.indexOf(':');
    var lbound = Number(vtype.substring(1, i));
    var ubound = Number(vtype.substring(i + 1));
    return ('I' == c) ? validateInt(vmessage, value, lbound, ubound)
            : validateFloat(vmessage, value, lbound, ubound);
  } else {
    var lengthLimit = getvalidateLength(vtype);
    return validateStr(vmessage, value, lengthLimit);
    return true;
  }

}


function validateElementSelectEmpty(elem) {
  var msg = elem.vmessage;
  if (typeof (elem.options) != "undefined") {
    if (elem.options.length == 0) {
      alert(elem.vmessage);
      return false;
    }
    else {
      return true;
    }
  }
  return true;
}

function validateElement(elem) {
  var result = false;

  var vtype = elem.vtype || elem.getAttribute("vtype");
  if (vtype != null) {
    var vmessage = elem.vmessage || elem.getAttribute("vmessage");
    var isMandatory = false;

    var c = vtype.charAt(0);
    if ('*' == c) {
      vtype = vtype.substring(1);
      isMandatory = true;
    }

    if (elem.tagName == "INPUT") {
      if (elem.type.toUpperCase() == "TEXT") {
        result = validateElementText(elem, vtype, vmessage, isMandatory);
        if (!result) {
          return false;
        }
      }
    }
    else if (elem.tagName == "TEXTAREA") {
      result = validateElementText(elem, vtype, vmessage, isMandatory);
      if (!result) {
        return false;
      }
    }
    else if (elem.tagName == "SELECT") {
      if (vtype == "CL") {
        if (elem.multiple == true) {
          // multiple selection
          result = validateElementSelectEmpty(elem, vtype, vmessage, isMandatory);
          if (!result) {
            return false;
          }
        }
        else {
          // single selection
        }
      }
    }
  }
  return true;
}

function trim(str) {
  return str.replace(/^\s+|\s+$/g, "");
}

function trimFormElements(myForm){
  var formElements = myForm.elements;
  for (var i = 0; i < formElements.length; i++) {
  	if( (formElements[i].tagName.toUpperCase() == "INPUT" && formElements[i].type.toUpperCase() == "TEXT") ||
  	 	formElements[i].tagName.toUpperCase() == "TEXTAREA" ){
		formElements[i].value = trim(formElements[i].value);
	}
  }
}

function trimAndValidateForm(myForm){
	trimFormElements(myForm);
	return validateForm(myForm);
}

function validateForm(myForm) {
  var formElements = myForm.elements;
  var elem, i;
  for (i = 0; i < formElements.length; i++) {
    elem = formElements[i];

    // check precondition before validation
    var vprecond = elem.vprecond || elem.getAttribute("vprecond");
    if (vprecond != null) {
      if (!eval(elem.vprecond)) {
        continue;
      }
    }

    // validate elem
    var result = validateElement(elem);
    if (result == false) {
      return false;
    }
  }
  return true;
}

//-->