function price_palme(language) 
{
	var fe = 0;
	var ma = 0;
	var su = 0;
	var n = parseInt(document.getElementById('licensenumber').value);
	if (isNaN (n) || n == 0) 
	{
		document.getElementById('licensenumber').value = ""; 
		n = 0;
	} else {
		document.getElementById('licensenumber').value = parseInt(document.getElementById('licensenumber').value);
	}
	if (n <= 10) {
		fe += 99;
	} else if (n <= 20) {
		fe += 199;
	} else if (n <= 50) {
		fe += 200 + (n - 20) * 10;
	} else if (n <= 100) {
		fe += 500 + (n - 50) * 8;
	} else if (n <= 500) {
		fe += 900 + (n - 100) * 6;
	} else if (n <= 1000) {
		fe += 3300 + (n - 500) * 4;
	} else if (n <= 5000) {
		fe += 5300 + (n - 1000) * 3;
	} else {
		document.getElementById('licensefee').innerHTML = '-';
	}
	ma = fe * 0.18;
	su = fe * 0.3;
	document.getElementById('licensefee').innerHTML = (fe.format('0,000', language)) ;
	document.getElementById('2dedition').innerHTML = (su.format('0,000', language)) ;
	document.getElementById('maintenance').innerHTML = (ma.format('0,000', language)) ; 
}

function price_ixbc(language) 
{
	var fe = 0;
	var ma = 0;
	var su = 0;
	var n = parseInt(document.getElementById('licensenumber').value);
	if (isNaN (n) || n == 0) 
	{
		document.getElementById('licensenumber').value = ""; 
		n = 0;
	} else {
		document.getElementById('licensenumber').value = parseInt(document.getElementById('licensenumber').value);
	}
	if (n <= 50) {
		fe += 1300;
	} else if (n <= 100) {
		fe += 1300 + (n - 50) * 16;
	} else if (n <= 200) {
		fe += 2100 + (n - 100) * 10;
	} else if (n <= 400) {
		fe += 3100 + (n - 200) * 6;
	} else if (n <= 800) {
		fe += 4300 + (n - 400) * 4;
	} else if (n > 800) {
		fe += 5900 + (n - 800) * 3;
	} else {
		document.getElementById('licensefee').innerHTML = '-';
	}
	ma = fe * 0.14;
	su = fe * 0.3;
	document.getElementById('licensefee').innerHTML = (fe.format('0,000', language)) ;
	document.getElementById('2dedition').innerHTML = (su.format('0,000', language)) ;
	document.getElementById('maintenance').innerHTML = (ma.format('0,000', language)) ; 
}

function numberFormat(nStr,prefix,language)
{
	if (language == 'de') { kom = ','; tau = '.'; } else { kom = '.'; tau = ','; }
	var prefix = prefix || '';
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? kom + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1))        x1 = x1.replace(rgx, '$1' + tau + '$2');
	return prefix + x1 + x2;
}
 

/** 
* Formats the number according to the ‘format’ string; 
* adherses to the american number standard where a comma 
* is inserted after every 3 digits. 
*  note: there should be only 1 contiguous number in the format, 
* where a number consists of digits, period, and commas 
*        any other characters can be wrapped around this number, including ‘$’, ‘%’, or text 
*        examples (123456.789): 
*          ‘0' - (123456) show only digits, no precision 
*          ‘0.00' - (123456.78) show only digits, 2 precision 
*          ‘0.0000' - (123456.7890) show only digits, 4 precision 
*          ‘0,000' - (123,456) show comma and digits, no precision 
*          ‘0,000.00' - (123,456.78) show comma and digits, 2 precision 
*          ‘0,0.00' - (123,456.78) shortcut method, show comma and digits, 2 precision 
* 
* @method format 
* @param format {string} the way you would like to format this text 
* @return {string} the formatted number 
* @public 
*/    
Number.prototype.format = function(format, language) 
{ 
 	if (language == 'de') { kom = ','; tau = '.'; } else { kom = '.'; tau = ','; }  
  <!-- if (!isType(format, ´string´))  { 	  return '';  } psplit = format.stripNonNumeric().split('.');  -->

  var hasComma = -1 < format.indexOf(','),
    psplit = format.split('.'), 
    that = this; 

  // compute precision 
  if (1 < psplit.length) { 
    // fix number precision 
    that = that.toFixed(psplit[1].length); 
  } 
  // error: too many periods 
  else if (2 < psplit.length) { 
    throw('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format); 
  } 
  // remove precision 
  else { 
    that = that.toFixed(0); 
  }  
  
  // get the string now that precision is correct 
  var fnum = that.toString(); 

  // format has comma, then compute commas 
  if (hasComma) { 
    // remove precision for computation 
    psplit = fnum.split('.'); 
  
    var cnum = psplit[0], 
      parr = [], 
      j = cnum.length, 
      m = Math.floor(j / 3), 
      n = cnum.length % 3 || 3; // n cannot be ZERO or causes infinite loop 
  
    // break the number into chunks of 3 digits; first chunk may be less than 3 
    for (var i = 0; i < j; i += n) { 
      if (i != 0) {n = 3;} 
      parr[parr.length] = cnum.substr(i, n); 
      m -= 1; 
    } 
  
    // put chunks back together, separated by comma 
    fnum = parr.join(tau); 
  
    // add the precision back in 
    if (psplit[1]) {fnum += kom + psplit[1];} 
  }  
  
  // replace the number portion of the format with fnum 
  return format.replace(/[\d,?\.?]+/, fnum); 
}

