function ajaxAccept()
{
    var ajax;

    // Mozilla, Safari,...
    if(window.XMLHttpRequest)
    {
		ajax = new XMLHttpRequest();
	} else if (window.ActiveXObject){	// IE
		ajax = new ActiveXObject("Msxml2.XMLHTTP");
		if (!ajax) {
			ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}
    }
	else {
        alert("Seu navegador não possui suporte a essa aplicação!");
	}
	return ajax;
}
/*----------------------------------------------------------------------------*/
function ajaxCall( tipo , method , dados , insertAlvo , campoAlvo , subFuncao , paramSubFuncao , paramResult , paramFuncao )
{
/*
 * METHOD			: post ou get
 * DADOS			: parametros que serão inseridos pela chamada do XMLHttpRequest
 * INSERTALVO		: verifica se o resultado da aplicação retornal em algum campo. Parâmetros: s ou n
 * CAMPO ALVO		: campo onde iremos inserir o resultado da aplicação
 * SUBFUNÇÃO		: função que será chamada no final da aplicação após a chegada do resultado. Se vazio, não chamar subfunção.
 * PARAMSUBFUNCAO	: parâmetros da subFuncao.
 * OBS[0]: subFunção trará um número inteiro que chamará a aplicação que estará dentro de subfuncao(),
 * conforme a necessidade da função ou aplicação que chama o ajaxCall().
 * PARAMRESULT		: parâmetro de resultado é usado para definir um comportamento depois de dado o resultado de retorno do XMLHttpRequest
 * PARAMFUNCAO		: função que será chamada quando um comportamento de resultado no retorno de XMLHttpRequest é definido.
 */
	if(method == 'post')
	{
		var ajax;
		ajax=ajaxAccept();
		if (ajax)
		{
			ajax.open('POST','index.php', true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
			ajax.onreadystatechange=function()
			{
			   if(ajax.readyState==4)
			   {
				   if(ajax.status==200)
				   {
					   var res = ajax.responseText;
					   if(insertAlvo == 's')
					   {
						   document.getElementById( campoAlvo ).innerHTML=res;
					   }
					   if(paramResult == 's')
					   {
						   var vr = res.split("__");
						   if( vr[0] == 'ok' )
						   {
							   if( vr[1].length > 0 )
								{
									var vr2 = vr[1].split( '-' );
									callSubFuncaoAjax( tipo , vr2[0] , vr2[1] );
								}
								else
								{
									callSubFuncaoAjax( tipo , paramFuncao , paramSubFuncao );
								}
						   }
						   if( vr[0] == 'notok' )
						   {
							   //Exibe a mensagem personalizada de erro.
							   alert( vr[1] );
						   }
					   }
					   if(subFuncao.length != 0)
					   {
						   //chama sub-função do ajax.
						   callSubFuncaoAjax( tipo , subFuncao , paramSubFuncao );
					   }
				   }
			   }
			}
		}
		ajax.setRequestHeader("Content-length", dados.length);
		ajax.send(dados);
	}
}
/*----------------------------------------------------------------------------*/
function callSubFuncaoAjax( tp , subFuncao , paramSubFuncao )
{
	switch( tp )
	{
		default:
			callSubFuncaoAjax_gerais( subFuncao , paramSubFuncao );
			break;
	}
	return true;
}
/*----------------------------------------------------------------------------*/
function callSubFuncaoAjax_gerais( act , param )
{
	var cpfs = document.getElementById('cpfs');
	switch(act)
	{
		case 'exibeCPF':
			cpfs.style.display = '';
		break;
		default:
			alert('callSubFuncaoAjax não possui parâmetros.');
		break;
	}
	return true;
}
