-    function &getElement($name) {
-       return $this->elements[$name];
-    }
-    
-    function &getElements() {
-       return $this->elements;
-    }
-    
-       //// FORM element
-       // action
-       // method - GET, POST
-       // enctype - enctype="multipart/form-data"
-       // name
-       // onsubmit
-       // onreset
-    function getName() { return $this->name; }
-    
-    function isSubmit()        {
-       if (!isset($this->mRequest)) return false;
-        $result = false;
-           foreach ($this->elements as $el) {
-               if (strtolower(get_class($el))=="submit") {
-                   $name = $el->getName();
-                   $value = $this->mRequest->getAttribute($name);
-                   if($value) {
-                      $result = true; 
-                   }
-               }
-           }
-        return $result;
-    }
-       
-       //// INPUT element
-       // type = TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT | RESET | FILE | HIDDEN | IMAGE | BUTTON
-       // name
-       // value
-       // checked - for type radio and checkbox
-       // size - width pixels or chars
-       // maxlength
-       // src - for type image
-       // tabindex - support  A, AREA, BUTTON, INPUT, OBJECT, SELECT, and TEXTAREA
-       // accesskey - support A, AREA, BUTTON, INPUT, LABEL, and LEGEND, and TEXTAREA
-       // onfocus
-       // onblur
-       // onselect -  INPUT and TEXTAREA
-       // onchange
-       function addInput($arguments) {
-               switch($arguments["type"]) {
-                   
-                       case "textfield":
-                       case "text":
-                           import('form.TextField');
-                           $el = new TextField($arguments["name"]);
-                           $el->setMaxLength(@$arguments["maxlength"]);
-                           if (isset($arguments["aspassword"])) $el->setAsPassword($arguments["aspassword"]);
-                           break;
-                           
-                       case "datefield":
-                           import('form.DateField');
-                           $el = new DateField($arguments["name"]);
-                               $el->setMaxLength("10");
-                           break;
-                           
-                       case "floatfield":
-                           import('form.FloatField');
-                           $el = new FloatField($arguments["name"]);
-                           if (isset($arguments["format"])) $el->setFormat($arguments["format"]);
-                           break;
-                           
-                       case "textarea":
-                           import('form.TextArea');
-                           $el = new TextArea($arguments["name"]);
-                           $el->setColumns(@$arguments["cols"]);
-                           $el->setRows(@$arguments["rows"]);
-                           if (isset($arguments["maxlength"])) $el->setMaxLength($arguments["maxlength"]);
-                           break;
-                           
-                       case "checkbox":
-                           import('form.Checkbox');
-                           $el = new Checkbox($arguments["name"]);
-                           if (@$arguments["checked"]) $el->setChecked(true);
-                           $el->setData(@$arguments["data"]);
-                           break;
-                           
+  function getElements() {
+    return $this->elements;
+  }
+
+  function getName() { return $this->name; }
+
+  // addInput - adds an input object to the form.
+  function addInput($params) {
+    switch($params['type']) {
+      case 'text':
+        import('form.TextField');
+        $el = new TextField($params['name']);
+        if (isset($params['maxlength'])) $el->setMaxLength($params['maxlength']);
+        break;
+
+      case 'password':
+        import('form.PasswordField');
+        $el = new PasswordField($params['name']);
+        if (isset($params['maxlength'])) $el->setMaxLength($params['maxlength']);
+        break;
+
+      case 'datefield':
+        import('form.DateField');
+        $el = new DateField($params['name']);
+        $el->setMaxLength('10');
+        break;
+
+      case 'floatfield':
+        import('form.FloatField');
+        $el = new FloatField($params['name']);
+        if (isset($params['format'])) $el->setFormat($params['format']);
+        break;
+
+      case 'textarea':
+        import('form.TextArea');
+        $el = new TextArea($params['name']);
+        if (isset($params['maxlength'])) $el->setMaxLength($params['maxlength']);
+        break;
+
+      case 'checkbox':
+        import('form.Checkbox');
+        $el = new Checkbox($params['name']);
+        break;
+
+      case 'hidden':
+        import('form.Hidden');
+        $el = new Hidden($params['name']);
+        break;
+
+      case 'submit':
+        import('form.Submit');
+        $el = new Submit($params['name']);
+        break;
+
+      case 'upload':
+        import('form.UploadFile');
+        $el = new UploadFile($params['name']);
+        if (isset($params['maxsize'])) $el->setMaxSize($params['maxsize']);
+        break;
+
+// TODO: refactoring ongoing down from here.