
// JavaScript Document
function Trim(str) {
  return str.replace(/^s+|s+$/g,"");
}
  
  function addEvent(obj,evType,fn,useCapture){
    var ret=false;
    if(obj!=null){
      if(obj.addEventListener){
        obj.addEventListener(evType,fn,useCapture);
        ret=true;
      }
      else if(obj.attachEvent){
        obj.attachEvent("on"+evType,fn);ret=true;
      }
    }
    return ret;
  }

  function XML2DOM(xmlString)
  {
    if (document.implementation.createDocument){ 
       // Mozilla, create a new DOMParser 
       var parser = new DOMParser(); 
       myDocument = parser.parseFromString(xmlString, "text/xml");
     } else if (window.ActiveXObject){ 
       // Internet Explorer, create a new XML document using ActiveX 
       // and use loadXML as a DOM parser. 
       myDocument = new ActiveXObject("Microsoft.XMLDOM") 
       myDocument.async="false"; 
       myDocument.loadXML(xmlString);   
     }   
     return(myDocument);
  }
  
  function getXmlHttpRequestObject()
  {
    if (typeof window.XMLHttpRequest != 'undefined') 
    {
        XMLHTTP = new XMLHttpRequest;
    } else if (typeof window.ActiveXObject) {
        try {
            XMLHTTP = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (ex) {
            try {
                XMLHTTP = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (ex) {
            }
        }
    }
    return(XMLHTTP);
  }

  function reloadHtmlSection(section, url, append)
  {
    var request = getXmlHttpRequestObject();
    // we use synchronous transfer when we need to wait for the field
    // update to finish executing while closing a form, async in all other cases
    
    section.setAttribute('onclick', '');

    /*if (document.getElementById(sectionId).innerHTML.indexOf('ajax-loader.gif') == -1)
      document.getElementById(sectionId).innerHTML = '<img src="img/ajax-loader.gif"/> '+document.getElementById(sectionId).innerHTML;
    */
    request.onreadystatechange = function handleValidatorFeedback (evt)
    {
      if (request.readyState == 4) // request completed
      {
        var rText = request.responseText;
        var script = [];
        if (rText.indexOf('<script>') > -1)
        {
          var ResultDoc = XML2DOM(request.responseText);
          script = ResultDoc.getElementsByTagName('script');
        }
        if (!append)
        {          
          var rElement = XML2DOM(rText.substr(0, rText.indexOf('>'))+'></response>');
          var parentId = rElement.firstChild.getAttribute('parentid');
          rText = rText.substr(rText.indexOf('>')+1);
          rText = rText.substr(0, rText.indexOf('</response>')-1);
          section.innerHTML = rText;  
          if (parentId != null) section.id = parentId;
        }
        else
          section.appendChild(XML2DOM(request.responseText).firstChild.firstChild);
        if (script[0] != null) eval(script[0].textContent);
      }
    }
    
    request.open('get', url, true);
    request.setRequestHeader("Content-type", "text/xml");
    request.send(null);
  }
  
  function insertHtmlSection(section, url)
  {
    var request = getXmlHttpRequestObject();
    // we use synchronous transfer when we need to wait for the field
    // update to finish executing while closing a form, async in all other cases
    
    request.onreadystatechange = function handleValidatorFeedback (evt)
    {
      if (request.readyState == 4) // request completed
      {
        section.innerHTML = request.responseText;
      }
    }
    
    request.open('get', url, true);
    request.setRequestHeader("Content-type", "text/xml");
    request.send(null);
  }
  
  function sendFieldUpdate(event, newValue, formName)
  {
    if (event.target)
      var fieldObject = event.target;
    else
      var fieldObject = document.getElementById(event);
    if (!fieldObject) 
    {
      alert('unknown component "'+event+'"');
      return;
    }
    var fieldID = fieldObject.getAttribute('id');
    var dataBinding = fieldObject.getAttribute('databinding');
    var dataContext = fieldObject.getAttribute('datacontext');
    var loaderImage = fieldObject.getAttribute('loader');
    if (loaderImage)
      document.getElementById(loaderImage).setAttribute('src', 'img/ajax-loader.gif');
    
    var request = getXmlHttpRequestObject();
    // we use synchronous transfer when we need to wait for the field
    // update to finish executing while closing a form, async in all other cases

    request.onreadystatechange = function handleValidatorFeedback (evt)
    {
      if (request.readyState == 4) // request completed
      {
        if (loaderImage)
          document.getElementById(loaderImage).setAttribute('src', 'img/empty.gif');
        if (fieldObject.getAttribute('reloadonchange') == 'true')
          window.location.reload();
      }
    }
    request.open('get', 'rpc.php?'+
      '&call=fieldupdate&value='+escape(newValue)+'&fieldid='+escape(fieldID)+
      '&databinding='+escape(dataBinding)+
      '&datacontext='+escape(dataContext)+
      '&cachecontext='+escape(formName), true);
    request.setRequestHeader("Content-type", "text/xml");
    request.send(null);
  }
  
  function sendUpdateSection(sectionId, url, controlId)
  {
    var controlContent = document.getElementById(controlId).value;
    document.getElementById(sectionId).setAttribute('onclick', 
      document.getElementById(sectionId).getAttribute('onclick_old'));
    reloadHtmlSection(sectionId, url+'&'+controlId+'='+escape(controlContent));
  }
  
  function execUpdate(rpcType, parameters)
  {
    var request = getXmlHttpRequestObject();
    // we use synchronous transfer when we need to wait for the field
    // update to finish executing while closing a form, async in all other cases

    request.onreadystatechange = function handleValidatorFeedback (evt)
    {
      if (request.readyState == 4) // request completed
      {
        var resultDoc = XML2DOM(request.responseText);
        alert(request.responseText);
        
        
                    
      }
    }
    
    request.open('get', 'rpc.php?call='+rpcType+'&'+parameters, true);
    request.setRequestHeader("Content-type", "text/xml");
    request.send(null);
  }

  function formCommand(commandName, formId)
  {
    execUpdate(commandName, 'formid='+formId);
  }
