/*
 * Retorna o elemento com o id informado
 * @param String nis Id do elemento
 */
function recebe(idElemento) {
	return document.getElementById(idElemento);
}

/* Retorna o elemento pelo tagName */
function tagsHTML(elemento)
{
	return document.getElementsByTagName(elemento);
}

/* Retorna o elemento pelo className */
function classes(classe)
{
	return document.getElementsByClassName(classe);
}

/* Insere HTML no código */
function insereHTML(elemento, mensagem)
{
	elemento.innerHTML = mensagem;
}
/* Expandi campo ====================*/
function ExpandeCampo(idCampo)
{
	var Campo = recebe(idCampo);
	
	if (Campo.className == 'mostraCampo')
	{
		Campo.className = 'escondeCampo';
	}
	else
	{
		Campo.className = 'mostraCampo';
	}
}


function validaCampo(elemento)
{
	elementoVal = recebe('val_' + elemento.id);
	
	insereHTML(elementoVal, "");
	elementoVal.className = "";
	
	if(elemento.value == "")
	{
		insereHTML(elementoVal, "Campo obrigatório!");
		elementoVal.className = "campoObrigatorio";
		retorno = false;
		elemento.focus();
	}
}


// classes

function Emprestimo(idEmprestimo, produto, valorMinimo, parcelaMinima, valorMaximo, parcelaMaxima, taxa)
{
	var idEmprestimo;
	var produto;
	var valorMinimo;
	var parcelaMinima;
	var valorMaximo;
	var parcelaMaxima;
	var taxa;
	
	this.idEmprestimo = idEmprestimo;
	this.produto = produto;
	this.valorMinimo = valorMinimo;
	this.parcelaMinima = parcelaMinima;
	this.valorMaximo = valorMaximo;
	this.parcelaMaxima = parcelaMaxima;
	this.taxa = taxa;
}

// ----- funções que gerenciam o calculo de empréstimo

function criarParcelas(campo)
{
	var divParcelas = recebe('divCalculo');
	insereHTML(divParcelas, '');
	var tabelaCalculo = recebe('divTabelaCalculo');
	insereHTML(tabelaCalculo, ''); 
	
	for(var i=0; i<vetorEmprestimo.length; i++)
	{
		if (navigator.userAgent.indexOf('MSIE 6') != -1 || navigator.userAgent.indexOf('MSIE 7') != -1)
		{
			campo.form.submit();
			break;
		}

		if(campo.value == vetorEmprestimo[i].idEmprestimo)
		{
			liValor = document.createElement('li');
			
			labelValor = document.createElement('label');
			labelValor.setAttribute('for', 'txtValor');
			
			labelValor_text = document.createTextNode("Valor:");
			labelValor.appendChild(labelValor_text);
			
			inputTxtValor = document.createElement('input');
			inputTxtValor.setAttribute('onkeypress','javascript:return MascaraMoeda(this,".",",",event);');
			inputTxtValor.setAttribute('onblur','javascript:return validaMaximoMinimo(this);');
			inputTxtValor.setAttribute('class','campo');
			inputTxtValor.setAttribute('id','txtValor');
			inputTxtValor.setAttribute('name','txtValor');
			inputTxtValor.setAttribute('style','width:188px;');
			inputTxtValor.setAttribute('type','text');
			
			inputHdMinimo = document.createElement('input');
			inputHdMinimo.setAttribute('value',vetorEmprestimo[i].valorMinimo);
			inputHdMinimo.setAttribute('id','hdMinimo');
			inputHdMinimo.setAttribute('name','hdMinimo');
			inputHdMinimo.setAttribute('type','hidden');
			
			inputHdMaximo = document.createElement('input');
			inputHdMaximo.setAttribute('value',vetorEmprestimo[i].valorMaximo);
			inputHdMaximo.setAttribute('id','hdMaximo');
			inputHdMaximo.setAttribute('name','hdMaximo');
			inputHdMaximo.setAttribute('type','hidden');
			
			divVal_txtValor = document.createElement('div');
			divVal_txtValor.setAttribute('id','val_txtValor');
			
			p = document.createElement('p');
			p.setAttribute('style','width:188px; padding:5px; margin:10px 0 0 90px; font-size:11px;');
			p.setAttribute('class','statusAlerta');
			p_textValorMinimo = document.createTextNode("Valor mínimo: R$ " + float2moeda(vetorEmprestimo[i].valorMinimo));
			p_textBr = document.createElement('br');
			p_textValorMaximo = document.createTextNode("Valor máximo: R$ " + float2moeda(vetorEmprestimo[i].valorMaximo));
			p.appendChild(p_textValorMinimo);
			p.appendChild(p_textBr);
			p.appendChild(p_textValorMaximo);
			
			liValor.appendChild(labelValor);
			liValor.appendChild(inputTxtValor);
			liValor.appendChild(inputHdMinimo);
			liValor.appendChild(inputHdMaximo);
			liValor.appendChild(divVal_txtValor);
			liValor.appendChild(p);
			
			liParcelas = document.createElement('li')
			
			labelParcelas = document.createElement('label');
			labelParcelas.setAttribute('for','txtParcelas');
			labelParcelas_text = document.createTextNode('N° Parcelas:');
			labelParcelas.appendChild(labelParcelas_text);
			
			selectParcelas = document.createElement('select');
			selectParcelas.setAttribute('id','txtParcelas');
			selectParcelas.setAttribute('name','txtParcelas');
			
			optionBranco = document.createElement('option');
			optionBranco.setAttribute('value','0');
			
			optionBranco_text = document.createTextNode('Selecione');
			optionBranco.appendChild(optionBranco_text);
			selectParcelas.appendChild(optionBranco);
			
			for(var ind=vetorEmprestimo[i].parcelaMinima; ind<=vetorEmprestimo[i].parcelaMaxima; ind++)
			{
				option = document.createElement('option');
				option.setAttribute('value',ind);
				option_text = document.createTextNode(ind);
				option.appendChild(option_text);
				selectParcelas.appendChild(option);
			}
			
			liParcelas.appendChild(labelParcelas);
			liParcelas.appendChild(selectParcelas);
			
			liBotao = document.createElement('li');
			inputBotao = document.createElement('input');
			inputBotao.setAttribute('disabled','disabled');
			inputBotao.setAttribute('onclick','javascript:return calcularEmprestimo();');
			inputBotao.setAttribute('style','margin:0 0 0 90px;');
			inputBotao.setAttribute('class','botaoPqn');
			inputBotao.setAttribute('value','Calcular');
			inputBotao.setAttribute('name','btnCalcular');
			inputBotao.setAttribute('id','btnCalcular');
			inputBotao.setAttribute('type','submit');
			
			liBotao.appendChild(inputBotao);
			
			divParcelas.appendChild(liValor);
			divParcelas.appendChild(liParcelas);
			divParcelas.appendChild(liBotao);
		}
	}
}

function calcularEmprestimo()
{
	if (navigator.userAgent.indexOf('MSIE 6') != -1 || navigator.userAgent.indexOf('MSIE 7') != -1)
	{
		return true;
	}
	var txtValor = recebe('txtValor');
	var txtParcelas = recebe('txtParcelas');
	var selProdutos = recebe('selProdutos');
	
	var valor = txtValor.value.replace(".", "");
	valor = valor.replace(",",".");
	
	var saldo = parseFloat(valor);
	
	for(var i=0; i<vetorEmprestimo.length; i++)
	{
		if(parseInt(selProdutos.value) == parseInt(vetorEmprestimo[i].idEmprestimo))
		{
			var valorDivido = parseFloat(valor) / parseFloat(txtParcelas.value);
			var total = 0;
			
			var tabela = document.createElement('table');
			tabela.setAttribute('style','');
			tabela.setAttribute('class','tabelaPadrao');
			tabela.setAttribute('id','tabelaSimulacao');
			
			trTitulo = document.createElement('tr');
			
			thTituloParcela = document.createElement('th');
			thTituloParcela.setAttribute('style','width:50px;');
			thTituloParcela_text = document.createTextNode('Parcela');
			thTituloParcela.appendChild(thTituloParcela_text);
			
			thTituloValor = document.createElement('th');
			thTituloValor.setAttribute('style','width:100px;text-align: center;');
			thTituloValor_text = document.createTextNode('Valor');
			thTituloValor.appendChild(thTituloValor_text);
			
			trTitulo.appendChild(thTituloParcela);
			trTitulo.appendChild(thTituloValor);
			
			tabela.appendChild(trTitulo);
			
			for(var ind=1; ind<=parseInt(txtParcelas.value); ind++)
			{
				taxa = saldo * vetorEmprestimo[i].taxa;
				saldo = saldo - valorDivido;
				parcela = parseFloat(valorDivido) + parseFloat(taxa);
				
				var trListaParcela = document.createElement('tr');
				
				var tdListaParcela = document.createElement('td');
				tdListaParcela.setAttribute('style','text-align: center;');
				var tdListaParcela_text = document.createTextNode(ind);
				tdListaParcela.appendChild(tdListaParcela_text);
				
				var tdListaValor = document.createElement('td');
				tdListaValor.setAttribute('style','text-align: right;');
				var tdListaValor_text = document.createTextNode(float2moeda(parcela));
				tdListaValor.appendChild(tdListaValor_text);
				
				trListaParcela.appendChild(tdListaParcela);
				trListaParcela.appendChild(tdListaValor);
				
				tabela.appendChild(trListaParcela);
				
				total = parseFloat(total) + parseFloat(parcela);
			}
			
			trTotal = document.createElement('tr');
			
			thTotal = document.createElement('th');
			thTotal_text = document.createTextNode('Total:');
			thTotal.appendChild(thTotal_text)
			
			tdTotal = document.createElement('td');
			tdTotal.setAttribute('style','text-align: right;');
			
			strongTotal = document.createElement('strong');
			strongTotal_text = document.createTextNode('R$ ' + float2moeda(total));
			strongTotal.appendChild(strongTotal_text);
			
			tdTotal.appendChild(strongTotal);
			
			trTotal.appendChild(thTotal);
			trTotal.appendChild(tdTotal);
			
			tabela.appendChild(trTotal);
			
			var tabelaCalculo = recebe('divTabelaCalculo');
			insereHTML(tabelaCalculo, '');
			tabelaCalculo.appendChild(tabela);
			return false;
		}
	}
}

// ---- Valida valor máximo ou mínimo
function validaMaximoMinimo(elemento)
{
	var valor = elemento.value.replace(".","");
	valor = valor.replace(",",".");
	var elementoVal = recebe('val_' + elemento.id);
	insereHTML(elementoVal, '');
	elementoVal.className = '';
	
	var btnCalcula = recebe('btnCalcular');
	btnCalcula.disabled = false;
	
	var minimo = recebe('hdMinimo');
	var maximo = recebe('hdMaximo');
	
	if(valor != "")
	{
		if(parseFloat(valor) < parseFloat(minimo.value))
		{
			insereHTML(elementoVal, 'O valor informado é menor que o mínimo para esse produto!');
			elementoVal.className = "campoObrigatorio";
			btnCalcula.disabled = true;
			elemento.focus();
			return false;
		}
		if(parseFloat(valor) > parseFloat(maximo.value))
		{
			insereHTML(elementoVal, 'O valor informado é maior que o máximo para esse produto!');
			elementoVal.className = "campoObrigatorio";
			btnCalcula.disabled = true;
			elemento.focus();
			return false;
		}
	}
	else
	{
		insereHTML(elementoVal, 'Campo obrigatório!');
		elementoVal.className = "campoObrigatorio";
		btnCalcula.disabled = true;
		elemento.focus();
		return false;
	}
	return true;
}


function float2moeda(num)
{
	x = 0;
	if(num<0)
	{
		num = Math.abs(num);
		x = 1;
	}
	
	if(isNaN(num))
		num = "0";
		
  	cents = Math.floor((num*100+0.5)%100);

	num = Math.floor((num*100+0.5)/100).toString();

	if(cents < 10)
	   cents = "0" + cents;
  	
	  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    	num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
    ret = num + ',' + cents;
    
	if (x == 1)
		ret = ' - ' + ret;
	return ret;
}


// --- FORMATO MOEDA

//-----------------------------------------------------
//Funcao: MascaraMoeda
//Sinopse: Mascara de preenchimento de moeda
//Parametro:
//   objTextBox : Objeto (TextBox)
//   SeparadorMilesimo : Caracter separador de milésimos
//   SeparadorDecimal : Caracter separador de decimais
//   e : Evento
//Retorno: Booleano
//Autor: Gabriel Fróes - www.codigofonte.com.br
//-----------------------------------------------------
function MascaraMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
    //var whichCode = (window.Event) ? e.which : e.keyCode;
	var whichCode = (window.addEventListener) ? e.which : e.keyCode;    
    // 13=enter, 8=backspace as demais retornam 0(zero)
    // whichCode==0 faz com que seja possivel usar todas as teclas como delete, setas, etc    
    if ((whichCode == 13) || (whichCode == 0) || (whichCode == 8))
    	return true;
    key = String.fromCharCode(whichCode); // Valor para o código da Chave
 
 
    if (strCheck.indexOf(key) == -1) 
    	return false; // Chave inválida
    len = objTextBox.value.length;
    for(i = 0; i < len; i++)
        if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) 
        	break;
    aux = '';
    for(; i < len; i++)
        if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) 
        	aux += objTextBox.value.charAt(i);
    aux += key;
    len = aux.length;
    if (len == 0) 
    	objTextBox.value = '';
    if (len == 1) 
    	objTextBox.value = '0'+ SeparadorDecimal + '0' + aux;
    if (len == 2) 
    	objTextBox.value = '0'+ SeparadorDecimal + aux;
    if (len > 2) {
        aux2 = '';
        for (j = 0, i = len - 3; i >= 0; i--) {
            if (j == 3) {
                aux2 += SeparadorMilesimo;
                j = 0;
            }
            aux2 += aux.charAt(i);
            j++;
        }
        objTextBox.value = '';
        len2 = aux2.length;
        for (i = len2 - 1; i >= 0; i--)
        	objTextBox.value += aux2.charAt(i);
        objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
    }
    return false;
}


/**  
 * Função para aplicar máscara em campos de texto
 * Copyright (c) 2008, Dirceu Bimonti Ivo - http://www.bimonti.net 
 * All rights reserved. 
 * @constructor  
 */ 
 
/* Version 0.27 */

/**  
  * Função Principal 
  * @param w - O elemento que será aplicado (normalmente this).
  * @param e - O evento para capturar a tecla e cancelar o backspace.
  * @param m - A máscara a ser aplicada.
  * @param r - Se a máscara deve ser aplicada da direita para a esquerda. Veja Exemplos.
  * @param a - 
  * @returns null
  * 
  * 1. w: Referência ao elemento. Normalmente é this.
  *	2. e: Evento usado para cancelar o Backspace.
  * 3. m: Máscara a ser aplicada.
  * 4. r: Aplicar a mascara da direita para a esquerda. Opcional [true|false] - Dafault : false.
  * 5. a: Objeto com informações para aplicar após a máscara. Use você precisar aplicar alguma informação sempre no começo ou no fim do valor independente da máscara, como exemplo "R$" em campos do tipo monetário. Sintaxe: {[pre:'value'[,pos:'value']]}.
  *   
  */

function maskIt(w,e,m,r,a){
    
    // Cancela se o evento for Backspace
    if (!e) var e = window.event
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
        
    // Variáveis da função
    var txt  = (!r) ? w.value.replace(/[^\d]+/gi,'') : w.value.replace(/[^\d]+/gi,'').reverse();
    var mask = (!r) ? m : m.reverse();
    var pre  = (a ) ? a.pre : "";
    var pos  = (a ) ? a.pos : "";
    var ret  = "";

    if(code == 9 || code == 8 || txt.length == mask.replace(/[^#]+/g,'').length) return false;

    // Loop na máscara para aplicar os caracteres
    for(var x=0,y=0, z=mask.length;x<z && y<txt.length;){
        if(mask.charAt(x)!='#'){
            ret += mask.charAt(x); x++;
        } else{
            ret += txt.charAt(y); y++; x++;
        }
    }
    
    // Retorno da função
    ret = (!r) ? ret : ret.reverse()    

        
   if (w.value.match("-")){
        w.value = "-"+ret+pos;
    }else{
        w.value = pre+ret+pos;
    }
 
}

// Novo método para o objeto 'String'
String.prototype.reverse = function()
{
    return this.split('').reverse().join('');
}


function validaForm()
{
	var retorno = true;
	var cpObrig = classes('obrigatorio');
	var focus = true;
	
	for(var i=0; i < cpObrig.length; i++)
	{
		var elementoVal = recebe("val_" + cpObrig[i].id);
		
		insereHTML(elementoVal, "");
		elementoVal.className = "";
		
		if(cpObrig[i].value == "")
		{
			if(focus)
			{
				cpObrig[i].focus();
				focus = false;
			}
			insereHTML(elementoVal, "Campo obrigatório!");
			elementoVal.className = "campoObrigatorio";
			retorno = false;
		}
	}
	return retorno;
}