// ajax.js

function getXmlHttpObject()
{
	var xmlHttpObject = null;
	try {
		xmlHttpObject = new XMLHttpRequest();
	} catch(e) {
		try {
			xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttpObject;
}
/***********************************
 Classe para facilitar chamadas Ajax
 **********************************/
function Ajax()
{
    var ajaxInstance = this;
    ajaxInstance.req = getXmlHttpObject();
    this.sendRequest = function(url, parameters, requestType, endRequestFunction, errorFunction)
    {
        ajaxInstance.req.onreadystatechange = function()
        {
            if(ajaxInstance.req.readyState == 4) 
            {
                if(ajaxInstance.req.status == 200) 
                {
                    endRequestFunction(ajaxInstance.req);
                } else {
	                errorFunction(ajaxInstance.req);
                }
            }        
        }
        if (requestType == "GET")
        {
            ajaxInstance.req.open(requestType, url + "?" + parameters, true);
            ajaxInstance.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            ajaxInstance.req.send(null);
        }
        else
        {
            ajaxInstance.req.open(requestType, url, true);
            ajaxInstance.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            ajaxInstance.req.send(parameters);
        }
    }
}
/*******************************************
 Classe para facilitar parse de XML
 ******************************************/
function XMLParser(text)
{
    try //Internet Explorer
    {
        this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        this.xmlDoc.async = "false";
        this.xmlDoc.loadXML(text);
    }
    catch(e)
    {
        try //Firefox, Mozilla, Opera, etc.
        {
            parser = new DOMParser();
            this.xmlDoc = parser.parseFromString(text,"text/xml");
        }
        catch(e)
        {
            alert(e.message);
            return;
        }
    }
    
    this.getNode = function(nodeName, index)
    {
        var nodes = this.xmlDoc.getElementsByTagName(nodeName);
        if (nodes.length == 0) return null;
        return nodes[index].childNodes[0];
    }
}
 
/*******************************************
 
 ******************************************/
function getFieldsFromForm(obj, strGetPost) 
{
	var retorno = new StringBuffer();
	
	var selects = obj.getElementsByTagName("SELECT");
	if(selects != null) {
		for(var i = 0; i < selects.length; i++) {
			var sel = selects[i];

			if(sel.selectedIndex >= 0) 
			{
			    if (strGetPost == "GET")
				    retorno.append(sel.name + "=" + escape(sel.options[sel.selectedIndex].value) + "&");
				else
				    retorno.append(sel.name + "=" + (sel.options[sel.selectedIndex].value) + "&");
			}
		}
	}

	var inputs = obj.getElementsByTagName("INPUT");
	if(inputs != null) {
		for(var i = 0; i < inputs.length; i++) {
		    switch (inputs[i].type)
		    {
		        case "text":
		        case "hidden":
			        if (inputs[i].value != "")
			            if (strGetPost == "GET")
				            retorno.append(inputs[i].name + "=" + escape(inputs[i].value) + "&");
				        else
				            retorno.append(inputs[i].name + "=" + (inputs[i].value) + "&");
		            break;
		        case "checkbox":
		        case "radio":
		    	    if(inputs[i].checked)
		    	        if (strGetPost == "GET")
					        retorno.append(inputs[i].name + "=" + escape(inputs[i].value) + "&");
					    else
					        retorno.append(inputs[i].name + "=" + (inputs[i].value) + "&");
			        break;
			    default:
		    }
		}
	}
	
	var textAreas = obj.getElementsByTagName("TEXTAREA");
	if(textAreas != null)
		for(var i = 0; i < textAreas.length; i++)
            if (textAreas[i].value != "")
                if (strGetPost == "GET")
	                retorno.append(textAreas[i].name + "=" + escape(textAreas[i].value) + "&");
	            else
	                retorno.append(textAreas[i].name + "=" + (textAreas[i].value) + "&");
	            
    var str = retorno.toString();
	return str.substring(0, str.length - 1);
}

function getElementContent(element, tagName, index) {
	if(element == null)
		return "";
	var childElement = element.getElementsByTagName(tagName)[index];
	if(childElement == null)
		return "";
	return childElement.text != undefined ? childElement.text : childElement.textContent;
}


