
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

function pausecomp(amount) {
	d = new Date(); //today's date
	while (1) {
		mill = new Date(); // Date Now
		diff = mill - d; //difference in milliseconds
		//alert(diff)
		if( diff > amount ) {
			break;
		}
	}
}

/**
 * Muda a empresa Bobs
 * 
 * @param codSite código do site
 * @param codEmpresa código da empresa Bobs
 */
function mudaEmpresa(codSite, codEmpresa){
	
	document.forms['mudaEmpresaForm'].codSite.value = codSite;
	document.forms['mudaEmpresaForm'].codEmpresa.value = codEmpresa;
	
	document.forms['mudaEmpresaForm'].submit();
}

/**
 * Decrementa a quantidade existente no campo passado como parâmetro.
 * Este campo deve ser um element <input type="text" .../>
 * 
 * @param campo campo a ter o valor decrementado
 */
function decrementaQuantidade(campo){
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 1 (um).");
		// Reinicia o valor do campo
		campo.value = "1";
		return;
	}
	
	if (campo.value == null || campo.value == "1"){
		alert("A quantidade não pode ser menor do que 1 (um).");
		return;
	}
	
	campo.value = --campo.value;
}

/**
 * Incremanta a quantidade existente no campo passado como parâmetro.
 * Este campo deve ser um element <input type="text" .../>
 * 
 * @param campo campo a ter o valor incrementado
 */
function incrementaQuantidade(campo){
	
	
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 1 (um).");
		// Reinicia o valor do campo
		campo.value = "1";
		return;
	}
	
	if (campo.value == null || campo.value == ""){
		// Seta o valor para zero antes de incrementar
		campo.value = 0;
	}
	
	campo.value = ++campo.value;
}

/**
 * Decrementa a quantidade existente no campo passado como parâmetro.
 * Este campo deve ser um element <input type="text" .../>
 * 
 * @param campo campo a ter o valor decrementado
 */
function decrementaQuantidadeWizardComplemento(campo){
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 0.");
		// Reinicia o valor do campo
		campo.value = "0";
		return;
	}
	
	if (campo.value == null || campo.value == "0"){
		alert("A quantidade não pode ser menor do que 0.");
		return;
	}
	
	campo.value = --campo.value;
}

/**
 * Incremanta a quantidade existente no campo passado como parâmetro.
 * Este campo deve ser um element <input type="text" .../>
 * 
 * @param campo campo a ter o valor incrementado
 */
function incrementaQuantidadeWizardComplemento(campo){
	
	
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 0.");
		// Reinicia o valor do campo
		campo.value = "0";
		return;
	}
	
	if (campo.value == null || campo.value == ""){
		// Seta o valor para zero antes de incrementar
		campo.value = 0;
	}
	
	campo.value = ++campo.value;
}


/**
 * Busca o CEP de numero passado como parametro
 * 
 * @param campo contendo o numero do CEP
 * @param o form a ser submetido para buscar o cep se o numero do CEP for válido
 */
//function findCep(campoNumero, form){
//	if (campoNumero.value == null || campoNumero.value == ""){
//		alert("O número do CEP deve ser informado.");
//		// Workaround to get the focus back to the field on IE and FF
//		//setTimeout(function(){campoNumero.focus();campoNumero.select();},10)
//		//campoNumero.focus();
//		//campoNumero.select();
//		return;
//	}
//
//	if (isNaN(campoNumero.value)){
//		alert("Número de CEP inválido.");
//		// Workaround to get the focus back to the field on IE and FF
//		//setTimeout(function(){campoNumero.focus();campoNumero.select();},10)
//		campoNumero.value = "";
//		//campoNumero.focus();
//		//campoNumero.select();
//		return;
//	}
//	
//	form.submit();
//}

/**
 * Busca todos os fornecedores de acordo com a área selecionada na lista
 */
function findAllFornecedoresByArea(areaList){
	
	if (areaList.selectedIndex == -1){
		return;
	}
	
	// Recupera o índice da área selecionada
	var legendaMapa = areaList.options[areaList.selectedIndex].value;
	
	// Seta a legenda da área no campo correspondente do form
	document.forms["areaEntregaForm"].legendaMapa.value = legendaMapa;
	// Action para buscar todos os fornecedores da área selecionada
	document.forms["areaEntregaForm"].action = "areaEntrega!findFornecedoresByArea.action";
	// Submit
	document.forms["areaEntregaForm"].submit();
}

/**
 * Busca todos os fornecedores de acordo com a área selecionada na lista
 */
function getTaxaEntregaFornecedor(fornecedoresList){
	
	if (fornecedoresList.selectedIndex == -1){
		return;
	}
	
	// Recupera o id do fornecedor selecionado
	var fornecedorId = fornecedoresList.options[fornecedoresList.selectedIndex].value;
	
	// Seta a legenda da área no campo correspondente do form
	document.forms["areaEntregaForm"].fornecedorId.value = fornecedorId;
	// Action para buscar a taxa de entrega do fornecedor selecionado
	document.forms["areaEntregaForm"].action = "getTaxaEntregaFornecedor.action";
	// Submit
	document.forms["areaEntregaForm"].submit();
}

/**
 * Seta a action do formulário para action goToomeFornecedor. 
 * Esta função é chamada a partir da página de Área de Entrega
 */
function goToHomeFornecedorFromAreaEntrega(){
	// Action para redirecionar para a home do fornecedor
	document.forms["areaEntregaForm"].action = "areaEntrega!goToHomeFornecedor.action";
	// Submit
	document.forms["areaEntregaForm"].submit();
}

/**
 * Redireciona o usuário para a home do Restaurante
 * 
 * @param frnId id do fornecedor
 */
function goToHomeFornecedor(frnId){
	// Seta o id do fornecedor no campo escondido do form
	document.forms["fornecedorForm"].fornecedorId.value = frnId;
	// Submit
	document.forms["fornecedorForm"].submit();
}

/**
 * Redireciona o usuário para a home do Restaurante. Neste caso o usuário está na 
 * home de um fornecedor que possui mais de uma loja.
 * 
 * @param frnId id do fornecedor
 */
function goToHomeFornecedorFromHomeVariasLojas(frnId){
	window.location.href = "/bobs/fornecedor!goToHomeFornecedor.action?fornecedorId="+frnId+"&requestFromHomeFornecedorVariasLojas=true";
}

/**
 * Redireciona o usuário para a home do Restaurante. Neste caso o usuário está na 
 * home de um fornecedor que possui mais de uma loja.
 * 
 * @param frnId id do fornecedor
 * @param togo true is is ToGo
 */
function goToHomeFornecedorFromLojaTogo(frnId, togo){
	window.location.href = "/bobs/fornecedor!goToHomeFornecedor.action?fornecedorId="+frnId+"&requestFromHomeFornecedorVariasLojas=true&indToGo="+togo;
}

/**
 * Realiza a busca do cep a partir da home do fornecedor várias lojas
 */
function buscaCepFromHomeFornecedorVariasLojas(){
	// Retira o hífen do cep
	var cepValue = document.getElementById('numeroCep').value.replace(/-/g,'');
	var numeroValue = document.getElementById('numeroLogradouro').value;
	
	if (cepValue == ""){
		alert("O CEP deve ser informado.");
		return;
	}
	if(numeroValue == ""){
		alert("O número deve ser informado.");
		return;
	}
	
	document.getElementById('numeroCep').value = cepValue;
	document.forms["findLojaFornecedorByCepForm"].submit();
}

/**
 * Seta a data de nascimento do cliente (em mili segundos) em um campo escondido do formulário
 */
function setDataNascimento(){
	var diaNascimento = document.cadastroClienteForm.diaNascimento.value;
	var mesNascimento = document.cadastroClienteForm.mesNascimento.value;
	var anoNascimento = document.cadastroClienteForm.anoNascimento.value;
	
	//alert(diaNascimento + "/" + mesNascimento + "/" + anoNascimento);
	
	var dataNascimento;
	
	if (!dojo.string.isBlank(diaNascimento) && !dojo.string.isBlank(mesNascimento) && !dojo.string.isBlank(anoNascimento)){
		dataNascimento = diaNascimento + "/" + mesNascimento + "/" + anoNascimento;
	}
	
	if (!dataNascimento){
		return true;
	}
	
	if (!isValidDate(dataNascimento)){
		alert("A data " + dataNascimento + " não é uma data válida");
		return false;
	}
	
	if (!dojo.string.isBlank(diaNascimento) && !dojo.string.isBlank(mesNascimento) && !dojo.string.isBlank(anoNascimento)){
		var dataNascimento = new Date();
		dataNascimento.setMonth(mesNascimento-1, diaNascimento);	
		dataNascimento.setYear(anoNascimento);
	
		document.getElementById("dataNascimentoTimemilis").value = dataNascimento.getTime();
		//alert("data de nascimento do cliente foi setada para " + dataNascimento.getTime());
	} else {
		//alert("data nascimento não informada");
		document.getElementById("dataNascimentoTimemilis").value = 0;
	}
	
	return true;
}

/**
 * Seta as informações do cep escolhido nos campos corretos da tela pai
 * 
 * @param cepId id do cep
 * @param numeroCep número do cep
 * @param logradouro logradouro do cep
 * @param bairro bairro do cep
 * @param cidade cidade do cep
 * @param estado estado do cep
 */
function setCepEscolhido(cepId, numeroCep, logradouro, bairro, cidade, estado, legendaMapa){
	if (window.opener.document.areaEntregaForm){
		// Form area de entrega
		window.opener.document.getElementById("cepId").value = cepId;
		window.opener.document.areaEntregaForm.numero.value = numeroCep;
		window.opener.document.areaEntregaForm.rua.value = logradouro;
		window.opener.document.areaEntregaForm.numero.onblur();
	} else if (window.opener.document.findLojaFornecedorByCepForm) {
		// Form da home do fornecedor várias lojas
		window.opener.document.findLojaFornecedorByCepForm.numeroCep.value = numeroCep;
		window.opener.document.findLojaFornecedorByCepForm.numeroLogradouro.value = document.getElementById('numeroLogradouro').value;
	} else if (window.opener.document.insereNovoEnderecoForm) {
		// Form para cadastro de um novo endereço (confirmação do pedido)
		window.opener.document.getElementById("novoEndereco.cep.id").value = cepId;
		window.opener.document.getElementById("novoEndereco.cep.numero").value = numeroCep;
		window.opener.document.getElementById("novoEndereco.cep.logradouro").value = logradouro;
		window.opener.document.getElementById("novoEndereco.cep.bairro").value = bairro;
		window.opener.document.getElementById("novoEndereco.cep.cidade").value = cidade;
		window.opener.document.getElementById("novoEndereco.cep.estado").value = estado;
		window.opener.document.getElementById("novoEndereco.cep.legendaMapa").value = legendaMapa;
	} else {
		// Form cadastro do cliente
		window.opener.document.getElementById("cliente.enderecoCadastro.cep.id").value = cepId;
		window.opener.document.getElementById("cliente.enderecoCadastro.cep.numero").value = numeroCep;
		window.opener.document.getElementById("cliente.enderecoCadastro.cep.logradouro").value = logradouro;
		window.opener.document.getElementById("cliente.enderecoCadastro.cep.bairro").value = bairro;
		window.opener.document.getElementById("cliente.enderecoCadastro.cep.cidade").value = cidade;
		window.opener.document.getElementById("cliente.enderecoCadastro.cep.estado").value = estado;
		if(document.getElementById('numeroLogradouro').value != ""){
			window.opener.document.getElementById("cliente.enderecoCadastro.numero").value = document.getElementById('numeroLogradouro').value;
		}
		// Esconde ícone de erro se estiver sendo exibido
        window.opener.document.getElementById("icoErrorCep").style.display = "none";
		window.close();
	}
	
	// Remove a variável de sessão contendo a lista de ceps
	removeSessionVariables(new Array("cepList"));
	
	window.close();
	return;
}

/**
 * Busca todos os produtos do cardapio informado para o fornecedor atual
 * 
 * @param codCardapio código do cardápio
 */
function findAllProdutosByCodigoCardapioAndFornecedorId(codCardapio) {
	document.cardapiosForm.codCardapio.value = codCardapio;
	document.cardapiosForm.submit();
}

/**
 * Adiciona o item de codigo informado ao carrinho a partir da página principal.
 * Se o produto for inserido com sucesso, o cliente é encaminhado para página
 * do restaurante.
 * 
 * @param codProduto código do produto a ser adicionado no carrinho
 * @param fornecedorId id do fornecedor
 * @param codTipoCozinhaFornecedor código do tipo de cozinha do fornecedor
 */
function adicionaItemCarrinhoPaginaPrincipal(codProduto, fornecedorId, codTipoCozinhaFornecedor, obsProduto){
	//alert("codProduto: " + codProduto + ", fornecedorId: " + fornecedorId + ", codTipoCozinhaFornecedor: " + codTipoCozinhaFornecedor + ", obsProduto: " + obsProduto);
	// Valores default
	
	// Exibe o div contendo a imagem de processamento
	escondeMostraElemento("processing");
	
	var qtdeProduto = 1;
	
	var content;
	if (obsProduto){
		// Produto possui observação
		content = {codProduto: codProduto, qtdeProduto: qtdeProduto, obsProduto: obsProduto, fornecedorId: fornecedorId, codTipoCozinhaFornecedor: codTipoCozinhaFornecedor, carregarProdutos: "yes"};
	} else {
		content = {codProduto: codProduto, qtdeProduto: qtdeProduto, fornecedorId: fornecedorId, codTipoCozinhaFornecedor: codTipoCozinhaFornecedor, carregarProdutos: "yes"};
	}
	
	var bindArgs = {
		url: "/bobs/adicionaItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			if (!dojo.string.isBlank(fornecedorId)){
				alert("Erro detectado no fluxo da aplicação.\nO ID do fornecedor não foi encontrado.");
				return;
			}
			
			//alert("encaminhando para home do fornecedor...");
			window.location.href = "/bobs/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Adiciona o item de codigo informado ao carrinho a partir da página principal.
 * Se o produto for inserido com sucesso, o cliente é encaminhado para página
 * do restaurante.
 * 
 * @param codProduto código do produto a ser adicionado no carrinho
 * @param fornecedorId id do fornecedor
 * @param codTipoCozinhaFornecedor código do tipo de cozinha do fornecedor
 */
function adicionaItemComplementosCarrinhoPaginaPrincipal(fornecedorId){
	//alert("codProduto: " + codProduto + ", fornecedorId: " + fornecedorId + ", codTipoCozinhaFornecedor: " + codTipoCozinhaFornecedor + ", obsProduto: " + obsProduto);
	// Valores default
	
	// Exibe o div contendo a imagem de processamento
	escondeMostraElemento("processing");
	
	var bindArgs = {
		url: "/bobs/adicionaItemComplementosCarrinho.ajax",
		method: "post",
		mimetype: "text/xml",
		load: function(type, data, evt) { 
			//alert("encaminhando para home do fornecedor..." + fornecedorId);
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			if (!dojo.string.isBlank(fornecedorId)){
				alert("Erro detectado no fluxo da aplicação.\nO ID do fornecedor não foi encontrado.");
				return;
			}
			
			window.opener.location.href = "/bobs/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
			window.close();
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Adiciona o item de codigo informado ao carrinho a partir da home do Fornecedor.
 * Se o produto for inserido com sucesso, o cliente é encaminhado para página
 * do restaurante.
 * 
 * @param codProduto código do produto a ser adicionado no carrinho
 * @param fornecedorId id do fornecedor
 * @param codTipoCozinhaFornecedor código do tipo de cozinha do fornecedor
 */
function adicionaItemComplementosCarrinhoHomeFornecedor(fornecedorId){
	//alert("codProduto: " + codProduto + ", fornecedorId: " + fornecedorId + ", codTipoCozinhaFornecedor: " + codTipoCozinhaFornecedor + ", obsProduto: " + obsProduto);
	// Valores default
	
	// Exibe o div contendo a imagem de processamento
	escondeMostraElemento("processing");
	
	var bindArgs = {
		url: "/bobs/adicionaItemComplementosCarrinho.ajax",
		method: "post",
		mimetype: "text/xml",
		load: function(type, data, evt) { 
			//alert("encaminhando para home do fornecedor..." + fornecedorId);
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			if (!dojo.string.isBlank(fornecedorId)){
				alert("Erro detectado no fluxo da aplicação.\nO ID do fornecedor não foi encontrado.");
				return;
			}
			
			window.opener.location.href = "/bobs/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
			window.close();
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Atualiza o item de índice (posição no carrinho) informado no carrinho de compras.
 * O item do carrinho de compras de mesmo índice é substituído pelo produto atual que 
 * se encontra na sessão do usuário.
 * 
 * @param indexProduto índice do produto no carrinho de compras
 */
function atualizaItemComplementosCarrinho(indexProduto){
	//alert("atualizando complementos do produto de índice " + indexProduto);
	
	// Exibe o div contendo a imagem de processamento
	escondeMostraElemento("processing");
	
	var content = {indexProduto: indexProduto};
	
	var bindArgs = {
		url: "/bobs/atualizaItemComplementosCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) { 
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			//alert("Complementos do item atualizados.");
			window.close();
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Atualiza as informações do carrinho de acordo com o item selecionado.
 */
function atualizaInfoItemCarrinho() {
	
	var carrinhoSelect = document.getElementById("carrinho");
	//alert("carrinhoSelec: " + carrinhoSelec);
	if(carrinhoSelect.selectedIndex != -1) {
		var attributes = carrinhoSelect.options[carrinhoSelect.selectedIndex].attributes;
		
		var qtdeItem = attributes["qtdeitem"].value;
		var valorUnitario = attributes["valorunitario"].value;
		var nomeRestaurante = attributes["nomerestaurante"].value;
		
		// Verifica se o valor uniário possui o símbolo do real
		var regex = new RegExp("R");
	
		if (!valorUnitario.match(regex)){
			valorUnitario = "R$ " + valorUnitario;
		}
		
		document.getElementById("qtdeItem").value = qtdeItem;
		document.getElementById("valorUnitario").innerHTML = valorUnitario;
	}
}

/**
 * Remove o item selecionado do carrinho de compras
 */
function removeItemCarrinho() {
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Não existe nenhum item a ser excluído.");
		return;
	} else if (carrinhoSelect.selectedIndex == -1){
		alert("Selecione o item a ser excluído.");
		return;
	}
	
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;

	document.carrinhoForm.codProduto.value = codProduto;
	document.carrinhoForm.action = "carrinho!removeItem.action";
	//alert('submit');
	document.carrinhoForm.submit();	
}

/**
 * Deremanta a quantidade do item selecionado no carrinho de compras armazenando o valor
 * do decremento no campo passado como parâmetro. 
 * Este campo deve ser um element <input type="text" .../>
 * 
 * @param campo campo a ter o valor decrementado
 */
function decrementaQuantidadeItemCarrinho(campo){
	
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Não existe nenhum item para decrementar a quantidade.");
		return;
	} else if (carrinhoSelect.selectedIndex == -1){
		alert("Selecione o item para decrementar sua quantidade.");
		return;
	}
	
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 1 (um).");
		// Reinicia o valor do campo
		campo.value = "1";
		return;
	}
	
	if (campo.value == null || campo.value == "1"){
		alert("A quantidade não pode ser menor do que 1 (um).");
		return;
	}
	
	if (--campo.value == 0){
		alert("A quantidade deve ser maior ou igual a um.\nPara excluir o item clique no botão \"Excluir\".");
		++campo.value;
		return;
	}
	
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;
	var indiceProduto = carrinhoSelect.selectedIndex;
	
	atualizaQtdeItemCarrinhoAjax(codProduto, campo.value, indiceProduto);
}

/**
 * Incremanta a quantidade do item selecionado no carrinho de compras armazenando o valor
 * do incremento no campo passado como parâmetro. 
 * Este campo deve ser um element <input type="text" .../>
 * 
 * @param campo campo a ter o valor incrementado
 */
function incrementaQuantidadeItemCarrinho(campo){
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Não existe nenhum item para incrementar a quantidade.");
		return;
	} else if (carrinhoSelect.selectedIndex == -1){
		alert("Selecione o item para incrementar sua quantidade.");
		return;
	}
	
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 1 (um).");
		// Reinicia o valor do campo
		campo.value = "1";
		return;
	}
	
	if (campo.value == null || campo.value == ""){
		// Seta o valor para zero antes de incrementar
		campo.value = 0;
	}
	
	campo.value = ++campo.value;
	
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;
	var indiceProduto = carrinhoSelect.selectedIndex;
	
	atualizaQtdeItemCarrinhoAjax(codProduto, campo.value, indiceProduto);
}

/**
 * Edita a opção do item selecionado no carrinho
 */
function editarObsItemCarrinho(){
	
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Não existe nenhum item para editar a observação.");
		return;
	} else if (carrinhoSelect.selectedIndex == -1){
		alert("Selecione o item para editar sua observação.");
		return;
	}
	
	var attributes = carrinhoSelect.options[carrinhoSelect.selectedIndex].attributes;
	var obs = attributes["obs"].value;
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;
	
	// Seta a observação no campo obsProduto do form para ser referenciado de dentro do popup
	document.getElementById("obsProduto").value = obs;
	// Seta o código do produto no campo codProduto do form para ser referenciado de dentro do popup
	document.getElementById("codProduto").value = codProduto;
	
	var popupWindow = abrePop("obsPopup.jsp",450,375,"no");
	return false;
}

/**
 * Edita a opção do item selecionado no carrinho
 */
function editarOpcaoItemCarrinho(){
	
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Não existe nenhum item para editar a observação.");
		return;
	} else if (carrinhoSelect.selectedIndex == -1){
		alert("Selecione o item para editar sua observação.");
		return;
	}
	
	var attributes = carrinhoSelect.options[carrinhoSelect.selectedIndex].attributes;
	var hasOpcoes = attributes["hasopcoes"].value;
	
	//alert(hasOpcoes);
	
	if (hasOpcoes == 'false'){
		alert("O item selecionado não possui opções.");
		return;
	}
	
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;
	
	// Obtém o índice do produto a ser editado (item selecionado no carrinho)
	var indexProduto = carrinhoSelect.selectedIndex;
	
	// Seta a observação no campo obsProduto do form para ser referenciado de dentro do popup
	//document.getElementById("obsProduto").value = obs;
	// Seta o código do produto no campo codProduto do form para ser referenciado de dentro do popup
	document.getElementById("codProduto").value = codProduto;
	
	// Buscar o produto e adicioná-lo na sessão do usuário para editar suas opções
	getItemCarrinhoByIndex(indexProduto);
	
        removeItemCarrinhoAjax();
        
        var fornecedorId =  document.getElementById("fornecedorId").value;

        document.location.href = 'homeFornecedorCardapio!editaItemCarrinho.action?fornecedorId='+fornecedorId;

	//var popupWindow = abrePop("complementosPopup.jsp",450,360,"no");
	return false;
}

/**
 * Busca o produto de índice informado e o adiciona na sessão do usuário. 
 * Este produto será usado na wizard de complementos para edição do mesmo.
 * 
 * @param indexProduto código do produto
 */
function getItemCarrinhoByIndex(indexProduto){
	
	//alert("Buscando item na posição " + indexProduto + " do carrinho de compras.");
	
	var content = { indexProduto: indexProduto};
	
	var bindArgs = {
		url: "/bobs/getItemCarrinhoByIndex.ajax",
		method: "post",
		sync: true,
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			//alert("Produto armazenado na sessão do usuário.");
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
}

/**
 * Busca o produto de código informado fornecido pelo fornecedor de id informado e o 
 * adiciona na sessão do usuário. Este produto será usado na wizard de complementos.
 * 
 * @param codProduto código do produto
 * @param fornecedorId ID do fornecedor do produto
 * @param fromHomeFornecedor flag indicando se o cliente está solitando a edição a partir
 * da home do fornecedor
 */
function editarOpcaoItemDestaqueAjax(codProduto, fornecedorId, fromHomeFornecedor){
	
	//alert("Editar opção do produto " + codProduto + ", fornecedor #"+ fornecedorId + ", fromHomeFornecedor: " + fromHomeFornecedor);
	
	var content = { codProduto: codProduto, fornecedorId: fornecedorId, fromHomeFornecedor: fromHomeFornecedor};
	
	var bindArgs = {
		url: "/bobs/getProduto.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) { 
			//alert("Abrindo popup de complementos...");
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			var popupWindow = abrePop("complementosPopup.jsp",450,360,"no");
			return false;
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
}

/**
 * Remove todas as variáveis contidas no parametro <code>vars</code> da sessão do cliente
 *
 * @param varNames um array contendo todos os nomes das variáveis a serem removidas da sessão do cliente
 */
function removeSessionVariables(varNames){
	
	var content = {varNames: varNames};
	
	//alert("removeSessionVariables");
	
	var bindArgs = {
		url: "/bobs/removeSessionVariables.ajax",
		method: "post",
		//sync: true,
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			if (type == "error"){
				alert("Erro ao remover variáveis de controle da sessão do usuário.");
				return;
			}
			//alert("Variáveis removidas da sessão.");
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
}


/**
 * Atualiza a observação do produto de código informado
 * 
 * @param tab DIV contendo todos os campos necessários para alteração das
 * quantidades dos complementos
 */
function validaTipoComplementoAjax(codProduto, fornecedorId, fromCardapio, fromWizardComplementosPopup, tipoTela){
	
	// Valores default
	var qtdeProduto = 1;
	var obsProduto = "";
	
	//Declarando variáveis 
	var codMassa = $('[id="radioMassa"]:checked').attr('tipoComplemento')+','+$('[id*="radioMassa"]:checked').val();
	var codSabor = $('[id="radioSabor"]:checked').attr('tipoComplemento')+','+$('[id="radioSabor"]:checked').val();
		//Brainweb: substituido temporariamente
        //var codCheckBoxTop = $('[id*="checkboxAdicionais"]:checked').val() || [];

        if (!validaRadioSelecionado('radioMassa', 'Por favor, selecione o Tipo da Massa.')) return;
        if (!validaRadioSelecionado('radioSabor', 'Por favor, selecione o Sabor.')) return;

        var obs1 = document.getElementById('observacao[1]');
        // Brainweb: tipoTela = 2 significa a requisicao ter vindo de pedidoPizzaSabores.jsp, onde são escolhidos 2 sabores para pizza
        if(tipoTela == 2){
            var codSabor2= $('[id="radioSabor2"]:checked').attr('tipoComplemento')+','+$('[id="radioSabor2"]:checked').val();
            if (!validaRadioSelecionado('radioSabor2', 'Por favor, selecione todos os Sabores.')) return;
            //var codCheckBoxTop2 = $('[id*="checkboxAdicionais2"]:checked').val() || [];
            var obs2 = document.getElementById('observacao[2]');
            if(obs1 != null && obs2 != null && (obs1.value != '' || obs2.value != '')) {
            	obsProduto = '1ª metade: ' + obs1.value + ' / 2ª metade: ' + obs2.value;
            }
        }else{
        	if(obs1 != null && obs1.value != ''){
        		obsProduto = obs1.value;
        	}
        }
	
	
	// Brainweb: prepara variavel de adicionais. Solucao temporaria, deve ser substituida por jquery
    var topsAux = document.getElementsByName('checkboxAdicionais');
    var paramTopsAux = '';
    if(topsAux != null && topsAux.length > 0) {
    	for(var i = 0; i < topsAux.length; i++) {
    		if(topsAux[i].checked) {
    			paramTopsAux += topsAux[i].value;
    			paramTopsAux += ',';
    		}
    	}
    	paramTopsAux = paramTopsAux.substring(0, (paramTopsAux.length-1));
    }

    var topsAux2 = document.getElementsByName('checkboxAdicionais2');
    var paramTopsAux2 = '';
    if(topsAux2 != null && topsAux2.length > 0) {
    	for(var i2 = 0; i2 < topsAux2.length; i2++) {
    		if(topsAux2[i2].checked) {
    			paramTopsAux2 += topsAux2[i2].value;
    			paramTopsAux2 += ',';
    		}
    	}
    	paramTopsAux2 = paramTopsAux2.substring(0, (paramTopsAux2.length-1));
    }
    
	// Montar o array de variáveis a serem enviadas na requisição
	var content;
	if(tipoTela == 2){
		content = {
				codProduto: codProduto,
				qtdeProduto: qtdeProduto,
				obsProduto: obsProduto,
				fornecedorId: fornecedorId,
				codMassa: codMassa,
				codSabor: codSabor,
				codSabor2: codSabor2,/*
				codCheckBoxTop: codCheckBoxTop,*/
				codCheckBoxTop: paramTopsAux, /*
				codCheckBoxTop2: codCheckBoxTop2 */
				codCheckBoxTop2: paramTopsAux2
		};
	}else{
		content = {
				codProduto: codProduto,
				qtdeProduto: qtdeProduto,
				obsProduto: obsProduto,
				fornecedorId: fornecedorId,
				codMassa: codMassa,
				codSabor: codSabor,/*
				codCheckBoxTop: codCheckBoxTop,*/
				codCheckBoxTop: paramTopsAux
		};
	}
	
	// Varíavel para conter a mensagem de retorno;
	var msg;
	
	var bindArgs = {
		url: "/phd/validaTipoComplemento.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			var carrinho = document.getElementById("carrinho");
					
			processAdicionaAoCarrinho(type, data, evt, carrinho, fromWizardComplementosPopup, fornecedorId);
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
	
	if (index){
		// Solicitação de adição do item veio da página homeFornecedorCardapio.jsp. Reiniciar cardápio.
		
		// Limpa o campo de quantidade do produto
		document.getElementById("quantidade["+index+"]").value = "1";
		
		// Limpa a área de observação
		document.getElementById("observacao["+index+"]").value = "";
		
		// Esconde a área de observação caso esteja exibida
		document.getElementById("ContentObs"+index).style.display = "none";
		
		// Esconde a área de complementos caso exista e esteja exibida
		if (document.getElementById("ContentOpcoes"+index)){
			// Esconde a área de complementos complementos caso esteja exibida
			document.getElementById("ContentOpcoes"+index).style.display = "none";
			// Reiniciar a wizard de complementos
			reiniciaWizardComplementos(index);
		}
		
		// Esconde o botão "Seu Pedido"
		if (document.getElementById("btnSeuPedido")) document.getElementById("btnSeuPedido").style.display = "block";
	}
        scroll(0, 0);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>validaTipoComplementoAjax</code>
 * retornando uma mensagem de erro caso as quantidades dos tipos de complementos tenham sido informadas
 * erradas.
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * 
 * @return Mensagem indicando sucesso ou falha na operação.
 */
function processAdicionaAoCarrinho(type, data, evt, carrinho, fromWizardComplementos, fornecedorId) {
	//alert("processAdicionaAoCarrinho");
	if (type == "error"){
		alert("Erro encontrado ao adicionar item ao carrinho.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var produtoChildNodes = firstElement.childNodes;
		
	//alert("childNodes: " + produtoChildNodes.length);
	
	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < produtoChildNodes.length; i++) {
		if (dojo.dom.isNode(produtoChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(produtoChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
       			elementNodes[j++] = produtoChildNodes[i];
			}
		}
	}
	
	//alert(elementNodes.length + " elementNodes encontrados");
	
	// Recupera os dados do produto
	var codProduto = dojo.dom.textContent(elementNodes[0]);
	//alert("codProduto: " + codProduto);
	var nomeProduto = dojo.dom.textContent(elementNodes[1]);
	//alert("nomeProduto: " + nomeProduto);
	var qtdeItem = dojo.dom.textContent(elementNodes[2]);
	//alert("qtdeItem: " + qtdeItem);
	var valorUnitario = dojo.dom.textContent(elementNodes[3]);
	//alert("valorUnitario: " + valorUnitario);
	var nomeRestaurante = dojo.dom.textContent(elementNodes[4]);
	//alert("nomeRestaurante: " + nomeRestaurante);
	var valorTotal = dojo.dom.textContent(elementNodes[5]);
	//alert("valorTotal: " + valorTotal);
	var	hasOpcoes = dojo.dom.textContent(elementNodes[6]);
	//alert("hasOpcoes: " + hasOpcoes);
	var	valorPorItem = dojo.dom.textContent(elementNodes[5]);
	//alert("valorItem: " + valorPorItem);
	var	subTotal = dojo.dom.textContent(elementNodes[8]);
	if(elementNodes.length == 10)
		var	taxaEntrega = dojo.dom.textContent(elementNodes[9]);

	//alert("subTotal: " + subTotal);
	//var obs = dojo.dom.textContent(elementNodes[9]);
	//alert("obs: " + obs);
	
	// Se o carrinho não existir, estamos na página de resultados da consulta
	//alert("carrinho: " + carrinho);
	
	if (carrinho){
		// Cria uma nova tag <option> para adicionar ao carrinho
		var novoItem;
		if (fromWizardComplementos){
			novoItem = document.createElement("option");
		} else {
			novoItem = document.createElement("option");
		}
		
		novoItem.text = qtdeItem + " - " + nomeProduto;
		novoItem.setAttribute("value", codProduto);
		novoItem.setAttribute("qtdeitem", qtdeItem);
		novoItem.setAttribute("valorunitario", valorUnitario);
		//novoItem.setAttribute("obs", obs);
		novoItem.setAttribute("nomerestaurante", nomeRestaurante);
		novoItem.setAttribute("hasopcoes", hasOpcoes);
		novoItem.setAttribute("nomeitem", nomeProduto);
		
		if (isInternetExplorerNavigator()){
			carrinho.add(novoItem);
		} else {
			carrinho.appendChild(novoItem);
		}
		
		var valorTotalNode = document.getElementById("valorTotal");
		var valorPorItemNode = document.getElementById("valorPorItem");
		
		
		if (!valorTotalNode){
			valorTotalNode = window.opener.document.getElementById("valorTotal");
		}
		if (!valorPorItemNode){
			valorPorItemNode = window.opener.document.getElementById("valorPorItem");
		}
						
		dojo.dom.textContent(valorTotalNode, valorTotal);
		dojo.dom.textContent(valorPorItemNode, valorPorItem);
				
		//alert(dojo.dom.textContent(valorTotalNode));
		

		if (elementNodes.length == 10){

			// Taxa de entrega foi calculada. Atualizar o carrinho.
			
			var taxaEntregaNode = document.getElementById("taxaEntrega");
			taxaEntregaNode.style.display = '';
			//dojo.dom.textContent(taxaEntregaNode, "R$" + taxaEntrega);
			dojo.dom.textContent(taxaEntregaNode, taxaEntrega);
			//alert(dojo.dom.textContent(taxaEntregaNode));
		}
		
		//alert("novo item adicionado no carrinho");
		
		// Seleciona o último item adicionado
		//carrinho.selectedIndex = carrinho.length - 1;
	} else {
		//alert("Item adicionado com sucesso ao carrinho de compras");
		//alert("Encaminhando para home do fornecedor: " + fornecedorId);
		
		//Encaminhar para home do fornecedor
		window.location.href = "/bobs/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
	}
}

function zeraValores(adicionais){
	if(adicionais != null && adicionais.length > 0) {
		
		for(var i = 0; i < adicionais.length; i++) {
			
			if(adicionais[i].type == 'radio') {
				if(adicionais[i].checked) {
					adicionais[i].checked = false;
				}
			}
			
			if(adicionais[i].type == 'text') {
				if(adicionais[i].value != '' && adicionais[i].value != '0') {
					adicionais[i].value = '';
				}
			}
			
		}
		
	}
}

/*function removeBrindes(adicionais){

	if(adicionais != null && adicionais.length > 0) {
		for(var i = 0; i < adicionais.length; i++) {
			if(adicionais[i].value != '' && adicionais[i].value != '0') {
				adicionais[i].checked = false;
			}
		}
	}
	
}
*/

function zeraValoresComplementos() {
	if(tiposComplementosArray != null && tiposComplementosArray.length > 0) {
		for(var i = 0; i < tiposComplementosArray.length; i++) {
			zeraValores(document.getElementsByName('qtdeComplemento' + tiposComplementosArray[i]));
		}
	}
	
	/*
	zeraValores(document.getElementsByName('qtdeComplemento'));
	removeBrindes(document.getElementsByName('brindeKids'));
	zeraValores(document.getElementsByName('qtdeComplementoBEBIDA'));
	zeraValores(document.getElementsByName('qtdeComplementoCLD'));
	zeraValores(document.getElementsByName('qtdeComplementoSAND'));
	zeraValores(document.getElementsByName('qtdeComplementoAPN'));
	*/
}


/**
 * Adiciona o item de codigo informado ao carrinho por meio de uma requisição AJAX
 * 
 * @param codProduto código do produto a ser adicionado no carrinho
 * @param fornecedorId id do fornecedor
 * @param index índice do item no cardápio
 * @param fromWizardComplementos flag indicando que a inclusão está sendo feita a partir
 * do popup com a wizard de complementos
 */
function adicionaItemCarrinhoAjax(codProduto, fornecedorId, index, fromWizardComplementosPopup){
	// Valores default
	var qtdeProduto = 1;
	var obsProduto = "";
	
	// BOBS
	if(codProduto == null || codProduto == '') {
		alert('Escolha um produto para adicionar ao carrinho');
		return ;
	}
	
	
	//alert("fromWizardComplementosPopup: " + fromWizardComplementosPopup);
	
	if (document.getElementById("observacao")) {
		obsProduto = document.getElementById("observacao").value;
	}
	
	if (index){
		// Solicitação de adição do item veio da página homeFornecedorCardapio.jsp
		var qtdeProdutoInput = document.getElementById("quantidade["+index+"]");
	
		if (qtdeProdutoInput == null || qtdeProdutoInput.value == "" || qtdeProdutoInput.value < 1){
			alert("A quantidade do produto deve ser maior ou igual a um.");
			return;
		}
	
		qtdeProduto = qtdeProdutoInput.value;
		obsProduto = document.getElementById("observacao["+index+"]").value;
	}
	
	
	
	
	// NEW
	var maxQtde;
	var minQtde;
	
	var radiosAux;
	var inputsAux;
	
	var contentAux = {codProduto: codProduto, qtdeProduto: qtdeProduto, obsProduto: obsProduto, fornecedorId: fornecedorId }; 
	
	
	var codeCardapio = document.getElementById('codigoCardapioSelecionado').value;
	
	
	if(tiposComplementosArray != null && tiposComplementosArray.length > 0) {
		
		// SOLUCAO PARA TRIO (combinacao proibida bebida + calda)
		if(codeCardapio != '' && codeCardapio == 'PHP') {
			radiosAux = document.getElementsByName('qtdeComplementoBEBIDA');
			inputsAux = document.getElementsByName('qtdeComplementoCLD');
			if(radiosAux != null) {
				for(var a = 0; a < radiosAux.length; a++) {
					if(radiosAux[a].checked && radiosAux[a].className.indexOf('Milk') == -1) {
						if(inputsAux != null) {
							for(var g = 0; g < inputsAux.length; g++) {
								if(inputsAux[g].value != '' && inputsAux[g].value != '0') {
									alert('Você não pode escolher uma calda para a bebida escolhida.');
									return false;
								}
							}
						}
					}
				}
			}
		}
		
		
		// PARA CADA TIPO DE COMPLEMENTO VALIDAMOS OS COMPLEMENTOS ESCOLHIDOS E SUAS QUANTIDADES
		for(var i = 0; i < tiposComplementosArray.length; i++) {
			//maxQtde = document.getElementById('max' + tiposComplementosArray[i]).value;
			//minQtde = document.getElementById('min' + tiposComplementosArray[i]).value;
			
			// SE O PRODUTO SELECIONADO POSSUI O TIPO DE COMPLEMENTO QUE ESTAMOS VALIDANDO
			if(produtoTipoComplemento[codProduto]) {
				
				var indiceTipoComplemento = null;
				for(var b = 0; b < produtoTipoComplemento[codProduto].length; b++) {
					if(produtoTipoComplemento[codProduto][b] == tiposComplementosArray[i]) {
						indiceTipoComplemento = b;
						break;
					}
				}
				
				if(produtoTipoComplemento[codProduto][indiceTipoComplemento]) {
					if(tipoComplemento[codProduto + produtoTipoComplemento[codProduto][indiceTipoComplemento]]) {
						maxQtde = tipoComplemento[codProduto + produtoTipoComplemento[codProduto][indiceTipoComplemento]].max;
						minQtde = tipoComplemento[codProduto + produtoTipoComplemento[codProduto][indiceTipoComplemento]].min;
					}
				}
			}
			
			var tipoInput = document.getElementsByName('qtdeComplemento' + tiposComplementosArray[i]);
			if(tipoInput != null && tipoInput.length > 0) {
				tipoInput = document.getElementsByName('qtdeComplemento' + tiposComplementosArray[i])[0].type;
			}
			
			// TRATAMENTO PARA RADIOS
			if(parseInt(maxQtde) == 1 && tipoInput == 'radio') {
				var radioCp = 'radio' + tiposComplementosArray[i];
				
				
				var indiceSelecionado = null;
				radiosAux = document.getElementsByName('qtdeComplemento' + tiposComplementosArray[i]);
				
				
				if(parseInt(minQtde) == 0 || parseInt(minQtde) == 1) {
					var ok = false;
					for(var j = 0; j < radiosAux.length; j++) {
						if(radiosAux[j].checked) {
							indiceSelecionado = j;
							ok = true;
							break;
						}
					}
					// TRATAMENTO OBRIGATORIEDADE
					if(!ok && parseInt(minQtde) == 1) {
						alert('Você deve selecionar ao menos 1 item obrigatório');
						return false;
					}
				}
				
				if(indiceSelecionado != null && indiceSelecionado >= 0) {
					contentAux[radioCp] = radiosAux[indiceSelecionado].value;
				}
				
			}
			
			// TRATAMENTO INPUTS DE QUANTIDADE
			if(parseInt(maxQtde) > 1 || tipoInput == 'text') {
				var qtdeCp = 'qtdes' + tiposComplementosArray[i];
				var codigoCp = 'codigos' + tiposComplementosArray[i];
				
				var codigosArray = new Array();
				var quantidadesArray = new Array();
				
				var somaAux = 0;
				
				inputsAux = document.getElementsByName('qtdeComplemento' + tiposComplementosArray[i]);
				if(inputsAux != null && inputsAux.length > 0) {
					for(var k = 0; k < inputsAux.length; k++) {
						if(inputsAux[k].value != '' && inputsAux[k].value != '0') {
							somaAux += parseInt(inputsAux[k].value);
							codigosArray[codigosArray.length] = inputsAux[k].id.replace('qtde_', '');
							quantidadesArray[quantidadesArray.length] = inputsAux[k].value;
						}
					}
					
					
					// TRATAMENTO LIMITE SUPERIOR
					if(somaAux > parseInt(maxQtde)) {
						alert('Você pode escolher no máximo '+maxQtde+' itens deste complemento');
						return false;
					}
					
					// TRATAMENTO LIMITE INFERIOR
					if(somaAux < parseInt(minQtde)) {
						alert('Você deve escolher no mínimo '+minQtde+' itens deste complemento');
						return false;
					}
					
					if(codigosArray.length > 0) {
						contentAux[qtdeCp] = quantidadesArray;
						contentAux[codigoCp] = codigosArray;
					}
				}
				
			}
			
			
		}		
	}
	

	
	
	
	/* ************ COMPLEMENTOS COMUNS **************
	if(document.getElementById('codigoCardapioSelecionado').value != '' 
		&& document.getElementById('codigoCardapioSelecionado').value != 'KID'
			&& document.getElementById('codigoCardapioSelecionado').value != 'PHP') {
		
		/* ******** VARIAVEIS PARA VERIFICACAO DE QUANTIDADES DE COMPLEMENTOS ********* 
		var qtdeMaxComplemento = document.getElementById('qtdeMaxComplemento').value;
		var qtdeMinComplemento = document.getElementById('qtdeMinComplemento').value;
		
		var maxAux = new Number(qtdeMaxComplemento);
		var minAux = new Number(qtdeMinComplemento);
		/* **************************************************************************** 
		
		var inputsAdicionais = document.getElementsByName('qtdeComplemento');
		var codAdicional = new Array();
		var qtdeAdicional = new Array();
		if(inputsAdicionais != null && inputsAdicionais.length > 0) {
			for(var i = 0; i < inputsAdicionais.length; i++) {
				if(inputsAdicionais[i].value != '' && inputsAdicionais[i].value != '0') {
					codAdicional[codAdicional.length] = inputsAdicionais[i].id.replace('qtde_', '');
					qtdeAdicional[qtdeAdicional.length] = inputsAdicionais[i].value;
					
					// Caso os adicionais superem o maximo permitido nao validar
					maxAux = maxAux - parseInt(inputsAdicionais[i].value);
					if(maxAux < 0) {
						alert("A quantidade máxima de "+qtdeMaxComplemento+" adicional(is) foi excedida. Retire os itens necessários para obter quantidade adequada.");
						return false;
					}						
				}
			}
			// Se uma quantidade minima eh exigida mas nenhum complemento foi adicionado nao validar tambem
			if(minAux == 1 && (maxAux == parseInt(qtdeMaxComplemento)) ) {
				alert("Você deve escolher ao menos um adicional!");
				return false;
			}
		}
	}
	 */
	
	
	/* *********** COMPLEMENTOS TRIO **************** 
	if(document.getElementById('codigoCardapioSelecionado').value != '' && document.getElementById('codigoCardapioSelecionado').value == 'PHP') {
		var inputsAdicionaisCalda = document.getElementsByName('qtdeComplementoCLD');
		var inputsAdicionaisBebida = document.getElementsByName('qtdeComplementoBEBIDA');
		var inputsAdicionaisSanduiche = document.getElementsByName('qtdeComplementoSAND');
		var inputsAdicionaisAcompanhamento = document.getElementsByName('qtdeComplementoAPN');
		
		/* ******** VARIAVEIS PARA VERIFICACAO DE QUANTIDADES DE COMPLEMENTOS TRIO ********* 
		var qtdeMaxComplementoCalda = document.getElementById('qtdeMaxComplementoCLD').value;
		var qtdeMinComplementoCalda = document.getElementById('qtdeMinComplementoCLD').value;
		var qtdeMaxComplementoBebida = document.getElementById('qtdeMaxComplementoBEBIDA').value;
		var qtdeMinComplementoBebida = document.getElementById('qtdeMinComplementoBEBIDA').value;
		var qtdeMaxComplementoSanduiche = document.getElementById('qtdeMaxComplementoSAND').value;
		var qtdeMinComplementoSanduiche = document.getElementById('qtdeMinComplementoSAND').value;
		var qtdeMaxComplementoAcomp = document.getElementById('qtdeMaxComplementoAPN').value;
		var qtdeMinComplementoAcomp = document.getElementById('qtdeMinComplementoAPN').value;
		
		var maxAuxCalda = new Number(qtdeMaxComplementoCalda);
		var minAuxCalda = new Number(qtdeMinComplementoCalda);
		var maxAuxBebida = new Number(qtdeMaxComplementoBebida);
		var minAuxBebida = new Number(qtdeMinComplementoBebida);
		var maxAuxSanduiche = new Number(qtdeMaxComplementoSanduiche);
		var minAuxSanduiche = new Number(qtdeMinComplementoSanduiche);
		var maxAuxAcomp = new Number(qtdeMaxComplementoAcomp);
		var minAuxAcomp = new Number(qtdeMinComplementoAcomp);
		/* ******************************************************************************** 
		
		var codAdicionalCalda = new Array();
		var codAdicionalBebida = new Array();
		var codAdicionalSanduiche = new Array();
		var codAdicionalAcompanhamento = new Array();
		
		var qtdeAdicionalCalda = new Array();
		var qtdeAdicionalBebida = new Array();
		var qtdeAdicionalSanduiche = new Array();
		var qtdeAdicionalAcompanhamento = new Array();
		
		
		// CALDA
		if(inputsAdicionaisCalda != null && inputsAdicionaisCalda.length > 0) {
			for(var i = 0; i < inputsAdicionaisCalda.length; i++) {
				if(inputsAdicionaisCalda[i].value != '' && inputsAdicionaisCalda[i].value != '0') {
					codAdicionalCalda[codAdicionalCalda.length] = inputsAdicionaisCalda[i].id.replace('qtde_CLD_', '');
					qtdeAdicionalCalda[qtdeAdicionalCalda.length] = inputsAdicionaisCalda[i].value;
					
					// Caso os adicionais superem o maximo permitido nao validar
					maxAuxCalda = maxAuxCalda - parseInt(inputsAdicionaisCalda[i].value);
					if(maxAuxCalda < 0) {
						alert("A quantidade máxima de "+qtdeMaxComplementoCalda+" calda(s) foi excedida. Retire os itens necessários para obter quantidade adequada.");
						return false;
					}						
				}
			}
			// Se uma quantidade minima eh exigida mas nenhum complemento foi adicionado nao validar tambem
			if(minAuxCalda == 1 && (maxAuxCalda == parseInt(qtdeMaxComplementoCalda)) ) {
				alert("Você deve escolher 1 calda!");
				return false;
			}
		}
		
		// BEBIDA
		if(inputsAdicionaisBebida != null && inputsAdicionaisBebida.length > 0) {
			for(var i = 0; i < inputsAdicionaisBebida.length; i++) {
				if(inputsAdicionaisBebida[i].value != '' && inputsAdicionaisBebida[i].value != '0') {
					codAdicionalBebida[codAdicionalBebida.length] = inputsAdicionaisBebida[i].id.replace('qtde_BEBIDA_', '');
					qtdeAdicionalBebida[qtdeAdicionalBebida.length] = inputsAdicionaisBebida[i].value;
					
					// Caso os adicionais superem o maximo permitido nao validar
					maxAuxBebida = maxAuxBebida - parseInt(inputsAdicionaisBebida[i].value);
					if(maxAuxBebida < 0) {
						alert("A quantidade máxima de "+qtdeMaxComplementoBebida+" bebida(s) foi excedida. Retire os itens necessários para obter quantidade adequada.");
						return false;
					}
				}
			}
			// Se uma quantidade minima eh exigida mas nenhum complemento foi adicionado nao validar tambem
			if(minAuxBebida == 1 && (maxAuxBebida == parseInt(qtdeMaxComplementoBebida)) ) {
				alert("Você deve escolher 1 bebida!");
				return false;
			}
		}
		
		// SANDUICHE
		if(inputsAdicionaisSanduiche != null && inputsAdicionaisSanduiche.length > 0) {
			for(var i = 0; i < inputsAdicionaisSanduiche.length; i++) {
				if(inputsAdicionaisSanduiche[i].value != '' && inputsAdicionaisSanduiche[i].value != '0') {
					codAdicionalSanduiche[codAdicionalSanduiche.length] = inputsAdicionaisSanduiche[i].id.replace('qtde_SAND_', '');
					qtdeAdicionalSanduiche[qtdeAdicionalSanduiche.length] = inputsAdicionaisSanduiche[i].value;
					
					// Caso os adicionais superem o maximo permitido nao validar
					maxAuxSanduiche = maxAuxSanduiche - parseInt(inputsAdicionaisSanduiche[i].value);
					if(maxAuxSanduiche < 0) {
						alert("A quantidade máxima de "+qtdeMaxComplementoSanduiche+" lanche(s) foi excedida. Retire os itens necessários para obter quantidade adequada.");
						return false;
					}
				}
			}
			// Se uma quantidade minima eh exigida mas nenhum complemento foi adicionado nao validar tambem
			if(minAuxSanduiche == 1 && (maxAuxSanduiche == parseInt(qtdeMaxComplementoSanduiche)) ) {
				alert("Você deve escolher 1 lanche!");
				return false;
			}
		}
		
		// ACOMPANHAMENTO
		if(inputsAdicionaisAcompanhamento != null && inputsAdicionaisAcompanhamento.length > 0) {
			for(var i = 0; i < inputsAdicionaisAcompanhamento.length; i++) {
				if(inputsAdicionaisAcompanhamento[i].value != '' && inputsAdicionaisAcompanhamento[i].value != '0') {
					codAdicionalAcompanhamento[codAdicionalAcompanhamento.length] = inputsAdicionaisAcompanhamento[i].id.replace('qtde_APN_', '');
					qtdeAdicionalAcompanhamento[qtdeAdicionalAcompanhamento.length] = inputsAdicionaisAcompanhamento[i].value;
					
					// Caso os adicionais superem o maximo permitido nao validar
					maxAuxAcomp = maxAuxAcomp - parseInt(inputsAdicionaisAcompanhamento[i].value);
					if(maxAuxAcomp < 0) {
						alert("A quantidade máxima de "+qtdeMaxComplementoAcomp+" acompanhamento(s) foi excedida. Retire os itens necessários para obter quantidade adequada.");
						return false;
					}
				}
			}
			// Se uma quantidade minima eh exigida mas nenhum complemento foi adicionado nao validar tambem
			if(minAuxAcomp == 1 && (maxAuxAcomp == parseInt(qtdeMaxComplementoAcomp)) ) {
				alert("Você deve escolher 1 acompanhamento!");
				return false;
			}
		}
	}
	*/
	
	
	/* ********** COMPLEMENTOS TRIKIDS *********** 
	if(document.getElementById('codigoCardapioSelecionado').value != '' && document.getElementById('codigoCardapioSelecionado').value == 'KID') {
		var inputsAdicionaisBebidaKids = document.getElementsByName('qtdeComplementoBEBIDA');
		var inputsAdicionaisBrinde = document.getElementsByName('brindeKids');
		
		var codAdicionalBebidaKids = new Array();
		var codAdicionalBrinde = '';
		
		var qtdeAdicionalBebidaKids = new Array();
		
		// BRINDE
		if(inputsAdicionaisBrinde != null && inputsAdicionaisBrinde.length > 0) {
			for(var i = 0; i < inputsAdicionaisBrinde.length; i++) {
				if(inputsAdicionaisBrinde[i].value != '' && inputsAdicionaisBrinde[i].checked) {
					codAdicionalBrinde = inputsAdicionaisBrinde[i].value;
				}
			}
			if(codAdicionalBrinde == '') {
				alert('Escolha um brinde.');
				return false;
			}
		}
		
		// BEBIDA
		var contBebida = 0;
		if(inputsAdicionaisBebidaKids != null && inputsAdicionaisBebidaKids.length > 0) {
			for(var i = 0; i < inputsAdicionaisBebidaKids.length; i++) {
				if(inputsAdicionaisBebidaKids[i].value != '' && inputsAdicionaisBebidaKids[i].value != '0') {
					codAdicionalBebidaKids[codAdicionalBebidaKids.length] = inputsAdicionaisBebidaKids[i].id.replace('qtde_BEBIDA_', '');
					qtdeAdicionalBebidaKids[qtdeAdicionalBebidaKids.length] = inputsAdicionaisBebidaKids[i].value;
					contBebida += parseInt(inputsAdicionaisBebidaKids[i].value);
				}
			}
			if(contBebida == 0 || contBebida > 1) {
				if(contBebida == 0) alert('Você deve escolher 1 bebida.');
				else alert('Você deve escolher somente 1 bebida.');
				return false;
			}
		}
		
	}
	*/
	
	
	var categ = document.getElementById('qtdeProdutosCategoria').value;
	if(categ != '' && categ != '1') {
		document.getElementById('prod_' + codProduto).className = document.getElementById('prod_' + codProduto).className.replace(' selected', '');
		document.getElementById('radioMassa' + codProduto).checked = 'false';
	}
	
	
	var content = contentAux;
	
	
	/*
	if(document.getElementById('codigoCardapioSelecionado').value != '' && document.getElementById('codigoCardapioSelecionado').value == 'PHP') {
		content = contentAux;
		
		/*content = {codProduto: codProduto, qtdeProduto: qtdeProduto, obsProduto: obsProduto, fornecedorId: fornecedorId, 
				codAdicionalCalda: codAdicionalCalda, qtdeAdicionalCalda: qtdeAdicionalCalda,
				codAdicionalBebida: codAdicionalBebida, qtdeAdicionalBebida: qtdeAdicionalBebida,
				codAdicionalSanduiche: codAdicionalSanduiche, qtdeAdicionalSanduiche: qtdeAdicionalSanduiche,
				codAdicionalAcompanhamento: codAdicionalAcompanhamento, qtdeAdicionalAcompanhamento: qtdeAdicionalAcompanhamento };  
	} else if(document.getElementById('codigoCardapioSelecionado').value != '' && document.getElementById('codigoCardapioSelecionado').value == 'KID') { 
		content = {codProduto: codProduto, qtdeProduto: qtdeProduto, obsProduto: obsProduto, fornecedorId: fornecedorId, 
				codAdicionalBebidaKids: codAdicionalBebidaKids, qtdeAdicionalBebidaKids: qtdeAdicionalBebidaKids,
				codAdicionalBrinde: codAdicionalBrinde };
	} else {
		content = {codProduto: codProduto, qtdeProduto: qtdeProduto, obsProduto: obsProduto, fornecedorId: fornecedorId, 
			codAdicional: codAdicional, qtdeAdicional: qtdeAdicional};
	}
	
	content = contentAux;
	*/
	
	zeraValoresComplementos();
	var bindArgs = {
		url: "/bobs/adicionaItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			var carrinho;
			
			if (fromWizardComplementosPopup){
				carrinho = window.opener.document.getElementById("carrinho");
				//alert("carrinho recuperado do window.opener: " + carrinho);
				// Fecha o popup com a wizard de complementos
				window.close();
			} else {
				carrinho = document.getElementById("carrinho");
			}
			processAdicionaItemCarrinhoResponse(type, data, evt, carrinho, fromWizardComplementosPopup, fornecedorId);
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
	
	if (index){
		// Solicitação de adição do item veio da página homeFornecedorCardapio.jsp. Reiniciar cardápio.
		
		// Limpa o campo de quantidade do produto
		document.getElementById("quantidade["+index+"]").value = "1";
		
		// Limpa a área de observação
		document.getElementById("observacao["+index+"]").value = "";
		
		// Esconde a área de observação caso esteja exibida
		document.getElementById("ContentObs"+index).style.display = "none";
		
		// Esconde a área de complementos caso exista e esteja exibida
		if (document.getElementById("ContentOpcoes"+index)){
			// Esconde a área de complementos complementos caso esteja exibida
			document.getElementById("ContentOpcoes"+index).style.display = "none";
			// Reiniciar a wizard de complementos
			reiniciaWizardComplementos(index);
		}
		
		// Esconde o botão "Seu Pedido"
		if (document.getElementById("btnSeuPedido")) document.getElementById("btnSeuPedido").style.display = "block";
	}
        scroll(0, 0);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>adicionaItemCarrinhoAjax</code>
 * adicionando o item solicitado no carrinho de compras
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * @param carrinho a referência para o carrinho onde o item será adicionado
 */
function processAdicionaItemCarrinhoResponse(type, data, evt, carrinho, fromWizardComplementos, fornecedorId) {
	//alert("processAdicionaItemCarrinhoResponse");
	if (type == "error"){
		alert("Erro encontrado ao adicionar item ao carrinho.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
	var firstElement = dojo.dom.firstElement(data);
	
	var produtoChildNodes = firstElement.childNodes;
		
	//alert("childNodes: " + produtoChildNodes.length);
	
	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < produtoChildNodes.length; i++) {
		if (dojo.dom.isNode(produtoChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(produtoChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
       			elementNodes[j++] = produtoChildNodes[i];
			}
		}
	}
	
	//alert(elementNodes.length + " elementNodes encontrados");
	
	// Recupera os dados do produto
	var codProduto = dojo.dom.textContent(elementNodes[0]);
	//alert("codProduto: " + codProduto);
	var nomeProduto = dojo.dom.textContent(elementNodes[1]);
	//alert("nomeProduto: " + nomeProduto);
	var qtdeItem = dojo.dom.textContent(elementNodes[2]);
	//alert("qtdeItem: " + qtdeItem);
	var valorUnitario = dojo.dom.textContent(elementNodes[3]);
	//alert("valorUnitario: " + valorUnitario);
	var nomeRestaurante = dojo.dom.textContent(elementNodes[4]);
	//alert("nomeRestaurante: " + nomeRestaurante);
	var valorTotal = dojo.dom.textContent(elementNodes[5]);
	//alert("valorTotal: " + valorTotal);
	var	hasOpcoes = dojo.dom.textContent(elementNodes[6]);
	//alert("hasOpcoes: " + hasOpcoes);
	var	valorPorItem = dojo.dom.textContent(elementNodes[7]);
	if (elementNodes.length == 10)	
		var taxaEntrega = dojo.dom.textContent(elementNodes[9]);

	//alert("valorItem: " + valorItem);
	//var	subTotal = dojo.dom.textContent(elementNodes[8]);
	//alert("subTotal: " + subTotal);
	//var obs = dojo.dom.textContent(elementNodes[9]);
	//alert("obs: " + obs);
	
	// Se o carrinho não existir, estamos na página de resultados da consulta
	//alert("carrinho: " + carrinho);
	if (carrinho){
		// Cria uma nova tag <option> para adicionar ao carrinho
		var novoItem;
		if (fromWizardComplementos){
			novoItem = window.opener.document.createElement("option");
		} else {
			novoItem = document.createElement("option");
		}
		
		novoItem.text = qtdeItem + " - " + nomeProduto;
		novoItem.setAttribute("value", codProduto);
		novoItem.setAttribute("qtdeitem", qtdeItem);
		novoItem.setAttribute("valorunitario", valorUnitario);
		//novoItem.setAttribute("obs", obs);
		novoItem.setAttribute("nomerestaurante", nomeRestaurante);
		novoItem.setAttribute("hasopcoes", hasOpcoes);
		novoItem.setAttribute("nomeitem", nomeProduto);
		
		if (isInternetExplorerNavigator()){
			carrinho.add(novoItem);
		} else {
			carrinho.appendChild(novoItem);
		}
		
		var valorTotalNode = document.getElementById("valorTotal");
		var valorPorItemNode = document.getElementById("valorPorItem");
		//var subTotalNode = document.getElementById("subTotal");
		
		if (!valorTotalNode){
			valorTotalNode = window.opener.document.getElementById("valorTotal");
		}
		if (!valorPorItemNode){
			valorPorItemNode = window.opener.document.getElementById("valorPorItem");
		}
		//if (!subTotalNode){
		//	subTotalNode = window.opener.document.getElementById("subTotal");
		//}
		
				
		dojo.dom.textContent(valorTotalNode, valorTotal);
		dojo.dom.textContent(valorPorItemNode, valorPorItem);
		//dojo.dom.textContent(subTotalNode, subTotal);
		
		//alert(dojo.dom.textContent(valorTotalNode));
		
		//alert(dojo.dom.textContent(valorTotalNode));
		if (elementNodes.length == 10){
			var taxaEntregaNode = document.getElementById("taxaEntrega"); 
			dojo.dom.textContent(taxaEntregaNode, taxaEntrega);
			taxaEntregaNode.style.display = '';
			//alert(dojo.dom.textContent(taxaEntregaNode));
		}

		
		//alert("novo item adicionado no carrinho");
		
		// Seleciona o último item adicionado
		//carrinho.selectedIndex = carrinho.length - 1;
	} else {
		//alert("Item adicionado com sucesso ao carrinho de compras");
		//alert("Encaminhando para home do fornecedor: " + fornecedorId);
		
		//Encaminhar para home do fornecedor
		window.location.href = "/diskcook/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
	}
}

/**
 * Atualiza a observação do produto de código informado
 * 
 * @param codProduto código do produto
 */
function atualizaObsItemCarrinhoAjax(codProduto){
	
	var obsTextArea = document.getElementById("observacao[]");
	
	// Recupera a posição do item no carrinho de compras
	var indiceProduto = window.opener.document.getElementById("carrinho").selectedIndex;
	
	var content = { codProduto: codProduto, obsProduto: obsTextArea.value, indiceProduto: indiceProduto};
	
	var bindArgs = {
		url: "/bobs/atualizaObsItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) { 
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			// Fecha o popup de observacao
			if (!window.closed){
				// Seta a nova observação no atributo "obs" do item do carrinho
				var carrinhoSelect = window.opener.document.getElementById("carrinho");
				//alert("obs antiga: " + carrinhoSelect.options[carrinhoSelect.selectedIndex].attributes["obs"].value);
				carrinhoSelect.options[carrinhoSelect.selectedIndex].setAttribute("obs", obsTextArea.value);
				//alert("obs nova: " + carrinhoSelect.options[carrinhoSelect.selectedIndex].attributes["obs"].value);
				window.close();
			}
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
}

/**
 * Atualiza a quantidade do produto de código informado
 * 
 * @param codProduto código do produto
 * @param qtdeProduto nova quantidade do produto
 * @param indiceProduto posição do produto no carrinho de compras
 */
function atualizaQtdeItemCarrinhoAjax(codProduto, qtdeProduto, indiceProduto){
	
	var content = { codProduto: codProduto, qtdeProduto: qtdeProduto, indiceProduto: indiceProduto};
	
	var bindArgs = {
		url: "/bobs/atualizaQtdeItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			processAtualizaQtdeItemCarrinhoResponse(type, data, evt, document.getElementById("carrinho"))
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
}


/**
 * Atualiza a quantidade do produto de acordo com o valor digitado pelo cliente
 * 
 * @param campo campo contendo a quantidade do produto
 */
function atualizaQtdeItemDigitadaCarrinhoAjax(campo){
	
	if (!isNumber(campo.value)){
		alert("A quantidade deve ser um número maior ou igual a 1 (um).");
		// Reinicia o valor do campo
		campo.value = "1";
		return;
	}
	
	var carrinhoSelect = document.getElementById("carrinho");
	
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;
	var indiceProduto = carrinhoSelect.selectedIndex;
	
	//alert("Atualizando a quantidade do item para " + campo.value);
	atualizaQtdeItemCarrinhoAjax(codProduto, campo.value, indiceProduto);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>atualizaQtdeItemCarrinhoAjax</code>
 * atualizando a quantidade do item solicitado e o valor total do pedido
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * @param carrinho a referência para o carrinho onde o item será adicionado
 */
function processAtualizaQtdeItemCarrinhoResponse(type, data, evt, carrinho) {
	
	if (type == "error"){
		alert("Erro encontrado ao atualizar quantidade do item.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
	
	var resultChildNodes = dojo.dom.firstElement(data).childNodes;
	
	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			elementNodes[j++] = resultChildNodes[i];
		}
	}
	
	// Recupera os dados do resultado
	var qtdeProduto = dojo.dom.textContent(elementNodes[0]);
	//alert(qtdeProduto);
	var valorTotal = dojo.dom.textContent(elementNodes[1]);
	//alert(valorTotal);
	
	// Seta a nova quantidade no atributo "qtdeitem" do item do carrinho
	//alert("qtde antiga: " + carrinho.options[carrinho.selectedIndex].attributes["qtdeitem"].value);
	carrinho.options[carrinho.selectedIndex].setAttribute("qtdeitem", qtdeProduto);
	
	var nomeItem = carrinho.options[carrinho.selectedIndex].attributes["nomeitem"].value;
	//alert("nomeItem: " + nomeItem);
	carrinho.options[carrinho.selectedIndex].text = qtdeProduto + " - " + nomeItem;
	
	//carrinho.options[carrinho.selectedIndex].setText(qtdeProduto);
	//alert("qtde nova: " + carrinho.options[carrinho.selectedIndex].attributes["qtdeitem"].value);
	
	var valorTotalNode = document.getElementById("valorTotal");
	//dojo.dom.textContent(valorTotalNode, "R$" + valorTotal);
	dojo.dom.textContent(valorTotalNode, valorTotal);
	
	//alert(dojo.dom.textContent(valorTotalNode));
	
	//alert("qtdeItem atualizada");
	
	// Seleciona o último item adicionado
	//carrinho.selectedIndex = carrinho.length - 1;
}

/**
 * Remove o item de código informado do carrinho
 * 
 * @param codProduto código do produto
 */
function removeItemCarrinhoAjax(){
	 
	// Brainweb: remoção de campanha é feita no proprio servlet de remocao de item do carrinho
	//removeCampanha();
	
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Não existe nenhum item a ser excluído.");
		return;
	} else if (carrinhoSelect.selectedIndex == -1){
		alert("Selecione o item a ser excluído.");
		return;
	}
	
	var codProduto = carrinhoSelect.options[carrinhoSelect.selectedIndex].value;
	var indexProduto = carrinhoSelect.selectedIndex;
	
	var content = { codProduto: codProduto, indexProduto: indexProduto};
	
	var bindArgs = {
		url: "/bobs/removeItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			processRemoveItemCarrinhoResponse(type, data, evt, document.getElementById("carrinho"), codProduto)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>removeItemCarrinhoAjax</code>
 * removendo o item de código informado do carrinho de compras
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * @param carrinho a referência para o carrinho onde o item será removido
 * @param codProduto código do produto a ser removido do carrinho
 */
function processRemoveItemCarrinhoResponse(type, data, evt, carrinho, codProduto) {
	if (type == "error"){
		alert("Erro encontrado ao remover item do carrinho.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
	
	var firstElement = dojo.dom.firstElement(data);
			
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
       			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	// Recupera os dados do resultado
	var valorTotal = dojo.dom.textContent(elementNodes[0]);
	var valorPorItem = dojo.dom.textContent(elementNodes[1]);
	//var subTotal = dojo.dom.textContent(elementNodes[2]);
	
	if (elementNodes.length == 4){
		var taxaEntrega = dojo.dom.textContent(elementNodes[3]);
	}
	
	//alert("valorTotal " + valorTotal);
	//alert("valorPorItem " + valorPorItem);
	//alert("subTotal " + subTotal);
	
	
	// Remove o item do carrinho
	dojo.dom.removeNode(carrinho.options[carrinho.selectedIndex]);
	
	//alert("Produto " + codProduto + " removido do carrinho.");
	
	if (carrinho.length == 0){
		// Reiniciar a taxa de entrega, pois não existem mais produtos no carrinho
		var taxaEntregaNode = document.getElementById("taxaEntrega");
		dojo.dom.textContent(taxaEntregaNode, "R$ 0,0");

		// Esconde o botão "Seu Pedido"
		//document.getElementById("btnSeuPedido").style.display = "none";
	}
	
	var valorTotalNode = document.getElementById("valorTotal");
	var valorPorItemNode = document.getElementById("valorPorItem");
	//var subTotalNode = document.getElementById("subTotal");

	dojo.dom.textContent(valorTotalNode, valorTotal);
	dojo.dom.textContent(valorPorItemNode, valorPorItem);
	//dojo.dom.textContent(subTotalNode, subTotal);
	
	if (!dojo.string.isBlank(taxaEntrega)){
		// Atualizar a taxa de entrega
		var taxaEntregaNode = document.getElementById("taxaEntrega");
		dojo.dom.textContent(taxaEntregaNode, taxaEntrega);
	}
	
	// Limpa o campo quantidade do carrinho
	//document.getElementById("qtdeItem").value = "";
	
	// Limpa o valor unitário do item
	//document.getElementById("valorUnitario").innerHTML = "";
	
	// Brainweb: para campanha de taxa entrega zero não preciso reaplicar a campanha, senão
	//			 duplicará o item de taxa entrega zero no carrinho.
	//reaplicarCampanha();
}


/**
 * Verfica se o pedido está ok. Se sim, o método <code>confirmaPedidoAjax</code> é invocado
 * para realizar a confirmação do pedido.
 */
function verificaPedidoAjax(closePopup){
	
	//Declarando variáveis
	var comboRestauranteTogo = "";
	var radioRetirarLoja = $('[id*="radioEntrega"]:checked').val();
	var carrinhoSelect = document.getElementById("carrinho");
	
	if(radioRetirarLoja == "togo"){
		comboRestauranteTogo = $('#selectFornecedores').val();
	}
	
	if (carrinhoSelect.length == 0) {
		alert("Selecione algum produto antes de finalizar seu pedido.");
		return;
	}
	
	// Montar o array de variáveis a serem enviadas na requisição
	var content = {radioRetirarLoja: radioRetirarLoja, comboRestauranteTogo: comboRestauranteTogo};

	// Exibe o div para indicar processanento
	document.getElementById("processing").style.display = "block";
	
	var bindArgs = {
		url: "/bobs/verificaPedido.ajax",
		method: "get",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			//checkAjaxErrors(type, data, evt);
			
			processVerificaPedidoResponse(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
	
	if (closePopup){
		//alert("closePopup");
		window.close();
	}
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>verificaPedidoAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processVerificaPedidoResponse(type, data, evt) {
	if (type == "error"){
		alert("Erro encontrado ao verificar o pedido.");
		return;
	}
	
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	if ("redirectTo" == firstElement.tagName){
		// Esconde o div para indicar processanento
		document.getElementById("processing").style.display = "none";
		// Mensagem indicando que o cliente não estava logado e que devemos redirecionar para página informada.
		window.location.href = "cliente!goToCadastro.action";
	}
	
	var resultChildNodes = firstElement.childNodes;
	//alert("processVerificaPedidoResponse");

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			elementNodes[j++] = resultChildNodes[i];
		}
	}
	
	var msgRetorno = "";

	// Recupera mensagem de erro sobre o valor mínimo do pedido
	var msgErroValorMinimo = dojo.dom.textContent(elementNodes[1]);
	
	if (!dojo.string.isBlank(msgErroValorMinimo)){
		msgRetorno = msgErroValorMinimo;
	}
	
	// Recupera mensagem de erro contendo os restaurantes indisponiveis
	var msgErroRestaurantesIndisponiveis;
	if(elementNodes[3] != null && elementNodes[3] != 'undefined') {
		msgErroRestaurantesIndisponiveis = dojo.dom.textContent(elementNodes[3]);
	}
	
	// Flag indicando se o popup de agendamento deve ser mostrado ou não
	// Brainweb: Nao havera opcao de agendamento para pizza hut
	//var showPopupAgendamento = false;
	
	if (!dojo.string.isBlank(msgErroRestaurantesIndisponiveis)){
		msgRetorno += msgErroRestaurantesIndisponiveis;
		//showPopupAgendamento = true;
	}
	
	if (!dojo.string.isBlank(msgRetorno)){
		// Esconde o div para indicar processanento
		document.getElementById("processing").style.display = "none";
		/*
		if (showPopupAgendamento){
			if(doConfirm(msgRetorno + "\nDeseja agendar o pedido?")) {
				abrePop("agendamentoPopup.jsp",370,440,"no");
			}
		} else {
		*/
			alert(msgRetorno);	
		//}
		
		return;
	}
	
	//alert("Chamando método confirmaPedido()...");
	//confirmaPedido();
	//window.location.href = "/bobs/confirmacaoPedido.jsp";
	//alert("encaminhando para /bobs/confirmaPedido.action");
	window.location.href = "/bobs/confirmaPedido.action";
}

/**
 * Abre o popup para agendamento do pedido
 */
function abrePopupAgendamento(){
	var window = abrePop("agendamentoPopup.jsp",370,435,"no");
	return false;
}

/**
 * Realiza a confirmação do pedido encaminhando o usuário para página de confirmação do pedido.
 */
function confirmaPedido(){
	window.location.href = "/bobs/confirmaPedido.action";
}

/**
 * Recalcula a taxa e o tempo de entrega do pedido quando o cliente escolher um novo endereço de entrega.
 * Os valores de sub total e valor total serão atualizados caso a taxa de entrega sofra alteração.
 * 
 * @param novoEnderecoEntregaId ID do endereço de entrega escolhido
 */
function recalculaTaxaEntregaTempoEntregaAjax(novoEnderecoEntregaId, fromEnderecoCadastro){
	
	// Exibe o div para indicar processanento
	escondeMostraElemento("processing");
	
	// Desmarca o radio do endereço de entrega do cadastro se o evento de click não tiver sido desparado por ele
	if (!fromEnderecoCadastro){
		document.getElementById("enderecoEntregaCadastroId").checked = "";
	}
	
	var content = { novoEnderecoEntregaId: novoEnderecoEntregaId};
	
	var bindArgs = {
		url: "/bobs/recalculaTaxaEntregaTempoEntrega.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			processRecalculaTaxaEntregaTempoEntrega(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>recalculaTaxaEntregaTempoEntregaAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processRecalculaTaxaEntregaTempoEntrega(type, data, evt){
	
	if (type == "error"){
		alert("Erro encontrado ao recalcular a taxa e o tempo de entrega.");
		return;
	}

	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	if ("redirectTo" == firstElement.tagName){
		// Esconde o div para indicar processanento
		document.getElementById("processing").style.display = "none";
		// Mensagem indicando que o cliente não estava logado e que devemos redirecionar para página informada.
		window.location.href = "cliente!goToCadastro.action";
	}
	
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			elementNodes[j++] = resultChildNodes[i];
		}
	}
	
	//alert("elementNodes.length: " + elementNodes.length);

	// Recupera a nova taxa de entrega
	var newTaxaEntrega = dojo.dom.textContent(elementNodes[0]);
	//alert("newTaxaEntrega: " + newTaxaEntrega);
	// Recupera o novo tempo de entrega
	var newTempoEntrega = dojo.dom.textContent(elementNodes[1]);
	//alert("newTempoEntrega: " + newTempoEntrega);
	// Recupera o novo sub total
	var newSubTotal = dojo.dom.textContent(elementNodes[2]);
	//alert("newSubTotal: " + newSubTotal);
	// Recupera o novo valor total
	var newValorTotal = dojo.dom.textContent(elementNodes[3]);
	//alert("newValorTotal: " + newValorTotal);
	
	// Atualiza a taxa de entrega
	var taxaEntregaNode = document.getElementById("taxaEntrega");
	//alert("taxaEntregaNode",taxaEntregaNode);
	dojo.dom.textContent(taxaEntregaNode, newTaxaEntrega);
	//alert("taxa de entrega atualizada.");
	
	// Atualiza o tempo de entrega
	var tempoEntregaNode = document.getElementById("tempoEntrega");
	//alert("tempoEntregaNode", tempoEntregaNode);
	
	if (tempoEntregaNode){
		// Se o node tempoEntrega existir, setar o novo valor (Ele não existirá quando o pedido tiver sido agendado)
		dojo.dom.textContent(tempoEntregaNode, newTempoEntrega);
		//alert("tempo de entrega atualizado");
	}
	
	// Atualiza o sub total
	var subTotalNode = document.getElementById("subTotal");
	dojo.dom.textContent(subTotalNode, newSubTotal);
	// Atualiza o valor total
	var valorTotalNode = document.getElementById("valorTotal");
	dojo.dom.textContent(valorTotalNode, newValorTotal);
	
	var valorTotalFloat = newValorTotal.substr(newValorTotal.lastIndexOf("R$")+2).replace(",",".");
	
	// Atualiza o campo escondido contendo o valor total original do pedido
	document.getElementById("valorTotalOriginal").value = valorTotalFloat;
	
	// Recupera os dados da campanha
	var campanhaNodeList = elementNodes[4].childNodes;
	
	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var campanhaNodes = new Array();
	var x = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var y = 0; y < campanhaNodeList.length; y++) {
		if (dojo.dom.isNode(campanhaNodeList[y])){
			campanhaNodes[x++] = campanhaNodeList[y];
		}
	}
	
	//alert("campanhaNodes.length: " + campanhaNodes.length);
	
	// Aplicar os descontos da campanha
	if (campanhaNodes.length == 3){
		atualizaInfoCampanha(campanhaNodes);
	}
	
	// Esconde o div para indicar processanento
	escondeMostraElemento("processing");

}

/**
 * Função que monta a data de início e fim para realizar a consulta ao histórico de pedidos
 * do cliente
 */
function setDataInicialFinal(){

	var selectDiaInicial = document.getElementById("diaInicial");
	var diaInicial = selectDiaInicial.options[selectDiaInicial.selectedIndex].value;

	var selectMesInicial = document.getElementById("mesInicial");
	var mesInicial = selectMesInicial.options[selectMesInicial.selectedIndex].value;

	var selectAnoInicial = document.getElementById("anoInicial");
	var anoInicial = selectAnoInicial.options[selectAnoInicial.selectedIndex].value;
	
	var dataInicial = diaInicial + "/" + mesInicial + "/" + anoInicial;
	
	//alert("dataInicial: " + dataInicial);
	
	document.forms["filtroHistoricoPedidosForm"].dataInicial.value = dataInicial;

	var selectDiaFinal = document.getElementById("diaFinal");
	var diaFinal = selectDiaFinal.options[selectDiaFinal.selectedIndex].value;

	var selectMesFinal = document.getElementById("mesFinal");
	var mesFinal = selectMesFinal.options[selectMesFinal.selectedIndex].value;

	var selectAnoFinal = document.getElementById("anoFinal");
	var anoFinal = selectAnoFinal.options[selectAnoFinal.selectedIndex].value;
	
	var dataFinal = diaFinal + "/" + mesFinal + "/" + anoFinal;
	
	//alert("dataFinal: " + dataFinal);
	
	document.forms["filtroHistoricoPedidosForm"].dataFinal.value = dataFinal;
}

/**
 * Esta função esconde ou mostra o elemento de id informado
 * 
 * @param id id do elemento a ser escondido/mostrado
 */
function escondeMostraElemento(id){
	var element = document.getElementById(id);
	
	if (element){
		if (element.style.display == '' || element.style.display == 'block'){
        	element.style.display = 'none';
	    }else{
	        element.style.display = 'block';
	    }
	}
}

/**
 * Esta função esconde ou mostra a área de endereços adicionais, caso ela exista. 
 * Caso contrário, mostra a área para cadastro de um novo endereço.
 * 
 * @param enderecosAdicionaisId id da região que contém os endereços adicionais do cliente
 * @param enderecosAdicionaisId id da região que contém o formulário para cadastro de um novo endereço.
 */
function escondeMostraEnderecosAdicionais(enderecosAdicionaisId, novoEnderecoId){
	
	var enderecosAdicionais = document.getElementById(enderecosAdicionaisId);
	var novoEndereco = document.getElementById(novoEnderecoId);
	
	if (enderecosAdicionais){
		//alert('possui endereços adicionais...')
		// Se existirem endereços adicionais, eles serão exibidos
		escondeMostraElemento(enderecosAdicionaisId);
		
		// Exibe ou esconde o radio button ao lado do endereço de cadastro
		escondeMostraElemento("enderecoEntregaCadastroId");
	} else {
		//alert('novo endereço...')
		// Exibir apenas a área para o cadastro de um novo endereço.
		escondeMostraElemento(novoEnderecoId);
	}
}

/**
 * Desmarca todos os radio button associados com os endereços adicionais de entrega
 */
function desmarcaEnderecosAdicionais(){
	var enderecosAdicionais = document.getElementsByName("novoEnderecoEntregaId");
	
	for(var i = 0; i < enderecosAdicionais.length; i++) {
		enderecosAdicionais[i].checked = "";
	}
}

/**
 * Submete o form para finalização do pedido
 */
function finalizaPedido(){
	escondeMostraElemento("processingFinalizaPedido");
	var pedidoForm = document.forms["finalizaPedidoForm"];
	
	// Recupera o valor do novo endereco de entrega que foi selecionado.
	var enderecosAdicionais = document.getElementsByName("novoEnderecoEntregaId");
	var novoEnderecoEntregaId;
	
	for(var i = 0; i < enderecosAdicionais.length; i++) {
		if (enderecosAdicionais[i].checked){
			novoEnderecoEntregaId = enderecosAdicionais[i].value;
			pedidoForm.novoEnderecoEntrega.value = novoEnderecoEntregaId;
			//alert("novoEnderecoEntregaId: " + pedidoForm.novoEnderecoEntrega.value);
		}
	}
	
	pedidoForm.submit();
	// Validar o Cartão de Crédito
	//var nroCartaoCredito = document.getElementById("numeroCartaoCredito").value;
	//var codCartaoCredito = document.getElementById("codigoCartaoCredito").options[document.getElementById("codigoCartaoCredito").selectedIndex].value;
	
	//alert("nroCartaoCredito: " + nroCartaoCredito);
	//alert("codCartaoCredito: " + codCartaoCredito);
	
	//if (!isValidCreditCardNumber(nroCartaoCredito, codCartaoCredito)){
		//alert("Número do cartão de crédito inválido.");
	//}
}

function isValidCreditCardNumber(cardNumber, cardType){
    var isValid = false;
    var ccCheckRegExp = /[^\d ]/;
    isValid = !ccCheckRegExp.test(cardNumber);
    if (isValid){
        var cardNumbersOnly = cardNumber.replace(/ /g,"");
        var cardNumberLength = cardNumbersOnly.length;
        var lengthIsValid = false;
        var prefixIsValid = false;
        var prefixRegExp;
    switch(cardType){
        case "MC":
            lengthIsValid = (cardNumberLength == 16);
            prefixRegExp = /^5[1-5]/;
        break;
        case "VIS":
            lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
            prefixRegExp = /^4/;
        break;
        case "AMEX":
            lengthIsValid = (cardNumberLength == 15);
            prefixRegExp = /^3(4|7)/;
        break;
        default:
            prefixRegExp = /^$/;
            alert("Tipo de cartão de crédito não encontrado.");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
    }
    if (isValid){
        var numberProduct;
        var numberProductDigitIndex;
        var checkSumTotal = 0;
        for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--){
            checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
            digitCounter--;
            numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
            for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++){
                checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
            }
        }
        isValid = (checkSumTotal % 10 == 0);
    }

    return isValid;
}

/**
 * Realiza o agendamento do pedido. Caso a data de agendamento solicitada seja inválida 
 * uma mensagem de erro é retornada e exibida ao usuário.
 */
function agendaPedidoAjax(){
	escondeMostraElemento("processing");
	
	var dataAgendamento = document.getElementById("dataAgendamento").value;
	var horaAgendamento = document.getElementById("horaAgendamento").value;
	var minutoAgendamento = document.getElementById("minutoAgendamento").value;
	var agendamento = horaAgendamento + ":" + minutoAgendamento;
	var periodos = document.getElementsByName("periodos");
	var periodo = null;
	
	for(var i = 0; i < periodos.length; i ++) {
		if (periodos[i].checked){
			periodo = periodos[i].value;
		}
	}
	
	if (periodo == null){
		alert("O período AM/PM deve ser informado.");
		return;
	}
	
	agendamento += " " + periodo;
	
	var msgErro = "";
	
	if (agendamento.trim() == ":"){
		msgErro = "A hora de agendamento deve ser informada.\n";
	}
	if (dataAgendamento.trim() == ""){
		msgErro += "A data de agendamento deve ser informada.\n";
	}
	
	if (msgErro != ""){
		alert(msgErro);
		return;
	}
	
	if (!isValidTime(agendamento)){
		alert("A hora de agendamento não é válida. (hh:mm AM|PM)");
		return
	}
	
	var today = new Date();
	var dataAgendamentoArray = dataAgendamento.split("/");
	var horaAgendamentoArray = agendamento.split(":");
	
	var agendamentoDate = new Date();
	agendamentoDate.setDate(dataAgendamentoArray[0]);
	agendamentoDate.setMonth(dataAgendamentoArray[1]-1);
	
	// cutoffYear is the cut-off for assigning "19" or "20" as century.  Any
	// two-digit year >= cutoffYear will get a century of "19", and everything
	// else gets a century of "20".
	var cutoffYear = 50;
	
	var twoDigitsYear;
	if (dataAgendamentoArray[2].length > 2){
		twoDigitsYear = parseInt(dataAgendamentoArray[2].substr(dataAgendamentoArray[2].length - 2));
	} else {
		twoDigitsYear = parseInt(dataAgendamentoArray[2].toString());
	}
	
	// Two digit year.
	if (twoDigitsYear >= cutoffYear) {
		twoDigitsYear+=1900;
	} else {
		twoDigitsYear+=2000;
	}
	
	agendamentoDate.setYear(twoDigitsYear);
	agendamentoDate.setHours(horaAgendamentoArray[0]);
	agendamentoDate.setMinutes(horaAgendamentoArray[1]);
	
	//alert("today: " + today + "\ndataAgendamento: " + agendamentoDate);
	if (agendamentoDate < today){
		alert("A data de agendamento não pode ser uma data passada.");
		return;
	}
	
	if (!isValidDate(dataAgendamento)){
		alert("A data de agendamento é inválida.");
		return;
	}
	
	var content = { dataAgendamento: dataAgendamento, horaAgendamento: agendamento};
	
	var bindArgs = {
		url: "/bobs/agendaPedido.ajax",
		method: "post",
		sync: true,
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			//checkAjaxErrors(type, data, evt);
			
			processAgendaPedido(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>agendaPedidoAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processAgendaPedido(type, data, evt) {
	if (type == "error"){
		alert("Erro encontrado ao agendar o pedido.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	if ("redirectTo" == firstElement.tagName){
		// Esconde o div para indicar processanento
		escondeMostraElemento("processing");
		// Mensagem indicando que o cliente não estava logado e que devemos redirecionar para página informada.
		window.opener.location.href = "cliente!goToCadastro.action";
		window.close();
		return;
	}
	
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
        			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	// Mensagem de erro a ser retornada
	var msgRetorno = "";
	var nomeRestaurante = "";
	
	// Iterar sobre o xml retornado montando a mensagem de erro contendo os restaurantes fechados no momento da data de agendamento
	for(var index = 0; index < elementNodes.length; index++) {
		nomeRestaurante = dojo.dom.textContent(elementNodes[index]);
		
		if (elementNodes.length == 1 && nomeRestaurante == "OK"){
			// Mensagem de sucesso retornada
			break;
		}
		
		if (msgRetorno == ""){
			if (elementNodes.length == 1){
				msgRetorno = "A data de agendamento não é válida para o restaurante abaixo:\n\n";
			} else {
				msgRetorno = "A data de agendamento não é válida pra os restaurantes abaixo:\n\n";	
			}
		}
		
		msgRetorno += "* " + nomeRestaurante + " \n";
	}
	
	if (!dojo.string.isBlank(msgRetorno) && msgRetorno != "OK"){
		alert(msgRetorno);
		//escondeMostraElemento("msgErroContainer");
		//document.getElementById("msgErro").innerHTML = msgErro;
		return;
	} else {
		window.close();
		window.opener.location.href = "/bobs/confirmaPedido.action";
		return;
	}
}

/**
 * Realiza a verificação das campanhas existentes de acordo com o tipo de pagamento
 * escolhido. Caso exista alguma campanha, uma mensagem explicando a campanha e possíveis 
 * descontos no valor do pedido e/ou taxa de entrega são retornados por meio de um xml. 
 * Existindo descontos, os mesmos são abatidos no valor do pedido.
 * 
 * @param codFormaPagamento Código da forma de pagamento escolhida
 */
function verificaCampanhaAjax(codFormaPagamento){
	escondeMostraElemento("processingVerificaCampanha");
	
	//alert("codFormaPagamento: " + codFormaPagamento);
	var numeroCartaoCredito = document.forms["finalizaPedidoForm"].numeroCartaoCredito.value;
	//alert("numeroCartaoCredito: " + numeroCartaoCredito);
	var validadeCartaoCredito = document.forms["finalizaPedidoForm"].vencimentoCartaoCredito.value;
	//alert("validadeCartaoCredito: " + validadeCartaoCredito);
	
	var content = { codFormaPagamento: codFormaPagamento, numeroCartaoCredito: numeroCartaoCredito, validadeCartaoCredito: validadeCartaoCredito};
	
	var bindArgs = {
		url: "/bobs/verificaCampanha.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			processVerificaCampanha(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>verificaCampanhaAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processVerificaCampanha(type, data, evt) {
	if (type == "error"){
		alert("Erro encontrado ao verificar campanhas.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var resultChildNodes = firstElement.childNodes;

	if(resultChildNodes.length == 0){
		// Nenhuma campanha encontrada.
		return;
	}

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			elementNodes[j++] = resultChildNodes[i];
		}
	}
	
	atualizaInfoCampanha(elementNodes);
	
	escondeMostraElemento("processingVerificaCampanha");
}


/**
 * Esta função atualiza a página de confirmação do pedido de acordo com os dados
 * retornados pela campanha, como a mensagem da campanha e os descontos associados
 * à campanha, caso existam
 * 
 * @param campanhaNodes Nodes contendo informações sobre a campanha.
 */
function atualizaInfoCampanha(campanhaNodes){
	
	// Recupera a mensagem da campanha
	var msgCampanha = dojo.dom.textContent(campanhaNodes[0]);
	//alert("msgCampanha: " + msgCampanha);
	// Recupera o desconto do pedido
	var descontoPedido = dojo.dom.textContent(campanhaNodes[1]);
	//alert("descontoPedido: " + descontoPedido);
	// Recupera o desconto da taxa de entrega
	var descontoTaxaEntrega = dojo.dom.textContent(campanhaNodes[2]);
	//alert("descontoTaxaEntrega: " + descontoTaxaEntrega);
	
	if (!dojo.string.isBlank(msgCampanha)){
		var msgCampanhaElement = document.getElementById("msgCampanha");
		dojo.dom.textContent(msgCampanhaElement,msgCampanha);
		
		document.getElementById("msgCampanhaContainer").style.display = "block";
	}
	
	var descontos;
	
	if (!dojo.string.isBlank(descontoPedido)){
		
		// Recupera o sub total corrente e verifica se o desconto não é maior do que o mesmo;
		var currentSubtotal = document.getElementById("subTotal").innerHTML;
		//alert("currentSubtotal.innerHTML: " + currentSubtotal);
		var currentSubtotalValue = currentSubtotal.substr(currentSubtotal.indexOf("$")+1);
		//alert("currentSubtotalValue: " + currentSubtotalValue.trim());
		
		var currentSubtotalFloat = customParseFloat(currentSubtotalValue);
		var descontoPedidoFloat = customParseFloat(descontoPedido);
		
//		if (descontoPedidoFloat >= currentSubtotalFloat){
//			// O valor máximo de desconto a ser dado ao pedido é o seu próprio valor
//			descontoPedidoFloat = currentSubtotalFloat;
//			alert("desconto máximo a ser dado no pedido: " + descontoPedidoFloat);
//		}
		
		// Recupera o container que contém o valor do desconto do pedido
		var descontoPedidoElement = document.getElementById("descontoPedido");
		dojo.dom.textContent(descontoPedidoElement, "R$ "+descontoPedidoFloat.toFixed(2).replace(/\./, ","));
		
		document.getElementById("descontoPedidoContainer").style.visibility = "visible";

		descontos = customParseFloat(descontoPedido);
		//alert("descontos1: " + descontos);
	} else {
		document.getElementById("descontoPedidoContainer").style.visibility = "hidden";
	}
	
	if (!dojo.string.isBlank(descontoTaxaEntrega)){
		
		// Recupera a taxa de entrega corrente e verifica se o desconto não é maior do que a taxa;
		var currentTaxaEntrega = document.getElementById("taxaEntrega").innerHTML;
		//alert("currentTaxaEntrega.innerHTML: " + currentTaxaEntrega);
		var currentTaxaEntregaValue = currentTaxaEntrega.substr(currentTaxaEntrega.indexOf("$")+1);
		//alert("currentTaxaEntregaValue: " + currentTaxaEntregaValue.trim());
		
		var currentTaxaEntregaFloat = customParseFloat(currentTaxaEntregaValue);
		var descontoTaxaEntregaFloat = customParseFloat(descontoTaxaEntrega);
		
		if (descontoTaxaEntregaFloat >= currentTaxaEntregaFloat){
			// O valor máximo de desconto a ser dado à taxa de entrega é o seu próprio valor
			descontoTaxaEntregaFloat = currentTaxaEntregaFloat;
			//alert("desconto máximo a ser dado na taxa de entrega: " + descontoTaxaEntregaFloat);
		}
		
		// Recupera o container que contém o valor do desconto da taxa de entrega
		var descontoTaxaEntregaElement = document.getElementById("descontoTaxaEntrega");
		dojo.dom.textContent(descontoTaxaEntregaElement,"R$ "+descontoTaxaEntregaFloat.toFixed(2).replace(/\./, ","));
		document.getElementById("descontoTaxaEntregaContainer").style.visibility = "visible";
		descontos = customParseFloat(descontos) + descontoTaxaEntregaFloat;
		//alert("descontos2: " + descontos);
	} else {
		document.getElementById("descontoTaxaEntregaContainer").style.visibility = "hidden";
	}
	
	if (descontos > 0){
		//alert("descontos: " + descontos);
		// Abater os descontos no valor total
		var valorTotalOriginal = document.getElementById("valorTotalOriginal").value;
		//alert("valorTotalOriginal: " + valorTotalOriginal);
		var newValorTotal = customParseFloat(valorTotalOriginal) - descontos;
		//alert("newValorTotal: " + newValorTotal);
		var valorTotalContainer = document.getElementById("valorTotal");
		dojo.dom.textContent(valorTotalContainer, "R$ "+newValorTotal.toFixed(2).replace(/\./, ","));
	}
}

/**
 * Realiza a verificação das campanhas existentes de acordo com o tipo de pagamento
 * escolhido. Caso exista alguma campanha, uma mensagem explicando a campanha e possíveis 
 * descontos no valor do pedido e/ou taxa de entrega são retornados por meio de um xml. 
 * Existindo descontos, os mesmos são abatidos no valor do pedido.
 * 
 * @param codFormaPagamento Código da forma de pagamento escolhida
 */
function refazPedidoAjax(pedidoId){
	//alert("Refazendo pedido #"+pedidoId);
	escondeMostraElemento("processingDiv" + pedidoId);
	
	var content = { pedidoId: pedidoId};
	
	var bindArgs = {
		url: "/bobs/refazPedido.ajax",
		method: "post",
		sync: true,
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			checkAjaxErrors(type, data, evt);
			
			processRefazPedido(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
	escondeMostraElemento("processingDiv" + pedidoId);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>refazPedidoAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processRefazPedido(type, data, evt) {
	if (type == "error"){
		alert("Erro encontrado ao refazer o pedido.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
        			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	// Recupera a mensagem da campanha
	var msgRetorno = dojo.dom.textContent(elementNodes[0]);
	
	//alert(msgRetorno);
	
	if (elementNodes.length == 1){
		// Exibir Mensagem de erro
		alert(msgRetorno);
		return;
	}
	
	// Recupera o id do fornecedor
	var redirectTo = dojo.dom.textContent(elementNodes[1]);
	
	//alert(redirectTo);
	
	if (!dojo.string.isBlank(msgRetorno) && msgRetorno != "OK"){
		if(doConfirm(msgRetorno)){
			// Realiza outra requisição para realizar o join dos itens existentes no carrinho com os itens do pedido a ser refeito			
			var bindArgs = {
				url: redirectTo,
				method: "post",
				sync: true,
				mimetype: "text/xml",
				load: function(type, data, evt) {
					processRefazPedido(type, data, evt)
				}
			};
   
			// Executa a chamada Ajax
			dojo.io.bind(bindArgs);
			
		} else {
			// Limpar carrinho da sessão??? E se já existirem itens no carrinho?
			return;
		}
	} else {
		//alert("encaminhar para home fornecedor");
		window.location.href = redirectTo;
	}
	
	escondeMostraElemento("processingDiv");
}

/**
 * Verifica se o serviço de validação de cartão de crédito está operacional. Caso não esteja, o pagamento por cartão
 * de crédito será desabilitado.
 * 
 * @param radio o input radio usado para exibir/esconder os cartões de crédito disponíveis
 */
function verificaValidacaoCartaoCredito(radio){
	escondeMostraElemento("processingVerificaValidacaoCartaoCredito");
	
	var bindArgs = {
		url: "/bobs/verificaValidacaoCartaoCredito.ajax",
		method: "post",
		mimetype: "text/xml",
		load: function(type, data, evt) {
			processVerificaValidacaoCartaoCredito(type, data, evt, radio)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>verificaCampanhaAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processVerificaValidacaoCartaoCredito(type, data, evt, radio) {
	if (type == "error"){
		alert("Erro encontrado ao verificar o serviço de validação de cartão de crédito.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
        			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	// Recupera a mensagem da campanha
	var msgRetorno = dojo.dom.textContent(elementNodes[0]);
	
	if (msgRetorno == "OK"){
		// O serviço de validação de cartão de crédito está operacional.
		escondeMostraElemento("processingVerificaValidacaoCartaoCredito");
		escondeMostraElemento('cartoesCreditoDisponiveis');
		return;
	}
	
	if (elementNodes.length == 1 && msgRetorno != "OK"){
		// Exibir Mensagem de erro
		alert(msgRetorno);
		
		// Desabilita o pagamento via cartão de crédito.
		radio.style.display = 'none';
		
		dojo.byId("cartaoCreditoLabel").innerHTML = "<font color='red'>O serviço de cartão de crédito está fora do ar. Utilize outra forma de pagamento ou tente novamente mais tarde.</font>";
		
		escondeMostraElemento("processingVerificaValidacaoCartaoCredito");
		
		return;
	}
	
	escondeMostraElemento("processingVerificaValidacaoCartaoCredito");
}

/**
 * Função que realiza o logoff do cliente.
 */
function logoff(){
	// Deleta o cookie contendo as informações do cliente
	//deleteCookie("clienteAntigo");
	//alert("cookie deletado");
	location.href = "/bobs/logoff.action";
}

function deleteCookie(cookieName){
	var cookieDate = new Date ();  // current date & time
	cookieDate.setTime(cookieDate.getTime()-1);
	document.cookie = cookieName += "=; expires=" + cookieDate.toGMTString();
}

/**
 * Função que deixa o Enter como qualquer tecla - Desabilita o Enter
 */
function dasabilitarEnter() {

	var tecla = event.keyCode;
	
	if ((tecla == 13)) { 
	    return false;
	}
	
	return tecla;
}

/**
 * Função que verifica se o navegador é o Microsoft Internet Explorer
 */
function isInternetExplorerNavigator(){
	
	var info = navigator.userAgent;

	var macToken   = "Mac";
	var ieToken    = "MSIE";
	var v5Token    = "5.";

	if( info != null ) {
		if( info.indexOf(ieToken) >= 0 ) {
			return true;
		} else {
			return false;
		}
	}
	
	return true;
}

/**
 * Função que valida se o valor recebido é um números
 */
function isNumber(value){
	
	var regex = new RegExp("^\\d+$");
	
	if (value.match(regex)){
		return true;
	} else {
		return false;
	}
}

/*
 * Realiza as validações e ajustes necessários no cadastro do cliente antes de submetê-lo, 
 * como remover todas as máscaras dos campos numéricos do cadastro de clientes, setar a
 * data de nascimento, etc.
 */
function cadastraCliente(){

	var cpf = document.getElementById("cliente.cpf").value;
	document.getElementById("cliente.cpf").value = cpf.replace(/\.|-/g,"");

        var nome= document.getElementById("cliente.nome").value;
        if (dojo.string.isBlank(nome)){
            alert("O Nome deve ser informado.");
            document.getElementById("cliente.nome").focus();
            return;
        }

	var cep = document.getElementById("cliente.enderecoCadastro.cep.numero").value;
	document.getElementById("cliente.enderecoCadastro.cep.numero").value = cep.replace(/-/g,"");
        if (dojo.string.isBlank(cep)){
            alert("O CEP deve ser informado.");
            document.getElementById("cliente.enderecoCadastro.cep.numero").focus();
            return;
        }

        var numeroCasa = document.getElementById("cliente.enderecoCadastro.numero").value;
        if (dojo.string.isBlank(numeroCasa)){
            alert("O Número do Endereço deve ser informado.");
            document.getElementById("cliente.enderecoCadastro.numero").focus();
            return;
        }


        var numDdd= document.getElementById("cliente.telefoneCadastro.ddd").value;
        if (dojo.string.isBlank(numDdd)){
            alert("O DDD deve ser informado.");
            document.getElementById("cliente.telefoneCadastro.ddd").focus();
            return;
        }
	
	var numTelefone = document.getElementById("cliente.telefoneCadastro.numero").value;
	document.getElementById("cliente.telefoneCadastro.numero").value = numTelefone.replace(/-/g,"");
        if (dojo.string.isBlank(numTelefone)){
            alert("O Número do Telefone deve ser informado.");
            document.getElementById("cliente.telefoneCadastro.numero").focus();
            return;
        }



        var email = document.getElementById("cliente.email").value;
        if (dojo.string.isBlank(email)){
            alert("O Email deve ser informado.");
            document.getElementById("cliente.email").focus();
            return;
        }

        var senha = document.getElementById("cliente.senha").value;
        if (dojo.string.isBlank(senha)){
            alert("A Senha deve ser informada.");
            document.getElementById("cliente.senha").focus();
            return;
        }

        var confirmacao = document.getElementById("confirmacaoSenha").value;
        if (dojo.string.isBlank(confirmacao)){
            alert("A confirmação da senha deve ser informada.");
            document.getElementById("confirmacaoSenha").focus();
            return;
        }

        if (senha != confirmacao){
            alert("A Senha e Confirmação de Senha devem ser iguais.");
            document.getElementById("confirmacaoSenha").focus();
            return;
        }

	// Seta a data de nascimento
	if (setDataNascimento()){
		document.forms["cadastroClienteForm"].submit();
	}
}

/*
 * Realiza as validações e ajustes necessários no cadastro de um novo endereco a partir
 * da página de confirmação de pedido antes de submetê-lo como remover todas as máscaras
 * dos campos numéricos.
 */
function cadastraNovoEndereco(){

	var cep = document.getElementById("novoEndereco.cep.numero").value;
	document.getElementById("novoEndereco.cep.numero").value = cep.replace(/-/g,"");
	
	var numTelefone = document.getElementById("novoTelefone.numero").value;
	document.getElementById("novoTelefone.numero").value = numTelefone.replace(/-/g,"");
	
	document.forms["insereNovoEnderecoForm"].submit();
}

/**
 * Realiza a busca do cep informado quando o <code>keyCode</code> é igual a 13 (return key).
 * Atualiza os campos de id passados como parâmetro com o resultado do CEP encontrado.
 * 
 * @param keyCode o código da tecla pressionada
 * @param numCep o número do cep a ser buscado
 * @param idFieldId id do campo que receberá o id do CEP se o mesmo for encontrado
 * @param logradouroFieldId id do campo que receberá o logradouro se o CEP for encontrado
 * @param bairroFieldId id do campo que receberá o bairro se o CEP for encontrado
 * @param cidadeFieldId id do campo que receberá a cidade se o CEP for encontrado
 * @param estadoFieldId id do campo que receberá o estado se o CEP for encontrado
 */
function buscaCepByNumeroOnKeyDownAjax(keyCode, numCep, idFieldId, logradouroFieldId, bairroFieldId, cidadeFieldId, estadoFieldId){
	// Enter (Return) key
	if (keyCode == 13){
		// Remove o hífen do cep
		numCep = numCep.replace(/-/g,"");
		
		if (dojo.string.isBlank(numCep)){
			return;
		}
		
		alert("Buscando cep " + numCep);
		
		var content = {numCep : numCep};
		
		var bindArgs = {
			url: "/bobs/buscaCepByNumero.ajax",
			method: "post",
			content: content,
			mimetype: "text/xml",
			load: function(type, data, evt) {
				// Verifica a exsitência de erros retornados pelo processamento AJAX
				//checkAjaxErrors(type, data, evt);
			
				processBuscaCepByNumero(type, data, evt, numCep, idFieldId, logradouroFieldId, bairroFieldId, cidadeFieldId, estadoFieldId);
			}
		};
   
		// Executa a chamada Ajax
		dojo.io.bind(bindArgs);
	}
}

/**
 * Realiza a busca do cep informado atualizando os campos de id passados como parâmetro
 * com o resultado do CEP encontrado
 * 
 * @param numCep o número do cep a ser buscado
 * @param idFieldId id do campo que receberá o id do CEP se o mesmo for encontrado
 * @param logradouroFieldId id do campo que receberá o logradouro se o CEP for encontrado
 * @param bairroFieldId id do campo que receberá o bairro se o CEP for encontrado
 * @param cidadeFieldId id do campo que receberá a cidade se o CEP for encontrado
 * @param estadoFieldId id do campo que receberá o estado se o CEP for encontrado
 * @param sync flag indicando se a chamada será síncrona ou assíncrona
 */
function buscaCepByNumeroAjax(onload, numCep, idFieldId, logradouroFieldId, bairroFieldId, cidadeFieldId, estadoFieldId, sync){
	if (!numCep){
		return;
	}
	
	// Remove o hífen do cep
	numCep = numCep.toString().replace(/-/g,"");
	
	if (dojo.string.isBlank(numCep) || numCep.length < 8){
		return;
	}
		
	if (sync == undefined){
		sync = false;
	}
	
	//alert("Buscando cep " + numCep);
	var content = {numCep : numCep};
	
	var bindArgs = {
		url: "/bobs/buscaCepByNumero.ajax",
		method: "get",
		sync: sync,
		transport: "XMLHTTPTransport",
		content: content,
		mimetype: "text/xml",
			load: function(type, data, evt) {
				// Verifica a exsitência de erros retornados pelo processamento AJAX
				//alert(error.message);
			
				processBuscaCepByNumero(onload, type, data, evt, numCep, idFieldId, logradouroFieldId, bairroFieldId, cidadeFieldId, estadoFieldId);
			}
		};
   
		// Executa a chamada Ajax
	//alert("bindArgs " + bindArgs);
	dojo.io.bind(bindArgs);
	
}

/**
 * Realiza validação da campanha.
 */
function aplicarCampanha(){
	// Exibe o div contendo a imagem de processamento
	escondeMostraElemento("processing");
	
	// Brainweb: remoção de campanha é feita no proprio servlet de aplicacao de campanha
	//removeCampanha();
		
	var textCampanha = document.getElementById("textCampanha").value;
		
	if (textCampanha.length < 1){
		alert("Para aplicar a promoção é necessário colocar o código.");
		escondeMostraElemento("processing");
		return false;
	} 
		
	var content = {textCampanha : textCampanha};
	
	var bindArgs = {
		url: "/bobs/aplicaCampanha.ajax",
		method: "post",
		sync: false,
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			
			buscaAplicaCampanha(type, data, evt, textCampanha);
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}
 
 function reaplicarCampanha(){
	escondeMostraElemento("processing");
	var content = {reaplicandoCampanha : true};
	var bindArgs = {
			url: "/bobs/aplicaCampanha.ajax",
			method: "post",
			sync: false,
			content: content,
			mimetype: "text/xml",
			load: function(type, data, evt) {
				buscaAplicaCampanha(type, data, evt, null);
			}
		};
	
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Busca a campanha para ser aplicada no pedido
 * 
 * @param textCampanha é o código da campanha passado pelo cliente
 * 
 */
 function buscaAplicaCampanha(type, data, evt, textCampanha){
	
	//alert(dojo.dom.innerXML(data));
	
	if (type == "error"){
		alert("Erro encontrado ao verificar o serviço de aplicação da campanha.");
		return;
	}

	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var resultChildNodes = firstElement.childNodes;
	
	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
        			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	if (elementNodes.length > 1){
		// Recupera desconto da campanha
		var valorTotal = dojo.dom.textContent(elementNodes[0]);
//		var valorDescontoPedido = dojo.dom.textContent(elementNodes[1]);
		var taxaEntrega = dojo.dom.textContent(elementNodes[1]);
		var valorTotalNode = document.getElementById("valorTotal");
//		var valorDescontoPedidoNode = document.getElementById("valorDescontoPedido");
		var taxaEntregaNode = document.getElementById("taxaEntrega");
	
		// Estamos na wizard de complmentos. Obter o elemento da janela pai		
		if (!valorTotalNode){
			valorTotalNode = window.opener.document.getElementById("valorTotal");
		}
//		if (!valorDescontoPedidoNode){
//			valorDescontoPedidoNode = window.opener.document.getElementById("valorDescontoPedido");
//		}
			
		dojo.dom.textContent(valorTotalNode, valorTotal);	
//		dojo.dom.textContent(valorDescontoPedidoNode, valorDescontoPedido);
		dojo.dom.textContent(taxaEntregaNode, taxaEntrega);
		if(textCampanha != null){
			$('#statusCampanha').html("Campanha Válida");
			$('#statusCampanha').css({"background": "url(images/sucesso.jpg) no-repeat 0 0" });
			
		}

	}else if(textCampanha != null){
		// Recupera a menssagem de erro da campanha
		var msgError = dojo.dom.textContent(elementNodes[0]);
		
		//alert("msgError" + msgError);
		
		var msgErrorNode = document.getElementById("msgError");

		//dojo.dom.textContent(msgErrorNode, msgError);
        $('#statusCampanha').html("Campanha Inválida");
        $('#statusCampanha').css({"background": "url(images/erro.jpg) no-repeat 0 0" });
	}
	
	escondeMostraElemento("processing");
	
}


/**
 * Remove o item de código informado do carrinho
 * 
 * @param codProduto código do produto
 */
 function removeCampanha(){
		
		var bindArgs = {
			url: "/bobs/removeCampanha.ajax",
			method: "post",
			mimetype: "text/xml",
			load: function(type, data, evt) {
				buscaRemoveCampanha(type, data, evt, document.getElementById("valorDescontoPedido"))
			}
		};
	   
		// Executa a chamada Ajax
		dojo.io.bind(bindArgs);	
	}

/**
 * Processa o conteúdo da resposta Ajax da função <code>removeItemCarrinhoAjax</code>
 * removendo o item de código informado do carrinho de compras
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * @param carrinho a referência para o carrinho onde o item será removido
 */
function buscaRemoveCampanha(type, data, evt, carrinho) {
	if (type == "error"){
		alert("Erro encontrado ao remover a promoção.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
	
	var firstElement = dojo.dom.firstElement(data);
			
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
       			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	// Recupera os dados do resultado
	var valorTotal = dojo.dom.textContent(elementNodes[0]);
	var valorDescontoPedido = dojo.dom.textContent(elementNodes[1]);
	
	var valorTotalNode = document.getElementById("valorTotal");
	var valorDescontoPedidoNode = document.getElementById("valorDescontoPedido");

	dojo.dom.textContent(valorTotalNode, valorTotal);
	dojo.dom.textContent(valorDescontoPedidoNode, valorDescontoPedido);
	
}


/**
 * Busca a rua e áreas atendidas do cep informado
 * 
 * @param numCep o número do cep a ser buscado
 * @param idFieldId id do campo que receberá o id do CEP se o mesmo for encontrado
 * @param logradouroFieldId id do campo que receberá o logradouro se o CEP for encontrado
 */
function buscaRuaAndAreasAtendidasAjax(numCep, idFieldId, logradouroFieldId){
	// Esconde o div com a msg das áreas atendidas
	document.getElementById("areasAtendidasContainer").style.display = "none";
	// Esconde o div com o ícone de erro
	document.getElementById("icoErrorCep").style.display = "none";
	
	// Remove o hífen do cep
	numCep = numCep.toString().replace(/-/g,"");
	
	if (dojo.string.isBlank(numCep) || numCep.length < 8){
		return;
	}
	
	document.getElementById("processingCep").style.display = "block";
	
	// Buscar a rua do cep informado (de forma síncrona)
	buscaCepByNumeroAjax(numCep, idFieldId, logradouroFieldId, null, null, null, true);
	
	// Buscar as áreas atendidas pelo cep informado
	var cepId = document.getElementById(idFieldId).value;
	//alert("cepId: " + cepId);
	
	if (dojo.string.isBlank(cepId)){
		document.getElementById("areasAtendidasContainer").style.display = "none";
		document.getElementById("processingCep").style.display = "none";
		return;
	}
	
	var content = {cepId : cepId};
	
	var bindArgs = {
		url: "/bobs/buscaAreasAtendidasByCep.ajax",
		method: "post",
		sync: true,
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			//checkAjaxErrors(type, data, evt);
			
			processBuscaAreasAtendidasByCep(type, data, evt, numCep, idFieldId, logradouroFieldId);
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>buscaCepByNumeroAjax</code>
 * 
 * @param onload indica se a chamada foi feita pelo evento load da window. Se sim, não deve abrir popup
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * @param numCep número do CEP buscado
 * @param idFieldId id do campo que receberá o id do CEP se o mesmo for encontrado
 * @param logradouroFieldId id do campo que receberá o logradouro se o CEP for encontrado
 * @param bairroFieldId id do campo que receberá o bairro se o CEP for encontrado
 * @param cidadeFieldId id do campo que receberá a cidade se o CEP for encontrado
 * @param estadoFieldId id do campo que receberá o estado se o CEP for encontrado
 */
function processBuscaCepByNumero(onload, type, data, evt, numCep, idFieldId, logradouroFieldId, bairroFieldId, cidadeFieldId, estadoFieldId) {
	if (type == "error"){
		alert("Erro encontrado ao buscar o CEP.");
		return;
	}
	
	//alert("numCep" + numCep);
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
        			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	
	
	if (elementNodes.length == 1 && onload == false){
		// Recupera os dados do resultado
		var msgErro = dojo.dom.textContent(elementNodes[0]);
		
		if (msgErro == "OPEN_CEP_POPUP"){
			//alert("abrir cep popup");
			
			var popupWindow = abrePop('cepPopup.jsp',500,355,'no');
			return false;
			
		} else if (!dojo.string.isBlank(msgErro) && msgErro != "OK"){
			alert(msgErro);
			return;
		}
	}
		
	if (elementNodes.length == 0){
		//alert("O CEP " + numCep + " não foi encontrado.");
		if (document.getElementById("icoErrorCep")) {
			document.getElementById("icoErrorCep").style.visibility = "visible";
			document.getElementById("icoErrorCep").style.display = "block";
		}
		
		if (document.getElementById("processingCep")) {
			document.getElementById("processingCep").style.display = "none";
		}
		
		// Limpa os campos
		if (idFieldId) document.getElementById(idFieldId).value = "";
		if (logradouroFieldId) document.getElementById(logradouroFieldId).value = "";
		if(bairroFieldId) document.getElementById(bairroFieldId).value = "";
		if(cidadeFieldId) document.getElementById(cidadeFieldId).value = "";	
		if(estadoFieldId) document.getElementById(estadoFieldId).value = "";
		
		return;
	}
	
	if (document.getElementById("icoErrorCep")){
		document.getElementById("icoErrorCep").style.visibility = "hidden";
		document.getElementById("icoErrorCep").style.display = "none";
	}
	
//	if (document.getElementById("processingCep")) {
//		document.getElementById("processingCep").style.display = "none";
//	}

	var id = dojo.dom.textContent(elementNodes[0]);
	//alert("ID: " + id);
	var logradouro = dojo.dom.textContent(elementNodes[1]);
	//alert("Logradouro: " + logradouro);
	var bairro = dojo.dom.textContent(elementNodes[2]);
	//alert("Bairro: " + bairro);
	var cidade = dojo.dom.textContent(elementNodes[3]);
	//alert("Cidade: " + cidade);
	var estado = dojo.dom.textContent(elementNodes[4]);
	//alert("Estado: " + estado);	
	
	// Atualizar os campos informados com os valores retornados
	//alert("CEP encontrado. Atualizar as informações...");
	if (idFieldId) document.getElementById(idFieldId).value = id;
	if (logradouroFieldId) document.getElementById(logradouroFieldId).value = logradouro;
	if(bairroFieldId) document.getElementById(bairroFieldId).value = bairro;
	if(cidadeFieldId) document.getElementById(cidadeFieldId).value = cidade;	
	if(estadoFieldId) document.getElementById(estadoFieldId).value = estado;
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>buscaRuaAndAreasAtendidasAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * @param numCep número do CEP buscado
 * @param idFieldId id do campo que receberá o id do CEP se o mesmo for encontrado
 * @param logradouroFieldId id do campo que receberá o logradouro se o CEP for encontrado
 * @param bairroFieldId id do campo que receberá o bairro se o CEP for encontrado
 */
function processBuscaAreasAtendidasByCep(type, data, evt, numCep, idFieldId, logradouroFieldId) {
	if (type == "error"){
		alert("Erro encontrado ao buscar o CEP.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
	var msgAreasAtendidas = dojo.dom.textContent(dojo.dom.firstElement(dojo.dom.firstElement(data)));
	
	//alert("msgAreasAtendidas: " + msgAreasAtendidas);
	
	if (dojo.string.isBlank(msgAreasAtendidas)){
		alert("Prezado cliente, infelizmente o CEP informado não é atendido por nenhuma área.");
		return;
	}
	
	// Seta a msg das áreas atendidas no span
	var areasAtendidasSpan = document.getElementById("areasAtendidas");
	dojo.dom.textContent(areasAtendidasSpan, msgAreasAtendidas);
	
	// Exibe o div com a msg das áreas atendidas
	document.getElementById("areasAtendidasContainer").style.display = "block";
	// Esconde o div indicando processamento
	document.getElementById("processingCep").style.display = "none";
}

/**
 * Realiza a busca da taxa e tempo de entrega do fornecedor para a área escolhida
 * 
 */
function calculaTaxaAndTempoEntregaFornecedorAjax(){
	document.getElementById("taxaTempoEntregaContainer").style.display = "none";
	escondeMostraElemento("processingTaxaTempoEntrega");
	
	var codRegiaoClienteSelect = document.getElementById("codRegiaoCliente");
	var fornecedorIdSelect = document.getElementById("fornecedorId");
	
	var codRegiaoCliente = codRegiaoClienteSelect.options[codRegiaoClienteSelect.selectedIndex].value;
	var fornecedorId = fornecedorIdSelect.options[fornecedorIdSelect.selectedIndex].value;
	
	if (dojo.string.isBlank(codRegiaoCliente) && dojo.string.isBlank(fornecedorId)){
		alert("A área e o restaurante devem ser escolhidos.");
		return;
	} else if (dojo.string.isBlank(codRegiaoCliente)){
		alert("A área deve ser escolhida.");
		return;
	} else if (dojo.string.isBlank(fornecedorId)){
		alert("O restaurante deve ser escolhido.");
		return;
	}
	
	var content = {codRegiaoCliente:codRegiaoCliente, fornecedorId:fornecedorId};
	
	var bindArgs = {
		url: "/bobs/calculaTaxaAndTempoEntregaFornecedor.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
				load: function(type, data, evt) {
					// Verifica a exsitência de erros retornados pelo processamento AJAX
					checkAjaxErrors(type, data, evt);
			
					processCalculaTaxaAndTempoEntregaFornecedor(type, data, evt);
				}
			};
   
		// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>calculaTaxaAndTempoEntregaFornecedorAjax</code>
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function processCalculaTaxaAndTempoEntregaFornecedor(type, data, evt) {
	if (type == "error"){
		alert("Erro encontrado ao buscar taxa e tempo de entrega do fornecedor.");
		return;
	}
	
	//alert(dojo.dom.innerXML(data));
		
	var firstElement = dojo.dom.firstElement(data);
	
	var resultChildNodes = firstElement.childNodes;

	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			elementNodes[j++] = resultChildNodes[i];
		}
	}
	
	var taxaEntrega = dojo.dom.textContent(elementNodes[0]);
	//alert("taxaEntrega: " + taxaEntrega);
	var tempoEntrega = dojo.dom.textContent(elementNodes[1]);
	//alert("tempoEntrega: " + tempoEntrega);
	
	var taxaEntregaNode = document.getElementById("taxaEntrega");
	dojo.dom.textContent(taxaEntregaNode, taxaEntrega);
	
	var tempoEntregaNode = document.getElementById("tempoEntrega");
	dojo.dom.textContent(tempoEntregaNode, tempoEntrega);
	
	document.getElementById("taxaTempoEntregaContainer").style.display = "block";
	escondeMostraElemento("processingTaxaTempoEntrega");
}

/**
 * Realiza validação da consulta antes de submeter o formulário.
 */
function buscaRapida(){
	
	var consulta = document.getElementById("consulta").value;
	
	if (consulta.length < 1){
		alert("A consulta deve conter pelo menos 1 letra.");
		return;
	}
	
	document.forms["buscaRapidaForm"].submit();
}

/**
 * Realiza validação da consulta no evento onSubmit.
 */
function buscaRapidaOnSubmit(){
	
	var consulta = document.getElementById("consulta").value;
	
	if (consulta.length < 1){
		alert("A consulta deve conter pelo menos 1 letra.");
		return false;
	} else {
		return true;
	}
}

/**
 * Realiza validação da consulta avançada antes de submeter o formulário.
 */
function buscaAvancada(){
	var valorMaximo = document.getElementById("valorMaximoPrato").value;
	
	if (valorMaximo != ""){
		var valorMaximoRegex = /^\d{1,4}(,\d{2})?$/;
	
		if (!valorMaximo.match(valorMaximoRegex)){
			alert("O valor máximo não é válido. (Use vírgula como separador decimal)");
			return;
		}
	}
	
	document.forms["buscaForm"].submit();
}

/**
 * Realiza validação da consulta avançada no evento onSubmit.
 */
function buscaAvancadaOnSubmit(){
	
	var valorMaximo = document.getElementById("valorMaximoPrato").value;
	
	if (valorMaximo != ""){
		var valorMaximoRegex = /^\d{1,4}(,\d{2})?$/;
	
		if (!valorMaximo.match(valorMaximoRegex)){
			alert("O valor máximo não é válido. (Use vírgula como separador decimal)");
			return false;
		}
	}
	
	return true;
}

/**
 * Processa o conteúdo da resposta Ajax verificando se um erro foi retornado. Se sim,
 * exibe uma mensagem de erro ao cliente.
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 */
function checkAjaxErrors(type, data, evt){
	
	if (type == "error"){
		alert("Erro encontrado no processamento.");
		return;
	}
	
	//alert("checkAjaxErrors " + dojo.dom.innerXML(data));
	
	var resultChildNodes = dojo.dom.firstElement(data).childNodes;
	
	// Array para armazenar apenas os nós que são elementos (Node.ELEMENT_NODE)
	var elementNodes = new Array();
	var j = 0;
	
	// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
	for(var i = 0; i < resultChildNodes.length; i++) {
		if (dojo.dom.isNode(resultChildNodes[i])){
			var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
			// helps firefox and other browsers that allocate space in some nodes
			if ("" != tempNodeI) {
        			elementNodes[j++] = resultChildNodes[i];
			}
		}
	}
	
	if (elementNodes.length == 1){
		// Recupera os dados do resultado
		var msgErro = dojo.dom.textContent(elementNodes[0]);
		if (!dojo.string.isBlank(msgErro) && msgErro != "OK"){
			alert(msgErro);
			return;
		}
	}
}

/**
 * Função que valida se o valor recebido é uma hora válida.
 * 
 * @param timeStr valor a ser checado
 */
function isValidTime(timeStr) {
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	
	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
		//alert("Time is not in a valid format.");
		return false;
	}
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];
	
	if (second=="") { second = null; }
	if (ampm=="") { ampm = null }
	
	if (hour < 0  || hour > 23) {
		//alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
		return false;
	}
	if (hour <= 12 && ampm == null) {
		if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
			//alert("You must specify AM or PM.");
			return false;
	   }
	}
	if  (hour > 12 && ampm != null) {
		//alert("You can't specify AM or PM for military time.");
		return false;
	}
	if (minute<0 || minute > 59) {
		//alert ("Minute must be between 0 and 59.");
		return false;
	}
	if (second != null && (second < 0 || second > 59)) {
		//alert ("Second must be between 0 and 59.");
		return false;
	}
	return true;
}


function isValidDate(value){
	var validformat = /^\d{1,2}\/\d{1,2}\/\d{4}$/; //Basic check for format validity
	var returnval = false;
	if (!validformat.test(value)){
		alert("Formato de data inválido. (dd/mm/aaaa)");
	} else { 
		//Detailed check for valid date ranges
		var dayfield=value.split("/")[0];
		var monthfield=value.split("/")[1];
		var yearfield=value.split("/")[2];
		var dayobj = new Date(yearfield, monthfield-1, dayfield);
		if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)){
			//alert("Dia, mês ou ano inválidos. (dd/mm/aaaa).");
		} else {
			returnval=true;
		}
	}
	//if (returnval==false) input.select()
		return returnval;
}

/**
 * Função que formata um número de acordo com o número de casas decimais informadas. Se o valor informado
 * não for um número, retorna null. Caso contrário retorna o número formatado de acordo com os parâmetros
 * fornecidos.
 *
 * @param value O valor a ser formatado
 * @param trailingDecimals A quantidade de casas decimais a serem usadas na formatação
 */
function formatNumber(value, trailingDecimals){
	
	if (isNumber(value)){
		var number = new Number(value);
		return number.toFixed(trailingDecimals);
	} else {
		return null;
	}
}

/**
 * Formata o valor informado como um float. Se o valor utilizar vírgula como separador decimal, 
 * esta será substituída por ponto para que a função <code>parseFloat</code> realize o parse sem perdas decimais.
 */
function customParseFloat(value){
	if (!value){
		return null;
	}
	
	if (value.toString().match(",")){
		var parsedValue = parseFloat(value.toString().replace(",","."));
		return parsedValue;
	} else {
		return value;
	}
}

/*
 * This function displays a confirm box with the message 
 * passed as parameter.
 *
 * @author Gabriel Borges
 * @return Returns true if user hit on 'yes' button else returns false
 */
function doConfirm(msg) {
   var agree = confirm(msg);
   if(agree) {
      return true;
   } else {
      return false;
   }
}

/*
 * 
 * @author Natália Carvalho - Mostra os adicionais dos itens
 * 
 */
function showHide(idDiv,idH4){
    var minhaTag = document.getElementById(idDiv);
    if(minhaTag.style.display == "none"){
       minhaTag.style.display = "block";
    }else{
       minhaTag.style.display = "none";
    }
    var minhaTag2 = document.getElementById(idH4);
    if(minhaTag2.style.display == "none"){
       minhaTag2.style.display = "block";
    }else{
       minhaTag2.style.display = "none";
    }
}

/*
 * 
 * @author Natália Carvalho - Mostra a Observação do item
 * 
 */
function showHideObs(idDivObs,idH5){
    var minhaObs = document.getElementById(idDivObs);
    if(minhaObs.style.display == "none"){
       minhaObs.style.display = "block";
    }else{
       minhaObs.style.display = "none";
    }
    var minhaObs2 = document.getElementById(idH5);
    if(minhaObs2.style.display == "none"){
       minhaObs2.style.display = "block";
    }else{
       minhaObs2.style.display = "none";
    }
}

/*
 * 
 * @author Natália Carvalho
 * 
 */
function mudaMassa(codigoMassa){
    var massa = codigoMassa;
}


/**
 * Verifica se um determinado radio foi selecionado ou nao
 * 
 * @author Lucas Nascimento
 */
function validaRadioSelecionado(name, mensagem){
    var controle = 0;
    for (j=0;j<document.forms.length;j++){
        for (i=0;i<document.forms[j].elements.length;i++){
            if (document.forms[j].elements[i].type == "radio" && document.forms[j].elements[i].name == name){
                if (document.forms[j].elements[i].checked == true){
                    controle++;
                }
            }
        }
    }
    if (controle <= 0){
        alert(mensagem);
        return false;
    }
    return true;
}

function soDigitaNumero(campo){
    var digits="0123456789"
    var campo_temp
    for (var i=0;i<campo.value.length;i++){
        campo_temp=campo.value.substring(i,i+1)
        if (digits.indexOf(campo_temp)==-1){
            campo.value = campo.value.substring(0,i);
            break;
        }
    }
}

//verifica se é um numero, backspace ou tab e retorna true
function somenteNumero(e){
    var tecla=(window.event)?event.keyCode:e.which;
    if((tecla > 47 && tecla < 58))
    	return true;
    else{
	    if( ( tecla == 8 ) || ( tecla == 9 ) || ( tecla == 11 ) || ( tecla == 0 ) || (tecla == 13) ) 
	    	return true;
	    else 
	    	return false;
	}
}

function validaCampoFloat(e){  
	var tecla=(window.event)?event.keyCode:e.which;
	var input;
	if(!e.srcElement)
		input = e.target; // firefox aceita, ie não
	else
		input = e.srcElement; // ie aceita, firefox não
	if((tecla == 44) && (input.value.indexOf(',') < 0)) // permite digitar virgula
		return true;
	else
		return somenteNumero(e);
}