// JavaScript Document
// $Id$

function calcularTotal(dummy){
   // Inicia as variaveis
	var totalavulso = 0;
	var totalVIP    = 0;
	var checkAvulso = document.getElementById("checkAvulso");
	var checkVip    = document.getElementById("checkVip");
	var tipoPagto   = "";
	var conviteVIP  = document.getElementById("edtConviteVIP").value;
	// Inicia os objetos
    document.getElementById("totalBoleto").innerHTML = "R$ 0,00";
    document.getElementById("codigoconvitevip").style.display = "none";   
    // Checa se tem VIP e define o valor do VIP.
	if(checkVip.checked == true){
        document.getElementById("codigoconvitevip").style.display = "block";
		for(var i = 0; i < document.getElementsByName("valorVip").length; i++){
			if(document.getElementsByName("valorVip")[i].checked == true){
    		   tipoPagto = document.getElementsByName("valorVip")[i].value;
               totalVIP  = parseFloat(tipoPagto.substr(4));
   		       tipoPagto = tipoPagto.substr(0,3);
   	        }
   	    }
    }
   
   // Checa se existe pagamento de avulso, soma e define total de avulsos
	if(checkAvulso.checked == true){
		for(var i = 0; i < document.getElementsByName("valorAvulso").length; i++){
			if(document.getElementsByName("valorAvulso")[i].checked == true){
				totalavulso += parseFloat(document.getElementsByName("valorAvulso")[i].value);
			}
		}
	}

   // Apresenta a soma os totais ( total = totalavulso+totalVIP)
	document.getElementById("totalBoleto").innerHTML = "R$ "+numberformat(totalavulso+totalVIP, "2");
	
}

function clickCheckPagamento(identificador){
	var checkAvulso = document.getElementById("checkAvulso");
	var checkVip = document.getElementById("checkVip");
	if(identificador == "checkAvulso"){
		if(checkAvulso.checked == true){
			document.getElementsByName("valorAvulso")[0].checked = true;
		}else{
			checkVip.checked = false;
			for(var i = 0; i < document.getElementsByName("valorVip").length; i++){
				document.getElementsByName("valorVip")[i].checked = false;
			}
			for(var i = 0; i < document.getElementsByName("valorAvulso").length; i++){
				document.getElementsByName("valorAvulso")[i].checked = false;
			}
		}
	}else if(identificador == "checkVip"){
		if(checkVip.checked == true){
			document.getElementsByName("valorVip")[0].checked = true;
			checkAvulso.checked = true;
			document.getElementsByName("valorAvulso")[0].checked = true;
		}else{
			for(var i = 0; i < document.getElementsByName("valorVip").length; i++){
				document.getElementsByName("valorVip")[i].checked = false;
			}
		}
	}
}

function alterarStatus(url, id_membro, status_membro, layer){
	objAjax = new AjaxObject("POST", url);
	objAjax.addRequestValue("id", id_membro);
	objAjax.addRequestValue("status", status_membro);
	objAjax.addRequestValue("layer", layer);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));

	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}

function marcarCheck(identificador){
	if(identificador == "checkVip"){
		document.getElementById("checkAvulso").checked = true;
		document.getElementsByName("valorAvulso")[0].checked = true;
	}

	if(identificador == "checkAvulso"){
		if(document.getElementById("checkVip").checked == true){
			document.getElementsByName("valorAvulso")[0].checked = true;
		}
	}
	document.getElementById(identificador).checked = true;
}

function confirmarBoleto(idForm){
	var formulario = document.getElementById(idForm)
	if(formulario.log.value == ""){
		alert('Por favor, preencha o campo de Endereço.');
		formulario.log.focus();
		return false;
	}else if(formulario.num.value == ""){
		alert('Por favor, preencha o campo do Número.');
		formulario.num.focus();
		return false;
	}else if(formulario.bai.value == ""){
		alert('Por favor, preencha o campo do Bairro.');
		formulario.bai.focus();
		return false;
	}else if(formulario.cid.value == ""){
		alert('Por favor, preencha o campo da Cidade.');
		formulario.cid.focus();
		return false;
	}else if(formulario.est.value == 0){
		alert('Por favor, preencha o campo do Estado.');
		formulario.est.focus();
		return false;
	}
	formulario.submit();
	return true;

}

function confirmarBoleto2(idForm){
	document.getElementById(idForm).submit();
	return true;
}

function ApenasNumeros(event, tipo){
	var keypress = ((navigator.appName.indexOf('Netscape')==-1)? window.event.keyCode : event.which? event.which : event.charCode);

	// Caso não haja necessidade de ponto ou vírgula
	if(tipo != "dinheiro"){
		if (((keypress < 48) || (keypress > 57)) && (keypress != 0) && (keypress != 8))
	 	{
			if (navigator.appName.indexOf('Netscape')==-1)
		 	window.event.returnValue = false;
	 	else
	 		event.preventDefault();
	 	}
	// Necessita de ponto ou vírgula
	}else if(tipo == "dinheiro") {
		if (((keypress < 48) || (keypress > 57)) && (keypress != 0)
			 && (keypress != 8) && (keypress != 44) && (keypress != 46))
	 	{
			if (navigator.appName.indexOf('Netscape')==-1)
		 	window.event.returnValue = false;
	 	else
	 		event.preventDefault();
	 	}
	}else{
		alert("Faltou colocar o tipo na função");
	}

}

function numberformat(num,dec){
// só utilizar a linha abaixo se passar string.
//	num = num.replace(",",".");
	mul=Math.pow(10,dec);
	num=num*mul;
	num=Math.round(num);
	num = num/mul;
	var numstr=String(num);
	if(numstr.indexOf(".") == -1)
	{
	numstr = numstr + ".";
	for(nfi=0;nfi<dec;nfi++) numstr = numstr + "0";
	}
	decpl = numstr.length - numstr.indexOf(".");
	decpl = decpl - 1;
	if (decpl < dec)
	{
	for(nfi=decpl;nfi<dec;nfi++) numstr = numstr + "0";
	}
	numstr = numstr.replace(".",",");
	return (numstr);
}


function enviarIndicacao(msg, formulario, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addAllRequestObjects(document.forms[formulario]);
	objAjax.addRequestValue("msg", msg);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' />  Enviando...";
	objAjax.load();
}

function comboFiltro(valor){
	montarComboFiltro(valor, "get", "../ajax/comboFiltro.php", "carregarFiltro");
}

function comboFiltroMaterial(valor){
	montarComboFiltro(valor, "get", "../ajax/comboFiltroMaterial.php", "carregarFiltro");
}

function carregarComboCargoAjax(id_banca, id_cargo, ano_prova, metodo, url, layer){
	montarComboFiltroCargoAjax(id_banca, id_cargo, ano_prova, metodo, url, layer);
}

function carregarComboEditalCargoAjax(id_banca, id_cargo, ano_edital, metodo, url, layer){
	montarComboFiltroEditalCargoAjax(id_banca, id_cargo, ano_edital, metodo, url, layer);
}

function comboFiltroProvaAnterior(id_banca, id_cargo, ano_prova){
//	montarComboFiltroProvaAnterior(id_banca, id_cargo, ano_prova, "get", "../ajax/ajaxPrincipalProvaAnterior.php", "mostrarConteudo");
	montarComboFiltroProvaAnterior("get", "../ajax/ajaxPrincipalProvaAnterior.php?pagina=1&id_banca="+id_banca+"&id_cargo="+id_cargo+"&ano_prova="+ano_prova, "mostrarConteudo");
}

function comboFiltroEdital(id_banca, id_cargo, ano_edital){
	montarComboFiltroEdital("get", "../ajax/ajaxPrincipalEdital.php?pagina=1&id_banca="+id_banca+"&id_cargo="+id_cargo+"&ano_edital="+ano_edital, "mostrarConteudo");
}

function filtrarProfessorAssunto(id_professor, id_assunto){
	paginacaoFiltroAjax(1, id_professor, id_assunto, "get","../ajax/ajaxFiltro.php", "mostrarConteudo");
}
function filtrarProfessorAssuntoMaterial(id_professor, id_assunto){
	paginacaoFiltroAjax(1, id_professor, id_assunto, "get","../ajax/ajaxFiltroMaterial.php", "mostrarConteudo");
}

function filtrarMateriaAssunto(id_materia, id_assunto){
	paginacaoFiltroMateriaAjax(1, id_assunto, id_materia, "get","../ajax/ajaxFiltroMateria.php", "mostrarConteudo");
}
function filtrarMateriaAssuntoMaterial(id_materia, id_assunto){
	paginacaoFiltroMateriaAjax(1, id_assunto, id_materia, "get","../ajax/ajaxFiltroMateriaMaterial.php", "mostrarConteudo");
}

function mostrarEsconder(id){
	elem = document.getElementById('assunto'+id);
	elem.style.display == 'none' ? elem.style.display = 'block' : elem.style.display = 'none';
}


function selecionarTodos(id_select){
	s1 = document.getElementById(id_select);

	for(i = 0; i < s1.length; i++){
		s1.options[i].selected = true;
	}
}

function move(s1, s2) {
	var i = new Array();
	var cont = 0;
	for(x=0; x < s1.options.length; x++){
	  	if (s1.options[x].selected){
			i[cont] = s1.selectedIndex;
			cont++;
		}
	}
	if ( i.length != 0) {
	  	for(x=0; x < i.length; x++){
  			for ( j = 0; j < s2.options.length; j++ ) {
				if ( s2.options[j].value == s1.options[i[x]].value ) break;
				if ( s2.options[j].text > s1.options[i[x]].text ) {
					for ( z = s2.options.length; z > j ; z-- ) {
  						s2.options[z] = new Option(s2.options[z-1].text, s2.options[z-1].value, false, false);
					}
					break;
  	  			}
			}
			s2.options[j] = new Option(s1.options[i[x]].text, s1.options[i[x]].value, false, true);
			s1.options[i[x]] = null;
		}
  }
}

function setSelectOptions(the_form, the_select, do_check)
{
	var selectObject = document.forms[the_form].elements[the_select];
	if (selectObject.length == 0){
		alert ('Selecione ao menos um email como destinatário.');
		return false;
	}
    var selectCount  = selectObject.length;

    for (var i = 0; i < selectCount; i++) {
		selectObject.options[i].selected = do_check;
    } // end for

}
//	document.forms[the_form].submit();
//	return true;

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
//POPUP
function abrir(theURL,winName,features) {
	window.open(theURL,winName,features);
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'block':(v=='hide')?'none':v; }
    obj.display=v; }
}

function limpaCamposForm(){}

function ajaxPadrao(formulario, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addAllRequestObjects(document.forms[formulario]);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}


function enviarIndicacao(msg, formulario, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addAllRequestObjects(document.forms[formulario]);
	objAjax.addRequestValue("msg", msg);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' />  Enviando...";
	objAjax.load();
}

function ajaxPadraoEnviarEmail(formulario, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addAllRequestObjects(document.forms[formulario]);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById('enviandoEmail').style.display = 'none';
	document.getElementById('carregando_enviando').innerHTML = "<img src='../imagens/ajax-loader.gif' /><br/>Enviando informativo. O envio poderá levar alguns minutos...";
	objAjax.load();
}

function ajaxPadrao2(formulario, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.setLoadingFunction(loading);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	objAjax.load();
}

function adicionarFavoritos(id_artigo, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("id_artigo", id_artigo);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}

function deslogarUsuario(id_usuario) {
	objAjax = new AjaxObject("POST", "../includes/deslogarUsuario.php");
	objAjax.addRequestValue("id", id_usuario);
	objAjax.load();
}

function paginacaoAjax(pagina, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("pagina", pagina);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' style='float:left; padding-right:5px;' />Carregando...<div class='clear' /></div>";
	objAjax.load();
}

function paginacaoBuscaAjax(pagina, buscar, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("pagina", pagina);
	objAjax.addRequestValue("buscar", buscar);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "<img src='../imagens/ajax-loader.gif' style='float:left; padding-right:5px;' />Carregando...<div class='clear' /></div>";
	objAjax.load();
}

function salvarBusca(buscar, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("buscar", buscar);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	objAjax.load();
}

function paginacaoFiltroAjax(pagina, id_professor, id_assunto, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("pagina", pagina);
	objAjax.addRequestValue("id_professor", id_professor);
	objAjax.addRequestValue("id_assunto", id_assunto);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}

function paginacaoFiltroMateriaAjax(pagina, id_assunto, id_materia, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("pagina", pagina);
	objAjax.addRequestValue("id_assunto", id_assunto);
	objAjax.addRequestValue("id_materia", id_materia);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}

function montarComboFiltro(acao, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("acao", acao);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loaderCinza.gif' />";
	objAjax.load();
}

function montarComboFiltroProvaAnterior(metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
/*	objAjax.addRequestValue("id_banca", id_banca);
	objAjax.addRequestValue("id_cargo", id_cargo);
	objAjax.addRequestValue("ano_prova", ano_prova);
	id_banca, id_cargo, ano_prova,
	*/
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}

function montarComboFiltroEdital(metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
/*	objAjax.addRequestValue("id_banca", id_banca);
	objAjax.addRequestValue("id_cargo", id_cargo);
	objAjax.addRequestValue("ano_prova", ano_prova);
	id_banca, id_cargo, ano_prova,
	*/
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loader.gif' />";
	objAjax.load();
}

function montarComboFiltroCargoAjax(id_banca, id_cargo, ano_prova, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("id_banca", id_banca);
	objAjax.addRequestValue("id_cargo", id_cargo);
	objAjax.addRequestValue("ano_prova", ano_prova);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loaderCinza.gif' />";
	objAjax.load();
}

function montarComboFiltroEditalCargoAjax(id_banca, id_cargo, ano_edital, metodo, url, layer) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue("id_banca", id_banca);
	objAjax.addRequestValue("id_cargo", id_cargo);
	objAjax.addRequestValue("ano_edital", ano_edital);
	objAjax.setCallBackFunction(callBackPadrao, new Array(layer));
	document.getElementById(layer).innerHTML = "Carregando...<img src='../imagens/ajax-loaderCinza.gif' />";
	objAjax.load();
}



function ajaxPadraoFormUnique(valor, metodo, url) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addRequestValue('key',valor);
	objAjax.setCallBackFunction(callBackAlert, new Array());
	objAjax.setExceptionFunction(exceptionPadrao);
	objAjax.load();
}

function carregarOrdenar(container, url, acao){

	var objAjax = new AjaxObject("POST", url);
	objAjax.setLoadingFunction(loading);
	objAjax.setCallBackFunction(exibirOptions, new Array(container));
	objAjax.addRequestValue('acao', acao);
	objAjax.load();

}

function exibirOptions(resposta, container){
	document.getElementById(container).innerHTML = resposta;
}


function exceptionPadrao(cod, status) {
	alert(cod + ": " + status);
}

function callBackDetail(response, layerName, campo, botao) {
	document.getElementById(layerName).style.display = 'block';
	document.getElementById(layerName).innerHTML = response;
	var cal = new Zapatec.Calendar.setup({
	showsTime      : false,//mostrar hora ou não
	range          : [1900.01, 2999.12],//data inicial e final
	singleClick    : true,//selecionar data com um único click
	inputField     : campo,//nome do campo que irá receber a data
	button         : botao,//botão que irá chamar a função da data
	ifFormat       : "%d/%m/%Y"//formata que irá ser mostrado
	});

}

function callBackPadrao(response, layerName) {
	document.getElementById(layerName).innerHTML = response;
}

// Função padrao de ajax para formularios
function ajaxPadraoForm(formulario, metodo, url) {
	objAjax = new AjaxObject(metodo, url);
	objAjax.addAllRequestObjects(document.forms[formulario]);
	objAjax.setCallBackFunction(callBackAlert, new Array());
	objAjax.load();
}
function loading(){
		layerName = this.callBackArguments[0];
		document.getElementById(layerName).innerHTML = "<font face=verdana size=3><div align=center><b><br><br><img src='../imagens/ajax-loader.gif'/></b></div></font>";
}
function loadingEmail(){
		layerName = this.callBackArguments[0];
		document.getElementById(layerName).innerHTML = "<div align=center><b><br><br><img src='../imagens/ajax-loader.gif'/><br/>Enviando Informativo. Levará alguns minutos...</b></div>";
}

// Função padrão de Callback

function callBackAlert(response) {
	eval(response);
}



var arrInput = new Array(0);
var arrInputValue = new Array(0);

function addInput() {

  arrInput.push(arrInput.length);

  arrInputValue.push("");
  display();
}

function display() {
  document.getElementById('inserirhtml').innerHTML="";
  for (intI=0;intI<arrInput.length;intI++) {
	document.getElementById('inserirhtml').innerHTML+=createInput(arrInput[intI], arrInputValue[intI]);
  }
}

function createInput(value) {
  return"<td><input name='foto[]' type='file' class='form2' size='26' /></td><br>";
}




/*
* Javascript pseudo-class to build assynchronous HTTP requests to webservers.
*
* You must inform the HTTP request Method and URL on AjaxObject's constructor,
* and, optionally, you can inform your Javascript function witch will receive
* and process the webserver response (callback function) and an array of
* arguments that will be assigned to each function parameter.
*
* This callback function is necessary also if you (whe think so) intend to
* process the server's response to add funcionality to your application.
* Without it, your script will not perceive anything absolutely.
* It accept parameters that you have to pass as an array, but simply consider
* as parameter on your callback function.
*
* You can, optionally, pass request values (as key/value pairs) or request form
* input objects that will be encoded and can be had access by the webserver.
*
* Also it's possible to define a function witch will handle the XMLHttpRequest
* object's onreadystatechange event and another function witch will be called
* when something gone wrong, for examplo, request for Page Not Found (404).
*
* To send an Ajax request, call load() method on your AjaxObject object.
*
* Usage examples:
* <code>
*	getObj = new AjaxObject("GET", "ajaxtest.php"); // request for some URL on GET method - try it with POST too
*	getObj.setCallBackFunction(callback); // defining the callback function
*	getObj.setLoadingFunction(loading); // setting loading function
*	getObj.addRequestValue('foo', 'bar'); // some request parameter
* 	getObj.addRequestObject(document.forms['aForm'].elements['anElement']); // other request parameter
* 	getObj.addAllRequestObjects(document.forms['anotherForm']); // pass all enabled form elements to request
* 	getObj.load(); // sending the assychronous request
* </code>
*
// class AjaxObject {

	var AjaxObject;
		AjaxObject.INVALID_REQUEST_OBJECT = 1;

	/*
	* AjaxObject Constructor
	*
	* @param method Request method (GET or POST)
	* @param url url requested on load() function
	* @param xmlResponse enables xml format to response
	* @param callback function inform your script function whitch will receive the server response
	* @see load()
	* @constructor
	*/
	function AjaxObject(method, url) {
		// setting attributes
		this.method                 = method;
		this.url                    = url;
		this.requestObjects         = new Array();
		this.requestValues          = new Array();
		this.responseFormat         = (AjaxObject.arguments[2]) ? "xml" : "text";
		this.queue                  = new Array();

		// setting methods
		this.addRequestObject       = addRequestObject;
		this.addRequestValue        = addRequestValue;
		this.setCallBackFunction    = setCallBackFunction;
		this.setLoadingFunction     = setLoadingFunction;
		this.setExceptionFunction   = setExceptionFunction;
		this.buildRequestString     = buildRequestString;
		this.addAllRequestObjects   = addAllRequestObjects;
		this.load                   = load;

		// setting callback function
		this.callBackFunction       = AjaxObject.arguments[3];
		this.callBackArguments      = AjaxObject.arguments[4];
	}

	/*
	* AjaxObject's method that adds an input object to pass in the request
	*
	* @param requestObject
	*/
	function addRequestObject(requestObject) {
		this.requestObjects[this.requestObjects.length] = requestObject;
	}

	/*
	* AjaxObject's method that adds a key-value pair to pass in the request as a parameter
	*
	* @param requestObject
	*/
	function addRequestValue(requestKey, requestValue) {
		this.requestValues[this.requestValues.length] = new Array(requestKey, requestValue);
	}

	/*
	* AjaxObject's method that sets the Javascript's function
	* assigned to be onreadstatechange event listener
	*
	* @param callBackFunction
	* @param arrayArguments Some arguments used by the method
	*/
	function setCallBackFunction(callBackFunction) {
		this.callBackFunction	= callBackFunction;
		this.callBackArguments	= setCallBackFunction.arguments[1];
	}

	/*
	* AjaxObject's method that sets the Javascript's function
	* called within the load() to change loading status
	*
	* @param loadingFunction
	* @param loadingFunction Your loading function
	*/
	function setLoadingFunction(loadingFunction) {
		this.loadingFunction	= loadingFunction;
	}

	/*
	* AjaxObject's method that sets the Javascript's function
	* called within the load() when someting gone wrong
	*
	* @param exceptionFunction
	* @param exceptionFunction Your exception function
	*/
	function setExceptionFunction(exceptionFunction) {
		this.exceptionFunction	= exceptionFunction;
	}

	/*
	* AjaxObject's method that processes requestObjects and requestValues
	* arrays and builds the return string used on GET's URL or POST's request parameters
	*
	* @return the new URL string
	*/
	function buildRequestString() {
		var regexArray = /.*\[\]/;

		returnString = ((this.url.indexOf('?') > 0) ? "&" : "?") + "requestTime=" + new Date().getTime();
		for (x = 0; x < this.requestValues.length; x++) {
			returnString += '&' + this.requestValues[x][0] + '=' + encodeURIComponent(this.requestValues[x][1]);
		}
		for (x = 0; x < this.requestObjects.length; x++) {
			try {
				if (this.requestObjects[x].type == 'select-multiple') {

					for (var i = 0; i < this.requestObjects[x].options.length; i++) {
						if (this.requestObjects[x].options[i].selected == true) {
							newName = regexArray.test(this.requestObjects[x].name) ? this.requestObjects[x].name : this.requestObjects[x].name + '[]';
							returnString += '&' + newName + '=' + encodeURIComponent(this.requestObjects[x].options[i].value);
						}
					}
				}
				else{
					var input = this.requestObjects[x].innerHTML;
					if (input == 'undefined' || input == '') {
						input = this.requestObjects[x].value;
					}
					returnString += '&' + this.requestObjects[x].name + '=' + encodeURIComponent(input);
				}
			} catch (e) {
				if (this.exceptionFunction) {
					for (x in e) {alert(x)}
					this.exceptionFunction(AjaxObject.INVALID_REQUEST_OBJECT,
										   'The object ' + x + ' passed is not a valid form input object!');
				}
			}
		}
		return returnString;
	}

	/*
	* AjaxObject's method that adds all fields of a form passed as parameter
	*
	* @param aForm HTML form object
	*/
	function addAllRequestObjects(aForm) {
		for (x = 0; x < aForm.elements.length; x++) {
			if (!aForm.elements[x].disabled) {
				if ((aForm.elements[x].type != 'checkbox' && aForm.elements[x].type != 'radio')
						|| aForm.elements[x].checked){
					this.addRequestObject(aForm.elements[x]);
				}
			}
		}
	}

	/*
	* AjaxObject's method that loads the new thread of XMLHttpRequest
	*/
	function load() {
		var xmlHttpRequest = new XmlHttpRequestObject(this);
		returnString  = this.buildRequestString();
		if (this.method.toUpperCase() == "POST") {
			xmlHttpRequest.thread.open("POST", this.url, true);
			xmlHttpRequest.thread.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			xmlHttpRequest.thread.setRequestHeader('Content-Length',returnString.length);
		} else if (this.method.toUpperCase() == "GET") {
			this.url += this.buildRequestString();
			xmlHttpRequest.thread.open("GET", this.url, true);
		}

		xmlHttpRequest.thread.send(returnString);

		xmlHttpRequest.thread.onreadystatechange = function() {
			if (xmlHttpRequest.thread.readyState == 0) { state = 'uninitialized' }
			if (xmlHttpRequest.thread.readyState == 1) { state = 'loading' }
			if (xmlHttpRequest.thread.readyState == 2) { state = 'loaded' }
			if (xmlHttpRequest.thread.readyState == 3) { state = 'interactive' }
			if (xmlHttpRequest.thread.readyState == 4) { state = 'complete' }
			if (xmlHttpRequest.ajaxObject.loadingFunction) xmlHttpRequest.ajaxObject.loadingFunction(state);

			if (xmlHttpRequest.thread.readyState == 4) {
				if (xmlHttpRequest.thread.status == 200) {
					params = "";
					if (xmlHttpRequest.ajaxObject.callBackArguments) {
						for (x = 0; x < xmlHttpRequest.ajaxObject.callBackArguments.length; x++) {
							params += ", xmlHttpRequest.ajaxObject.callBackArguments[" + x + "]";
						}
					}
					if (xmlHttpRequest.ajaxObject.callBackFunction) {
						if (xmlHttpRequest.ajaxObject.responseFormat == 'text')
							eval("xmlHttpRequest.ajaxObject.callBackFunction( unescape(xmlHttpRequest.thread.responseText)" + params + " )");
						else
							eval("xmlHttpRequest.ajaxObject.callBackFunction( unescape(xmlHttpRequest.thread.responseXML)" + params + " )");
					}
				} else {
					if (xmlHttpRequest.ajaxObject.exceptionFunction) {
						eval("xmlHttpRequest.ajaxObject.exceptionFunction(xmlHttpRequest.thread.status, xmlHttpRequest.thread.statusText)");
					}
				}
			}

		}
	}

// }

/*
* Private class to help AjaxObject in its job
*
*/
// private class XmlHttpRequestObject {

	/*
	* XmlHttpRequestObject Constructor
	*
	* @param callBackFunction function loaded when response status code is 200 - OK
	* @param callBackArguments array of arguments passed to the callback function
	* @param loadingFunction function called on every change of request state
	*/
	function XmlHttpRequestObject(ajaxObject) {
		try { this.thread = new XMLHttpRequest(); }
		catch(e) { try {this.thread = new ActiveXObject("Microsoft.XMLHTTP");} catch(e) {} }

		this.ajaxObject	= ajaxObject;
	}


// }
// JavaScript Document
