var dataChanges = new Array();function formData2QueryString(docForm, formatOpts, exclFlds) {    var opts = formatOpts || {};  var str = '';  var formElem;  var lastElemName = '';  var skipField;  var o;    for (i = 0; i < docForm.elements.length; i++) {    formElem = docForm.elements[i];    skipField = false;    try {    		if (exclFlds != null && exclFlds[0] != "") {    			for (ef = 0;ef < exclFlds.length; ef++) {    				if (formElem.name == exclFlds[ef]) {    					skipField = true;    					break;    				}	    			}    		}    }    catch (e) {}        if (skipField) continue;               switch (formElem.type) {      // Text fields, hidden form elements      case 'text':      case 'hidden':      case 'password':      case 'textarea':        str += formElem.name + '=' + encodeURI(formElem.value) + '&'        break;              case 'select-one':		for (var k = 0, l = formElem.length; k < l; ++k){			if ((o = formElem.options[k]).selected)			str += formElem.name + '=' + encodeURI(o.value) + '&'		}        break;              // Multi-option select      case 'select-multiple':        var isSet = false;        for(var j = 0; j < formElem.options.length; j++) {          var currOpt = formElem.options[j];          if(currOpt.selected) {            theVal = encodeURI((currOpt.value!="")?currOpt.value:currOpt.text);            if (opts.collapseMulti) {              if (isSet) {                str += ',' + theVal;              }              else {                str += formElem.name + '=' + theVal;                isSet = true;              }            }            else {              str += formElem.name + '=' + theVal + '&';            }          }        }        if (opts.collapseMulti) {          str += '&';        }        break;            // Radio buttons      case 'radio':        if (formElem.checked) {          str += formElem.name + '=' + encodeURI(formElem.value) + '&'        }        break;              // Checkboxes      case 'checkbox':        if (formElem.checked) {          // Collapse multi-select into comma-separated list          if (opts.collapseMulti && (formElem.name == lastElemName)) {            // Strip of end ampersand if there is one            if (str.lastIndexOf('&') == str.length-1) {              str = str.substr(0, str.length - 1);            }            // Append value as comma-delimited string            str += ',' + encodeURI(formElem.value);          }          else {            str += formElem.name + '=' + encodeURI(formElem.value);          }          str += '&';          lastElemName = formElem.name;        }        break;            }  }  // Remove trailing separator  str = str.substr(0, str.length - 1);  return str;}function makeStruct(names) {  var names = names.split(' ');  var count = names.length;  function constructor() {    for (var i = 0; i < count; i++) {      this[names[i]] = arguments[i];    }  }  return constructor;}function dataScan( isCompare, docForm, formatOpts, exclFlds) {  var Item = makeStruct("id dataType value");  var opts = formatOpts || {};  var formElem;  var lastElemName = '';  var skipField;  var o;  var combVal;  var itemCounter = 0;    for (i = 0; i < docForm.elements.length; i++) {    formElem = docForm.elements[i];    skipField = false;    combVal = "";    try {    		if (exclFlds != null && exclFlds[0] != "") {    			for (ef = 0;ef < exclFlds.length; ef++) {    				if (formElem.name == exclFlds[ef]) {    					skipField = true;    					break;    				}	    			}    		}    }    catch (e) {}        if (skipField) continue;               switch (formElem.type) {      // Text fields, hidden form elements      case 'text':      case 'hidden':      case 'password':      case 'textarea':        combVal = formElem.value;        break;              case 'select-one':		for (var k = 0, l = formElem.length; k < l; ++k){			if ((o = formElem.options[k]).selected)			combVal += encodeURI(o.value) + ';'		}        break;              // Multi-option select      case 'select-multiple':        var isSet = false;        for(var j = 0; j < formElem.options.length; j++) {          var currOpt = formElem.options[j];          if(currOpt.selected) {            theVal = encodeURI((currOpt.value!="")?currOpt.value:currOpt.text);            if (opts.collapseMulti) {              if (isSet) {                combVal += ',' + theVal;              }              else {                combVal = theVal;                isSet = true;              }            }            else {              combVal = theVal;            }          }        }        break;            // Radio buttons      case 'radio':        if (formElem.checked) combVal = encodeURI(formElem.value);        break;              // Checkboxes      case 'checkbox':        if (formElem.checked) {          // Collapse multi-select into comma-separated list          if (opts.collapseMulti && (formElem.name == lastElemName))            combVal += ',' + encodeURI(formElem.value);          else            combVal += encodeURI(formElem.value);          lastElemName = formElem.name;        }        break;            }    	if (!isCompare)		dataChanges[itemCounter] = new Item(formElem.name, formElem.type, combVal);	else		if (dataChanges[itemCounter].value != combVal) return true;	itemCounter++;  }  return false;}
