/**
 * Programacao ŕ medida para Miranda&Serra
 * Calculadora de margens 
 *  
 * @author HPC - 2009/2010 
 */

var current_prodid;

function toFloat(str) {
	if (str.indexOf(",")>=0) {
		str = str.replace(".","");
		str = str.replace(",",".");
	} 
	return parseFloat(str);
}

function selectMargem( modo ) {
	
	// inputs a introduzir pelo user
	var c_p_margem_objectivo = document.getElementById("c_p_margem_objectivo");
	var c_a_margem_objectivo = document.getElementById("c_a_margem_objectivo");

	if (modo=="percentagem") {
		if (c_p_margem_objectivo.value.length<=0) {
			alert("Por favor introduza a margem global do objectivo");
			return false;
		}

		// obter o valor acabado de calcular
		var pvp_final = document.getElementById("c_p_pvp_final");			
		
	} else {
		if (c_a_margem_objectivo.value.length<=0) {
			alert("Por favor introduza a margem global do objectivo");
			return false;
		}

		// obter o valor acabado de calcular
		var pvp_final = document.getElementById("c_a_pvp_final");			
		
	}

	// quantidade de items
	var qtd = $("qtd_" + current_prodid).value;

	qtd = toFloat(qtd);
	valor_pvp_final = toFloat(pvp_final.value);
	
	var tmp_value = valor_pvp_final / qtd;
	
	// actualizar valor unitário da linha (o formatado e o hidden)
	$("valor_item_" + current_prodid).value = tmp_value;
	$("vunit_" + current_prodid).update(formatCurrency(tmp_value));			
	
	// actualizar valor subtotal da linha			
	$("valor_subtotal_" + current_prodid).value = valor_pvp_final;			
	$("vsubtotal_" + current_prodid).update(formatCurrency(valor_pvp_final));			
	
	
	// actualizar total do documento 
	var total_documento = 0.00;
	
	$$(".subtotais").each(function (e) {
		total_documento += parseFloat(e.value);				
	});
	$("vtotal").update(formatCurrency(total_documento));
	$("hidden_total").value = total_documento;
	
	hideCalculadora();
}
function hideCalculadora() {
	$("calculadora").hide();
}
/**
* Mostra calculadora 
* actualiza valores vindo da proposta
*/
function showCalculadora(prodid) {
	$("calculadora").show();

	// meter o focus na primeira margem
	$('c_margem').focus();

	// vamos precisar do id do item corrente para recalcular
	current_prodid = prodid;

	// fazer os calculos
	calcular(prodid);
}
/**
* converte para %
*/
function percentagem( number ) {
	number = number * 100;
	return  number.toFixed(2);
}	
/** adiciona COMMAS */
function addCommas(nStr)
{
	nStr += '';
	nStr = nStr.replace(".",",");
	
	x = nStr.split(',');
	x1 = x[0];
	x2 = x.length > 1 ? ',' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + '.' + '$2');
	}
	return x1 + x2;
}
/**
* Converte para currency
*/
function currency( number) {
	//return Math.round( number * 100 ) / 100;
	var number2 = parseFloat(number);
	return number2.toFixed(2);

}
/**
* Le valor do input e 
* normaliza os numeros recebidos no formato: 1.200,45 -> 1200.45
* @return float
*/
function lerValor(field) {
	var tmpfield = document.getElementById(field);
	var valor = tmpfield.value;
	
	/*
	valor = valor.replace(".","");
	valor = valor.replace(",",".");
	*/
	if (valor.indexOf(",")>=0) {
		valor = valor.replace(".","");
		valor = valor.replace(",",".");
	} 
	return valor;
}
/**
* Escreve valor do input
* normaliza o valor para 1200.45 -> 1.200,45
*/
function escreveValor(fieldname, valor) {
	var tmpfield = document.getElementById(fieldname);
	tmpfield.value = addCommas(valor);
}
/**
* Metodo principal de calculo
*/
function calcular(prodid) {

	prodid = prodid==null? current_prodid : prodid;
	
	// 	obter valores
	var PVP = lerValor("valor_subtotal_" + prodid); 		// em euros - a receber
	var MARGEM_PERC = lerValor("c_margem"); 			// em % - a receber
	var MARGEM_PERC_2 = lerValor("c_margem_2"); 	// em % - a receber

	// calculos
	var MARGEM = MARGEM_PERC / 100; // margem
	var MARGEM_2 = MARGEM_PERC_2 / 100; // margem
	var pcusto_total = PVP * (1-MARGEM) * (1-MARGEM_2);
	var margem_actual = - ( pcusto_total /  PVP - 1 );

	// escrever valores
	escreveValor("c_pvp", currency(PVP));
	escreveValor("c_custototal", currency(pcusto_total));
	
	// inputs a introduzir pelo user
	var c_p_margem_objectivo = document.getElementById("c_p_margem_objectivo");
	var c_a_margem_objectivo = document.getElementById("c_a_margem_objectivo");

	if (c_p_margem_objectivo.length<=0 && c_a_margem_objectivo.length<=0) {
		alert("Por favor introduza um valor nos campos marcados com fundo branco");
		return false;
	}			
	
	// margem em percentagem
	// ============================
	escreveValor("c_p_margem_orcamento", percentagem( margem_actual ));

	var tmp1 = lerValor('c_p_margem_objectivo');
	
	// percentagem especificada
	if (tmp1>0) {
		
		var margem_objectivo = tmp1 / 100;
		var desconto_comercial = - ((pcusto_total/(1-margem_objectivo)) / PVP-1);
		var pvp_final =  PVP * (1-desconto_comercial);
		var lucro_bruto = pvp_final - pcusto_total;

		escreveValor("c_p_desc", percentagem(desconto_comercial));
		escreveValor("c_p_pvp_final", currency(pvp_final));
		escreveValor("c_p_lucro_bruto", currency(lucro_bruto));
		escreveValor("c_p_margem_final", percentagem( - (pcusto_total/pvp_final-1) ));
	}

	// margem em valor absoluto
	// ============================
	var margem_orcamento = PVP - pcusto_total;
	escreveValor("c_a_margem_orcamento", currency( margem_orcamento ));
	
	var tmp2 = lerValor('c_a_margem_objectivo');
	
	// percentagem especificada
	if (tmp2>0) {
		var margem_objectivo2 = tmp2;	
		var pvp_final2 = parseFloat(pcusto_total) + parseFloat(margem_objectivo2);
		var lucro_bruto2 = pvp_final2 - pcusto_total;
		var desconto_comercial2 = - (pvp_final2/PVP-1 );

		escreveValor("c_a_desc", percentagem(desconto_comercial2));
		escreveValor("c_a_pvp_final", currency(pvp_final2));
		escreveValor("c_a_lucro_bruto", currency(lucro_bruto2));
		escreveValor("c_a_margem_final", percentagem( - (pcusto_total/pvp_final2-1) ));
	}		
}
function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/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));
	return (((sign)?'':'-') + '€ ' + num + ',' + cents);
}
function limpar_calculadora() {
	$$("#calculadora input[type=text]").each(function (e) {

		if (e.id != "c_custototal" && e.id != "c_pvp" )	 {
			e.value = '';
		}			
	});

	// meter o focus na primeira margem
	$('c_margem').focus();
}