var xmlhttp = null;
var i = 0;

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)
        {
            elemId = fields[0].getAttribute('id');
            elemText = fields[0].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)
                    document.getElementById(elemId).style.display = elemDisplay;
               if(elemAttrProp.length)
               {
                    elemAttrVal = _reformat(elemAttrVal);
                    if(elemAttrProp == 'style' && navigator.appName == 'Microsoft Internet Explorer')
                    {
                        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)
                            {
                                document.getElementById(elemId).style.setAttribute(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);
               }
            }
        }
    }
}

function ajaxRequest(url,caller,target)
{
    /*@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)
    {
        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;
}