function XMLKit () {
  this.xml="<xml><form name='F'><a>Value A</a><b>Value B</b><s>s2</s><m>m2</m><m>m4</m><c>1</c><r>SS</r></form><form name='F'><r>RR</r><c>1</c></form></xml>";

  this.fillForms = function() {
    var xmlDoc = this.createXMLDocument(this.xml);
    var fx = xmlDoc.getElementsByTagName("form");
    for(var i = 0; i < fx.length; i++) {
      var fnod = fx[i];
      var fname = fnod.getAttribute("name");
      if(document.forms[fname]) {
        var f = document.forms[fname];
        this.fillForm(fname, fnod);   
      }
    }
  }


  this.createXMLDocument = function(xml) {
    var xmlDoc;
    if (document.implementation && document.implementation.createDocument) {
      parser=new DOMParser();
      xmlDoc=parser.parseFromString(xml,"text/xml");
    } else if (window.ActiveXObject) {
      xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      if(xml) {
        xmlDoc.loadXML(xml);
      } else {
        alert('Your browser can\'t handle this script');
        return;
      }
    }
    return xmlDoc;
  }


  this.fillForm = function(name, sxml, selTag) {
    var elem = document.forms[name].elements;
    var str = '';
    if(selTag) {
      xml = sxml.getElementsByTagName(selTag)[0];   
    } else {
      xml = sxml;
    }

    for(var i = 0; i < elem.length; i++) {
      var myname = elem[i].name;
      if(myname) {
        var e = document.forms[name].elements[myname];
        if(e) {
          var data = xml.getElementsByTagName(myname);
          for (var x = 0; x < data.length; x++) {
            var v = '';
            if(data[x].firstChild) {
              v = xml.getElementsByTagName(myname)[x].firstChild.data;
            }
            if(e.type == 'select-one' || e.type == 'select' || e.type == 'select-multiple' || e.type == 'checkbox') {
              this.writeElement(e, v, x);
            } else {
              if(!e.length) {
                this.writeElement(e, v, x);
              } else {
                for(var j = 0; j < e.length; j++) {
                  var ee = e[j];
                  this.writeElement(ee, v, x);
                }
              }
            }
          }
        }
      }
    }
  }
  
  this.writeElement = function(e, v, x) {
    switch(e.type) {
      case 'radio' : if(v && e.value == v) e.checked = 'checked'; break;
      case 'select' :
      case 'select-one' :
        var opt = e.options;
        for(var i = 0; i < opt.length; i++) {
          var o = opt[i];
          if(o.value == v) {
            o.selected = 'selected';
          }
        }
        break;
      case 'select-multiple' :
        var opt = e.options;
        for(var i = 0; i < opt.length; i++) {
          var o = opt[i];
          if(o.value == v) {
            o.selected = 'selected';
          } else {
            if(x == 0)
              o.selected = '';
          }
        }
      break;
      case 'checkbox':
//      alert(e.name + ' ' + e.value + ' === ' + v); 
        if(v != '' && v != 0)
          e.checked = 'checked';
        else 
          e.checked = '';
        break;
        default: e.value = v; break;
    }
  }
  
  
    this.XMLFromForm = function(aform) {
    var str = "";
    for(var i = 0; i < aform.elements.length; i++) {
      var e = aform.elements[i];
      if(e.name) {
        if(e.type == 'radio') {
          if(e.checked == true) {
            if(i > 0)
              str += "&";
            str += "<" + e.name + ">";
            str += e.value;
            str += "</" + e.name + ">";
          }
        } else if(e.type == 'checkbox') {
          str += "<" + e.name + ">";
          if(e.checked)
            str += e.value;
          str += "</" + e.name + ">";
        } else if(e.type == "select-multiple" || e.type == "select") {
          opt = e.options;
          for(var j = 0; j < opt.length; j++) {
            if(opt[j].selected) {
              str += "<" + e.name + ">";
              str += opt[j].value;
              str += "</" + e.name + ">";
            }
          }
        } else {
          str += "<" + e.name + ">";
          str += e.value;
          str += "</" + e.name + ">";
        }
      }
    }
    return str;
  }
  
  
}

  

