
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 DiskCook
 * 
 * @param codSite código do site
 * @param codEmpresa código da empresa DiskCook
 */
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 = "/diskcook/fornecedor!goToHomeFornecedor.action?fornecedorId="+frnId+"&requestFromHomeFornecedorVariasLojas=true";
}

/**
 * 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 ruaField = document.getElementById('rua');
	
	if (cepValue == ""){
		alert("O CEP 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;
	
	if(diaNascimento == 'dd' && mesNascimento == 'mm' && anoNascimento == 'aaaa'){
		diaNascimento = '';
		mesNascimento = '';
		anoNascimento = '';
	}
	//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.rua.value = logradouro;
	} 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;
		// 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: "/diskcook/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 = "/diskcook/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: "/diskcook/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;
			}
			
			location.href = "/diskcook/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
		}
	};
	
	if(document.getElementById('idFornecedorFromIndex') != null) {
		window.location.href = "/diskcook/fornecedor!goToHomeFornecedor.action?fornecedorId="+fornecedorId;
	}
   
	// 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: "/diskcook/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 = "/diskcook/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: "/diskcook/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.");
			processAtualizaItemComplementosCarrinhoResponse(type, data, evt);
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
}
 
 function processAtualizaItemComplementosCarrinhoResponse(type, data, evt) {
		
	if (type == "error"){
		alert("Erro encontrado ao atualizar item com complementos.");
		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])){
			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]);
	
	var valorTotalNode = window.opener.document.getElementById("valorTotal");
	var valorPorItemNode = window.opener.document.getElementById("valorPorItem");
	var subTotalNode = window.opener.document.getElementById("subTotal");
	
	dojo.dom.textContent(valorTotalNode, valorTotal);
	dojo.dom.textContent(valorPorItemNode, valorPorItem);
	dojo.dom.textContent(subTotalNode, subTotal);
	
	window.close();
}

/**
 * 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);
	
	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: "/diskcook/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: "/diskcook/getProduto.ajax",
		method: "post",
		content: content,
		mimetype: "text/html",
		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,"yes");
			showFormComplementos(data);
			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: "/diskcook/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);	
}

/**
 * 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 = "";
	
	//alert("fromWizardComplementosPopup: " + fromWizardComplementosPopup);
	
	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;
	}
	
	var content = {codProduto: codProduto, qtdeProduto: qtdeProduto, obsProduto: obsProduto, fornecedorId: fornecedorId};
	
	
	
	var bindArgs = {
		url: "/diskcook/adicionaItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			if(!checkAjaxErrors(type, data, evt)){
				$('div.colCar').load('includes/seuPedido.jsp?t='+(new Date()).getTime());
			}
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
	
	hideFormComplementos();
	
	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";
	}
}

/**
 * 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;

	var taxaEntrega = null;
	// 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];
       			try{
       				if(produtoChildNodes[i].tagName == 'taxaEntrega'){
       					taxaEntrega = tempNodeI;
       				}
       			}
       			catch(E){}
			}
		}
	}
	
	//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]);
	//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 = '<li id="' + codProduto + '">';
		novoItem += '<dl><dt><strong>';
		novoItem += nomeProduto;
		novoItem += '</strong></dt>';
		novoItem += '<dd class="quantCC">' + qtdeItem + '</dd>';
		novoItem += '<dd class="moedaCC">R$</dd>';
		novoItem += '<dd class="valorCC">' + valorUnitario + '</dd>';
		novoItem += '<dd class="menosCC"><a href="#" onclick="removeItemCarrinhoAjax(\''+ codProduto +'\');"><img src="img/iconMenos.png" width="13" height="13" alt="Retirar item" /></a></dd>';
		novoItem += '<dd class="obsCC">Obs:</dd>';
		novoItem += '</dl></li>';
		
		//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);
		
		carrinho.innerHTML += novoItem;
		
		//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);
		if(subTotal != null && subTotal != '' && subTotal.indexOf('R$') != -1)
			subTotal = subTotal.replace('R$', '');
		
		dojo.dom.textContent(subTotalNode, subTotal);
		
		//alert(dojo.dom.textContent(valorTotalNode));
		
		if (taxaEntrega != null){
			// Taxa de entrega foi calculada. Atualizar o carrinho.
			//alert(taxaEntrega);
			
			var taxaEntregaNode = document.getElementById("taxaEntrega");
			//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 = "/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: "/diskcook/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: "/diskcook/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) || campo.value < 1){
		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])){
			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 qtdeProduto = dojo.dom.textContent(elementNodes[0]);
	//alert(qtdeProduto);
	var valorTotal = dojo.dom.textContent(elementNodes[1]);
	//alert(valorTotal);
	var valorPorItem = dojo.dom.textContent(elementNodes[2]);
	var subTotal = dojo.dom.textContent(elementNodes[3]);
	
	// 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");
	var valorPorItemNode = document.getElementById("valorPorItem");
	var subTotalNode = document.getElementById("subTotal");
	//dojo.dom.textContent(valorTotalNode, "R$" + valorTotal);
	dojo.dom.textContent(valorTotalNode, valorTotal);
	dojo.dom.textContent(valorPorItemNode, valorPorItem);
	dojo.dom.textContent(subTotalNode, subTotal);
	
	//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(item){
	 
	//document.getElementById("processing").style.display = "block";

	//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 codProduto = item;
	//var indexProduto = carrinhoSelect.selectedIndex;
	var indexProduto = 0;
	
	var content = { codProduto: codProduto, indexProduto: indexProduto};
	
	var bindArgs = {
		url: "/diskcook/removeItemCarrinho.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			if(!checkAjaxErrors(type, data, evt)){
				try{
					$('div.colCar').load('includes/seuPedido.jsp');
				}catch(err){
					alert(err.description);
				}
			}
			
			
			// 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;
	}
	
	document.getElementById(codProduto).innerHTML = '';
	document.getElementById(codProduto).style.display = 'none';
	document.getElementById(codProduto).id = '';
	document.getElementById("processing").style.display = "none";
	
	//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"
		if(document.getElementById("btnSeuPedido")){
			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 = "";
}
*/

/**
 * 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){
	
	var carrinhoSelect = document.getElementById("carrinho");
	
	if (carrinhoSelect.length == 0) {
		alert("Selecione algum produto antes de finalizar seu pedido.");
		return;
	}
	
	// Exibe o div para indicar processanento
	//document.getElementById("processing").style.display = "block";
	
	var bindArgs = {
		url: "/diskcook/verificaPedido.ajax",
		method: "post",
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a exsitência de erros retornados pelo processamento AJAX
			if(!checkAjaxErrors(type, data, evt)){
				processVerificaPedidoResponse(type, data, evt);
			}else{
				//document.getElementById("processing").style.display = "none";
			}
		}
	};
   
	// 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 = "/diskcook/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[0]);
	
	if (!dojo.string.isBlank(msgErroValorMinimo)){
		msgRetorno = msgErroValorMinimo;
	}
	
	// Recupera mensagem de erro contendo os restaurantes indisponiveis
	var msgErroRestaurantesIndisponiveis = dojo.dom.textContent(elementNodes[1]);
	
	// Flag indicando se o popup de agendamento deve ser mostrado ou não
	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 = "/diskcook/confirmacaoPedido.jsp";
	//alert("encaminhando para /diskcook/confirmaPedido.action");
	window.location.href = "/diskcook/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 = "/diskcook/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: "/diskcook/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 = "/diskcook/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++) {
		var tempNode = dojo.dom.textContent(resultChildNodes[i]).trim();
		if ("" != tempNode){
			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
	if(elementNodes.length > 4){
		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);
		}
	}
	
	// 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]);
	
	var dia = dataAgendamentoArray[0];
	var mes = dataAgendamentoArray[1] - 1;
    var hora = horaAgendamentoArray[0];
	var minuto = horaAgendamentoArray[1];
	var pm = false;
	
	if(minuto.indexOf(" PM") != -1) {
		pm = true;
		minuto = minuto.replace(" PM", "");
	} else {
		minuto = minuto.replace(" AM", "");
	}

	var prazoMin = new Date();
	prazoMin.setHours(prazoMin.getHours() + 1);
	prazoMin.setMinutes(prazoMin.getMinutes() + 30);
	
	var dataEscolhida = new Date();
	dataEscolhida.setHours(hora);
	if(pm) {
		dataEscolhida.setHours(dataEscolhida.getHours() + 12);
	}
	
	dataEscolhida.setDate(dia);
	dataEscolhida.setMonth(mes);
	dataEscolhida.setMinutes(minuto);
	
	if(dataEscolhida.getTime() < prazoMin.getTime()) {
		alert("O agendamento deve ser feito com mínimo de 1,5 hora(s) de antecedência.");
		return ;
	}
	
	
	//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: "/diskcook/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 = "/diskcook/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 = "/diskcook/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: "/diskcook/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: "/diskcook/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: "/diskcook/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 = "<div style='width: 600px; text-align:center'><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></div>";
		
		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 = "/diskcook/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(indexAba){
	 var erro = [];
	 var senha = null;
	 var msgSenha = '';
	 $('div#corpoAba'+indexAba+' input.required').each(function(i){
		if($(this).val() == ''){
			erro.push($(this).attr('name'));
		}
		if($(this).attr('name') == 'cliente.senha'){
			senha = $(this).val();
		}else if($(this).attr('name') == 'confirmacaoSenha' && $(this).val() != senha){
			msgSenha = 'Confirmação de senha não condiz com senha digitada.'; 
		}
	 });
	 if(erro.length > 0){
		alert('Certifique-se de que todos os campos obrigatórios assinalados com * estão preenchidos.\n'+msgSenha);
		return;
	 }else if(msgSenha != ''){
		 alert(msgSenha);
		 return;
	 }
	 var erroEmail = false;
	 if(indexAba == 1){
		 var email = document.getElementById('cliente.email').value;
		 var idUsuario = document.getElementById('cliente.id').value;
		 var content = { email : email, idUsuario : idUsuario};
		 
		 var bindArgs = {
				 url: "/diskcook/checkEmailCadastro.ajax",
				 method: "post",
				 sync: true,
				 content: content,
				 mimetype: "text/xml",
				 load: function(type, data, evt) {
			 if (type == "error"){
				 alert("Erro encontrado no processamento.");
				 return;
			 }
			 
			 var firstElement = dojo.dom.firstElement(data);
			 var resultChildNodes = firstElement.childNodes;
			 
			 var elementNodes = new Array();
			 var j = 0;
			 for(var i = 0; i < resultChildNodes.length; i++) {
				 var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
				 if (dojo.dom.isNode(resultChildNodes[i]) && "" != tempNodeI && resultChildNodes[i].tagName != null) {
					 if(resultChildNodes[i].tagName.indexOf("msg") > -1 && tempNodeI != "OK"){
						 $('div#msgValidateAjax').html('<img src="images/icoError.gif" border="0"/> '+tempNodeI);
						 erroEmail = true;
					 }
					 elementNodes[j++] = resultChildNodes[i];
				 }
			 }
		 }
		 };
		 
		 // Executa a chamada Ajax
		 dojo.io.bind(bindArgs);
	 }
	 if(erroEmail){
		 return;
	 }
	 $('div#msgValidateAjax').html('');
	 if(indexAba == 2){
		var cpf = document.getElementById("cliente.cpf").value;
		document.getElementById("cliente.cpf").value = cpf.replace(/\.|-/g,"");
		 
		var cep = document.getElementById("cliente.enderecoCadastro.cep.numero").value;
		document.getElementById("cliente.enderecoCadastro.cep.numero").value = cep.replace(/-/g,"");
		 
		// Seta a data de nascimento
		if (setDataNascimento()){
			document.forms["cadastroClienteForm"].submit();
		}
	 }else{
		 selecionaAba(indexAba+1);
	 }
}

/*
 * 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(form){
	var validacao = validaInsereNovoEnderecoForm();
	if(validacao){
		var cep = document.getElementById("novoEndereco.cep.numero").value;
		document.getElementById("novoEndereco.cep.numero").value = cep.replace(/-/g,"");
		
		var bindArgs = {
			method: "post",
			mimetype: "text/xml",
			formNode: document.getElementById('insereNovoEnderecoForm'),
			load: function(type, data, evt) {
				// Verifica a exsitência de erros retornados pelo processamento AJAX
				if(!checkAjaxErrors(type, data, evt)){
					carregaContextoClienteAjax(null, null);
				}
			}
		};
   
		// Executa a chamada Ajax
		dojo.io.bind(bindArgs);
		
		//document.forms["insereNovoEnderecoForm"].submit();
	}
}
 
function validaInsereNovoEnderecoForm(){
	var camposInvalidos = [];
	if(document.getElementById('novoEndereco.cep.numero').value == ''){
		camposInvalidos.push('cep');
	}
	if(document.getElementById('novoEndereco.cep.logradouro').value == ''){
		camposInvalidos.push('endereço');
	}
	if(document.getElementById('novoEndereco.cep.bairro').value == ''){
		camposInvalidos.push('bairro');
	}
	if(document.getElementById('novoEndereco.cep.cidade').value == ''){
		camposInvalidos.push('cidade');
	}
	if(document.getElementById('novoEndereco.cep.estado').value == ''){
		camposInvalidos.push('estado');
	}
	if(document.getElementById('novoEndereco.numero').value == ''){
		camposInvalidos.push('número');
	}
	if(camposInvalidos.length > 0){
		var msgValidacao = 'Favor preencher os seguintes campos obrigatórios: ';
		for(var i = 0; i < camposInvalidos.length; i++){
			msgValidacao += camposInvalidos[i]+', ';
		}
		msgValidacao = msgValidacao.substring(0, msgValidacao.length-2) + '.';
		alert(msgValidacao);
		return false;
	}
	return true;
}

/**
 * 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: "/diskcook/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(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: "/diskcook/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(type, data, evt, numCep, idFieldId, logradouroFieldId, bairroFieldId, cidadeFieldId, estadoFieldId);
			}
		};
   
		// Executa a chamada Ajax
	//alert("bindArgs " + bindArgs);
	dojo.io.bind(bindArgs);
	
}
 
 function buscaCepByNumeroAndNumeroLogradouroAjax(numCep, numLogradouro, 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, numLogradouro : numLogradouro};
		
		var bindArgs = {
			url: "/diskcook/buscaCepByNumeroAndNumeroLogradouro.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(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(){
	
	removeCampanha();
		
	var textCampanha = document.getElementById("textCampanha").value;
		
	if (textCampanha.length < 1){
		alert("Para aplicar a promoção é necessário colocar o código.");
		return false;
	} 
		
	var content = {textCampanha : textCampanha};
	
	var bindArgs = {
		url: "/diskcook/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);
}

/**
 * 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 valorTotalNode = document.getElementById("valorTotal");
		var valorDescontoPedidoNode = document.getElementById("valorDescontoPedido");
	
		// 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);	

	}else{
		// 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);
	}
	
	
}

/**
 * Remove o item de código informado do carrinho
 * 
 * @param codProduto código do produto
 */
function removeCampanha(){
	// Exibe o div contendo a imagem de processamento
	//escondeMostraElemento("processing");
	
	var bindArgs = {
		url: "/diskcook/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");

	// Esconde o div para indicar processanento
	//escondeMostraElemento("processing");
	
	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, numLogradouro, 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)
	buscaCepByNumeroAndNumeroLogradouroAjax(numCep, numLogradouro, idFieldId, null, 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: "/diskcook/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 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(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){
		// 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"+idFieldId)) {
			document.getElementById("icoErrorCep"+idFieldId).style.visibility = "visible";
			document.getElementById("icoErrorCep"+idFieldId).style.display = "block";
		}else 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: "/diskcook/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 true;
	}
	
	//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++) {
		var tempNodeI = dojo.dom.textContent(resultChildNodes[i]).trim();
		// helps firefox and other browsers that allocate space in some nodes
		if (dojo.dom.isNode(resultChildNodes[i]) && "" != tempNodeI && resultChildNodes[i].tagName != null) {
			if(resultChildNodes[i].tagName.indexOf("msg") > -1 && tempNodeI != "OK"){
				alert(tempNodeI);
				return true;
			}
			elementNodes[j++] = resultChildNodes[i];
		}
	}
	
	return false;
}

/**
 * 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;
   }
}
 
 function exibeListaEnderecosClienteAjax() {
	 var content = {listaEnderecos : 'true'}; 
		var bindArgs = {
			url: "/diskcook/loginCliente.ajax",
			method: "post",
			content: content,
			mimetype: "text/html",
			load: function(type, data, evt) {
				// Verifica a existência de erros retornados pelo processamento AJAX
				if(data.toLowerCase().indexOf('erro') >= 0){
					if(data.toLowerCase().indexOf('migracao') >= 0){
						alert('Erro ao migrar usuário.');
					}else{
						alert('Usuário e senha inválidos');
					}
					return;
				}else{
						$('#naoSeiMeuCepEnderecos').hide();
						$('#formEndereco').hide();
						$('#cepResultEnderecos').hide();
						$('#enderecosEntrega').show();
						$('#enderecosWindow').jqm();
						$('#enderecosWindow').jqmShow();
						$('#enderecosEntrega').html(data);
				}
			}
		};
	   
		// Executa a chamada Ajax
		dojo.io.bind(bindArgs);
 }

 function loginClienteAjax(idForm){
	
	var senha = document.forms[idForm].senha.value;
	var usuario = document.forms[idForm].usuario.value;
	var sufixoPopin = '';
	var erro = false;
	if(idForm.indexOf('Popin') > 0){
		sufixoPopin = 'Popin';
	}
	if(usuario == ''){
		document.getElementById('errorUsuario'+sufixoPopin).style.display = 'block';
		erro = true;
	}
	if(senha == ''){
		document.getElementById('errorSenha'+sufixoPopin).style.display = 'block';
		erro = true;
	}
	if(erro) return false;
	 
	var content = {usuario : usuario, senha : senha}; 
	var bindArgs = {
		url: "/diskcook/loginCliente.ajax",
		method: "post",
		content: content,
		mimetype: "text/html",
		load: function(type, data, evt) {
			// Verifica a existência de erros retornados pelo processamento AJAX
			if(data.toLowerCase().indexOf('erro') >= 0){
				if(data.toLowerCase().indexOf('migracao') >= 0){
					alert('Erro ao migrar usuário.');
				}else{
					alert('Usuário e senha inválidos');
				}
				return;
			}else{
				if(idForm.indexOf('Popin') > 0){
					// login a partir do popin de varias lojas
					$('#variasLojasWindow').jqmHide();
					$('#enderecosWindow').jqm();
					$('#enderecosWindow').jqmShow();
					$('#enderecosEntrega').html(data);
				}else{
					$('#naoSeiMeuCepEnderecos').hide();
					$('#formEndereco').hide();
					$('#cepResultEnderecos').hide();
					$('#enderecosEntrega').show();
					$('#enderecosWindow').jqm();
					$('#enderecosWindow').jqmShow();
					$('#enderecosEntrega').html(data);
				}
			}
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
 }
 
 function carregaContextoClienteAjax(enderecoId, cepNumero) { 
		
	 	var content = {enderecoEntregaId : enderecoId, numCep : cepNumero}; 
		var bindArgs = {
			url: "/diskcook/carregaContextoCliente.ajax",
			method: "post",
			content: content,
			mimetype: "text/html",
			load: function(type, data, evt) {
				if(data != null && data != ''){
					$('#enderecosWindow').jqmHide();
					$('div#infoHeader').html(data);
				}else{
					// Brainweb: cliente logou no meio do pedido.
					location.href = 'confirmaPedido.action';
				}
			}
		};
	   
		// Executa a chamada Ajax
		dojo.io.bind(bindArgs);
}
 
 function findEnderecosClienteLojas(numCep, numLogradouro){
	var content = null;
	if(numCep != null && numLogradouro != null){
		content = {numCep : numCep, numLogradouro : numLogradouro}; 
	}
	var bindArgs = {
		url: "/diskcook/findEnderecosClienteLojas.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		load: function(type, data, evt) {
			// Verifica a existência de erros retornados pelo processamento AJAX
			if(checkAjaxErrors(type, data, evt)){
				return;
			}
						
			processFindEnderecosClienteLojas(type, data, evt);
		}
	};
	   
		// Executa a chamada Ajax
	dojo.io.bind(bindArgs);
 }
 
 function processFindEnderecosClienteLojas(type, data, evt){
	var firstElement = dojo.dom.firstElement(data);
		
	if ("redirectTo" == firstElement.tagName){ 
		var url = dojo.dom.textContent(firstElement);
		location.href = url;
	}
	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++) {
		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 && elementNodes[0].tagName == "enderecosCompletos"){
		// Recupera os dados do resultado
		eval("var enderecosCompletos = "+dojo.dom.textContent(elementNodes[0]));
		selecionaLojaMaisRapida(enderecosCompletos);
	}
 }
 
 function editEndereco(enderecoId, idTarget){
	 if(enderecoId == null){
		 $('#'+idTarget).load('cadastraNovoEndereco.jsp');
		 $('#'+idTarget).show();
	 }else{
		 var content = { enderecoId : enderecoId };
		 var bindArgs = {
			 url: "/diskcook/editEnderecoCliente.ajax",
			 method: "post",
			 content: content,
			 mimetype: "text/html",
			 load: function(type, data, evt) {
			 	 $('#'+idTarget).html(data);	
			 	 $('#'+idTarget).show();
	 		}
		 };
		 
		 // Executa a chamada Ajax
		 dojo.io.bind(bindArgs);
	 }
 }
 
 function selecionaEndereco(cepId, numeroCep, logradouro, numero, bairro, cidade, estado, legendaMapa){
	 if($('#variasLojasWindow').css('display') != 'none'){
		 findEnderecosClienteLojas(numeroCep, numero);
	 }else if($('#enderecosWindow').css('display') != 'none'){
		 $('#cepResultEnderecos').hide();
		 $('#formEndereco').show();
		 $('#formEndereco').load('cadastraNovoEndereco.jsp', {cepId : cepId, numeroCep : numeroCep, logradouro : logradouro, numero: numero, bairro : bairro, cidade : cidade, estado : estado, legendaMapa : legendaMapa});
	 }else if($('#naoSeiMeuCepWindow').css('display') != 'none'){
		 var campoEndereco = $('#naoSeiMeuCepWindow #qualEndereco').val();
		 document.getElementById(campoEndereco+'.cep.id').value = cepId;
		 document.getElementById(campoEndereco+'.cep.numero').value = numeroCep;
		 document.getElementById(campoEndereco+'.cep.logradouro').value = logradouro;
		 document.getElementById(campoEndereco+'.numero').value = numero;
		 document.getElementById(campoEndereco+'.cep.bairro').value = bairro;
		 document.getElementById(campoEndereco+'.cep.cidade').value = cidade;
		 document.getElementById(campoEndereco+'.cep.estado').value = estado;
		 document.getElementById(campoEndereco+'.cep.legendaMapa').value = legendaMapa;
		 $('#naoSeiMeuCepWindow').jqmHide();
	 }
 }
 
 function buscaCep(){
    var rua = document.getElementById('rua').value;
	var numero = document.getElementById('numero').value;
	
	if(rua == '' || numero == ''){
		alert('Forneça parte do nome da rua e o número que deseja pesquisar.');
		return;
	}
	var idCepResult = '#cepResult';
	if($('#variasLojasWindow').css('display') != 'none'){
		idCepResult += 'VariasLojas';
	}else if($('#enderecosWindow').css('display') != 'none'){
		idCepResult += 'Enderecos';
	}else if($('#naoSeiMeuCepWindow').css('display') != 'none'){
		idCepResult += 'Cadastro';
	}
	var content = { numero : numero, rua : rua };
	 var bindArgs = {
		 url: "/diskcook/buscaCepByNumeroLogradouroAndRua.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/html",
		 load: function(type, data, evt) {
		 	$(idCepResult).html(data);
		 	$(idCepResult).show();
		}
	 };
	 
	 // Executa a chamada Ajax
	 dojo.io.bind(bindArgs);
 }
 
 function abreNaoSeiMeuCep(idsDiv, origem){
	 for(var i = 0; i < idsDiv.length; i++){
		 $('#'+idsDiv[i]).hide();
	 }
	 $('#buscaCep'+origem).load('cepPopin.jsp');
	 $('#naoSeiMeuCep'+origem).show();
 }
 
 function escondeMostraOpcoes(idHide, idShow){
	 if(idHide == 'naoSeiMeuCepEnderecos'){
		 $('#cepResultEnderecos').hide();
	 }
	 if(idHide == 'naoSeiMeuCepVariasLojas'){
		 $('#cepResultVariasLojas').hide();
	 }
	$('#'+idHide).hide(); 
	$('#'+idShow).show();
 }

 function recuperaSenhaAjax(){
	var emailCadastrado = document.getElementById('emailCadastrado').value;
	if(document.getElementById('emailCadastrado2') != null && 
			document.getElementById('emailCadastrado2').value != '') {
		emailCadastrado = document.getElementById('emailCadastrado2').value;
	}
	
	var content = { emailCadastrado : emailCadastrado };
	 var bindArgs = {
		 url: "/diskcook/recuperaSenha.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/xml",
		 load: function(type, data, evt) {
		 	if (type == "error"){
				alert("Erro encontrado no processamento.");
				return true;
			}
		 	var elementNodes = new Array();
			var j = 0;
		 	var resultChildNodes = dojo.dom.firstElement(data).childNodes;
		 	for(var i = 0; i < resultChildNodes.length; 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];
				}
			}
			
			var msg = dojo.dom.textContent(elementNodes[0]);
	 		$('#msgRecuperaSenha').html(msg.replace('\n\n', '<br/><br/>'));
	 		if(document.getElementById('msgRecuperaSenha2') != null)
	 			$('#msgRecuperaSenha2').html(msg.replace('\n\n', '<br/><br/>'));
	 		escondeMostraOpcoes('esqueciSenha', 'recuperaSenha');
		}
	 };
	 
	 // Executa a chamada Ajax
	 dojo.io.bind(bindArgs);
 }
 
 function buscaPedido(numeroPedido){
	 var content = { numeroPedido : numeroPedido };
	 var bindArgs = {
		 url: "/diskcook/acompanhaPedido.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/html",
		 load: function(type, data, evt) {
		 	if (type == "error"){
				alert("Erro encontrado no processamento.");
				return true;
			}
		 	if(data != null && data != ''){
		 		$('.acomPedido div#formAcompanhe').hide();
		 		$('.acomPedido div#statusPedido').html(data);
		 		$('.acomPedido div#statusPedido').show();
		 	}else{
		 		alert('Pedido não encontrado.');
		 	}
		}
	 };
	 
	 // Executa a chamada Ajax
	 dojo.io.bind(bindArgs);
 }
 
 function closeStatusPedido(){
	 if($('.acomPedido div#formAcompanhe')){
		 $('.acomPedido div#statusPedido').hide();
		 $('.acomPedido div#formAcompanhe').show();
	 }
 }

 function selecionaAba(nroAba){
	 $('.abaBox .abaMenu a.active').removeClass('active');
	 $("div[id^='corpoAba']").each(function(i){
		 this.style.display = 'none';
	 });
	 $('.abaBox div#corpoAba'+nroAba).show();
	 $('.abaBox dd.dd'+nroAba+' a').addClass('active');
 }
 
 function selecionaDestaque(nroAba, nroDestaque){
	 var idToActive = nroAba+'_'+nroDestaque;
	 var currentActive = $('div#corpoAba'+nroAba+' dl.listDestaque dd.active');
	 var idCurrentActive = currentActive.attr('id');
	 currentActive.removeClass('active');
	 $('div#corpoAba'+nroAba+' dl.listDestaque dd#'+idToActive).addClass('active');
	 $('div#corpoAba'+nroAba+' div#destaque'+idCurrentActive).hide();
	 $('div#corpoAba'+nroAba+' div#destaque'+idToActive).show();
 }
 
 function selectTipoCozinha(codigo) {
	 $("dl.rests dd").each(function(i) {
		this.style.display = 'none';
	 });
	 
	 $("dl.types dd a").each(function(i) {
		this.className = '';
     });

	 $("dl.rests dd." + codigo).each(function(i) {
		this.style.display = 'block';
	 });
	 
 }
 
 function filtraHistorico(periodo){
	 $("div.colSideForm a").each(function(i){
		 this.className = "";
	 });
	 $('div.colSideForm dl dd a#'+periodo).addClass("active");
	 $('div.colMainFormScar h3.outH3').text("Pedidos nos últimos "+periodo+" dias");
	 $('div.colMainFormScar div.formScar div#listHisto').html("Aguarde, carregando...");
	 var content = { periodo : periodo };
	 var bindArgs = {
		 url: "/diskcook/filtraHistoricoPedidos.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/html",
		 load: function(type, data, evt) {
		 	if (type == "error"){
				alert("Erro encontrado no processamento.");
				return true;
			}
		 	if(data != null && data != ''){
		 		$('div.colMainFormScar div.formScar div#listHisto').html(data);
		 	}else{
		 		alert('Pedido não encontrado.');
		 	}
		}
	 };
	 
	 // Executa a chamada Ajax
	 dojo.io.bind(bindArgs);
 }
 
 function filtraHistoricoStatus(status){
	 $("div.colSideForm a").each(function(i){
		 this.className = "";
	 });
	 $('div.colSideForm dl dd a#'+status).addClass("active");
	 
	 if(status == 'AVA')
		 $('div.colMainFormScar h3.outH3').text("Pedidos avaliados");
	 else
		 $('div.colMainFormScar h3.outH3').text("Pedidos pendentes");
	 
	 $('div.colMainFormScar div.formScar div#listHisto').html("Aguarde, carregando...");
	 var content = { status : status };
	 var bindArgs = {
		 url: "/diskcook/filtraHistoricoPedidos.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/html",
		 load: function(type, data, evt) {
		 	if (type == "error"){
				alert("Erro encontrado no processamento.");
				return true;
			}
		 	if(data != null && data != ''){
		 		$('div.colMainFormScar div.formScar div#listHisto').html(data);
		 	}else{
		 		alert('Pedido não encontrado.');
		 	}
		}
	 };
	 
	 // Executa a chamada Ajax
	 dojo.io.bind(bindArgs);
 }
 
 
 function avaliarPedido(pedidoId) {
	 var criterios = document.getElementsByName("criterios" + pedidoId);
	 var rates;
	 var criterioId;
     var comentario = document.getElementById("comentario").value;
	 
	 var criteriosIds = new Array();
	 var notasValores = new Array();
	 
	 for(var i = 0; i < criterios.length; i++) { 
		 criterioId = criterios[i].value;
		 criteriosIds.push(criterioId);
		 rates = document.getElementsByName("rate" + pedidoId + "_" + criterioId);
		 for(var j = 0; j < rates.length; j++) {
			 if(rates[j].checked) {
				 notasValores.push(rates[j].value);
				 break ;
			 }
		 }
	 }
	 
	 var content = { pedidoId : pedidoId, criteriosIds : criteriosIds, notasValores : notasValores, comentario : comentario};
	 var bindArgs = {
		 url: "/diskcook/avaliarPedido.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/xml",
		 load: function(type, data, evt) {
		 	if(checkAjaxErrors(type, data, evt)){
				return;
			}
		 	$('tr#detalhes'+pedidoId+' div.boxAva').html("<center><br />Avaliação enviada com sucesso.</center>");
		}
	 };
	 
	 dojo.io.bind(bindArgs);
 }
 
 function enviarRestaurante() { 
	 var nomeRestaurante = document.getElementById("nomeRestaurante").value;
	 var precoMedio = document.getElementById("precoMedio").value;
	 var nomeContato = document.getElementById("nomeContato").value;
	 var email = document.getElementById("email").value;
	 var telefone = document.getElementById("telefone").value;
	 var comentario = document.getElementById("comentario").value;
	 var tiposCozinha = document.getElementById("tipoCozinha").value;

	 var content = { nomeRestaurante : nomeRestaurante, 
			 tipoCozinha : tiposCozinha, 
			 precoMedio : precoMedio, 
			 nomeContato : nomeContato, 
			 email : email, 
			 telefone : telefone,
			 comentario : comentario
	 };
	 
	 var bindArgs = {
		 url: "/diskcook/enviarRestaurante.ajax",
		 method: "post",
		 content: content,
		 mimetype: "text/xml",
		 load: function(type, data, evt) {
		 	if(checkAjaxErrors(type, data, evt)){
				return;
			}
		 	$('instRest').html("<center><br />Dados enviados com sucesso.</center>");
		}
	 };
	 
	 dojo.io.bind(bindArgs);
 }
 
 function abreDetalhesPedido(idPedido){
	$('tr#detalhes'+idPedido).show();
 }
 
 function showFormNovoEndereco(indice){
	 $('#adicionouNovoEndereco').val("true");
	 $('a#linkNewAddress').hide();
	 $('a#linkCancelAddress').show();
	 $('div#boxNewAddress').load('includes/formEndereco.jsp?i='+indice);
 }
 
 function hideFormNovoEndereco(){
	 $('#adicionouNovoEndereco').val("false");
	 $('a#linkCancelAddress').hide();
	 $('a#linkNewAddress').show();
	 $('div#boxNewAddress').html('');
 }
 
 function showFormNovoTelefone(indice){
	 $('#adicionouNovoTelefone').val("true");
	 $('a#linkCancelFone').show();
	 $('a#linkNewFone').hide();
	 $('div#boxNewFone').load('includes/formTelefone.jsp?i='+indice);
 }
 
 function hideFormNovoTelefone(){
	 $('#adicionouNovoTelefone').val("false");
	 $('a#linkCancelFone').hide();
	 $('a#linkNewFone').show();
	 $('div#boxNewFone').html('');
 }
 
 function cadastroNaoSeiMeuCep(end){
	 $('#naoSeiMeuCepWindow #qualEndereco').val(end);
	 $('#naoSeiMeuCepWindow').jqm();
	 $('#naoSeiMeuCepWindow').jqmShow();
 }
 
 function showFormComplementos(data){
	 $('#complementosWindow').jqm();
	 $('#complementosWindow').jqmShow();
	 if($(".jqmOverlay") != null)
		 $(".jqmOverlay").show();
	 $('#complementosWindow').html(data);
 }
 
 function hideFormComplementos() {
	 if($(".jqmWindow") != null)
		 $(".jqmWindow").html('');
	 if($(".jqmOverlay") != null)
		 $(".jqmOverlay").hide();
 }
 
 function showFormEsqueciMinhaSenha(){
	 $('#esqueciSenhaWindow').jqm();
	 $('#esqueciSenhaWindow').jqmShow();
 }
 
 function showMapaAreaEntrega(mapa){
	 $('#mapa' + mapa + 'Window').jqm();
	 $('#mapa' + mapa + 'Window').jqmShow();
 }
 
 function checkMaxLength(textarea){
	 if(textarea.value.length > 2000){
		 return false;
	 }
	 return true;
 }