/* Filename: calculate.js
 * Responsible: Stefan Pilakouris (SP)
 */


function CommaToDot(str) { return String(str).replace(/,/g,"."); }
function DotToComma(str) { return String(str).replace(/\./g,","); }
function MakeNum(str) {	return (str==0)?String(str).replace( /0/g, "" ):String(str).replace( /[^0-9]/g, "" ); }

function RoundNumber(number,decimal_points) {
	if(!decimal_points) return Math.round(number);
	if(number == 0) {
		var decimals = "";
		for(var i=0;i<decimal_points;i++) decimals += "0";
		return "0."+decimals;
	}
	var exponent = Math.pow(10,decimal_points);
	var num = String(Math.round((number * exponent)));
	//var numInt = num.slice(0,-1*decimal_points);
	//var decimals = num.slice(-1*decimal_points);
	//newNum = numInt + "." + decimals;
	num = num.slice(0,-1*decimal_points) + "." + num.slice(-1*decimal_points);
	if ( String(num.substr(0,1)) == "." ) { num = "0" + num.substr(0,num.length); }
	//alert("number = [" + number + "]\nnum = [" + num + "]\nnumInt = [" + numInt + "]\ndecimals = [" + decimals + "]");
	return num;

}

function DisplayNumber(str) {	return DotToComma(RoundDefault(str)); }
function RoundDefault(str) { return RoundNumber(CommaToDot(str),2); }
function RoundToInt(str) { return Math.round(CommaToDot(str)); }

function CalculateForeignAmountNum(amount, rate, multi) {
	return (amount * multi) / rate;
}

function CalculateForeignAmount(localAmount, exchangeRate, multiplier) {
	var amount = parseFloat(localAmount);
	var rate = parseFloat(exchangeRate);
	var multi = parseInt(multiplier);
	return String(CalculateForeignAmountNum(amount, rate, multi));
}

function CalculateForeignAmountAndRound(localAmount, exchangeRate, multiplier) {
	var amount = parseFloat(localAmount);
	var rate = parseFloat(exchangeRate);
	var multi = parseInt(multiplier);
	return Math.round((amount * multi) / rate);
}

function CalculateLocalAmountNum(amount, rate, multi) {
	return amount * rate / multi;
}

function CalculateLocalAmount(foreignAmount, exchangeRate, multiplier) {
	var amount = parseFloat(foreignAmount);
	var rate = parseFloat(exchangeRate);
	var multi = parseInt(multiplier);
	return String(CalculateLocalAmountNum(amount, rate, multi));
}

function CalculateLocalAmountAndRound(foreignAmount, exchangeRate, multiplier) {
    var amount = parseFloat(foreignAmount);
    var rate = parseFloat(exchangeRate);
    var multi = parseInt(multiplier);
    return Math.round((amount * rate) / multi);
}

function CalculateForeignAmountReversed(localAmount, exchangeRate, multiplier) {
    var amount = parseFloat(localAmount);
    var rate = parseFloat(exchangeRate);
    var multi = parseInt(multiplier);
    return String((amount / multi) / rate);
}

function CalculateForeignAmountAndRoundReversed(localAmount, exchangeRate, multiplier) {
    var amount = parseFloat(localAmount);
    var rate = parseFloat(exchangeRate);
    var multi = parseInt(multiplier);
    return Math.round((amount / multi) / rate);
}

function CalculateLocalAmountReversed(foreignAmount, exchangeRate, multiplier) {
    var amount = parseFloat(foreignAmount);
    var rate = parseFloat(exchangeRate);
    var multi = parseInt(multiplier);
    return String((amount / rate) * multi);
}

function CalculateLocalAmountAndRoundReversed(foreignAmount, exchangeRate, multiplier) {
    var amount = parseFloat(foreignAmount);
    var rate = parseFloat(exchangeRate);
    var multi = parseInt(multiplier);
    return Math.round((amount / rate) * multi);
}

function UpdateShoppingCart() {
  location.reload();
  tbNumToBuy.focus();
}

function ValidateNumber(number) {
	if (isNaN(number)) {
		return 0;
	}
	else {
		if (number < 0) {
			return 0;
		}
		else {
			return number;
		}
	}
}


function MinimumDenominationRoundedAmount(foreignAmount, minimumDenomination) {

	foreignAmount = parseFloat(foreignAmount);
	minimumDenomination = parseInt(minimumDenomination);
	
	if (foreignAmount > minimumDenomination)
	{
		var mod = foreignAmount % minimumDenomination;
		if (mod < (minimumDenomination / 2))
			return foreignAmount - mod;
		else
			return foreignAmount + (minimumDenomination - mod);
	}
	return foreignAmount;
}

function MinimumDenominationRoundedAmountFromLocal(localAmount, exchangeRate, multiplier, minimumDenomination)
{
	return MinimumDenominationRoundedAmount(CalculateLocalAmount(localAmount, exchangeRate, multiplier), minimumDenomination);
}


/*
** Returns the caret (cursor) position of the specified text field.
** Return value range is 0-oField.length.
*/
function GetCaretPosition (oField) {
	
	var iCaretPos = 0; // Initialize

	if (document.selection) { // IE Support
		oField.focus (); // Set focus on the element
		var oSel = document.selection.createRange (); // To get cursor position, get empty selection range
		oSel.moveStart ('character', -oField.value.length); // Move selection start to 0 position
		iCaretPos = oSel.text.length; // The caret position is selection length
	}
	else if (oField.selectionStart || oField.selectionStart == '0') { // Firefox support
		iCaretPos = oField.selectionStart;
	}
	return (iCaretPos); // Return results
}


/*
** Sets the caret (cursor) position of the specified text field.
** Valid positions are 0-oField.length.
*/
function SetCaretPosition (oField, iCaretPos) {
	if (document.selection) { // IE Support
		oField.focus (); // Set focus on the element
		var oSel = document.selection.createRange (); // Create empty selection range
		oSel.moveStart ('character', -oField.value.length); // Move selection start and end to 0 position
		oSel.moveStart ('character', iCaretPos); // Move selection start and end to desired position
		oSel.moveEnd ('character', 0);
		oSel.select ();
	}
	else if (oField.selectionStart || oField.selectionStart == '0') { // Firefox support
		oField.selectionStart = iCaretPos;
		oField.selectionEnd = iCaretPos;
		oField.focus ();
	}
}
