function FormClass() {
   this.form = null;
   this.elements = new Array();

   this.setForm = function( newForm ) {
      this.form = newForm;
   }

   this.init = function() {
      for ( var i = 0; i < this.form.elements.length; i++ ) {
         this.processElement( this.form.elements[ i ] );
      }
   }

   this.processElement = function( element ) {
      var type = element.type;

      switch( type ) {
         case "text":
            this.elements[ this.elements.length ] = new TextElement( element );
            break;

         case "hidden":
            this.elements[ this.elements.length ] = new TextElement( element );
            break;

         case "password":
            this.elements[ this.elements.length ] = new TextElement( element );
            break;

         case "textarea":
            this.elements[ this.elements.length ] = new TextElement( element );
            break;

         case "image":
            this.elements[ this.elements.length ] = new TextElement( element );
            break;

         case "select-one":
            this.elements[ this.elements.length ] = new Select( element );
            break;

         case "select-multi":
            break;

         case "checkbox":
            this.elements[ this.elements.length ] = new Checkbox( element );
            break;

         case "radio":
            break;

         case "button":
            break;

         default:
            alert( type );
            break;

      }
   }

   this.getQueryString = function() {
      var queryString = "";

      for ( var i = 0; i < this.elements.length; i++ ) {
         if ( i > 0 ) {
            queryString += "&";
         }
         queryString += this.elements[ i ].getParam();
      }

      return queryString;
   }
}

function TextElement( newElement ) {
   this.element = newElement;

   this.getParam = function() {
      return this.element.name + "=" + escape( this.element.value );
   }

   this.getValue = function() {
      return this.element.value;
   }
}

function Checkbox( newElement ) {
   this.element = newElement;

   this.getParam = function() {
      return this.element.name + "=" + ( this.element.checked ? "true" : "false" );
   }

   this.getValue = function() {
      return this.element.checked ? "true" : "false";
   }
}

function Select( newElement ) {
    this.element = newElement;

    this.getParam = function() {
        return this.element.name + "=" + this.element.options[ this.element.selectedIndex ].value;
    }

    this.getValue = function() {
        return this.element.options[ this.element.selectedIndex ].value;
    }
}
