// init calculator
  var courtage_level = new Array();
  var eventTimeOut = false;
  var inputEventTimeOut = false;
  var resetTextInput = false;

  function delayedSelectEvent()
  {  
    resetTextInput = true;
  
    if(eventTimeOut)
      window.clearTimeout(eventTimeOut);
    eventTimeOut = window.setTimeout(updateNVMCostCalculation, 200);
    //set focus on next field
    var expSellValueEllement = document.getElementById('expecting_selling_value');
    if(expSellValueEllement)
    { 
      var itemHolder = document.getElementById('expsellval');
      if(itemHolder && itemHolder.style && itemHolder.style.display && itemHolder.style.display != 'none')
      expSellValueEllement.focus();
    }
  }

  function delayedInputEvent()
  {
   if(inputEventTimeOut)
    window.clearTimeout(inputEventTimeOut);
    var currentEllement = document.getElementById('expecting_selling_value');
    if(currentEllement.value.length > 0)
      inputEventTimeOut =window.setTimeout("validator.validate(document.getElementById('expecting_selling_value')); sizeLightBox()", 900);
    else
      validator.validate(currentEllement);
  }
  
  function initCalculator()
  {
    addEvent(document.getElementById('livy_region_optionDiv'), 'click', delayedSelectEvent);
    addEvent(document.getElementById('expecting_selling_value'), 'keyup', updateNVMCostCalculation);
    addEvent(document.getElementById('expecting_selling_value'), 'keyup', delayedInputEvent);
    
    var courtageLevels  = document.getElementById('courtage_levels');
    courtageLevelsArray = courtageLevels.value.split('|');
    for(i=0; i < courtageLevelsArray.length; i++)
    {
     courtage_level[courtageLevelsArray[i]]  = parseFloat(courtageLevelsArray[++i]);
    }

    // set a clickevent handler on the checkBoxes    
    var livypart      = document.getElementById('mylivycostslist');
    var inputElements = livypart.getElementsByTagName('input');
    for(elementIndex in inputElements)
    {
      var element = inputElements[elementIndex];
      if(element.type == 'checkbox')
          addEvent(element, 'click', updateLivyCostCalculation);
    }

  }
// calculate
function updateNVMCostCalculation() {
  var region_elem       = document.getElementById('livy_region');
  var price_elem        = document.getElementById('expecting_selling_value');
  var courtage_elem     = document.getElementById('avcourtage');
  var promo_budget_elem = document.getElementById('avpromobutget');
  var total_elem        = document.getElementById('totnvmrealtor');
  var viewings_elem     = document.getElementById('avviewings')
  
  var regionValues      = '';
  try
  {
	  var regionValues    = region_elem.options[region_elem.selectedIndex].value;
  }
  catch(err)
  { 
  // do nothing !! the selectedIndex = -1 , browsers don't like that !!!!  
  // this is probably caused by the multi-/single-select logic has to fixed sometime
  }
  var int_price         = parseInt(price_elem.value);
  var percentage        = "";
	var promo_budget      = "";
	var gem_bezicht       = "";
  
  if(isNaN(int_price))
  {
    int_price = 0;
    price_elem.value = '';
  } else if(int_price < 100000) {
			percentage = courtage_level["<1t"];
  } else if(int_price < 200000) {
			percentage = courtage_level["1-2t"]; 
	} else if(int_price < 300000) {
			percentage = courtage_level["2-3t"];
	} else if(int_price < 500000) {
			percentage = courtage_level["3-5t"];
	} else {
			percentage = courtage_level[">5t"];
	}

  regionValuesArray	= regionValues.split('|')

  promo_budget   = regionValuesArray[3];
  gemBezichtDisp = String(regionValuesArray[1]);
  
  // Sets the average viewings as default for the calculation
  if (libe = document.getElementById('libe')) {
    if (parseInt(libe.value) == -1 || resetTextInput)
      libe.value = parseInt(gemBezichtDisp);
    resetTextInput = false;
  }
  
  gem_bezicht    = gemBezichtDisp.replace(/\./, ",");

  if(percentage != "") {
    percentageDisp          = String(percentage);
    percentageDisp          = percentageDisp.replace(/\./, ",");
    var courtage            =  Math.round(percentage * int_price / 100);
		courtage_elem.innerHTML = formatNumber(courtage) + " ("+percentageDisp+"% van &euro;&nbsp;"+formatNumber(int_price)+")";
  } else {
    courtage_elem.innerHTML = "";
  }

  if(regionValues != "") {
    promo_budget_elem.innerHTML = formatNumber(promo_budget);
    viewings_elem.innerHTML     = formatNumber(gem_bezicht);
  } else {
    promo_budget_elem.innerHTML = "";
    viewings_elem.innerHTML     = "";
  }

  var total_price_trad_elem = document.getElementById('totaltotalcostnvm');
  
  if(regionValues != "" && percentage != "") {
    var nvmTotalCost = parseInt(courtage) + parseInt(promo_budget);
    total_elem.innerHTML = formatNumber(nvmTotalCost);
    total_price_trad_elem.innerHTML = formatNumber(nvmTotalCost);
  } else {
    total_elem.innerHTML = "";
    total_price_trad_elem.innerHTML = "";
  }
  
  updateLivyCostCalculation();
}

function updateLivyCostCalculation() {
  if(document.getElementById('lifu').checked)
  {
    document.getElementById('liwb').checked = true;
    document.getElementById('lion').checked = true;
    document.getElementById('liiw').checked = true;
  }
  
  if(document.getElementById('liiw').checked)
  {
    document.getElementById('liwb').checked = true;
  }

  if(document.getElementById('liea').checked)
  {
    document.getElementById('liel').checked = true;
  }

  var livyprice     = 0;
  var livypart      = document.getElementById('mylivycostslist');
  var inputElements = livypart.getElementsByTagName('input');
  
  for(var elementIndex=0; elementIndex<inputElements.length; elementIndex++)
  {
    var element = inputElements[elementIndex];
    if(element.type == 'checkbox')
    {
      if(element.checked)
      {                               
        livyprice += parseFloat(changeFormattedNumberToValidFloat(element.value));
      }

      var attributeElemId = element.id + 'Attr';
      var attributeElem   = document.getElementById(attributeElemId).parentNode;
    }
    else
    {
      if(element.type == 'text')
      {
        var servicePrice = parseInt(changeFormattedNumberToValidFloat(element.getAttribute('price')));
        var orderCount   = parseInt(changeFormattedNumberToValidFloat(element.value));
        if(isNaN(orderCount)) orderCount = 0;
        livyprice       +=  servicePrice * orderCount;
        var totalServicePriceId   = element.id + 'Attr';
        var totalServicePriceElem = document.getElementById(totalServicePriceId);
        var serviceTotal = servicePrice * orderCount;
        totalServicePriceElem.innerHTML = formatNumber(serviceTotal);
      } 
    }
  }

  var livyprice_elem             = document.getElementById('totalcostLivy');
  var total_livyprice_elem       = document.getElementById('totaltotalcostlivy');
  livyprice_elem.innerHTML       = formatNumber(livyprice);
  total_livyprice_elem.innerHTML = formatNumber(livyprice);
  
  var saving_elem                = document.getElementById('savings');
  var total_price_trad_elem      = document.getElementById('totaltotalcostnvm');
  var nvmCosts                   = parseInt(changeFormattedNumberToValidFloat(total_price_trad_elem.innerHTML));    
  
  if(isNaN(nvmCosts))   nvmCosts = 0;
  totalSaving                    = nvmCosts - livyprice;
  saving_elem.innerHTML          = formatNumber(totalSaving);
}

function changeFormattedNumberToValidFloat(formattedNumber) {
  if (formattedNumber == '') 
    return '';
  
  var number = '';      
    
  number = formattedNumber.replace(',-', '');       
  number = number.replace(/\./g, '');
  number = number.replace(',', '.');
  
  return number;    
}

// This function takes a float or string and formats it to a valid dutch currency
function formatNumber(number) 
{
  if (number == '')  
    return '0,-';
    
  var prefix = '';
    
  var number = String(number);  
  number = number.replace('.', ',');
  if (number.substring(0,1) == '-') {
    number = number.replace('-', '');
    prefix = '-';
  }
  var parts = number.split(',');
  var numbers = parts[0].split('');
  numbers.reverse();  
  var numNumbers = numbers.length;
  var formattedNumber = "";
  var counter = 3;  
      
  for (var i = 0; i < numNumbers; i++) {
    if (numbers[i] != '.') {
      if (counter == 0) {
        counter = 2;
        if (i < numNumbers)
          formattedNumber = numbers[i] + '.' + formattedNumber;  
      }
      else {
        formattedNumber = numbers[i] + formattedNumber;  
        counter--;
      }
    }
  }  
  
  if (parts[1]) {
    if (parts[1].length == 1) 
      parts[1] = parts[1] + '0';
    
    formattedNumber += ',' + parts[1];
  }
  else
    formattedNumber += ',-';
    
  formattedNumber = prefix + formattedNumber;
  
  return formattedNumber;

}
