var yearArr = [1, 5, 10, 20];
var chartSize = "300x200";

function numFormat(num) {
    var res = num;
    /* decimal point */
    if (res.toFixed) {
        res = res.toFixed(0);
        if (num > 0 && res == 0) {
            res = num;
        }
    }
    /* thousands */
    var regExp = /(\d+)(\d{3})/;
    while (regExp.test(res)) {
        res = res.replace(regExp, '$1' + ',' + '$2');
    }
    return res;
}

function calculate() {
	/* get investment amount */
    var elem = document.getElementById("inv_amount");
    if (!elem.value) {
        alert("Error: Investment amount is missing.");
        elem.focus();
        return false;
    }
    if (!/^\$?[0-9, ]+(\.\d{1,2})?$/.test(elem.value)) {
        alert("Error: Invalid investment amount.");
        elem.focus();
        return false;
    }
	var amount = elem.value.replace(/[,$ ]/g, "");
	/* get LJL Funding current yield */
    var elem = document.getElementById("inv_ljl_yield");
	if (!elem || !elem.value) {
			return false;
	}
	var ljlYield = elem.value;
	/* get interest on current investment */	
    var elem = document.getElementById("inv_cur_yield");
    if (elem.value && !/^\d+(\.\d{1,2})?\s?%?$/.test(elem.value)) {
        alert("Error: Invalid interest on your current investment.");
        elem.focus();
        return false;
    }
	var curYield = elem.value.replace(/[% ]/, "");
	/* get current investment compounding */
    var elem = document.getElementById("inv_cur_compound");
	if (elem) {
		var curCompunding = elem.options[elem.selectedIndex].value;
	}

	/* fill results table */
	var ljlArr = new Array();
	var curArr = new Array();
	/*
	ljlArr.push(amount);
	if (curYield) {
		curArr.push(amount);
	}
	*/
	for (var i = 0; i < yearArr.length; i++) {
		years = yearArr[i];
		var ljlFV = amount * Math.pow((1 + ljlYield / 100), years);
		ljlArr.push(ljlFV);
		var elem = document.getElementById("res_ljl_" + years);
		if (elem) {
			elem.firstChild.data = "$" + numFormat(ljlFV);
		}
		var elem = document.getElementById("res_cur_" + years);
		if (curYield) {
			var curFV = amount * Math.pow((1 + curYield / (100 * curCompunding)), years * curCompunding);
			curArr.push(curFV);
			if (elem) {
				elem.firstChild.data = "$" + numFormat(curFV);
				elem.style.display = "";
			}
		} else if (elem) {
			elem.style.display = "none";
		}
	}
	
	/* hide or show current investment header */
	var elem = document.getElementById("res_cur_inv_hdr");
	if (elem) {
		if (curYield) {
			elem.style.display = "";
		} else {
			elem.style.display = "none";
		}
	}

	/* find max value for data mapping to the chart scale */
	var ljlMaxVal = 0;
	for (i = 0; i < ljlArr.length; i++) {
		if (ljlArr[i] > ljlMaxVal) {
			ljlMaxVal = ljlArr[i];
		}
	}
	var curMaxVal = 0;
	for (i = 0; i < curArr.length; i++) {
		if (curArr[i] > curMaxVal) {
			curMaxVal = curArr[i];
		}
	}
	var maxVal = Math.max(ljlMaxVal, curMaxVal);
	
	/* prepare chart data */
	var coef = 100 / maxVal;
	var ljlData = "";
	for (i = 0; i < ljlArr.length; i++) {
		if (ljlData) {
			ljlData += ",";
		}
		var x = coef * ljlArr[i] ;
		ljlData += x.toFixed(1);
	}
	var curData = "";
	for (i = 0; i < curArr.length; i++) {
		if (curData) {
			curData += ",";
		}
		var x = coef * curArr[i];
		curData += x.toFixed(1);
	}
	if (ljlMaxVal > curMaxVal) {
		chartData = ljlData;
		if (curData) {
			chartData += "|" + curData;
		}
		var firstColor = "224499";
		var secondColor = "8FBC8F";
	} else {
		chartData = curData;
		if (ljlData) {
			chartData += "|" + ljlData;
		}
		var firstColor = "8FBC8F";
		var secondColor = "224499";
	}
	
	/* prepare y-labels */
	var yLabelData = "";
	for (i = 1; i <= 5; i++) {
		var x = i * 20 / coef;
		if (x > 1000000) {
			x = x / 1000000;
			lbl = x.toFixed(0) + "M";
		} else if (x > 1000) {
			x = x / 1000;
			lbl = x.toFixed(0) + "K";
		} else {
			lbl = x.toFixed(0);
		}
		yLabelData += "|$" + lbl;
	}
	
	/* set chart image url */
	var chartImgUrl = "http://chart.apis.google.com/chart?chf=bg,s,65432100&cht=lc&chs=" + chartSize + "&chm=b,ADD8E6,0,1,0|b," + firstColor + ",1,2,0|b," + secondColor + ",2,3,0&chco=CCCCCC,000000,000000,CCCCCC&chd=t:100,100|" + chartData + "|0,0&chxt=x,y&chxl=0:|1 year|5 years|10 years|20 years|1:|" + yLabelData;
	var elem = document.getElementById("chart_wrap");
	if (elem) {
		elem.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + chartImgUrl + "')";
	}
	var elem = document.getElementById("chart");
	if (elem) {
		elem.src = chartImgUrl;
	}
	
	/* set chart image url for actions */
    /*
	var chartActImgUrl = "http://chart.apis.google.com/chart?chf=bg,s,CCCCCC&chxs=0,111111|1,111111&cht=lc&chs=300x200&chm=b,ADD8E6,0,1,0|b," + firstColor + ",1,2,0|b," + secondColor + ",2,3,0&chco=CCCCCC,000000,000000,CCCCCC&chd=t:100,100|" + chartData + "|0,0&chxt=x,y&chxl=0:|1 year|5 years|10 years|20 years|1:|" + yLabelData;
    */
    var chartActImgUrl = "http://chart.apis.google.com/chart?chf=bg,s,CCCCCC&chxs=0,111111|1,111111&cht=lc&chs=300x200&chm=b,ADD8E6,0,1,0|b," + firstColor + ",1,2,0|b," + secondColor + ",2,3,0&chco=CCCCCC,000000,000000,CCCCCC&chd=t:100,100|" + chartData + "|0,0&chxt=x,y&chxl=0:|1%20year|5%20years|10%20years|20%20years|1:|" + yLabelData;
	var elem = document.getElementById("graph_url");
	if (elem) {
		elem.value = chartActImgUrl;
	}
	
	/* make results section visible */
	var elem = document.getElementById("results");
	if (elem) {
		elem.style.display = "block";
	}
	
	return true;
}

/* set onbody event */
document.body.onload = function(e) {
	var elem = document.getElementById("inv_amount");
	if (elem) {
		elem.focus();
	}
};

