home *** CD-ROM | disk | FTP | other *** search
/ Nintendo GameCube Preview CD-ROM / NINTENDOGAMECUBE.iso / site / js / form.js < prev    next >
Text File  |  2002-01-08  |  7KB  |  154 lines

  1. // Form Functions  v1.0
  2. // http://www.dithered.com/javascript/form/index.html
  3. // code by Chris Nott (chris@dithered.com)
  4.  
  5.  
  6. // Convert a list of strings into a 'get' query string
  7. function makeSearchString() {
  8.     var args = makeSearchString.arguments;
  9.     var searchString = "?";
  10.     var pair;
  11.     for (var i = 0; i < args.length; i++) {
  12.         pair = escape(args[i++]) + "=";
  13.         pair += escape(args[i]);
  14.         searchString += pair + "&";
  15.     }
  16.     return searchString.substring(0, searchString.length - 1);
  17. }
  18.  
  19.  
  20. // Create a 'get' query string with the data from a given form
  21. function gatherFormData(form) {
  22.     var formData = '';
  23.     var element;
  24.     
  25.     // For each form element, extract the name and value
  26.     for (var i = 0; i < form.elements.length; i++) {
  27.         element = form.elements[i];
  28.         if (element.type == "text" || element.type == "password" || element.type == "textarea") formData += "'" + element.name + "', '" + element.value + "', ";
  29.         else if (element.type.indexOf("select") != -1) {
  30.             for (var j = 0; j < element.options.length; j++) {
  31.                 if (element.options[j].selected == true) formData += "'" + element.name + "', '" + element.options[element.selectedIndex].value + "', ";
  32.             }
  33.         }
  34.         else if (element.type == "checkbox" && element.checked) formData += "'" + element.name + "', '" + element.value + "', ";
  35.         else if (element.type == "radio" && element.checked == true) formData += "'" + element.name + "', '" + element.value + "', ";
  36.     }
  37.     
  38.     // Feed strings to makeSearchString() to do 'get' query string conversion
  39.     return (eval("makeSearchString(" + formData.substring(0, formData.length - 2) + ")"));
  40. }
  41.  
  42.  
  43. // Transfer form data from a visible form to a hidden one
  44. function transferToHiddenForm(sourceForm, destinationForm) {
  45.     var sourceElement, destinationElement, sourceOption;
  46.     
  47.     // for each visible form element, transfer the associated value to the hidden form element with the same name
  48.     for (var i = 0; i < sourceForm.elements.length; i++) {
  49.         sourceElement = sourceForm.elements[i];
  50.         
  51.         // make sure there is an associated hidden element for the visible one
  52.         if (sourceElement.name == '') continue;
  53.         destinationElement = eval('destinationForm.' + sourceElement.name);
  54.         if (destinationElement == null) continue;
  55.         
  56.         if (sourceElement.type == "text" || sourceElement.type == "password" || sourceElement.type == "textarea") destinationElement.value = sourceElement.value;
  57.         else if (sourceElement.type == "select-one") destinationElement.value = sourceElement.options[sourceElement.selectedIndex].value;
  58.         
  59.         // for multiple selects, create a |-delimited string of values
  60.         else if (sourceElement.type == "select-multiple") {
  61.             destinationElement.value = '|';
  62.             for (var j = 0; j < sourceElement.options.length; j++) {
  63.                 sourceOption = sourceElement.options[j];
  64.                 if (sourceOption.selected) destinationElement.value += sourceOption.value + '|';
  65.             }
  66.         }
  67.         
  68.         else if (sourceElement.type == "checkbox" && sourceElement.checked == true) destinationElement.value = sourceElement.value;
  69.         else if (sourceElement.type == "radio" && sourceElement.checked == true) destinationElement.value = sourceElement.value;
  70.     }
  71. }
  72.  
  73.  
  74. // Transfer form data from a hidden form to a visible one
  75. function transferFromHiddenForm(sourceForm, destinationForm) {
  76.     var sourceElement, destinationElement, sourceOption;
  77.     
  78.     // for each visible form element, transfer the associated value from the hidden form element with the same name
  79.     for (var i = 0; i < destinationForm.elements.length; i++) {
  80.         destinationElement = destinationForm.elements[i];
  81.         
  82.         // make sure there is an associated hidden element for the visible one
  83.         if (destinationElement.name == '') continue;
  84.         sourceElement = eval('sourceForm.' + destinationElement.name);
  85.         if (sourceElement == null) continue;
  86.  
  87.         if (destinationElement.type == "text" || destinationElement.type == "password" || destinationElement.type == "textarea") destinationElement.value = sourceElement.value;
  88.         else if (destinationElement.type == "select-one") {
  89.             for (var j = 0; j < destinationElement.options.length; j++) {
  90.                 if (sourceElement.value == destinationElement.options[j].value) {
  91.                     destinationElement.selectedIndex = j;
  92.                     break;
  93.                 }
  94.             }
  95.         }
  96.         
  97.         // look for multiple select values to be delimited by '|' in the hidden form element
  98.         else if (destinationElement.type == "select-multiple") {
  99.             for (var j = 0; j < destinationElement.options.length; j++) {
  100.                 if (sourceElement.value.indexOf('|' + destinationElement.options[j].value + '|') != -1) destinationElement.options[j].selected = true;
  101.             }
  102.         }
  103.         
  104.         else if (destinationElement.type == "checkbox") destinationElement.checked = true;
  105.         else if (destinationElement.type == "radio" && destinationElement.value == sourceElement.value) destinationElement.checked = true;
  106.     }
  107. }
  108.  
  109.  
  110. // Clear a form so that default initial values are erased
  111. function clearForm(form) {
  112.     var element;
  113.     for (var i = 0; i < form.elements.length; i++) {
  114.         element = form.elements[i];
  115.         if (element.type == "text" || element.type == "password" || element.type == "textarea") element.value = '';
  116.         else if (element.type.indexOf("select") != -1) element.selectedIndex = -1;
  117.         else if (element.type == "checkbox" && element.checked) element.checked = false;
  118.         else if (element.type == "radio" && element.checked == true) element.checked = false;
  119.     }
  120. }
  121.  
  122.  
  123. // Build an associative array with all name and value pairs in a 'get' query string
  124. function getSearchAsArray() {
  125.     var searchQuery = new Array;
  126.     var pair;
  127.     var temp;
  128.     var search = location.search;
  129.     
  130.     // replace all '+'s with ' 's because unescape() doesn't do it
  131.     search = search.replace(/\+/g, ' ');
  132.     
  133.     // for each pair, separate, unescape and place into the associate array
  134.     var split = 1;
  135.     while (split > 0) {
  136.         split = search.lastIndexOf('&');
  137.         if (split == -1) split = 0;
  138.         pair = search.substring(split + 1, search.length);
  139.         
  140.         // multiple select values should be placed in an array
  141.         if (searchQuery[unescape(pair.substring(0, pair.indexOf('=')))] != null) {
  142.             temp = searchQuery[unescape(pair.substring(0, pair.indexOf('=')))];
  143.             searchQuery[unescape(pair.substring(0, pair.indexOf('=')))] = new Array(temp, unescape(pair.substring(pair.indexOf('=') + 1)));
  144.         }
  145.         
  146.         // all other form elements have a one-to-one name and value relationship
  147.         else searchQuery[unescape(pair.substring(0, pair.indexOf('=')))] = unescape(pair.substring(pair.indexOf('=') + 1));
  148.         
  149.         search = search.substring(0, split);
  150.     }
  151.     return searchQuery;
  152. }
  153. var query = getSearchAsArray();
  154.