function writeXml( docElm, xmlUri, xslUri ) {
  var xmlreq = GXmlHttp.create();
  xmlreq.open("GET", xmlUri , true);
  xmlreq.onreadystatechange = function() {
    if (xmlreq.readyState == 4) {
      onloadXsl(docElm, xmlreq.responseXML, xslUri );
    }
  }
  xmlreq.send(null);
}

function onloadXsl(docElm, xml, xslUri) {
  var xslreq = GXmlHttp.create();
  xslreq.open("GET", xslUri, true);
  xslreq.onreadystatechange = function() {
    if (xslreq.readyState == 4) {
      var xsl = GXslt.create(xslreq.responseXML);
      xsl.transformToHtml(xml, docElm);
    }
  }
  xslreq.send(null);
}

function xmlRpc( server, method, params, callbackfunc ) {
  var xml_param = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
  xml_param += "<methodCall>";
  xml_param += "<methodName>" + method + "</methodName>";
  xml_param += "<params>";
  for( var i=0; i < params.length ; i++ ) {
    xml_param += "<param>";
    xml_param += "<value>" + params[i] + "</value>";
    xml_param += "</param>";
  }
  xml_param += "</params>";
  xml_param += "</methodCall>";

  var req = GXmlHttp.create();
  req.open("POST", server , true );
  req.onreadystatechange = function() {
    if(req.readyState == 4 ) {
      if( callbackfunc != null )
        callbackfunc(req.requestXML);
    }
  }
  req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
  req.send(xml_param);
}
