/**
 * Reinicia a wizard de complementos para corrigir as opções escolhidas
 * 
 * @param index índice da wizard a ser corrigida. Se for nulo quer dizer que estamos no popup.
 */
function corrigirOpcoes(index){
	
	if (!index){		
		index = "";
	}
	
	// Nome da primeira aba
	var firstTabName = "tipoComplemento0-tab";
	
	// tabContainerDiv que contém todas as abas para o índice fornecido
	var tabContainerDiv = document.getElementById("tipos-complemento-container-"+index);
	//alert("tabContainerDiv: " + tabContainerDiv);
	
	// Obter a primeira aba do tab container div (1º neto)
	var firstTab = dojo.dom.firstElement(dojo.dom.firstElement(tabContainerDiv));
	//alert("Primeira aba: " + firstTab.id);
	
	// Exibe o div contendo a imagem de processamento
	//document.getElementById("processing").style.display = "block";
	
	if(!isInternetExplorerNavigator()){
		//registers the click method for div elements cuz w3 doesnt want it in the dom
		HTMLDivElement.prototype.click = function() {
			var evt = this.ownerDocument.createEvent('MouseEvents');
			evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
			this.dispatchEvent(evt);
		}
	}
	
	// Fires the click method
	firstTab.click();
	
	// Exibe o botão "Próxima"
	escondeMostraElemento("nextTabButton"+index);
	// Esconde os botões "Corrigir" e "Pedir"
	escondeMostraElemento("btnCorrigir"+index);
	escondeMostraElemento("btnPedir"+index);
	
	// Esconder o div contendo a imagem de processamento
	//document.getElementById("processing").style.display = "none";
}

/**
 * Valida se a quantidade preenchida para um dado complemento está correta
 * 
 * @param qtdeComplemento quantidade do complemento
 * @param qtdeMinima quantidade mínima permitida para o complemento
 * @param qtdeMinima quantidade máxima permitida para o complemento
 */
function validaQuantidadeComplemento(qtdeComplemento, qtdeMinima, qtdeMaxima, qtdeProduto){
	
	//alert("qtdeProduto: " + qtdeProduto);
	
	if (!qtdeComplemento.value || qtdeComplemento.value == ""){
		return;
	}
	
	if (!isNumber(qtdeComplemento.value)){
		alert("A quantidade deve ser um número positivo.");
		// Reinicia o valor do campo
		qtdeComplemento.value = "0";
		qtdeComplemento.focus();
		return;
	}
	
	if (qtdeComplemento.value < qtdeProduto * qtdeMinima){
		alert("A quantidade não pode ser menor do que " + qtdeMinima);
		qtdeComplemento.value = "0";
		qtdeComplemento.focus();
		return;
	}
	
	if (qtdeComplemento.value > qtdeProduto * qtdeMaxima){
		alert("A quantidade não pode ser maior do que " + qtdeMaxima);
		qtdeComplemento.value = "0";
		qtdeComplemento.focus();
		return;
	}
	
	var totalQtdes = new Number(0);
	
	// Verificar se as somas das quantidades não ultrapassam o valor total que pode ser pedido
	var qtdeComplementoArray = document.getElementsByName("qtdeComplemento");
	
	for(var i =0; i < qtdeComplementoArray.length; i ++) {
		var qtde = qtdeComplementoArray[i];
		if (qtde.value && qtde.value != ""){
			totalQtdes += new Number(qtde.value);
		}
	}
	
	//alert("totalQtdes: " + totalQtdes);
	if (totalQtdes > qtdeProduto * qtdeMaxima){
		alert("A quantidade total de complementos não pode ser maior que " + qtdeMaxima);
		qtdeComplemento.value = "0";
		qtdeComplemento.focus();
		return;
	}
}

/**
 * Atualiza a observação do produto de código informado
 * 
 * @param tab DIV contendo todos os campos necessários para alteração das
 * quantidades dos complementos
 */
function validaTipoComplementoAjax(tab){
	
	
	// Montar o array de variáveis a serem enviadas na requisição
	var content = prepareContent(tab);
	
	// Varíavel para conter a mensagem de retorno;
	var msg;
	
	var bindArgs = {
		url: "/diskcook/validaTipoComplemento.ajax",
		method: "post",
		content: content,
		mimetype: "text/xml",
		sync: true,
		load: function(type, data, evt) { 
			// Fecha o popup de observacao
			msg = processValidaTipoComplementoResponse(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
	
	//alert("retornando msg...");
	return msg;
}

function prepareContent(tab){
	
	//alert("prepareContent...");
	
	// recupera todos os filhos do DIV
	var childNodes = tab.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 < childNodes.length; i++) {
		if (dojo.dom.isNode(childNodes[i]) && ( childNodes[i].type == "input" || childNodes[i].type == "hidden")){
			elementNodes[j++] = childNodes[i];
		}
	}
	if(elementNodes.length > 0){
		// Recupera os dados do produto
		var fornecedorId = elementNodes[0].value;
		//alert("fornecedorId: " + fornecedorId);
		var codProduto = elementNodes[1].value;
		//alert("codProduto: " + codProduto);
		var codTipoComplemento = elementNodes[2].value;
		//alert("codTipoComplemento: " + codTipoComplemento);
		var qtdeMinimaComplemento = elementNodes[3].value;
		//alert("qtdeMinimaComplemento: " + qtdeMinimaComplemento);
		var qtdeMaximaComplemento = elementNodes[4].value;
		//alert("qtdeMaximaComplemento: " + qtdeMaximaComplemento);
		
		// Obtendo os arrays de codComplemento e qtdeComplemento
		var codComplemento = dojo.html.getElementsByClass("codComplementoClass", tab, "input");
		//alert(codComplemento.length + " INPUT codComplemento encontrados");
		
		// Iterar sobre o array de INPUT contendo os códigos dos complementos, sobrescrevendo os elementos INPUT pelos seus valores no mesmo array
		for(var i = 0; i < codComplemento.length; i++) {
			if (codComplemento[i].type == "radio"){
				if (codComplemento[i].checked){
					//alert(codComplemento[i].value + " foi selecionado.");	
					codComplemento = new Array(codComplemento[i].value);
					break;
				}
			} else {
				codComplemento[i] = codComplemento[i].value;
			} 
		}
		
		var qtdeComplemento = dojo.html.getElementsByClass("qtde-complemento-input", tab, "input");
		//alert(qtdeComplemento.length + " INPUT qtdeComplemento encontrados");
		
		// Iterar sobre o array de INPUT contendo as quantidades dos complementos, sobrescrevendo os elementos INPUT pelos seus valores no mesmo array
		for(var i = 0; i < qtdeComplemento.length; i++) {
			qtdeComplemento[i] = qtdeComplemento[i].value;
		}
		
		var content = {fornecedorId: fornecedorId, codProduto: codProduto, codTipoComplemento: codTipoComplemento, qtdeMinimaComplemento: qtdeMinimaComplemento, qtdeMaximaComplemento: qtdeMaximaComplemento, codComplemento: codComplemento, qtdeComplemento: qtdeComplemento };
		
	}
	return content;
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>validaTipoComplementoAjax</code>
 * retornando uma mensagem de erro caso as quantidades dos tipos de complementos tenham sido informadas
 * erradas.
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * 
 * @return Mensagem indicando sucesso ou falha na operação.
 */
function processValidaTipoComplementoResponse(type, data, evt){
	
	if (type == "error"){
		alert("Erro encontrado ao validar o tipo de complemento.");
		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 msg = dojo.dom.textContent(elementNodes[0]);
	//alert(msg);
	
	return msg;
}


/**
 * Busca o conteúdo da aba de resumo a ser incluído em um div de id "summaryContainer"
 * 
 * @return summaryTabHtml HTML da aba de resumo
 */
function getSummaryTabHtmlAjax(){
	
	// Varíavel para conter a mensagem de retorno;
	var summaryTabHtml;
	
	var bindArgs = {
		url: "/diskcook/includes/resumoWizardComplementos.jsp",
		method: "post",
		mimetype: "text/html",
		sync: true,
		load: function(type, data, evt) { 
			// Fecha o popup de observacao
			summaryTabHtml = processGetSummaryTabResponse(type, data, evt)
		}
	};
   
	// Executa a chamada Ajax
	dojo.io.bind(bindArgs);	
	
	//alert("retornando html da aba de resumo...");
	return summaryTabHtml;
	
}

/**
 * Processa o conteúdo da resposta Ajax da função <code>getSummaryTabHtmlAjax</code>
 * retornando o código HTML da aba de resumo
 * 
 * @param type se o valor desse parâmetro for igual a "error", um erro foi encontrado na requisição AJAX
 * @param data a resposta Ajax
 * @param evt eventos dojo
 * 
 * @return HTML da aba de resumo
 */
function processGetSummaryTabResponse(type, data, evt){
	
	if (type == "error"){
		alert("Erro encontrado ao obter o conteúdo da aba de resumo.");
		return;
	}
	
	//alert("HTML retornado: " + data);
	
	return data;
}

/**
 * Reinicia a wizard de complementos após inserir o item no carrinho de compras
 * 
 * @param index índice da wizard a ser reiniciada.
 */
function reiniciaWizardComplementos(index){
	
	//alert("Reiniciar a wizard de complementos de índice " + index);
	
	// tab container que conterá a wizard que iremos validar
	var tabContainer = document.getElementById("tipos-complemento-container-"+index);
	
	// Reinicia a aba de resumo das escolhas
	document.getElementById("summaryContainer"+index).innerHTML = "";
	
	if (!tabContainer){
		alert("Erro ao reiniciar a wizard de complementos.");
		return;
	}
	
	// Conjunto de abas
	var tabSet = dojo.html.getElementsByClass("ditch-tab-pane", tabContainer, "div");
	//alert(tabSet.length + " div encontrados com a classe ditch-tab-pane");
	
	for(var i = 0; i < tabSet.length; i++) {
		var tabSetChildNodes = tabSet[i].childNodes;
		
		// Recupera todos os nós que são elementos (Node.ELEMENT_NODE)
		for(var j = 0; j < tabSetChildNodes.length; j++) {
			if (dojo.dom.isNode(tabSetChildNodes[j]) && tabSetChildNodes[j].id != "summaryContainer"+index){
				//alert("node: " + tabSetChildNodes[j].id);
				
				// Obtendo os arrays de codComplemento e qtdeComplemento
				var codComplemento = dojo.html.getElementsByClass("codComplementoClass", tabSetChildNodes[j], "input");
				//alert(codComplemento.length + " INPUT codComplemento encontrados");
				
				// Iterar sobre o array de INPUT contendo os códigos dos complementos, reiniciando-os
				for(var k = 0; k < codComplemento.length; k++) {
					if (codComplemento[k].type == "radio"){
						codComplemento[k].checked = "";
					}
				}
				
				var qtdeComplemento = dojo.html.getElementsByClass("qtde-complemento-input", tabSetChildNodes[j], "input");
				//alert(qtdeComplemento.length + " INPUT qtdeComplemento encontrados");
				
				// Iterar sobre o array de INPUT contendo as quantidades dos complementos, sobrescrevendo os elementos INPUT pelos seus valores no mesmo array
				for(var x = 0; x < qtdeComplemento.length; x++) {
					qtdeComplemento[x].value = "0";
				}
			}
		}
	}
	
	// Invocar função para nos redirecionar para primeira aba
	corrigirOpcoes(index);
}