var xmlhttp = null;
var i = 0;
var waitDivText = '';

function ajaxResponse()
{
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
         return xmlhttp.responseXML;
    else
        return false;
}

function ajaxProcess(target)
{
    var elemId = null, elemVal = null, elemText = null, ellemAttrProp = null, elemAttrVal = null, response = null, contents = null, filelds = null, options = null;
    var response = ajaxResponse();
    if(!response)
       return false;
    
    response = response.getElementsByTagName('document')[0];
    if(!response)
        return false;
    
    // HTML content for div
    var contents = response.getElementsByTagName('contents');
    if(contents)
    {
        contents = contents[0].getElementsByTagName('content');
        if(contents.length)
        {
            for(i=0;i<contents.length;i++)
            {
                elemId = contents[i].getAttribute('id');
                elemText = contents[i].getAttribute('text');
                if(!elemId)
                    elemId = target;
               
               changeDiv(elemId,elemText);
            }
        }
    }
    
    // Values for input
    var fields = response.getElementsByTagName('fields');
    if(fields)
    {
        fields = fields[0].getElementsByTagName('field');
        if(fields.length)
        {
            for(i=0;i<fields.length;i++)
            {
                elemId = fields[i].getAttribute('id');
                elemText = fields[i].getAttribute('value');
                if(!elemId)
                    elemId = target;
            
                changeInput(elemId,elemText);
            }
        }
    }
    
    // Options for dropdown boxes
    var options = response.getElementsByTagName('options');
    if(options.length)
    {
        options = options[0].getElementsByTagName('opts');
        if(options.length)
        {
            for(z=0;z<options.length;z++)
            {
                elemId = options[z].getAttribute('id');
                opts = options[z].getElementsByTagName('option');
                if(opts.length)
                {
                    if(!elemId)
                        elemId = target;
                    changeSelect(elemId,opts);
                }
            }
        }
    }
    
    // Displays for div
    var displays = response.getElementsByTagName('displays');
    if(displays)
    {
        displays = displays[0].getElementsByTagName('display');
        if(displays.length)
        {
            for(i=0;i<displays.length;i++)
            {
                elemId = displays[i].getAttribute('id');
                elemDisplay = displays[i].getAttribute('disp');
                elemAttrProp = displays[i].getAttribute('attrprop');
                elemAttrVal = displays[i].getAttribute('attrval');
                elemText = displays[i].getAttribute('text');
                if(!elemId)
                    elemId = target;
               if(elemText.length)
                    changeDiv(elemId,elemText);
               if(elemDisplay.length || elemDisplay == ' ')
               {
                    if(elemDisplay == ' ')
                        elemDisplay = '';
                    document.getElementById(elemId).style.display = elemDisplay;
               }
               if(elemAttrProp.length)
               {
                    elemAttrVal = _reformat(elemAttrVal);
                    
                    evnt = elemAttrProp.toLowerCase();
                    if(evnt == 'onclick' || evnt == 'onmouseover' || evnt == 'onmouseout')
                    {                        
                        if(evnt == 'onclick')
                        {
                            tmp1 = elemAttrVal;
                            document.getElementById(elemId).onclick = function() { eval(tmp1); };
                        }
                        if(evnt == 'onmouseover')
                        {
                            tmp2 = elemAttrVal;
                            document.getElementById(elemId).onmouseover = function() { eval(tmp2); };
                        }
                        if(evnt == 'onmouseout')
                        {
                            tmp3 = elemAttrVal;
                            document.getElementById(elemId).onmouseout = function() { eval(tmp3); };
                        }
                    }
                    else
                        if(evnt == 'class')
                            document.getElementById(elemId).className = elemAttrVal;
                        else
                            if(evnt == 'style')
                            {                            
                                var tmpProp = tmpVal = '';
                                var sw = sw2 = false;
                                for(z=0;z<elemAttrVal.length;z++)
                                {
                                    sw2 = true;                  
                                    if(elemAttrVal.charAt(z) == ':')
                                    {
                                        sw = true;
                                        sw2 = false;
                                    }
                                    
                                    if(elemAttrVal.charAt(z) == ';' || z-1 == elemAttrVal.length)
                                    {                                    
                                        eval('document.getElementById(elemId).style.'+tmpProp+' = tmpVal;');                                        
                                        tmpProp = tmpVal = '';
                                        sw = false;
                                        sw2 = false;
                                    }
                                    
                                    if(sw2)
                                        if(!sw)
                                            tmpProp += elemAttrVal.charAt(z);
                                        else
                                            tmpVal += elemAttrVal.charAt(z);
                                }
                            }
                        else
                            document.getElementById(elemId).setAttribute(elemAttrProp,elemAttrVal);                    
               }
            }
        }
    }
    
    // JavaScript execute functions
    var funct = response.getElementsByTagName('functions');
    if(funct)
    {
        funct = funct[0].getElementsByTagName('funct');
        if(funct.length)
        {
            for(i=0;i<funct.length;i++)
            {
                elemText = funct[i].getAttribute('text');
                elemParam1 = _reformat(funct[i].getAttribute('param1')).replace("'","\\\'");                
                elemParam2 = _reformat(funct[i].getAttribute('param2')).replace("'","\\\'");
                elemParam3 = _reformat(funct[i].getAttribute('param3')).replace("'","\\\'");                
                if(typeof(window['' + elemText + '']) == 'function')                
                    eval(elemText + "('" + elemParam1 + "', '" + elemParam2 + "', '" + elemParam3 + "')");                
            }
        }
    }
}

function ajaxRequest(url,caller,target,isWaitDiv)
{
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
     try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
      try {
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
       xmlhttp = false;
      }
     }
    @end @*/
    
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        }
        catch (e) {
            xmlhttp = false;
        }
    }
    
    if(xmlhttp)
    {
        if(document.getElementById(target) && document.getElementById(target).type == 'select-one')
            waitSelect(target);
            
        if(isWaitDiv)
            waitDiv(target);
        
        url = url+'&ajax=1';
        if(document.getElementById(caller))
            if(document.getElementById(caller).value.length)
                url = url+'&'+caller+'='+_format(document.getElementById(caller).value);
        
        xmlhttp.onreadystatechange = new Function('ajaxProcess(\''+target+'\');');
        xmlhttp.open('GET',url,true);
        xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        xmlhttp.send(null);

        return true;
    }
    else
        return false;
}

function _reformat (value)
{
    var value;
    value = value.replace(/\[lt]/g,'<');
    value = value.replace(/\[gt]/g,'>');
    value = value.replace(/\[qout]/g,'"');
    return value;
}

function _format( value )
{
    var value;
    
    value = value.replace(/#/g, '--shift-3--');
    value = value.replace(/&/g, '--amp--');
    value = value.replace(/\+/g, '--plus--');

    return value;
}

function changeDiv(elemId,elemText)
{
    divTag = document.getElementById(''+elemId+'');
    if(divTag)
    {
    
        //divTag.innerHTML = '';
        divTag.innerHTML = _reformat(elemText);
        return true;
    }
    else
        return false;
}

function changeInput(elemId,elemText)
{
    var inputTag = document.getElementById(''+elemId+'');
    if(inputTag)
    {
        inputTag.value = _reformat(elemText);
        return true;
    }
    else
        return false;
}

function changeSelect(elemId,options)
{
    var elemVal = null, elemText = null;
    selObj = document.getElementById(elemId);
    
    if(selObj && options)
    {
        selObj.length = 0;
        for(i=0;i<options.length;i++)
        {
            elemVal = options[i].getAttribute('value');
            elemText = options[i].getAttribute('text');
            selObj[i] = new Option(_reformat(elemText),elemVal);
        }
        return true;
    }
    else
        return false;
}

function waitSelect(elemId)
{
    selObj = document.getElementById(elemId);
    
    if(selObj)
    {
        selObj.length = 0;
        selObj[0] = new Option('Se incarca...','');
    }
}

function waitDiv(elemId)
{
    divTag = document.getElementById(elemId);
    
    if(!waitDivText.length)
        waitDivText = 'Se incarca...';
    if(divTag)
        divTag.innerHTML = waitDivText;
}
