dojo.require("dojo.io.*");

if (typeof ajax == "undefined")
{
var ajax = {};

ajax.packArgs = function(args)
{
   var params = new Array();

   for (var i = 0; i < args.length; i++)
   {
      var arg = args[i];

      if (typeof(arg) == "string")
         params.push("'" + arg + "'");
      else
         params.push(arg);
   }

   return params;
}

ajax.sendJsfRequest = function(kvparams)
{
   var params  = ajax.packArgs(kvparams.args);
   var content = {args:'[' + params.join(',') + ']'};

   dojo.io.bind(
   {
      url: kvparams.url,
      method: 'post',
      content: content,
      sync: true,
      load: function(type, data, evt) { kvparams.callback(eval(data)); },
      error: function(type, data, evt) { alert('Oops! The server returned an error, please try again.'); }
   });
}

ajax.handleXMLResponse = function(xml)
{
   var components = xml.getElementsByTagName('component');

   for (i = 0; i < components.length; i++)
   {
      var component = components[i];

      if (component.childNodes.length > 0)
      {
         var htmlcomp = document.getElementById(component.getAttribute('id'));

         if (htmlcomp.tagName == 'INPUT' || htmlcomp.tagName == 'SELECT')
            htmlcomp.value = component.childNodes[0].nodeValue;
         else
            htmlcomp.innerHTML = component.childNodes[0].nodeValue;
      }
   }
}

ajax.submitJsfForm = function(form,action,f)
{
   form[form.id + ':_idaction'].value = action;

   dojo.io.bind(
   {
      url: form.action,
      method: 'post',
      mimetype: "text/xml",
      load: function(type, data){ ajax.handleXMLResponse(data); if (f) f(); },
      formNode: form
   });

   form[form.id + ':_idaction'].value = null;
}

}

