// Logic Oriented 2006
// http://www.LogicOriented.com

var xmlHttp = null;
var actionCancled = false;
var disableButtonsFunction = null;
var isWorkingNow = false;

function showLoading(show) {

          var loading = document.getElementById("divLoading");
          if(loading != null){
                    if ( show ) {
                              loading.style.visibility = "visible";
                    } else {
                              loading.style.visibility = "hidden";
                    }
          }
}

function execAjax(url, responseFunction, loadingFunction, bWaitForResponse) {
	
          if ( isWorkingNow == true )  {

                    return;
          }
	
          isWorkingNow = true;
          
          if ( bWaitForResponse == null ) {
                    bWaitForResponse = true;
          } else {
                    bWaitForResponse = !bWaitForResponse;
          }
          //alert('2');
          if ( disableButtonsFunction != null ) {
                    disableAjaxButtons(true);
          }
	
          /*
	if ( loadingFunction != null ) {
		loadingFunction(true);
	}
	*/
	
          showLoading(true);
          //alert('3');
          xmlHttp = GetXmlHttpObject();
	
          if ( xmlHttp == null )
          {
                    alert ("Browser does not support HTTP Request");
                    return;
          }
          /*
          //	alert('3');
          if ( url.indexOf("?") > -1 ) {
                    url += '&';
          } else {
                    url += '?';
          }
          //	alert('4');
          url += 'sid_xyhfa="' + Math.random();
*/
          var afterLoadFunction = function () {
		
                    if ( disableButtonsFunction != null ) {
                              disableAjaxButtons(false);
                    }
		
                    /*
		if ( loadingFunction != null ) {
			loadingFunction(false);
		}
		*/
                    showLoading(false);
                    isWorkingNow = false;
		
                    if ( isStatusOK() && (!actionCancled) ) {
                              responseFunction();
                    }
		
                    CancelAjaxAction(false);
		
		
          };
    
          xmlHttp.onreadystatechange = function () {
     	
                    if ( isRequestStateReady() ) {
			
                              afterLoadFunction();
                              xmlHttp.onreadystatechange = function(){
                                        if ( loadingFunction != null ) {
                                                  loadingFunction(false);
                                        };
                              };
                    }
		
          };
          //    alert('5');
          xmlHttp.open("GET", url, bWaitForResponse);
          xmlHttp.send(null);
}	

function setDisableButtonsFunction(_function) {
          disableButtonsFunction = _function;
}

function CancelAjaxAction(bCancel) {
          actionCancled = bCancel;
}

function GetXmlHttpObject(handler)
{ 
          var objXMLHttp=null;
	
          if (window.XMLHttpRequest)	{
		
                    objXMLHttp = new XMLHttpRequest();
          }
          else if (window.ActiveXObject) 	{
	
                    objXMLHttp= new ActiveXObject("Microsoft.XMLHTTP");
          }
	
          return objXMLHttp
}

function isRequestStateReady() {
          return ( xmlHttp.readyState == 4 || xmlHttp.readyState == "complete" );
}

function isStatusOK() {
          return ( xmlHttp.status == 200 );
}

function getResponse() {

          if ( isRequestStateReady() == false ) {
                    return false;
          }

          return xmlHttp.responseText;
}

function getResponseArray(index){
	
          if ( isRequestStateReady() == false ) {
                    return false;
          }
	
          var arrResponse = xmlHttp.responseText.split("|");
          return arrResponse[index];
}