/** 
 * manipuladorComparacao.js - Script que vai inserir e retirar os itens a serem comparados, e apresentar o formulário
 * certo de acordo com a escolha do usuário
 */

/*
 ****************************************************************
 * Essa parte inicia os eventos da primeira parte da comparação *
 ****************************************************************
*/

_SE.setEvent( function (obj){ obj.startEventSelectType(); } );

startEvents.prototype.startEventSelectType = function (){
	/* links das etapas de comparação */
	var lnEtapaUm = $( "link_etapa_um" );
	var lnEtapaDois = $( "link_etapa_dois" );
	var lnEtapaTres = $( "link_etapa_tres" );
	/* div da primeira etapa */
	var etapaUm = $( "etapa_um" );
	/* Seletore de tipo de comparacao (radioButtons)*/
	var coisaFama = $("coisa_fama");
	var coisaComponente = $("coisa_componente");
	
	/**
	 * Desabilitando os botões de navegação de etapas de comparação
	 */
	try{
		lnEtapaDois.href = "javascript: ;";
		lnEtapaTres.href = "javascript: ;";

		lnEtapaDois.onmouseover = function () {
			this.style.color = "#b4b4b4";
			this.style.cursor = "default";
		}
	
		lnEtapaTres.onmouseover = function () {
			this.style.color = "#b4b4b4";
			this.style.cursor = "default";
		}
	
	/**
	 * dando ações aos botões de escolha de tipo de comparação
	 */
		var xmlRequest = new xmlHttpRequest();

		try{
			coisaFama.onclick = function (){ mostrarComp(xmlRequest,0);}	
			coisaComponente.onclick = function (){ mostrarComp(xmlRequest,1);}
		} catch(e){//temos que ter no IE também né...grrrr
			coisaFama.onclick = "javascript: mostrarComp(new XMLHttpRequest(),1)";
			coisaComponente.onclick = "javascript: mostrarComp(new XMLRequest(),0)";
		}
	} catch(e) {
		//mensagem de erro
		var comparacao = $("comparacao");
		showError(comparacao);
		hideLoadLabel();
	}
}

/*
 ********************************************************
 * Aqui temos os eventos da segunda parte da comparação *
 ********************************************************
*/

function mudarEtapas(toBlur,toFocus){
	var lnEtapaUm = $("link_etapa_um");
	var lnEtapaDois = $("link_etapa_dois");
	var lnEtapaTres = $("link_etapa_tres");
	//esconde 1 e mostra 2
	if(toBlur.id == lnEtapaUm.id){
		toBlur.setAttribute("class","etapas_blur etapa_um_blur");
		lnEtapaDois.setAttribute("class","etapas_focus etapa_dois_focus");
		lnEtapaDois.onmouseover = "";
		lnEtapaDois.onmouseout = "";
	}else if(toBlur.id == lnEtapaDois.id){
		toBlur.setAttribute("class","etapas_blur etapa_dois_blur");
		
		lnEtapaTres.setAttribute("class","etapas_focus etapa_tres_focus");
		lnEtapaTres.onmouseover = "";
		lnEtapaTres.onmouseout = "";
		
		lnEtapaDois.onmouseover = "";
		lnEtapaDois.onmouseout = "";
	}
}


/**
 * @param {Object} xmlRequest
 * @param {integer} type: 0 = comparacao fama absoluta; 1 = comp.: fama relativa 
 */
function mostrarComp(xmlRequest,type){
	showLoadLabel("carregando...");
	
	var texto;
	
	xmlRequest.onreadystatechange = function() { 
		if (xmlRequest.readyState == "4"){ 
			texto = xmlRequest.responseText;
			$( "etapa_um" ).innerHTML = texto;
			hideLoadLabel();
			
			//mostra ou não a comparação CC
			type == 0 ? $( "comp_CC" ).style.display = "none" : "";
			
			//dá um nome no título da comparação
			type == 0 ? $("etapa_um").getElementsByTagName("h3")[0].innerHTML += " Absoluta" : $("etapa_um").getElementsByTagName("h3")[0].innerHTML += " Relativa";
		}
	};

	xmlRequest.open ("GET","iniciar_comparacao2.html",true);
	xmlRequest.send(null);
	
	var link;
		
	if(browser == "Microsoft Internet Explorer"){
		link = mkElement("link",{"type":"text/css","rel":"stylesheet","href":cssDir+"/iniciar_comparacao2.ie.css","title":"Redefinição de estilos do IE"});
		document.getElementsByTagName("head")[0].appendChild(link);
	} else {
		link = mkElement("link",{"type":"text/css","rel":"stylesheet","href":cssDir+"/iniciar_comparacao2."+css_end+"css","title":"Redefinição de estilos do FF"});
		document.getElementsByTagName("head")[0].insertBefore(link,document.getElementsByTagName("head")[0].getElementsByTagName("link")[0]);
	}	
	var lnEtapaUm = $("link_etapa_um");
	var lnEtapaDois = $("link_etapa_dois");
	
	mudarEtapas(lnEtapaUm,lnEtapaDois);

	//carregar o script de ajuda
	loadHelpScript();	
}


//carregar o script de ajuda
function loadHelpScript() {
	var helpScript;
	var xmlRequest = new xmlHttpRequest();
	
	xmlRequest.onreadystatechange = function (){ 
		if(xmlRequest.readyState == 4){
			helpScript = xmlRequest.responseText;
			eval(helpScript);
			try{
				startEventHelp();
				startEventFormCompara();
			} catch(e) {
				showError($("comparacao"));
				hideLoadLabel();
			}
		}
	}
	
	xmlRequest.open("GET",scriptDir+"/helpDisplay.js",true);
	xmlRequest.send(null);
	
}


//inicia os eventos do formulário de comparação
function startEventFormCompara() {
	var etapaUm = $("etapa_um");
	var itemToInsert = $( "item" );
	var btnInsertItem = $( "btn_add_item" );
	var btnFechar = $( "btn_fecha_comparacao");
	var compCC = $( "comp_CC" );
	
	try{
		btnInsertItem.onclick = function () {insertItem( itemToInsert ); }
		
		loadScript(scriptDir+"/valida_form.js",true);
		valida_form_js = function(){ //btnFechar.onclick();}
		}
		
		btnFechar.onclick = function () { 
			var fld;
			var err = {"titulo":"titulo","assunto":"assunto","comp_obs":"Componente Observado","sinonimos":"sinonimos para o componente observado","tipo_item":"tipo de item "};
			if( compCC.style.display == 'none' ){//fama absoluta
			
				fld = fieldCheck($("formulario_de_comparacao"),{"comp_obs":"comp_obs","sinonimos":"sinonimos","item":"item"});
			
			}else{//fama relativa
			
				fld = fieldCheck($("formulario_de_comparacao"),{"item":"item","sinonimos":"sinonimos"});
				
			}
			if(fld == false){
				var ul = $("itens_comparacao").getElementsByTagName("ul");
				if( ul.length >= 1 && ul[0].childNodes.length >= 2){ 
					compCC.style.display == 'none' ? comparar() : comparar_cc();
				} else{ 
					var errMsg = "Você precisa inserir pelo menos dois itens na comparação para prosseguir.";
					var frm = $("formulario_de_comparacao");
					try{
						if(frm.getElementById("form_error").innerHTML != errMsg){
							frm.getElementById("form_error").innerHTML = errMsg;
						}
					}catch(e){
						var spanError = mkElement("span",{"id":"form_error"});
						spanError.innerHTML = errMsg;
						frm.appendChild(spanError);
					}
					$("item").style.border = "2px solid red";
					$("item").onkeydown = function() { this.style.borderColor = "#dedede";this.onkeydown = ""; $("form_error").innerHTML = "";}
				}
			}else{
				var errMsg = "Você deve preencher o campo " + err[ fld.name ];
				var frm = $("formulario_de_comparacao");
				try{
					if(frm.getElementById("form_error").innerHTML != errMsg){
						frm.getElementById("form_error").innerHTML = errMsg;
					}
				}catch(e){
					var spanError = mkElement("span",{"id":"form_error"});
					spanError.innerHTML = errMsg;
					frm.appendChild(spanError);
				}
				fld.style.border = "2px solid red";
				fld.onkeydown = function() { this.style.borderColor = "#dedede";this.onkeydown = ""; $("form_error").innerHTML = "";}
			}
		}
		itemToInsert.onkeyup = function (e){
			var keyNum;
			if(window.event){//IE fix
	    		keyNum = window.event.keyCode;
			} else if(e.keyCode){//gecko_based e opera
	   			keyNum = e.keyCode;
       		}
			if(keyNum == 13){//13 = enter
	    		insertItem( this );
        	}
			//alert(keyNum);
    	};
	}catch(e) {
		showError(e);
		hideLoadLabel();
	}
}

//função que insere os itens na comparação
function insertItem( txtElement ) {
    if( txtElement.value == "" || txtElement.value == " ") return false;
   
    try
    {
        $( "itens_comparacao" ).getElementsByTagName("ul")[0].innerHTML;
    }catch(e)
    {
        var ulContainer = document.createElement("ul");
        $( "itens_comparacao" ).appendChild(ulContainer);
    }
    var itensBlock = $( "itens_comparacao" ).getElementsByTagName("ul")[0];//ul
    var newItem = document.createElement("li");
    var newAnchor = document.createElement("a");
    var newImg = document.createElement("img");
    var itemToExclude;
    newAnchor.href = "javascript: void(0)";
    newAnchor.title = "Exluir Item";
    itemToExclude = itensBlock.childNodes.length;

    newImg.src = "../images/comparacao/ico_excluir.gif";
    newImg.alt = "Exluir";
    
    newAnchor.appendChild(newImg);
    newItem.innerHTML = txtElement.value;
    newItem.appendChild(newAnchor);
    //exluir a linha
    newItem.getElementsByTagName('a')[0].onclick = function () { removeItem( newItem );}
    itensBlock.appendChild(newItem);
        
    //### Se o texto for muito grande, n�s o limitaremos ##
    var divContainer = $( "itens_comparacao" );
    var w = txtElement.value.length * 10 + 30;

    if( w > 400 )    {
        divContainer.style.width = "400px";
    } else if( divContainer.offsetWidth < w || divContainer.offsetWidth > 400) {
        divContainer.style.width = w+"px";
    }
    
    txtElement.value = "";
    txtElement.focus();

}

//função que remove os itens da comparação
function removeItem ( itemToRemove ){
    var itensBlock = $( "itens_comparacao" ).getElementsByTagName("ul")[0];
    itemToRemove.innerHTML = ""; 
    itensBlock.removeChild(itemToRemove);
    
    try
    { 
        itensBlock.getElementsByTagName("li")[0].innerHTML;
    } catch(e)
    {
        $( "itens_comparacao" ).removeChild( itensBlock );
    }
}

var cp;

//função que executa a comparação
function comparar(){ 
	cp = new comparacao(cp);
	cp.setItensToComp();
	
	cp.setCompAttribute(new Array("titulo","assunto","tipo_item"));

	showLoadLabel();
	var cpCB =  new Array("cp.showComp","_SE.startEventAddNewItem()");
	cp.doComp(1,cpCB);
}

//função que executa comparações de fama relativa
function comparar_cc(){
	cp = new comparacao();
	cp.setItensToComp();
	
	cp.setCompAttribute(new Array("titulo","assunto","tipo_item","comp_obs","sinonimos"));
	
	showLoadLabel();
	
	var cpCB =  new Array("cp.showComp","_SE.startEventAddNewItem()");
	cp.doComp(2,cpCB);
}


/*
 ****************************************************************************
 * Aqui estão eventos e funções relativos ao terceiro estágio da comparação *
 ****************************************************************************
 */


//mostra o gráfico graph e esconde o gToHide
function showGraphs(graph,gToHide){
	graph.style.display = "block";
	gToHide.style.display = "none";
}

//muda as cores das abas do quadro de gráficos
function changeTabColor(toFocus,toBlur){
	toFocus.setAttribute("class","focused");
	toBlur.setAttribute("class","blured");
}

//_SE.setEvent( function(obj) {obj.graphLink()} );

//inicia os eventos de gráficos junto com o carregamento da página
startEvents.prototype.graphLink = function (){
	var linkBarra = $( "barra" );
	var linkPizza = $( "pizza" );
	var gPizza = $("gpizza");
	var gBarra = $("gbarra");
	linkBarra.onclick = function (){ showGraphs(gBarra,gPizza); changeTabColor(this,linkPizza); }
	linkPizza.onclick = function (){ showGraphs(gPizza,gBarra); changeTabColor(this,linkBarra); }
	
	changeTabColor(linkPizza,linkBarra);
	
	linkBarra.onmouseover = function () { tabFocus( this ); }
	linkPizza.onmouseover = function () { tabFocus( this ); }
}

//dá foco à aba el
function tabFocus(el){
	var border = el.style.borderTop;
	var color = el.style.color;
	
	el.style.borderTop = "1px solid #99cc00";
	
	el.style.color = "white";
	
	el.onmouseout = function () { this.style.borderTop = border; this.style.color = color;}
}

startEvents.prototype.startEventAddNewItem = function (){
	var item = document.getElementById( "new_item" );
	var btnAdd = $( "btn_add_new_item" );

	btnAdd.onclick = function (){
		cp = new comparacao();
		/**
		 * @TODO: continuar tentando resolver o problema da inserção de itens novos
		 */
		var itc;
		var table = document.getElementsByTagName("table")[0].tBodies[0];
		for (var i = 1; i < table.getElementsByTagName("tr").length; i++ ){
			//alert(table.getElementsByTagName("tr")[i].innerHTML);
		}
		cp.setItensToComp(true,item.value);
		
		var tipoComp = $("tipo_comp").value;
		var atributes;
		tipoComp == 1 ?	atributes = new Array("new_item","assunto") : atributes = new Array("new_item","assunto","sinonimos","comp_obs");

		cp.setCompAttribute(atributes);
		
		showLoadLabel();
		
		var cpCB =  new Array("cp.showNewComp()");
		
		cp.doComp(tipoComp,cpCB);
	}
}

/*****************************************
 * Enviando comparação para ser guardada *
 *****************************************/
function guardarComparacao(){
	var titulo,tipo,assunto,comp_obs,sinonimos,tipo_item,itens,valores,valores2;
	titulo = $("titulo").value;
	assunto = $("assunto").value;
	tipo_item = $("tipo_item").value;
	tipo = $("tipo_comp").value;
	itens = document.getElementsByClassName("item_comparado");
	valores = document.getElementsByClassName("valor_encontrado");
	
	if(tipo == 2){//fama relativa
		comp_obs = $("comp_obs").value;
		sinonimos = $("sinonimos").value;
		valores2 = document.getElementsByClassName("comp_cc_ref_val");//valores escondidos no tr
		var val2 = [];
		for(var e in valores2){
			if(typeof(valores2[ e ]) != "function"){
				val2[ e ] = Math.round(valores2[e].getAttribute("val_cc"));
				valores[ e ] = Math.round(valores2[e].getAttribute("val_normal"));
			}
		}
		valores2 = val2;
	}else{
		for( var e in valores){
			if(typeof(valores[e] != "function")){
				valores[e] = Math.round(valores[e].innerHTML);
			}
		}
	}
	
	
	var table = $("etapa_um").getElementsByTagName("table")[0].tBodies[0];	
	
	var nForm = mkElement("form",{"method":"post","action":"../modules/guardar_comparacao.php","id":"nForm"});
	var lForm = mkElement("fieldset");
	var fTitulo = mkElement("input",{"type":"hidden","name":"titulo","value":titulo});
	var fAssunto = mkElement("input",{"type":"hidden","name":"assunto","value":assunto});
	var fTipo_item = mkElement("input",{"type":"hidden","name":"tipo_item","value":tipo_item});
	var fTipoComp = mkElement("input",{"type":"hidden","name":"tipo_comp","value":tipo});

	lForm.appendChild(fTitulo);
	lForm.appendChild(fAssunto);
	lForm.appendChild(fTipo_item);
	lForm.appendChild(fTipoComp);

	
	var fItens = mkElement("input",{"type":"hidden","name":"itens","value":itens.propertyJoin(";","innerHTML")});
	var fValores = mkElement("input",{"type":"hidden","name":"valores","value":valores.join(";")});
	
	lForm.appendChild(fItens);
	lForm.appendChild(fValores);	
		
	if(tipo == 2){
		var fComp_obs = mkElement("input",{"type":"hidden","name":"comp_obs","value":comp_obs});
		var fSinonimos = mkElement("input",{"type":"hidden","name":"sinonimos","value":sinonimos});
		var fValores2 = mkElement("input",{"type":"hidden","name":"valores2","value":valores2.join(";")});
		
		lForm.appendChild(fComp_obs);
		lForm.appendChild(fSinonimos);
		lForm.appendChild(fValores2);
	}
	

	
	nForm.appendChild(lForm);
	
	$("etapa_um").appendChild(nForm);
	nForm.submit();
}