function show_simple()
{
	elHide('depreciation');
	elHide('details');
	elHide('lnk_simple');
	elShow('lnk_full');
}

function show_full()
{
	elShow('depreciation');
	elShow('details');
	elShow('lnk_simple');
	elHide('lnk_full');
}

function elShow(id)
{
	e = document.getElementById(id);
	if (e.nodeName == "SPAN") {
		e.style.display = 'inline';
	} else {
		e.style.display = 'block';
	}
}

function elHide(id)
{
	document.getElementById(id).style.display = 'none' ;
}

function trim( str ) {
	return str.replace(/^\s+|\s+$/g, '');
}

function validateField(fieldName, label)
{
	field = document.getElementById(fieldName);
	return validInt(field, label);
}

function validInt(formField, fieldLabel)
{
	num = trim(stripCommas(formField.value));

	if (num.length == 0 || isNaN(num)) {
		formField.className="vField";
		return false;
	} else {
		formField.className = "";
		return true;
	}
}

function formatCommas(numString)
{
	numString = numString.toString();
	var re = /(-?\d+)(\d{3})/;
	while (re.test(numString)) {
		numString = numString.replace(re, "$1,$2");
	}
	return numString;
}

function stripCommas(numString)
{
	var re = /,/g;
	return numString.replace(re,"");
}

function fillField(fieldName, value)
{
	value = Math.round(value);
	document.getElementById(fieldName).firstChild.nodeValue = formatCommas(value);
}

function formatField(fieldName)
{
	fld = document.getElementById(fieldName);
	fld_value = trim(stripCommas(fld.value));
	fld.value = formatCommas(fld_value);
	return fld_value;
}

function formatNumber (num)
{
	num = parseFloat(num);		// convert in case of string
	if (!isNaN(num)) {		
		var str = "" + Math.round (eval(num) * Math.pow(10, 0));
		if (str.indexOf("e") != -1) {
			return "Out of Range";
		}
		return formatCommas(str);
	} else {
		return "-";  //"NaN";
	}
}

function doSubmit()
{
	if (validForm()) {
		elShow('results');
		elHide('errorMessage');
		calculateForm();
	} else {
		elShow('errorMessage');
		elHide('results');
	}
}

function validForm()
{
	result = true;

	type1 = document.getElementById("property_commercial");
	type2 = document.getElementById("property_residential");
	if ((type1.checked == false) && (type2.checked == false)) {
		type1.className="vField";
		type2.className="vField";
		result = false;
	} else {
		type1.className="";
		type2.className="";
	}

	if (!validateField("fld_purchase", "Original Purchase Price")) result = false;
	if (!validateField("fld_landv", "Land Value")) result = false;
	if (!validateField("fld_improve", "Improvements")) result = false;
	if (!validateField("fld_saleprice", "Sales Price")) result = false;
	if (!validateField("fld_costofsale", "Cost of Sales")) result = false;

	purchase = formatField("fld_purchase");
	landv = formatField("fld_landv");
	DepreciationBasis = parseFloat(purchase) - parseFloat(landv);

	if (DepreciationBasis < 0) {
		document.getElementById("fld_purchase").className="vField";
		document.getElementById("fld_landv").className="vField";
		result = false;
	}

	saleprice = formatField("fld_saleprice");
	costofsale = formatField("fld_costofsale");
	NetPrice = parseFloat(saleprice) - parseFloat(costofsale);
	if (NetPrice <= 0) {
		document.getElementById("fld_saleprice").className="vField";
		document.getElementById("fld_costofsale").className="vField";
		result = false;
	}

	return result;
}

function calculateForm(){
	purchase = formatField("fld_purchase");
	landv = formatField("fld_landv");
	improve = formatField("fld_improve");
	//depreciation = formatField("fld_deprec");
	costofsale = formatField("fld_costofsale");
	saleprice = formatField("fld_saleprice");


	type1 = document.getElementById("property_commercial");

	if (type1.checked) {
		depreciationPeriod = 39.0;
	} else {
		depreciationPeriod = 27.5
	}

	years = document.getElementById("years");
	Years = years[years.selectedIndex].value;

	DepreciationBasis = parseFloat(purchase) - parseFloat(landv);
	lDepreciation = DepreciationBasis * (Years / depreciationPeriod);
	
	if (lDepreciation > DepreciationBasis) {
		lDepreciation = DepreciationBasis;
		//alert ('Note: Depreciation cannot exceed Purchase Price plus Improvements; value set to maximum.');
	}
	document.getElementById("fld_deprec").value = formatNumber(lDepreciation);

	netbasis = parseFloat(purchase) - lDepreciation + parseFloat(improve); 
	fillField("res_netbasis", netbasis);

	capgain = parseFloat(saleprice) - parseFloat(costofsale) - netbasis;
	if (capgain < 0) capgain = 0;
	fillField("res_capgain", capgain);

	fedcapgain = (capgain - lDepreciation) * 0.15;		
	if (fedcapgain < 0) fedcapgain = 0;
	fillField("res_fedcapgain", fedcapgain);

	state = document.getElementById("state");
	staterate = state[state.selectedIndex].value;

	statecapgain = staterate * capgain;
	fillField("res_statecapgain", statecapgain);

	deprecap = lDepreciation * 0.25;
	fillField("res_deprecap", deprecap);

	deferred = deprecap + fedcapgain + statecapgain;

	fillField("res_deferred", deferred);
	fillField("res_additionalinvt", deferred * 5);
}


