var ktArray = new Array();

function kt_init() {
	var kt = document.getElementById("kt");
	if (kt) {
		var inputs=kt.getElementsByTagName("input"), selects=kt.getElementsByTagName("select"), el, i=0;
		
		while (el = inputs[i++]) {
			el.onchange = function () {
				reCalculateKt(this);
			}
		}
		i = 0;
		while (el = selects[i++]) {
			el.onchange = function () {
				reCalculateKt(this);
			}
		}
	}
	
	refreshVariables();
	reCalculateKt();
	applyHelpPopups();
}


function refreshVariables() {
	var kt = document.getElementById("kt");
	if (kt) {
		var inputs=kt.getElementsByTagName("input"), selects=kt.getElementsByTagName("select"), el, i=0;

		ktArray["vars"] = new Array();
		while (el = inputs[i++]) {
			if (el.id) {
				ktArray["vars"][el.id] = $(el.id, el.getAttribute("valuetype"));
				if (el.getAttribute("valuetype")!="raw") {
					el.value = numberFormat(ktArray["vars"][el.id], el.getAttribute("valuetype"), el.getAttribute("valueformat"));
				}
			}
		}
		i = 0;
		while (el = selects[i++]) {
			if (el.id) ktArray["vars"][el.id] = $(el.id, el.getAttribute("valuetype"));
		}
	}
}
function numberFormat(value, valuetype, valueformat) {
	if (value || value==0) {
		var formatparts = new Array();
		if (valueformat) formatparts = valueformat.split(".");
		var decimals = formatparts[1] ? formatparts[1] : 2;
		switch(valuetype) {
			case "money":
				if (value===0) {
					value = "";
					for (iii=0; iii<decimals; iii++) {
						if (!value) value += ".";
						value += "0";
					}
					value = "$0"+value;
				} else {
					value = value.toFixed(decimals);
					value = addCommas(value);
					value = "$"+value;
				}
			break;
			case "percent":
				value = value.toFixed(decimals)+"%";
			break;
			case "number":
				if (value===0) {
					value = "";
					for (iii=0; iii<decimals; iii++) {
						if (!value) value += ".";
						value += "0";
					}
					value = "0"+value;
				} else {
					value = value.toFixed(decimals);
					value = value;
				}
			break;
		}
	} else {
		value = "";
	}
	
	return value;
}
function $(id, type) {
	if (!type) type = "number";
	var returnVar = document.getElementById(id).value;
	
	if (type!="raw") {
		returnVar = returnVar.replace("$", "");
		returnVar = returnVar.replace("%", "");
		returnVar = returnVar.replace(/,/g, "");
	}
	
	if (type!="date" && type!="raw") returnVar = parseFloat(returnVar);
	
	return returnVar;
}
function addCommas(nStr)
{
	nStr += '';
	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;
}

function applyHelpPopups() {
	if (!helpTexts) return 0;
	for (var fieldId in helpTexts) {
		var fieldObj = document.getElementById(fieldId);
		fieldObj.onmouseover = function () {
			hideHelp();
		}
		if (!fieldObj) continue;
		if (fieldId.indexOf("help_")==0) {
			var prevSibling = fieldObj;
		} else {
			if (fieldObj.tagName=="INPUT" || fieldObj.tagName=="SELECT") {
				var fieldParent = fieldObj.parentNode;
			} else {
				var fieldParent = fieldObj;
			}
			if (!fieldParent) continue;
			var prevSibling = fieldParent.previousSibling;
			if (!prevSibling) continue;
			if (prevSibling.tagName!="DIV") prevSibling = prevSibling.previousSibling;
			if (!prevSibling) continue;
		}
					
		prevSibling.style.position = "relative";
		if (fieldId.indexOf("help_")==0) {
			var reddot = document.createElement("img");
			reddot.src="question_icon.gif";
			reddot.className = "kt_reddot_img";
		} else {
			var reddot = document.createElement("div");
			reddot.className = "kt_reddot";
		}
		prevSibling.appendChild(reddot);
		
		prevSibling.setAttribute("help_id", fieldId);
		
		prevSibling.onclick = function () {
			showHelp(this, this.getAttribute("help_id"));
		}
		prevSibling.onmouseout = function () {
			setTimeout("hideHelp('"+this.getAttribute('help_id')+"')", 500);
		}
	}
	
	return 1;
}

var overHelp = 0;
function showHelp(fieldObj, help_id) {
	if (!fieldObj || !help_id || !helpTexts[help_id]) return 0;
	
	var help_box = document.getElementById("help_box");
	if (!help_box) {
		help_box = document.createElement("div");
		help_box.id = "help_box";
		help_box.className = "help_box";
		
		help_box.onmouseover = function () {
			overHelp = 1;
		}
		help_box.onmouseout = function () {
			overHelp = 0;
		}
		
		document.body.appendChild(help_box);
		
		help_box = document.getElementById("help_box");
	}
	
	var field_top = findPosY(fieldObj);
	var field_left = findPosX(fieldObj);
	
	help_box.innerHTML = helpTexts[help_id];
	help_box.style.top = (field_top+10)+"px";
	help_box.style.left = (field_left+50)+"px";
	help_box.style.display = "block";
	help_box.setAttribute("help_id", help_id);
}

function hideHelp(help_id) {
	if (overHelp) return 1;
	var help_box = document.getElementById("help_box");
	if (help_box) {
		if (help_id && help_box.getAttribute("help_id")!=help_id) return 0;
		
		help_box.style.display = "none";
	}
	
	return 1;
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	} else if (obj.x) curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	} else if (obj.y) curtop += obj.y;
	return curtop;
}
