/***************************************** Proprietary software **********************************
    File: async.js
    Project: Intelligent Web Development 
    Developed by: Marian Fechete <dtk_ro@yahoo.com>
    
    USE IS SUBJECT TO LICENSE. 
*************************************************************************************************/

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

function asyncrequest (url, caller, target, form, procesor)
{
    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;
    }
    
    if (!procesor)
        procesor = 'processRequest';
        
    call = 0;
    if (document.getElementById(caller))
    {
        if (document.getElementById(caller).value)
            call = document.getElementById(caller).value;
    }
    else
    {
        if (!call)
            if (caller)
                call = caller;
    }
    
    callbackid = 0;
    if (!target)
        target = 0;
    else
    if (document.getElementById(target))
    {
        callbackid = target;
    }
        
    url = url + '&call=' + call + '&target=' + target;
    
    if (form)
        xml = true;
    else
        xml = false;
        
    xmlhttp[idreq].onreadystatechange = new Function(procesor+'('+idreq+', '+xml+', \''+callbackid+'\');');
    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, elems) {
    var selObj = document.getElementById(select);
    if (!selObj)
        return false;
        
    if (!elems)
        return false;
        
    selObj.length=0;
    for(i=0;i<elems.length;i++) {
        val=elems[i].getAttribute("value");
        txt=elems[i].getAttribute("text");
        selObj[i]=new Option(txt,val);
    }
    
    return true;
}

function changeDiv(div, content) {
    var divtag = document.getElementById(div);
    
    if (!divtag)
        return false;
    
    if (!content)
        return false;
        
    divtag.innerHTML=content;
    
    return true;
}


function processRequest ( idreq, xml, callbackid )
{
    var response = getResponse(idreq, xml);
            
    if (!response)
        return false; 
    
        
    if (!xml)
    {
        if (document.getElementById(callbackid))
        {
            changeDiv(callbackid, response);
        }
        else
            return false;
    }
    else
    {
        
        response = response.getElementsByTagName('document')[0];
        if (!response)
            return false;
        
        //visible display changes    
        var displays = response.getElementsByTagName('displays');
        if (displays)
        {
            displays = displays[0].getElementsByTagName('display');
            for (i=0;i<displays.length;i++)
            {
                tagid=displays[i].getAttribute('id');
                value=displays[i].getAttribute('value');
                if (document.getElementById(tagid))
                {
                    document.getElementById(tagid).style.display=value;
                }
            }                                                               
        }                                                         
                                                                
        
        //select changes
        var selects = response.getElementsByTagName('selects'); 
        if (selects)
        {
            selects = selects[0].getElementsByTagName('select');    
            for (sel=0;sel<selects.length;sel++)
            {
                selectid = selects[sel].getElementsByTagName('id')[0].getAttribute('value');
                if (document.getElementById(selectid))
                {
                    selectopts = selects[sel].getElementsByTagName('options');
                    if (selectopts)
                    {
                        selectopts = selectopts[0].getElementsByTagName('option');
                        if (selectopts)
                        {
                            changeSelect(selectid, selectopts);
                        }
                    }
                }
            }
        }
        
    }
    
    return true;
}



function asyncdivload ( divid, asyncrequest)
{
    if (document.getElementById(divid).style.display == 'block') { document.getElementById(divid).style.display='none'; return false;} else { document.getElementById(divid).style.display='block'; return (!asyncrequest); } 
}


        
