docs: function UIArgument(uiArgumentShorthand, localVars)
  {
      /**
       * @param uiArgumentShorthand
       *
       * @throws  UIArgumentException
       */
      this.validate = function(uiArgumentShorthand)
      {
          var msg = "UIArgument validation error:\n"
              + print_r(uiArgumentShorthand);
          
          // try really hard to throw an exception!
          if (!uiArgumentShorthand.name) {
              throw new UIArgumentException(msg + 'no name specified!');
          }
          if (!uiArgumentShorthand.description) {
              throw new UIArgumentException(msg + 'no description specified!');
          }
          if (!uiArgumentShorthand.defaultValues &&
              !uiArgumentShorthand.getDefaultValues) {
              throw new UIArgumentException(msg + 'no default values specified!');
          }
      };
      
      
      
      /**
       * @param uiArgumentShorthand
       * @param localVars            a list of local variables
       */
      this.init = function(uiArgumentShorthand, localVars)
      {
          this.validate(uiArgumentShorthand);
          
          this.name = uiArgumentShorthand.name;
          this.description = uiArgumentShorthand.description;
          this.required = uiArgumentShorthand.required || false;
          
          if (uiArgumentShorthand.defaultValues) {
              var defaultValues = uiArgumentShorthand.defaultValues;
              this.getDefaultValues =
                  function() { return defaultValues; }
          }
          else {
              this.getDefaultValues = uiArgumentShorthand.getDefaultValues;
          }
          
          for (var name in localVars) {
              this[name] = localVars[name];
          }
      }
      
      
      
      this.init(uiArgumentShorthand, localVars);
  }