﻿//Javascript library for handling the AJAX

var AJAX_IsInitialized = false;


//ID must match server AJAX control ID
//fn is function that accepts string as an response from the server
function AJAXClass(ID, fn)
{
    this.ID = ID;
    var lock = false;
    var AX_WAITING = [];
    var req;
    var url = "oPageAJAX.aspx";
    this.SendCommand = SendQuery;
    
    function SendQuery(action, params, lockON, isWaiter)
    {	
        if(lockON == undefined){lockON = true;}
        if(!lock || !lockON || isWaiter)
        {
            if(lockON)
            {
                lock = true;
            }
            InitializeReq();
            var jsonReq = "{'Action':'" + action + "','Command':'" + params + "'}";	
            params = encodeURI(jsonReq);
            params = 'AJAXReq=' + params;           
            if(req!=null)
            {		
                var date = new Date();
                var timestamp = ((url.indexOf('?') == -1)?'?':'&') + 'timestamp=' + date.getTime();
                req.open('POST', url + timestamp, true);
                req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                req.setRequestHeader('Content-Length', params.length);
                req.send(params);              
            }
        }	
        else
        {
            AX_WAITING.push({'Action':action,'Command':params});
        }
    }

    function InitializeReq()
    {
        if (window.XMLHttpRequest)
        {              
            req =new XMLHttpRequest();              
        }
        else
        {                                  
            req =new ActiveXObject('MSXML2.XMLHTTP');
        }                                             
	    
        req.onreadystatechange = Process;	
    }  

    function Process()
    {
        if (req.readyState == 4) 
            {
                // only if 'OK'
                if (req.status == 200) 
                {
                    try
                    {
                        var resp = eval('(' + req.responseText + ')');
                        
                        while(resp.Response.Data.indexOf("<JAPOS_AJAX_APH>") != -1)
                        {
                            resp.Response.Data = resp.Response.Data.replace("<JAPOS_AJAX_APH>","'");
                        }
                        
                        fn(resp);

                        if(lock)
                        {
                            if(AX_WAITING.length > 0)
                            {
                                var next = AX_WAITING.shift();
                                SendQuery(next.Action, next.Command, true, true);
                            }
                            else
                            {
                                lock = false;
                            }
                        }
                        else { }
                    }
                    catch(e) {
                        var x = 1; // vypln
                      //  alert('1-Error in AJAX object ID=' + ID + ' - Error message: ' + e);    
                    }
                }
                else {
                    var x = 1; // vypln
                   // alert('2-Error in AJAX object ID=' + ID + ' - Error message: ' + req.statusText);
                }
        }
    }
}

if(!AJAX_IsInitialized)
{
    AJAX_IsInitialized = true;
    var initAjax = new AJAXClass("initAjax", function(e){ return true;});
    initAjax.SendCommand("INIT_AJAX", "", false);
}
