  
	var emptyString = /^\s*$/ ;
	
	
  /*
	 * function updateLoan(updElement) 
	 *   updElem is a reference to the changed field 
	 */
  function updateLoan(updElement) {
	  var fldValue = parseCapitalFieldValue(updElement); 
	  // validate updElement
		if(validateCapitalFld(updElement)) {
		/*if(getNumberType(fldValue) != "int" || fldValue <= 0) {
		  setMessage(updElement, "error", "Dies ist kein gültiger Wert!");
		} else {
		*/
		  setMessage(updElement, "", "");
  		updElement.value = formatNumber(fldValue, 0);
			document.getElementById('lfLoan').value = formatNumber(parseCapitalFieldValue(document.getElementById('lfTotal')) - parseCapitalFieldValue(document.getElementById('lfEquity')), 0);
		} 
	}
  
	function validateCapitalFld(obj) {
	  if(!checkEmpty(obj)) {
		  setMessage(obj, "error", "Dieses Feld darf nicht leer sein!");
			return false;
		}
		var chkVal = trim(obj.value);
		var capitalRE = /^[0-9\.]{1,11}$/
    if (!capitalRE.test(chkVal)) {
      setMessage(obj, "error", "Dies ist kein erlaubter Wert!");
      return false;
    } 
		return true;
	}

	function calculate() {
  	//var totLoan = parseInt(document.getElementById('lfLoan').value);
		var totLoan = parseCapitalFieldValue(document.getElementById('lfLoan'));
  	var interest = document.getElementById('lfInterest').value;
  	interest = parseFloat(interest.replace(",", ".")) / 100;
    var period = parseInt(document.getElementById('lfAmortYears').value) * 12;
    var freq = document.getElementById('lfAmortPeriod').value;
    var monthlyPayment = totLoan / period;
    var interestCost = 0;
    var loan = totLoan;
    for(var i = period; i  > 0; i--) {
    	if(freq == "month") {
    		interestCost += (interest * loan) / 12;
		   	loan = loan - monthlyPayment;
    	} else if(freq == "quart") {
		   	if(i % 3 == 0) {
    			interestCost += (interest * loan) / 4;
		   		loan = loan - (monthlyPayment * 3);
    		}
		  } else if(freq == "half") {
    		if(i % 6 == 0) {
		   		interestCost += (interest * loan) / 2;
    			loan = loan - (monthlyPayment * 6);
    		}
    	} else if(freq == "year") {
		   	if(i % 12 == 0) {
    			interestCost += (interest * loan);
		   		loan = loan - (monthlyPayment * 12);
    		}
    	}  
    }
      
    var sum = totLoan + interestCost;
    monthlyPayment = sum / period;
    document.getElementById('lfTotMonth').value	= formatNumber(monthlyPayment, 2);
  }

/* *******************************************************
   HELPER FUNCTION 
 * ******************************************************* */

function parseCapitalFieldValue(field) {
  var ret = field.value.replace(/\./g, '');
	ret = parseInt(ret);
	return ret > 0 ? ret : 0;
}

function getNumberType(val) {
  if (val == parseInt(val) && val == parseFloat(val)) {
    return "int";
  } else if (val == parseFloat(val)) {
	  return "float";
  } else {
    return false;
  }
}

function formatNumber(numVal, dec) {
  var num = new NumberFormat();
  num.setInputDecimal('.');
  num.setNumber(numVal); 
  num.setPlaces(dec, false);
  num.setCurrencyValue('');
  num.setCurrency(false);
  num.setCurrencyPosition(num.LEFT_OUTSIDE);
  num.setNegativeFormat(num.LEFT_DASH);
  num.setNegativeRed(false);
  num.setSeparators(true, '.', ',');
  return num.toFormatted();
}

function setMessage(obj, msgType, msgTxt) {
  var msgBox = document.getElementById('lfMsgBox');
  if(msgType && msgTxt) {
	  setObjInnerText(msgBox, msgTxt);
		msgBox.className = msgType;
		toggleElement('lfMsgContainer', true);
		obj.focus(); // todo: set another color class?
	  //alert(msgTxt + ' Focus should be in fld with val ' + obj.value);
	} else {
	  setObjInnerText(msgBox, '');
		toggleElement('lfMsgContainer', false);
	}
	return true;
}

 
/* 
 * toggleElement(element, toggleState)
 * 
 * Function shows/hides an element by id 
 *
 */
function toggleElement(element, toggleState) {
  var toggleObject = document.getElementById(element);  
  if(toggleState == true) {
    toggleObject.style.display = '';
  } else {
    toggleObject.style.display = 'none';
  }
}

function setObjInnerText(obj, txt) {
  var dummy = document.getElementById('dummy');
	if (dummy.innerText) { // IE;
    obj.innerText = txt;
  } else if (dummy.textContent) {
	  obj.textContent = txt;
	} else {
    alert("Error: This application does not support your browser.  Try again using IE or Firefox.");
  }
}


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


function checkEmpty (valfield) {
  if (!document.getElementById) 
    return true;  // not available on this browser - leave validation to the server

  if (emptyString.test(valfield.value)) {
    return false;
  }
  return true;
}