function Request() {
	//Cria o objeto HTTP Request
	try{
	    var xmlhttp = new XMLHttpRequest();
	}catch(ee){
	    try{
	        var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	    }catch(e){
	        try{
				var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	        }catch(e){var xmlhttp = false;}
	    }
	}

  return xmlhttp;
}
//carrega o xml
// - retorno: funçao que devera ser chamada quando xml for carregado
function carregarXML(){
	httpRequest = Request();
	if (httpRequest){
		httpRequest.open("GET", "/catalogo_pneus/recauchutagem/js/recauchutagem_pneus.xml", true);
		httpRequest.onreadystatechange = function() {
			//verifica se ele ja esta totalmente carregado
			if(httpRequest.readyState == 4){ //4 = completamente carregado
				if(httpRequest.status == 200){ //o xml foi carregado com sucesso
					//atribui o resultado na variavel
					parsearXML(httpRequest.responseXML);
					
				}else{
					alert(httpRequest.statusText);
				}
			}
		}
		httpRequest.send(null);
	}
}

//variaveis com valores constantes que controlam os atributos(indicam os indices no xml), não alterar seus valores

//define os índices dos atributos dos elementos 'pneu'
var attr_url = 0;
var attr_descricao = 1;

//define os índices dos atributos dos elementos 'serviços'
var nome = 0;
var tracao = 1;
var tracao_moderada = 2;
var eixo_livre = 3;

//define os índices dos atributos dos 'atributo'
var medida = 0;
var largura = 1;
var sulco = 2;
var codigo = 3;

var arrPneus = new Array();
//parsearXML(): le o xml e trata seus dados para montar a tabela de pneu
//	- xml: objeto do HTTP Request carregado com os dados do XML
function parsearXML(xml){
	var pneus = xml.getElementsByTagName('pneus')[0].getElementsByTagName('pneu');
	for(var i = 0; i < pneus.length; i ++){
	    
		//cria o objeto pneu
		var pneu = new Object();
		
		//cria os atributos
		pneu.url = pneus[i].attributes[attr_url].value;
		pneu.descricao = pneus[i].attributes[attr_descricao].value;
		
		//monta o array de atributos de cada pneu
		pneu.servicos = new Array();
		pneu.atributos = new Array();
		
		//verifica se é um no valido(Bug mozila)
		var primeiroNo;
		for(var j = 0; j < pneus[i].childNodes.length; j ++)
		{
			if(pneus[i].childNodes[j].nodeType == 1)
			{
				primeiroNo = j;
				break;
			}
		}
		
		
		//Adciona os tipos de serviços de cada pneu
		for(var j = 0; j < pneus[i].childNodes[primeiroNo].childNodes.length; j ++)
		{
			var servico =  pneus[i].childNodes[primeiroNo].childNodes[j];
			
			if (servico.nodeType == 1)
			{
				var obj = new Object();
				obj.nome = servico.attributes[nome].value;
				obj.tracao = servico.attributes[tracao].value;
				obj.tracao_moderada = servico.attributes[tracao_moderada].value;
				obj.eixo_livre = servico.attributes[eixo_livre].value;
				
				pneu.servicos.push(obj);
			}
			
			delete servico;
		}
		
		//adiciona os atributos de cada pneu
		for(var j = 0; j < pneus[i].childNodes.length; j ++){
			var m = pneus[i].childNodes[j];
			//verifica se é um nó valido e se é um nó de atributos
			if (m.nodeType == 1 && m.nodeName == 'atributo')
			{
				var obj = new Object();
				obj.medida =  m.attributes[medida].value;
				obj.largura =  m.attributes[largura].value;
				obj.sulco = m.attributes[sulco].value;
				obj.codigo = m.attributes[codigo].value;
				pneu.atributos.push(obj);				
			}
			delete m;
		}
		
		
		//adiciona o objeto pneu ao array pneus
		arrPneus.push(pneu);
		delete pneu;
	}
		
	comboPneu();
}
//monta combo com todos os pneus
function comboPneu(){
	if(arrPneus.length > 0){
	
	    if(document.getElementById('comboMedida') != null)
	    {
	    
		    //limpa a div para escrever o combo
		    document.getElementById('comboMedida').innerHTML = '';
		    var combo = '';
		    combo +='<select onchange="comboServico(this.value)">';
		    combo +='<option value="">Selecione uma medida</option>';
		    var arrCombo = new Array();
    		
		    //percorre o array listando todas as medidas encontradas
		    for(var i = 0; i < arrPneus.length; i ++){
			    for (var j= 0; j < arrPneus[i].atributos.length; j ++){
				    //verifica se a medida ainda nao foi adicionada
				    if(arrCombo.join(',').indexOf(arrPneus[i].atributos[j].medida) < 0)
					    arrCombo.push(arrPneus[i].atributos[j].medida);
			    }
		    }
		    //ordena o array em ordem crescente
		    ordena(arrCombo);
		    //escreve as medidas encontradas
		    for(var i = 0; i < arrCombo.length; i++)
			    combo +='<option value="'+arrCombo[i]+'">'+arrCombo[i]+'</option>';
		    combo +='</select>'
		    //monta combo com os pneus
		    document.getElementById('comboMedida').innerHTML += combo;
		}	
	}
	else{
		alert('Nenhum pneu cadastrado');
	}
	
}
//gera o segundo combo
// - bMedida = variavel a ser comparada na busca para gerar o proximo combo
function comboServico(bMedida){
	//Cria array para armazenar os resultados da busca
	var arrResultados = new Array()
	str = '';
	str+= '<select onchange="comboEixo(this.value, \''+bMedida+'\')"><option value="">Selecione um serviço</option>';	
	for(var i = 0; i < arrPneus.length; i ++){
		for (var j = 0; j < arrPneus[i].atributos.length; j ++){
			//Compara se o pneu contem a medida passada em "bMedida" para adicionar o serviço correspondente
			if(arrPneus[i].atributos[j].medida == bMedida){
				for(var k = 0; k < arrPneus[i].servicos.length; k ++){
					//verifica se o serviço ainda nao foi adicionada					
					if(arrResultados.join(',').indexOf(arrPneus[i].servicos[k].nome) < 0)
						arrResultados.push(arrPneus[i].servicos[k].nome);
				}
			}
		}
	}
	//escreve os tipos de servicos encontrados
	for(var k = 0; k < arrResultados.length; k++)
		str+='<option value="'+arrResultados[k]+'">'+arrResultados[k] +'</option>';
	str += '</select>';
	document.getElementById('comboServico').innerHTML = str;
}

//gera o terçeiro combo
// - bServico = variavel a ser comparada na busca para gerar o proximo combo
// - bMedida = variavel recebida da funcao anterior utilizada para filtrar os resultados
function comboEixo(bServico, bMedida){
	var tracao = "Tração";
	var tracao_moderada = "Tração Moderada";
	var eixo_livre = "Eixo Livre"
	
	//Cria array para armazenar os resultados da busca
	var arrResultados = new Array()
	str = '';
	str+= '<select id="comboEixo2"><option value="">Selecione um eixo</option>';
	for(var i = 0; i < arrPneus.length; i ++){
		for (var j = 0; j < arrPneus[i].atributos.length; j ++){
			//Compara se o pneu contem a medida passada em "bMedida" para adicionar o serviço correspondente
			if(arrPneus[i].atributos[j].medida == bMedida){
				//Compara se o pneu contem o servico passada em "bServico" para adicionar o eixo correspondente
				for(var k = 0; k < arrPneus[i].servicos.length; k ++)
				{
					if(arrPneus[i].servicos[k].nome == bServico)
					{
						for(var e in arrPneus[i].servicos[k])
						{
							if(e != "nome" && arrPneus[i].servicos[k][e] != ""){
								//verifica se o serviço ainda nao foi adicionada					
								if(arrResultados.join(',').indexOf(eval(e)) < 0)
									arrResultados.push(eval(e));
							}
						}
					}
				}
			}
		}
	}
	//escreve os tipos de servicos encontrados
	for(var k = 0; k < arrResultados.length; k++)
		str+='<option value="' + arrResultados[k] + '">'+arrResultados[k] +'</option>';
	str += '</select> ';
	//cria link para a funçao que escreve o resultado
	str += '<a href="javascript:imprimirResultados(\''+bMedida+'\' , \''+bServico+'\', document.getElementById(\'comboEixo2\').value)"><img src="images/ok.gif" style="margin-bottom:-3px;" alt="" border="0"></a>';
	document.getElementById('comboEixo').innerHTML = str;
}

//funcao que cria uma div com os resultado encontrados na busca
function imprimirResultados(bMedida, bServico, bEixo){
	//verifica se todos os compos foram preenchidos
	if(bMedida == '' || bServico == '' || bEixo == ''){
		alert('Preencha todos os campos.');
		return;
	}	
	//Define as variaveis com o valor que deve ser mostrado na tela
	var tracao = "Tração";
	var tracao_moderada = "Tração Moderada";
	var eixo_livre = "Eixo Livre"
	
	var arrResultados = new Array();
	var tipoDeEixo, tipoDeServico, tipoMedida;
	var arrAux = new Array();
	for(var i = 0; i < arrPneus.length; i ++){
		for (var j = 0; j < arrPneus[i].atributos.length; j ++){
			//Compara se o pneu contem a medida passada em "bMedida" para adicionar o serviço correspondente
			if(arrPneus[i].atributos[j].medida == bMedida){
				arrPneus[i].tipoMedida = j;
				//Compara se o pneu contem o servico passada em "bServico" para adicionar o eixo correspondente
				for(var k = 0; k < arrPneus[i].servicos.length; k ++)
				{
					if(arrPneus[i].servicos[k].nome == bServico)
					{
						for(var e in arrPneus[i].servicos[k])
						{
							//Compara se o pneu contem o eixo passada em "bEixo" para adicionar o pneu ao array de resultados
							if(eval(e) == bEixo && arrAux.join("").indexOf(arrPneus[i].descricao) == -1)
							{
								tipoDeEixo = e;
								tipoDeServico = k;
								arrResultados.push(arrPneus[i]);
								arrAux.push(arrPneus[i].descricao)
							}
						}
					}
				}
			}
		}
	}
	//Cria os 
	var arrOpcional = new Array();
	var arrRecomendado = new Array();
	//Percorre o array de resultados distribuindo os pneus em arrayRecomendado e arrayOpcional
	for(var i = 0; i < arrResultados.length; i ++)
	{
		//verifica se o pneu é "Recomendado" para o tipo de serviço
		if(arrResultados[i].servicos[tipoDeServico][tipoDeEixo].toUpperCase() == "R")
			arrRecomendado.push(arrResultados[i]);
		else
			arrOpcional.push(arrResultados[i]);
	}	
	//escreve os pneus recomendados
	var resultadoRecomendado = '<b>Pneus Recomendados</b><br><table cellpadding="0" cellspacing="1" width="494" class="tabelaPneusCaminhoes" border="0"><tr><th>Pneu</th><th>Medida</th><th>Largura</th><th>Profundidade de sulco</th><th>' + eval(tipoDeEixo) + '</th></tr>';
	if(arrRecomendado.length == 0)
		resultadoRecomendado += '<tr><td colspan="5">Nenhum pneu encontrado</td></tr>';
	else{
		for(var i = 0; i < arrRecomendado.length; i ++){
			resultadoRecomendado += '<tr>';
			resultadoRecomendado += '<td><a href="'+arrRecomendado[i].url+'" class="item">'+arrRecomendado[i].descricao+'</a></td>';
			resultadoRecomendado += '<td>'+arrRecomendado[i].atributos[arrRecomendado[i].tipoMedida].medida+'</td>';
			resultadoRecomendado += '<td>'+arrRecomendado[i].atributos[arrRecomendado[i].tipoMedida].largura+'</td>';
			resultadoRecomendado += '<td>' + arrRecomendado[i].atributos[arrRecomendado[i].tipoMedida].sulco+'</td>';
			//td com valor fixo, pois o tipo de eixo já foi filtrado(pneu esta no array : arrRecomendado[])
			resultadoRecomendado += '<td>Recomendado</td>';
			resultadoRecomendado += '</tr>';
		}
	}
	resultadoRecomendado += '</table><br />';
	document.getElementById('resultadoRecomendado').innerHTML = resultadoRecomendado;
	
	
	//escreve os pneus opcionais
	var resultadoOpcionais = '<b>Pneus Opcionais</b><br><table cellpadding="0" cellspacing="1" width="494" class="tabelaPneusCaminhoes" border="0"><tr><th>Pneu</th><th>Medida</th><th>Largura</th><th>Profundidade de sulco</th><th>' + eval(tipoDeEixo) + '</th></tr>'
	if(arrOpcional.length == 0)
		resultadoOpcionais += '<tr><td colspan="5">Nenhum pneu encontrado</td></tr>';
	else{
		for(var i = 0; i < arrOpcional.length; i ++){
			resultadoOpcionais += '<tr>';
			resultadoOpcionais += '<td><a href="'+arrOpcional[i].url+'" class="item">'+arrOpcional[i].descricao+'</a></td>';
			resultadoOpcionais += '<td>'+arrOpcional[i].atributos[arrOpcional[i].tipoMedida].medida+'</td>';
			resultadoOpcionais += '<td>'+arrOpcional[i].atributos[arrOpcional[i].tipoMedida].largura+'</td>';
			resultadoOpcionais += '<td>' + arrOpcional[i].atributos[arrOpcional[i].tipoMedida].sulco+'</td>';
			//td com valor fixo, pois o tipo de eixo já foi filtrado(pneu esta no array : arrOpcional[])
			resultadoOpcionais += '<td>Opcional</td>';
			resultadoOpcionais += '</tr>';
		}
	}
	resultadoOpcionais += '</table><br />';
	document.getElementById('resultadosOpcionais').innerHTML = resultadoOpcionais;
	//Limpa os valores dos combos
	comboPneu();
	document.getElementById('comboServico').innerHTML = '<select disabled><option value="">Selecione um serviço</option></select>';
	document.getElementById('comboEixo').innerHTML = '<select disabled><option value="">Selecione um eixo</option></select> <img src="images/ok.gif" style="margin-bottom:-3px;" alt="" border="0">';
}

// busca pneu por nome
function buscarPneu(valor){
	var arrResultados = new Array();
	for(var i = 0; i < arrPneus.length; i ++){
		//Verifica se existe pneu com o nome passado em valor
		if(arrPneus[i].descricao.toLowerCase() == valor.toLowerCase())
			//se existir adiciona resultado ao array
			arrResultados.push(arrPneus[i]);
	}	
	//chama a funçao para mostrar os resultados da busca
	imprimirPneu(arrResultados);
}

function imprimirPneu(arr){
	var str = '<table cellpadding="0" cellspacing="1" width="494" class="tabelaPneusCaminhoes" border="0"><tr><th>Pneu</th><th>Código</th><th>Medida</th><th>Largura</th><th>Profundidade de sulco</th></tr>';
	//verifica se obteve resultado na busca
	if(arr.length > 0){
		for(var i = 0; i < arr.length; i ++){
			//agrupa os resultados em uma string
			var cont = 0
			for (var j= 0; j < arr[i].atributos.length; j ++){
				//verifica se esta na pagina de busca, para colocar link no nome do produto
				str += '<tr>';										
				if(cont == 0){
					str += '<td  rowspan="' + arr[i].atributos.length + '">' + arr[i].descricao + '</td>';
					cont = 1
				}
				str += '<td>' + arr[i].atributos[j].codigo + '</td>';
				str += '<td>' + arr[i].atributos[j].medida + '</td>';
				str += '<td>' + arr[i].atributos[j].largura + '</td>';
				str += '<td>' + arr[i].atributos[j].sulco + '</td>';
				str += '</tr>';
			}
		}
	}else{
		//se nao retornar valor, mostra mensagem
		str += '<tr><td align="center" colspan="12"><i>Nenhum pneu encontrado</i></td></tr>';
	}
	str += '</table>';
	//escreve resultado	
	document.getElementById('buscaPneu').innerHTML = str;
}

//função para ordenar os indices de um Array
function ordena(qualArray){
	for(i = 0; i < qualArray.length; i ++){
		for(j = 0; j < qualArray.length; j ++){
			if("" + qualArray[j] > qualArray[j + 1] + ""){
				temp = qualArray[j];
				qualArray[j] = qualArray[j + 1];
				qualArray[j + 1] = temp;
			}
		}
	}
}

