var xmlhttp = new Array();
var idreq = -1;

function asyncrequest (url, call, target, type )
{
    idreq++;
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
     try {
      xmlhttp[idreq] = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
      try {
       xmlhttp[idreq] = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
       xmlhttp[idreq] = false;
      }
     }
    @end @*/   
    if (!xmlhttp[idreq] && typeof XMLHttpRequest!='undefined') {
	    try {
		    xmlhttp[idreq] = new XMLHttpRequest();
	    } catch (e) {
		    xmlhttp[idreq] =false;
	    }
    }
    if (!xmlhttp[idreq] && window.createRequest) {
	    try {
		    xmlhttp[idreq] = window.createRequest();
	    } catch (e) {
		    xmlhttp[idreq] =false;
	    }
    }
    
    if (!xmlhttp[idreq])
    {
        if (form)
        {
            document.forms[form].submit();
        }
        else
            return false;
    }
    
    procesor = 'processRequest';        
    if (document.getElementById(target))
        callbackid = target;
    else
    	return false;
        
    url = url + '/' + call;
    
    xmlhttp[idreq].onreadystatechange = new Function(procesor + '(' + idreq + ', \'' + callbackid + '\', \'' + type + '\');');
    xmlhttp[idreq].open('GET',url, true);
    xmlhttp[idreq].send(null);
    
    return true;
}


function getResponse ( idreq, xml )
{                         
    if (xmlhttp[idreq].readyState == 4) {
        if (xmlhttp[idreq].status == 200) {
           if (xml) {  
              return xmlhttp[idreq].responseXML;
           } else {
              return xmlhttp[idreq].responseText;
           }
        } else {
            return false;
        }
    } else {
        return false;
    }
}

function changeSelect(select, opts) {
    var selObj = document.getElementById(select);
    if (!selObj)
        return false;   
    if (!opts)
        return false;
        
    selObj.length=0;
    opts = opts.split(";");
	var i = 0; var j = 0;
    while ( i < opts.length )
    {
        val = opts[i++];
        txt = opts[i++];
        selObj[j++] = new Option(txt,val);
    }
    return true;
}

function changeDiv(div, content) {

    var divtag = document.getElementById(div);
    if (!divtag)
        return false;
    if (!content)
        content = '';
    divtag.innerHTML=content;
    return true;
}

function changeFields ( unimportant, response )
{
    response = response.split("|");
	var i = 0; var j = 0;
	var str = ''; 
    while ( i < response.length )
    {
        idf = response[i++];
        val = response[i++];
        if (document.getElementById(idf))
        {
			if (document.getElementById(idf).type)
			{
	        	if (val.split('#').length-1 > 0 && val.split('<').length == 1)
	        	{
					val = val.split('#');
					str = '';
					for (j=0; j<val.length; j++)
						str = str + val[j] + ";";
					
					str = str.substring(0, str.length-1);
					changeSelect(idf, str);
				}
				else
		        if (val == 'checked')
		        	document.getElementById(idf).checked = 1;
		        else
		        if (val == 'unchecked')
		        	document.getElementById(idf).checked = 0;
		        else
				{
					document.getElementById(idf).value = val.replace(/_pipe_/i, "|");
				}
		    }
		    else
		    {
		    	document.getElementById(idf).innerHTML = val.replace(/_pipe_/i, "|");
		    }
	    }
        else
        {
            if (idf == 'function-callback')
            {
                func = new Function(val+'()');
                func();
            }
        }
    }
    return true;	
}

function processRequest ( idreq, callbackid, type )
{
    var response = getResponse(idreq, false);
    if (!response)
        return false; 
    
    if (type == 'div')
        changeDiv(callbackid, response);
    else
    if (type == 'options')
    	changeSelect(callbackid, response);
    else
    if (type == 'fields')
    	changeFields (callbackid, response);

    return true;
}

var tracking = new Array();
var timers   = new Array();
var nTrack = 0;
function pushAjax ( url, call, target, type )
{
	var i = 0;
	var sw = 0;
	var str = url + ' / ' + target + ' / ' + type;
	for (i = 0; i<nTrack; i++)
	if (tracking[i] == str)
	{
		clearTimeout(timers[i]);
		sw = i;
	}

	if (!sw)
		sw = nTrack;
	tracking[sw] = str;
	timers[sw] = setTimeout("asyncrequest('" + url + "', '" + call + "', '" + target + "', '" + type + "')", 500);
	nTrack = nTrack + 1;
	return true;
}



/***************************************** Proprietary software **********************************
    File: ajax.js
    Developed by: Marian Fechete <dtk_ro@yahoo.com>
    
    USE IS SUBJECT TO LICENSE. 
*************************************************************************************************/

