//
// Copyright 2007 all rights reserved
//

function chartUpdate(domObj, vals, maxWidth, rolloverFunc) {

	if(typeof(domObj) == "string") {
		domObj = document.getElementById(domObj);
	}
	
	var outerDom = domObj;
	
	// Create the innner DIV for the chart
	var innerDom = document.createElement("div");
	innerDom.className = "chart";
	domObj.appendChild(innerDom);
	
	// Parse ouf the chart data values
	var valsArr = vals.split("|");
	
	var bar;
	var overBar;
	var barVal;
	var valValMax = 0;
	var valValMin = 0;

	for (var ii=0; ii < valsArr.length; ii++) {

		valsArr[ii] = parseFloat(valsArr[ii]);

		if (valsArr[ii] > valValMax)
			valValMax = valsArr[ii];

		if (valsArr[ii] < valValMin)
			valValMin = valsArr[ii];
	}

	var maxY = ( innerDom.clientHeight
			     ? innerDom.clientHeight
			     : innerDom.offsetHeight) - 1;
	var barYFactor = (valValMax+Math.abs(valValMin))/maxY;
	var maxYPos = Math.round(valValMax/barYFactor);

	// Add in the Y-Axis
	
	var yAxisDom = document.createElement("div");
	yAxisDom.className = "chartYAxis";
	outerDom.insertBefore(yAxisDom, innerDom);
	
	var yAxisTopDom = document.createElement("div");
	yAxisTopDom.innerHTML =
		formatNumStr(valValMax>=1000?valValMax/1000:valValMax) +
		(valValMax>=1000?"K":"");
	yAxisTopDom.style.position = "relative";
	yAxisDom.appendChild(yAxisTopDom);
	yAxisTopDom.style.top = (0 - yAxisTopDom.offsetHeight/2) + "px";
	
	var yAxisCtrDom = document.createElement("div");
	yAxisCtrDom.innerHTML = 0;
	yAxisCtrDom.style.position = "relative";
	yAxisCtrDom.style.display= "none";
	yAxisDom.appendChild(yAxisCtrDom);
	yAxisCtrDom.style.top = ( maxYPos -
							  yAxisTopDom.offsetHeight -
							  yAxisCtrDom.offsetHeight/2) + "px";
	
	var yAxisBtmDom = document.createElement("div");
	yAxisBtmDom.innerHTML =
		formatNumStr(valValMin<=1000?valValMin/1000:valValMin) +
		(valValMin<=1000?"K":"");
	yAxisBtmDom.style.position = "relative";
	yAxisDom.appendChild(yAxisBtmDom);
	yAxisBtmDom.style.top = ( innerDom.offsetHeight -
							  yAxisTopDom.offsetHeight -
							  yAxisCtrDom.offsetHeight -
							  yAxisBtmDom.offsetHeight/2 ) + "px";


	// Y-Axis Grid Lines
/*
	var yTopDOM = document.createElement("<div>");
	yTopDOM.style.position = "absolute";
	yTopDOM.style.height = "1px";
	yTopDOM.style.width = "100%";
	yTopDOM.style.top = maxYPos + "px";
	yTopDOM.style.left = "0px";
	//yTopDOM.style.borderTop = "1px #999999 solid";
	//yTopDOM.style.zIndex = 9;
	innerDom.appendChild(yTopDOM);
*/


	// Define the Tip DIV
	var barTipDOM = document.createElement("div");
	barTipDOM.className = "chartTip";
	innerDom.appendChild(barTipDOM);
	
	var barWidth = maxWidth
				   ? parseInt((maxWidth-yAxisDom.offsetWidth)/valsArr.length)-1
				   : "";
//alert(maxWidth + ", " + yAxisDom.offsetWidth + ", " + maxWidth/valsArr.length + ", " + parseInt((maxWidth-yAxisDom.offsetWidth)/valsArr.length)-1);

	// Define and add the actual bars.
	for (var ii=0; ii < valsArr.length; ii++) {

		overBar = document.createElement("div");
		overBar.className    = "chartCol";
		if (barWidth) {
			overBar.style.width = barWidth + "px";
		}
		overBar.style.height = (maxY + 1) + "px";
		innerDom.appendChild(overBar);
		
		
		bar = document.createElement("div");
		
/*		bar.className    = "chartBar";*/
		bar.style.top 	 = ( valsArr[ii] >= 0
						     ? maxYPos - Math.round(valsArr[ii] / barYFactor)
						     : maxYPos + 0 ) +
						   "px";
		bar.style.height = ( Math.round(Math.abs(valsArr[ii]) / barYFactor) < 1
							 ? 1
							 : Math.round(Math.abs(valsArr[ii])/barYFactor) + 
							   1 ) +
						   "px";

		if (valsArr[ii] < 0)
			bar.className = "chartBarNeg";
		else if (valsArr[ii] == 0)
			bar.className = "chartBar0";
		else if (valsArr[ii] < valsArr[ii-1])
			bar.className = "chartBarPos2";
		else
			bar.className = "chartBarPos";
			
		if (barWidth) {
			bar.style.width = barWidth + "px";
		}
//		bar.style.marginRight = "0px";
		
		overBar.appendChild(bar);
//		innerDom.appendChild(bar);

		overBar.id =
			ii + "|" + valsArr[ii] +
//			", " + Math.round(Math.abs(valsArr[ii]) / barYFactor) +
//			", " + bar.style.height +
			"";
			
		if(rolloverFunc) {
			overBar.onmouseover = function(event) {
				rolloverFunc(event, this.id, barTipDOM, this);
			};
			overBar.onmouseout = function(event) {
//				this.className    = "chartCol";
				barTipDOM.style.visibility = "hidden";
				this.style.backgroundColor = "";
				this.style.opacity = "";
				this.style.filter = "";
			};
		}
		else {
			overBar.onmouseover = function(event) {
				chartTipShow(event, this.id, barTipDOM, this)
			};
			overBar.onmouseout = function(event) {
				barTipDOM.style.visibility = "hidden";
				this.style.backgroundColor = "";
//				this.style.backgroundColor = "#ffffff";
				this.style.opacity = "";
				this.style.filter = "";
			};
		}
	}

	outerDom.style.width = ( (valsArr.length) *
							 overBar.offsetWidth +
							 yAxisDom.offsetWidth + 2) + "px";
	

	overBar.style.paddingRight = "0px";
	overBar.style.marginRight = "0px";
	
//alert(outerDom.offsetWidth + ", " + innerDom.offsetWidth + ", " + yAxisDom.offsetWidth);

//	outerDom.style.height = (innerDom.offsetHeight + 2) +
//							"px";
//	outerDom.style.width = (innerDom.offsetWidth + yAxisDom.offsetWidth + 2) +
//						   "px";

//alert(outerDom.offsetWidth + ", " + innerDom.offsetWidth);
}

function chartTipShow(evt, tip, tipDOM, tgt) {

	if ( ! evt )
		evt = window.event;

	//var evtTarget = evt.target ? evt.target : evt.srcElement;

//	tipDOM.innerHTML =
//		(parseInt(tip.split("|")[0]) + 1) + ": " +
//		tip.split("|")[1];
	tipDOM.innerHTML =
		"Year " + (parseInt(tip.split("|")[0]) + 1) + "<br>"+
		"$" + formatNumStr(tip.split("|")[1]);
	tipDOM.style.top =  tgt.offsetTop - tipDOM.offsetHeight - 1 + "px";
//	tipDOM.style.top =  tgt.offsetHeight + 1;
	tipDOM.style.left =  tgt.offsetLeft + "px";
//	tipDOM.style.border = "1px #ffffcc solid";
//	tipDOM.style.borderLeft = "18px #ffff99 solid";
	tipDOM.style.backgroundColor = "#ffff99";
	tgt.style.backgroundColor = "#ffff66";
	tgt.style.opacity = ".7";
	tgt.style.filter = "alpha(opacity=60)";
	tipDOM.style.visibility = "visible";
	//alert(a + ", " + b + ", " + c);
}

function formatNumStr(num, prefix) {

	if (!prefix)
		prefix = "";
		
	num = Math.round(num);
	
	var numStr = "";
	var numAbsLen = (Math.abs(num)).toString().length;
	var numStrLen = num.toString().length;

	for (var ii=0; ii < numStrLen; ii+=3) {
		numStr =
			(ii < numAbsLen - 3 ? "," : "") +
			num.toString().substring(numStrLen-ii-3,numStrLen-ii) +
			numStr;
	}

	if (numStr.substring(0,1) == "-") {
		numStr = "-" + prefix + numStr.substring(1);
	}
	else {
		numStr = prefix + numStr;
	}
	
	return numStr;
}

