
var isIE6 = false;
var isIE7 = false;
var isIE8 = false;
if (navigator.userAgent)
{
    if (navigator.userAgent.search(/MSIE 6.+/) != -1)
    {
        if (!window.opera) isIE6 = true;
    }
}
if (navigator.userAgent)
{
    if (navigator.userAgent.search(/MSIE 7.+/) != -1)
    {
        if (!window.opera) isIE7 = true;
    }
}
if (navigator.userAgent)
{
    if (navigator.userAgent.search(/MSIE 8.+/) != -1)
    {
        if (!window.opera) isIE8 = true;
    }
}

// Main AJAX Functions

  function createXMLHttpRequest() {
     try { return new XMLHttpRequest(); } catch(e) {}
     try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
     try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
     return null;
  }

  var xhReqs = [];
  var inXmlhttprequestHandler = false;

  function sendAjaxRequest( url, method, parameters, target, urlParameter, urlValue ) {
    url += url.indexOf( '?' ) == -1 ? "?" : "&";
    url += "xmlhttprequest=true";
    if ( urlParameter && urlValue ) {
      url += "&" + urlParameter + "=" + urlValue;
    }
    var xhReq = createXMLHttpRequest();
    xhReq.open( method, url, true );

    if( method == "POST") {
        xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhReq.setRequestHeader("Content-length", parameters.length);
        //xhReq.setRequestHeader("Connection", "close");
    }

    xhReq.setRequestHeader( "If-Modified-Since", new Date(0) );
    xhReq.onreadystatechange = function() { parseResponse( target ); };
    xhReqs.push( xhReq );
    xhReq.send(parameters);
  }


  function parseResponse( target ) {
    if( inXmlhttprequestHandler ) {
      if (target)
        setTimeout( function() {parseResponse( target );}, 100 );
      else
        setTimeout( "parseResponse()", 100 );
      return;
    }
    inXmlhttprequestHandler = true;
    for( var index = 0; index < xhReqs.length; index++ ) {
      var xhReq = xhReqs[index];
      if( xhReq != null && xhReq != undefined && xhReq.readyState == 4 ) {
        xhReqs.splice( index--, 1 );
        var xml = xhReq.responseXML;
        if( xml != null && xml != undefined ) {
          var errorTags = xml.getElementsByTagName( "error" );
          if( errorTags != null && errorTags != undefined && errorTags.length > 0 ) {
            if( errorTags[0].getAttribute( "code" ) == "NOT_LOGGED_IN" ) {
              alert("Error: Session timeout")
            } else {
              alert("Error: " + errorTags[0].firstChild.nodeValue );
            }
          } else {
            var actions = xml.getElementsByTagName("action");
            var targetNode;
            for( var i=0; i< actions.length; i++ ) {
              if( actions[i].getAttribute("type") == "delete" ) {
                if (target)
                  targetNode = document.getElementById( target );
                else
                  targetNode = document.getElementById( actions[i].getAttribute("target") );
                targetNode.parentNode.removeChild( targetNode );
              }
              if( actions[i].getAttribute("type") == "addChild" ) {
                if (target)
                  targetNode = document.getElementById( target );
                else
                  targetNode = document.getElementById( actions[i].getAttribute("target") );
                var container = document.createElement("span");
                container.innerHTML = actions[i].firstChild.nodeValue;
                targetNode.appendChild( container );
              }
              if( actions[i].getAttribute("type") == "replace" ) {
                if( !isIE8 && !isIE7 && !isIE6 ) {
                  if (target)
                    targetNode = document.getElementById( target );
                  else
                    targetNode = document.getElementById( actions[i].getAttribute("target") );
                  targetNode.innerHTML = actions[i].firstChild.nodeValue;
                } else {
                  if ( document.getElementById( actions[i].getAttribute("target") ) && document.getElementById( actions[i].getAttribute("target") ).nodeName == "TR" ) {
                    // If this is a table row...
                    // IE cannot write into a <tr> using innerHTML - some shady hack is required:
                    var tempRowContainer = document.createElement( "div" );
                    var tempRowContainerId;
                    if ( target )
                    {
                      tempRowContainerId = document.getElementById( target ).id;
                      tempRowContainer.innerHTML = "<table><tr id='" + tempRowContainerId + "_temp' class='" + document.getElementById( target ).className + "'>" + actions[i].firstChild.nodeValue + "</tr></table>";
                      document.getElementById( target ).parentNode.replaceChild( tempRowContainer.getElementsByTagName("tr")[0], document.getElementById( target ));
                    }
                    else
                    {
                      tempRowContainerId = document.getElementById( actions[i].getAttribute("target") ).id;
                      tempRowContainer.innerHTML = "<table><tr id='" + tempRowContainerId + "_temp' class='" + document.getElementById( actions[i].getAttribute("target") ).className + "'>" + actions[i].firstChild.nodeValue + "</tr></table>";
                      document.getElementById( actions[i].getAttribute("target") ).parentNode.replaceChild( tempRowContainer.getElementsByTagName("tr")[0], document.getElementById( actions[i].getAttribute("target") ));
                    }
                    document.getElementById( tempRowContainerId + "_temp" ).id = tempRowContainerId;
                    tempRowContainer = null;
                  } else {
                    // If not a table row, then do it like real browsers
                    if (target)
                      targetNode = document.getElementById( target );
                    else
                      targetNode = document.getElementById( actions[i].getAttribute("target") );
                    targetNode.innerHTML = actions[i].firstChild.nodeValue;
                  }
                }
              }
              if( actions[i].getAttribute("type") == "execute" ) {
                eval( actions[i].firstChild.nodeValue );
              }
            }
          }
        }
      }
    }
    inXmlhttprequestHandler = false;
  }

  function submitFormAjaxPost( id ) {
    var getstr = "";
    var obj = document.getElementById(id);
    var inputElements = obj.getElementsByTagName("input");
    for( var i = 0; i < inputElements.length; i++ ) {
        if( inputElements[i].type == "text" ) getstr += inputElements[i].name + "=" + inputElements[i].value + "&";
        else if( inputElements[i].type == "hidden" ) getstr += inputElements[i].name + "=" + inputElements[i].value + "&";
        else if( inputElements[i].type == "checkbox" && inputElements[i].checked ) getstr += inputElements[i].name + "=" + inputElements[i].value + "&";
        else if( inputElements[i].type == "radio" && inputElements[i].checked ) getstr += inputElements[i].name + "=" + inputElements[i].value + "&";
        else if( inputElements[i].tagName == "select" ) getstr += inputElements[i].name + "=" + inputElements[i].options[inputElements[i].selectedIndex].value + "&";
    }
    inputElements = obj.getElementsByTagName("textarea");
    for( i = 0; i < inputElements.length; i++ ) {
        getstr += inputElements[i].name + "=" + inputElements[i].value + "&";
    }
    sendAjaxRequest( obj.action , 'POST', getstr );
  }


