function trim(str, chars)
{ return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars)
{chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars)
{chars = chars || "\\s"; return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


function RemoteServiceCall (req, service, method, async, callback)
{  var xmlhttp = null;
   //initialize
   if (navigator.appName != "Microsoft Internet Explorer")
     xmlhttp=new XMLHttpRequest();
   else if (window.ActiveXObject)
     xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
   else
     return (false);

   //create request
   request = "";
   
   if (req)
   { if (req.length)
       request = req[0].field + "=" + trim(encodeURIComponent(req[0].value));
     for (var i=1; i<req.length; i++)
       request = request + "&" + req[i].field + "=" + trim(encodeURIComponent(req[i].value));
   }
   //set callback (asynchronus)
   if (async == true)
   { xmlhttp.onreadystatechange = function ()
     { if (xmlhttp.readyState == 4)
         callback (xmlhttp); 
     }
   }
   
   if (method == "GET")
     service = service+"?"+request;

   //send request
   xmlhttp.open (method,service,async);//sychronous
   xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8;");  
   xmlhttp.setRequestHeader("Content-length", request.length);
   xmlhttp.setRequestHeader("Connection", "close");
   if (method == "POST")
     xmlhttp.send(request);

   //set callback (synchronus
   if (async == false)
     callback (xmlhttp); 
   
   return (true);
}