abrirModalFormulaContrato = function() {
	Modal.open('modal-pesquisa-formula-os-contrato');
};

fechaModalPesquisaFormulaOsContrato = function(){
	Modal.close('modal-pesquisa-formula-os-contrato');
};

/** XXX -----------------ABA FORMULA DO CONTRATO-------------------* */

inserirFormulaContrato = function() {
	var ans = new CIT_ContratoFormulaOsDTO();
	ans = formulaContratoItem();
	var colunas = [ "descricao", "" ];
	var funcaoExibirIcons = [ exibeIconesTabelaFormula ];
	adicionaLinhaEmTable('tblFormula', ans, colunas, funcaoExibirIcons,
			document.formCadastroContrato);
	var objsCriterios = HTMLUtils.getObjectsByTableId('tblFormula');
	document.formCadastroContrato.colItens_Formula_Serialize.value = ObjectUtils
			.serializeObjects(objsCriterios);
	document.getElementById('rowIndexFormula').value = '';

	fechaModalPesquisaFormulaOsContrato();
};

formulaContratoItem = function() {
	var ans = new CIT_ContratoFormulaOsDTO();
	ans.idContrato = document.getElementById('idContrato').value != null ? document
			.getElementById('idContrato').value
			: '';
	ans.idContratoFormulaOs = document.getElementById('idContratoFormulaOs').value;
	ans.idFormulaOs = document.getElementById('idFormulaOs').value;
	ans.descricao = document.getElementById('descricaoFormulaContrato').value;
	return ans;
};

exibeIconesTabelaFormula = function(row, obj) {
	var linkExcluir = '';
	$(row.cells[1]).css("width", "8%");
	$(row.cells[1]).addClass("center");
	if(permissaoDelete == true){
		linkExcluir = '<a title="'
			+ i18n_message("citcorpore.comum.excluir")
			+ '" onclick="controlarDelecaoLinhaTabelaFormulasOs(this.parentNode.parentNode.rowIndex);" class=\"btn-action glyphicons remove_2 btn-default\" style=\"float:left;\"><i></i></a>';
	}
	var visualizarFormula = "<a onclick='visualizarFormula(this.parentNode.parentNode.rowIndex)' class='btn-action glyphicons calculator btn-primary' style='float: right; margin-left:0.5%;'><i></i></a>"
	row.cells[1].innerHTML = linkExcluir.concat(visualizarFormula);
};

visualizarFormula = function(index) {
	var lista = ObjectUtils.deserializeCollectionFromString(document.formCadastroContrato.colItens_Formula_Serialize.value);
	for (var i = 0; i < lista.length; i++) {
		if (index == i + 1) {
			var ans = new CIT_ContratoFormulaOsDTO();
			ans = lista[i];
			if (ans.idFormulaOs != null && ans.idFormulaOs != '') {
				document.formCadastroContrato.idFormulaSelecionada.value = ans.idFormulaOs;
				document.formCadastroContrato.fireEvent('visualizarFormula');
				break;
			}
		}
	}
}

controlarDelecaoLinhaTabelaFormulasOs = function(index) {
	var lista = ObjectUtils
			.deserializeCollectionFromString(document.formCadastroContrato.colItens_Formula_Serialize.value);
	for (var i = 0; i < lista.length; i++) {
		if (index == i + 1) {
			var ans = new CIT_ContratoFormulaOsDTO();
			ans = lista[i];
			if (ans.idContratoFormulaOs != null
					&& ans.idContratoFormulaOs != '') {
				document.getElementById('colItens_Delecao_Formula_Comunicacao').value += ans.idContratoFormulaOs
						+ ",";
				break;
			}
		}
	}

	removeLinhaTabela('formCadastroContrato', 'colItens_Formula_Serialize',
			'tblFormula', index);
};



// ======================== COPIADO DO FORMULAOS.JS

var pilha_abertura = 0;
var pilha_fechamento = 0;
var formulaValidada = "";

var chaves = new RegExp("\{[0-9|a-z|A-Z]+}", "g");

function replaceAll(find, replace, str) {
	return str.replace(new RegExp(find, 'g'), replace);
}

function verificarOperador() {
	pilha_abertura = 0;
	pilha_fechamento = 0;
	var espressao = document.formCadastroContrato.formula.value;
	espressao = replaceAll(" ", "", espressao);
	document.formCadastroContrato.formula.value = espressao;
	formulaValidada = espressao;
	espressao = espressao.replace(chaves, "");// remover labels
	espressao = verificarOqueNaoENUmero(espressao);
	return verificar_parenteses(espressao);
}

function verificarOqueNaoENUmero(string) {
	if (string.indexOf("vValor") != -1 || string.indexOf("vValue") != -1) {
		string = replaceAll(/vValor|vValue/gi, "1", string);

	}
	if (string.indexOf("vDiasUteis") != -1 || string.indexOf("vWeekdays") != -1 || string.indexOf("vDiasHabiles") != -1) {
		string = replaceAll(/vDiasUteis|vWeekdays|vDiasHabiles/gi, "2", string);

	}
	if (string.indexOf("vDiasCorridos") != -1 || string.indexOf("vCalendarDays") != -1) {
		string = replaceAll(/vDiasCorridos|vCalendarDays/gi, "3", string);

	}
	if (string.indexOf("vNumeroUsuarios") != -1 || string.indexOf("vNumberOfUsers") != -1) {
		string = replaceAll(/vNumeroUsuarios|vNumberOfUsers/gi, "4", string);

	}
	if (string.indexOf("vComplexidade") != -1 || string.indexOf("vComplexity") != -1 || string.indexOf("vComplejidad") != -1) {
		string = replaceAll(/vComplexidade|vComplexity|vComplejidad/gi, "5", string);
	}
	return string;
}

function parenteses_bem_formados() {
	if (pilha_abertura == pilha_fechamento)
		return true;
	else
		return false;
}

function verificar_parenteses(formula) {
	if (parenteses_bem_formados()) {
		return verificar_operacoes(formula);
	} else {
		alert(i18n_message("formula.FormulaInvalida"));
		return false;
	}

}

function empilhar_parenteses(valor) {
	if (valor == '(') {
		pilha_abertura++;
	} else if (valor == ')') {
		pilha_fechamento++;
	}

	if (pilha_fechamento > pilha_abertura)
		return false;
	else
		return true;
}

var numero = new RegExp(/[0-9]/);

function verificar_operacoes(formula) {
	var resp = true;
	for (var i = 0; i < formula.length; i++) {
		if (formula[i] == '*' || formula[i] == '/') {
			if ((formula[i - 1] == ')' || numero.test(formula[i - 1])) && (formula[i + 1] == '(' || numero
					.test(formula[i + 1]) || formula[i + 1] == '+' || formula[i + 1] == '-')) {
				console.log("operado...<br>");
			} else {
				resp = false;
				break;
			}
		} else if (formula[i] == '+' || formula[i] == '-') {
			if ((formula[i - 1] == null || formula[i - 1] == '/' || formula[i - 1] == '*' || formula[i - 1] == '(' || formula[i - 1] == ')' || numero
					.test(formula[i - 1])) && (formula[i + 1] == '(' || numero
					.test(formula[i + 1]))) {
				console.log("operado...<br>");
			} else {
				resp = false;
				break;
			}
		}
	}

	if (resp) {
		return true;
	} else {
		alert(i18n_message("formula.FormulaInvalida"));
		return false
	}

}

function MostrarFormula() {
	var formula = document.formCadastroContrato.formula.value;
	if (formula != "") {
		if (verificarOperador()) {
			var formula = formulaValidada;
			$("#formulaMontada").empty();
			var html = "<b id='idB'>"
			html += formula;
			if (html.indexOf("vValor") != -1 || html.indexOf("vValue") != -1) {
				html = replaceAll("vValor|vValue", "<input type='text' class='vValor span12 Format[numeric]' style='width: 35px;' id=Valor name='Valor'  required='required'>", html);
			}
			if (html.indexOf("vDiasUteis") != -1 || html.indexOf("vWeekdays") != -1 || html.indexOf("vDiasHabiles") != -1) {
				html = replaceAll("vDiasUteis|vWeekdays|vDiasHabiles", "<b>" + i18n_message("formula.DiasUteis") + "</b>", html);

			}
			if (html.indexOf("vDiasCorridos") != -1 || html.indexOf("vCalendarDays") != -1) {
				html = replaceAll("vDiasCorridos|vCalendarDays", "<b>" + i18n_message("citcorpore.comum.diasCorridos") + "</b>", html);

			}
			if (html.indexOf("vNumeroUsuarios") != -1 || html.indexOf("vNumberOfUsers") != -1) {
				html = replaceAll("vNumeroUsuarios|vNumberOfUsers", "<b>" + i18n_message("formula.NumeroDeUsuarios") + "</b>", html);

			}
			if (html.indexOf("vComplexidade") != -1 || html.indexOf("vComplexity") != -1 || html.indexOf("vComplejidad") != -1) {
				html = replaceAll("vComplexidade|vComplexity|vComplejidad", "<select id='RetComplexidade' name='RetComplexidade' style='width: 130px;' class='vComplexidade span12 Valid[Required]'>"+
						"<option value='1'>" + i18n_message("citcorpore.comum.complexidadeBaixa") + "</option>"+
						"<option value='2'>" + i18n_message("citcorpore.comum.complexidadeIntermediaria") + "</option>"+
						"<option value='3'>" + i18n_message("citcorpore.comum.complexidadeMediana") + "</option>"+
						"<option value='4'>" + i18n_message("citcorpore.comum.complexidadeAlta") + "</option>"+
						"<option value='5'>" + i18n_message("citcorpore.comum.complexidadeEspecialista") + "</option></select>",html);
			}
			html += "</b>";
			html += "</br>";
			html += "<button class='btn btn-default btn-primary' type='button' onclick='visualizarValorFinal();' id='calcularValorFinal' style='margin-top: -9px; margin-left: 15px;' name='add'>" + i18n_message("formula.Simular") + "</button>";
			html += "</br>";
			while (html.indexOf("{") != -1 || html.indexOf("}") != -1) {
				html = html.replace("{", "  ");
				html = html.replace("}", "  ");
			}

			Modal.open('modal-visualizarFormula');
			$("#formulaMontada").append(html);
		} else {
			$("#formulaMontada").empty();
		}
	}
}

function visualizarValorFinal() {
	var estrututaFormula = document.getElementById('formula').value;
	var totalValor = $(".vValor").length;
	var totalComplexidade = $(".vComplexidade").length;
	var formulaFinal = "";
	var formulaAuxiliar = estrututaFormula;

	var arrayValores = new Array();
	if (totalValor != 0) {
		for (i = 0; i < totalValor; i++) {
			var obj = $(".vValor")[i];
			if (obj.value == "") {
				alert(i18n_message("formula.ExistemCamposEmBranco"));
				return false;
			} else {
				arrayValores[i] = obj.value;
			}

		}
	}

	if (arrayValores.length != 0) {
		var aux1 = "";
		var aux2 = "";
		var aux3 = formulaAuxiliar;

		for (i = 0; i < arrayValores.length; i++) {
			aux1 = "";
			for (j = 0; j < aux3.length; j++) {
				aux1 += aux3[j];
				if (aux1.indexOf("vValor") != -1 || aux1.indexOf("vValue") != -1)
					break;
			}
			aux3 = aux3.replace(aux1, "");
			aux2 += aux1.replace(/vValor|vValue/gi, arrayValores[i]);
			if ((i + 1 == arrayValores.length) && aux3 != "") {
				aux2 += aux3;
			}
		}
		formulaAuxiliar = aux2;
	}

	var arrayComplexidade = new Array();
	if (totalComplexidade != 0) {
		for (i = 0; i < totalComplexidade; i++) {
			var obj = $(".vComplexidade")[i];
			if (obj.value == "") {
				alert(i18n_message("formula.ExistemCamposEmBranco"));
				return false;
			} else {
				arrayComplexidade[i] = obj.value;
			}
		}
	}

	if (arrayComplexidade.length != 0) {
		var aux1 = "";
		var aux2 = "";// variavel que ir� armazenar a formula final sem os
						// input
		var aux3 = formulaAuxiliar;

		for (i = 0; i < arrayComplexidade.length; i++) {
			aux1 = "";
			for (j = 0; j < aux3.length; j++) {
				aux1 += aux3[j];
				if (aux1.indexOf("vComplexidade") != -1 || aux1.indexOf("vComplexity") != -1 || aux1.indexOf("vComplejidad") != -1)
					break;
			}
			aux3 = aux3.replace(aux1, "");
			aux2 += aux1.replace(/vComplexidade|vComplexity|vComplejidad/gi, arrayComplexidade[i]);
			if ((i + 1 == arrayComplexidade.length) && aux3 != "") {
				aux2 += aux3;
			}
		}
		formulaAuxiliar = aux2;
	}

	var strAux = formulaAuxiliar;
	var index1 = 0;
	var index2 = 0;
	var strPedaco = "";

	for (i = 0; i < formulaAuxiliar.length; i++) {
		strPedaco = "";
		if (formulaAuxiliar[i].indexOf("{") != -1) {
			index1 = i;
			for (j = i; j < formulaAuxiliar.length; j++) {
				if (formulaAuxiliar[j].indexOf("}") != -1) {
					index2 = j + 1;
					break;
				}
			}
			for (j = index1; j < index2; j++) {
				strPedaco += formulaAuxiliar[j];
			}

			strAux = strAux.replace(strPedaco, "");
		}
	}
	formulaFinal = strAux;

	$("#formulaSimulada").val(formulaFinal);
	document.formCadastroContrato.fireEvent("simularCalculo");
}

function setarResultado(resultado) {
	$("#resultadoFormula").empty();
	$("#resultadoFormula").append(resultado);
}

function fecharModalVisualizarFormula() {
	$("#resultadoFormula").empty();
	Modal.close('modal-visualizarFormula');
}