function CharCode(chr)
{
  return chr.charCodeAt(0);
}

function SelectedOptionValue(select)
{
  select = FindElement(select);
  return select.options[select.selectedIndex].value;
}

function FormatMoneyForDisplay(amount, decimalPlaces)
{
  amount = amount.toString().replace(/\s+/g, '');
  if(amount == '') return '';
  if(typeof(decimalPlaces) != 'undefined'){
    amount = Math.round((0.0 + eval(amount))*Math.pow(10, decimalPlaces)).toString();
    amount = amount.replace(/\..*/, '');
    if(decimalPlaces != 0){
      while(amount.replace('-', '').length <= decimalPlaces){
        amount = amount.replace(/(\d+)/, '0$1');
      }
      amount = amount.replace(new RegExp('(.{' + decimalPlaces + '})$'), '.$1');
    }
  }

  // grupy trzycyfrowe
  if(amount.indexOf('.') < 0)
    amount = amount.replace(/(\d)(?=(\d\d\d)+$)/g, '$1 ');
  else
    amount = amount.replace(/(\d)(?=(\d\d\d)+\.)/g, '$1 ');

  return amount;
}

function RepairFloatField(field, allowEmpty)
{
  field = FindElement(field);
  if(Trim(field.value) == '')
          {
    if(allowEmpty) return '';
    field.value = '0';
  }
  var repaired = field.value.replace(/,/g, '.');;
  while(repaired.indexOf('.') != repaired.lastIndexOf('.')){
    repaired = repaired.replace('.', '');
  }
  repaired = repaired.replace(/[^\.0-9\s]/g, '');
  if(repaired != field.value) field.value = repaired;
  return parseFloat(field.value.replace(/ /g, ''));
}



function CheckedRadioButtonValue(buttonSet)
{
  buttonSet = FindElement(buttonSet);
  var i;
  for(i = 0; i < buttonSet.length; i++){
    if(buttonSet[i].checked){
      return buttonSet[i].value;
    }
  }
  return undefined;
}
function KeyPressFloat(evt, elem) {
  // Firefox wchodzi tu tak¬e po naciniąciu backspace, delete, czy strza-ek,
  // ale nie pozwala -atwo tego obs-u¬y
  var keycode = evt.keyCode || evt.charCode;

  if(keycode==CharCode(','))
        {
    keycode = CharCode('.');
    try{
      evt.keyCode = keycode;
      evt.charCode = keycode;
    }catch(e){
      return false; // nie umiemy zmieni przecinka na kropką (np. Opera)
    }
        }
  if(keycode == CharCode('.')){
    // tylko jedna kropka
    return (elem.value.indexOf('.') < 0);
  }else{
    return ((keycode > 47 && keycode < 58) || keycode==46 || keycode==8);
  }
}

function Trim( tekst ) {
    return tekst.replace( /^\s+|\s+$/g, "" );
}

function FindElement(elem)
{
  if(typeof(elem) == 'string'){
    var found = document.getElementById(elem);  // chyba IE po nazwie te¬ znajduje
    if(found == null){
      found = document.getElementsByName(elem)[0];
    }
    // odszukanie ca-ej grupy przycisk”w o tej samej nazwie
    elem = found;
    //ShowObjectProperties(elem);
    if(elem.type == 'radio'){
      elem = elem.form.elements[elem.name];
    }
  }
  return elem;
}




function CalculateExtra()
{
  var form = document.forms['FormCalculatorExtra'];
  //form.elements['MortgageCooperative'].disabled = !IsCooperativeChecked(form);
  var PriceEntered = RepairFloatField('TPrice', true);
  if(PriceEntered == ''){
    ClearCalculatedFields(form);
    return;
  }

  //var TPrice = PriceEntered * parseFloat(SelectedOptionValue('CurrencyRate'));
  var TPrice = PriceEntered * 1

  var GovernmentLegalTax = TPrice * 0.02;
  form.elements['GovernmentLegalTax'].value = CalcFormatMoney(GovernmentLegalTax,2);

  var NotarialFee = CalculateNotarialFee(TPrice, IsCooperativeChecked(form),IsMortgageCooperativeChecked(form) );
  form.elements['NotarialFee'].value = CalcFormatMoney(NotarialFee,2);
  
  

  var NotarialFeeVat = Math.round(NotarialFee * 22)/100;
  form.elements['NotarialFeeVat'].value = CalcFormatMoney(NotarialFeeVat,2);

  var CommissionPercent = RepairFloatField('CommissionPercent');
  var Commission = Math.round(TPrice * CommissionPercent)/100;
  form.elements['Commission'].value = CalcFormatMoney(Commission,2);
  var CommissionVAT = Math.round(Commission * 22)/100;
  form.elements['CommissionVAT'].value = CalcFormatMoney(CommissionVAT,2);
  var KWFee;

  if (IsCooperativeChecked(form)) //&& !form.MortgageCooperative.checked)
  {
    KWFee = 0;
    form.elements['KWFee'].value = CalcFormatMoney(KWFee,2);
  }
  else if (IsMortgageCooperativeChecked(form))
  {
    KWFee = 60;
    form.elements['KWFee'].value = CalcFormatMoney(KWFee,2);
  }
  else
  {
    KWFee = 0;
    form.elements['KWFee'].value = CalcFormatMoney(KWFee,2);
  }
  
//*****************************************************************************************************************************************
  var wpisdodzialuIIwynik;
  if(form.elements['wpisdodzialuIIcheckbox'].checked) {
    wpisdodzialuIIwynik = 200;
  }else{
    wpisdodzialuIIwynik = 0;
  }
  form.elements['wpisdodzialuIIwynik'].value = CalcFormatMoney(wpisdodzialuIIwynik,2);
  
  
  var wpisdohipotekikaucyjnejwynik;
  var pccodhipotekikaucyjnejwynik;
  if(form.elements['wpisdohipotekikaucyjnejcheckbox'].checked) {
    wpisdohipotekikaucyjnejwynik = 200;
	pccodhipotekikaucyjnejwynik = 19;
  }else{
    wpisdohipotekikaucyjnejwynik = 0;
	pccodhipotekikaucyjnejwynik = 0;
  }
  form.elements['wpisdohipotekikaucyjnejwynik'].value = CalcFormatMoney(wpisdohipotekikaucyjnejwynik,2);
  form.elements['pccodhipotekikaucyjnejwynik'].value = CalcFormatMoney(pccodhipotekikaucyjnejwynik,2);
  
  
  var wpisdohipotekizwyklejwynik;
  var pccodhipotekizwyklejwynik;
  if(form.elements['wpisdohipotekizwyklejcheckbox'].checked) {
    wpisdohipotekizwyklejwynik = 200;
	pccodhipotekizwyklejwynik = TPrice * 0.001;
  }else{
    wpisdohipotekizwyklejwynik = 0;
	pccodhipotekizwyklejwynik = 0;
  }
  form.elements['wpisdohipotekizwyklejwynik'].value = CalcFormatMoney(wpisdohipotekizwyklejwynik,2);
  form.elements['pccodhipotekizwyklejwynik'].value = CalcFormatMoney(pccodhipotekizwyklejwynik,2);

  //*****************************************************************************************************************************************

  //var CopiesFee = RepairFloatField('CopiesFee');

  //var ExtraCosts = GovernmentLegalTax + NotarialFee + NotarialFeeVat + Commission + CommissionVAT + CopiesFee;
  var ExtraCosts = GovernmentLegalTax + NotarialFee + NotarialFeeVat +
                   Commission + CommissionVAT + KWFee + wpisdodzialuIIwynik + wpisdohipotekikaucyjnejwynik + wpisdohipotekizwyklejwynik + pccodhipotekikaucyjnejwynik + pccodhipotekizwyklejwynik;
  form.elements['ExtraCosts'].value = CalcFormatMoney(ExtraCosts,2);

  var TotalCosts = TPrice + ExtraCosts;
  form.elements['TotalCosts'].value = CalcFormatMoney(TotalCosts,2);
} // CalculateExtra

function IsCooperativeChecked(form)
{
  return CheckedRadioButtonValue(form.elements['PropertyType']) == 'cooperative';
}

function IsMortgageCooperativeChecked(form)
{
 return CheckedRadioButtonValue(form.elements['PropertyType']) == 'mort';
}

// Taksa notarialna
function CalculateNotarialFee(TPrice, IsCooperative, IsMortgage)
{
  if(TPrice<=0)
    fee = 0;
  else if(TPrice<=3000)
    fee = 100;
  else if(TPrice<=10000)
    fee = 100  + (TPrice-3000)*0.03;
  else if(TPrice<=30000)
    fee = 310  + (TPrice-10000)*0.02;
  else if(TPrice<=60000)
    fee = 710  + (TPrice-30000)*0.01;
  else if(TPrice<=1000000)
    fee = 1010 + (TPrice-60000)*0.005;
  else
    fee = 5710+(TPrice-1000000)*0.0025;

  if(IsCooperative) {fee = fee/2;}
  if(IsMortgage) {fee = fee/2;}

  return Math.round(fee*100)/100;
}


//*****************************************************************************************************************************************
function ClearCalculatedFields(form)
{
   form.elements['GovernmentLegalTax'].value = '';
   form.elements['NotarialFee'].value = '';
   form.elements['NotarialFeeVat'].value = '';
   form.elements['ExtraCosts'].value = '';
   form.elements['Commission'].value = '';
   form.elements['TotalCosts'].value = '';
   form.elements['wpisdodzialuIIwynik'].value = '';
   form.elements['wpisdohipotekikaucyjnejwynik'].value = '';
   form.elements['wpisdohipotekizwyklejwynik'].value = '';
   form.elements['pccodhipotekikaucyjnejwynik'].value = '';
   form.elements['pccodhipotekizwyklejwynik'].value = '';
}

function CalcFormatMoney(amount, decimalPlaces)
{
  return FormatMoneyForDisplay(amount, decimalPlaces);
}

// Walidacja wciniźtego klawisza w polu z liczb¹ float.
function CalcKeyPress(evt, elem) {
  return KeyPressFloat(evt, elem);
}

function CalcSetFocus()
{
  document.FormCalculatorExtra.TPrice.focus();
}

