var loanterm;
var calcBgPosLoanRate;
var calcBgPosMilesTravelled;
var calcMilesTravelledPrevious = "12";
var calcSelecboxoptionsVisible = false;
var residualelement = 0;

if(!milesTravelledDelimiter) {
  milesTravelledDelimiter = ".";
}

$(document).ready(function(){
  $("form").jForms();
  $("#calculatorbox").css("display","block");
  $("#calc_loanterm_slider").slider({steps:calcLoanRateStep, slide:loantermRefresh, change:loantermRefresh2, min:calcLoanRateMin, max:calcLoanRateMax, startValue:calcLoanRateStart});
  $("#calc_miles_travelled_slider").slider({steps:calcMilesTravelledStep, slide:milesTravelledRefresh, min:calcMilesTravelledMin, max:calcMilesTravelledMax, startValue:calcMilesTravelledStart});
  
  loantermRefresh(calcLoanRateStart);
  milesTravelledRefresh(calcMilesTravelledStart);
  
  $(".userinput").keyup(function(event){
    //clearresult(false);
  });
  
  $("#input_leasing,#input_select").click(function () { 
    if($(this).val() == "leasing"){
      $("#inputSelectLabel").hide();
      $("#inputLeasingLabel").show();
    }else{
      $("#inputLeasingLabel").hide();
      $("#inputSelectLabel").show();
    }
    /*
    */
    $("#calc_loanterm_slider").slider("destroy");
    $("#calc_miles_travelled_slider").slider("destroy");

    $("#calc_loanterm_slider").slider({steps:calcLoanRateStep, slide:loantermRefresh, change:loantermRefresh2, min:calcLoanRateMin, max:calcLoanRateMax, startValue:calcLoanRateStart});
    $("#calc_miles_travelled_slider").slider({steps:calcMilesTravelledStep, slide:milesTravelledRefresh, min:calcMilesTravelledMin, max:calcMilesTravelledMax, startValue:calcMilesTravelledStart});

    $("#calc_loanterm_slider").css("background-position", "130px 0");
    $("#calc_miles_travelled_slider").css("background-position", "130px 0");

    $("#calc_loan_result").html(calcLoanRateMin + " " + calcLoanRateIdentifier);
    var myHTMLCode = ""+calcMilesTravelledMin;
    myHTMLCode = myHTMLCode.replace(/(0.{2})\b/,".$1");
    myHTMLCode = myHTMLCode + " " + calcMilesTravelledIdentifier;
    $("#calc_miles_travelled_result").html(myHTMLCode);

    $("#calc_vehicle_val").val("0");
    $("#leasing_rate").val("0");
  });
});


function calcCloseMessage() {
  $("#calculatormessagebox").css("display","none");
  $("#calculatorbox").css("display","block");
}

function loantermRefresh() {
  newValue = $("#calc_loanterm_slider").slider( "value");
  calcBgPosLoanRate = (newValue - calcLoanRateMin) / ((calcLoanRateMax - calcLoanRateMin) / calcLoanRateStep) * (130 / (calcLoanRateStep)) + 130;
  $("#calc_loan_result").html(newValue + " " + calcLoanRateIdentifier);
  $("#calc_loanterm_slider").css("background-position", calcBgPosLoanRate + "px 0");
  loanterm = newValue;
  clearresult(false);
}

function loantermRefresh2() {
  newValue = $("#calc_loanterm_slider").slider( "value");
  
  if(newValue  == "48"){
    $("#calc_miles_travelled_slider").slider("destroy");
    calcMilesTravelledStep = calcMilesTravelledStepSave - 1;
    calcMilesTravelledMax = calcMilesTravelledMaxSave - 5000;
    $("#calc_miles_travelled_slider").slider({steps:calcMilesTravelledStep, slide:milesTravelledRefresh, min:calcMilesTravelledMin, max:calcMilesTravelledMax, startValue:calcMilesTravelledStart});
    milesTravelledRefresh(calcMilesTravelledStart);
  }else if(newValue  == "60"){
    $("#calc_miles_travelled_slider").slider("destroy");
    calcMilesTravelledStep = calcMilesTravelledStepSave - 3;
    calcMilesTravelledMax = calcMilesTravelledMaxSave - 15000;
    $("#calc_miles_travelled_slider").slider({steps:calcMilesTravelledStep, slide:milesTravelledRefresh, min:calcMilesTravelledMin, max:calcMilesTravelledMax, startValue:calcMilesTravelledStart});
    milesTravelledRefresh(calcMilesTravelledStart);
  }else{
    if((calcMilesTravelledPrevious == "48") || (calcMilesTravelledPrevious == "60")){
      $("#calc_miles_travelled_slider").slider("destroy");
      calcMilesTravelledStep = calcMilesTravelledStepSave;
      calcMilesTravelledMax = calcMilesTravelledMaxSave;
      $("#calc_miles_travelled_slider").slider({steps:calcMilesTravelledStep, slide:milesTravelledRefresh, min:calcMilesTravelledMin, max:calcMilesTravelledMax, startValue:calcMilesTravelledStart});
      milesTravelledRefresh(calcMilesTravelledStart);
    }
  }
  calcMilesTravelledPrevious = newValue;
}

function milesTravelledRefresh(newValue) {
  newValue = $("#calc_miles_travelled_slider").slider( "value");
  calcBgPosMilesTravelled = (newValue - calcMilesTravelledMin) / ((calcMilesTravelledMax - calcMilesTravelledMin) / calcMilesTravelledStep) * (130 / (calcMilesTravelledStep)) + 130;
  newValue = newValue.toFixed(0);

  var myHTMLCode = newValue;
  myHTMLCode = myHTMLCode.replace(/(0.{2})\b/,".$1");
  myHTMLCode = myHTMLCode + " " + calcMilesTravelledIdentifier;
  $("#calc_miles_travelled_result").html(myHTMLCode);

  $("#calc_miles_travelled_slider").css("background-position", calcBgPosMilesTravelled + "px 0");
  clearresult(false);

}

function calculate(){
  var leasingSelectVal = $('input[name=leasing_select]:checked').val();
  
  var netPiceVal = $("#calc_vehicle_val").val(); // Nettokaufpreis
  var leasingRateVal = $("#leasing_rate").val(); // Erste Leasingrate
  var loantermVal = $("#calc_loanterm_slider").slider("value"); // Laufzeit 
  var milesTravelledVal = $("#calc_miles_travelled_slider").slider("value"); // Laufleistung
  var decliningBalanceVal = decliningBalance[milesTravelledVal][loantermVal]; // Restwert 
  
  var netPice = Number(netPiceVal);
  var leasingRate = Number(leasingRateVal);
  var loanterm = Number(loantermVal);
  var terminalValue = (netPice * Number(decliningBalanceVal)) / 100;
  var specificAmount = netPice - leasingRate;

  var mysticP = 0;
  var finalResult = 0;
  var errorText = "";

  if(leasingSelectVal == "leasing"){
    mysticP = getLeasingInterestRates(specificAmount);
    wert1 = specificAmount - terminalValue;
    wert2 = 1 + (mwstSatz * 0.01);
    wert31 = 1 / Math.pow((1 + (mysticP * 0.01)),(1/12));
    wert32 = 1 - (wert31);
    wert33 = 1 - (Math.pow( wert31 , loanterm ));
    wert4 = wert1/wert2;
    wert5 = wert4 * wert32;
    wert6 = wert5 / wert33;
    wert7 = (terminalValue/ wert2) * wert32;
    finalResult = (wert6 + wert7) * wert2;
  }else{
    mysticP = getSelectInterestRates(specificAmount);
    wert1 = specificAmount - terminalValue;
    wert2 = Math.pow(1 + mysticP * 0.01, 1/12);
    wert4 = wert2 - 1;
    wert31 = 1 / wert2;
    wert33 = 1 - (Math.pow( wert31 , loanterm ));
    wert5 = wert1 * wert4;
    wert6 = wert5 / wert33;
    wert7 = terminalValue * (wert2 - 1);
    finalResult = wert6 + wert7;
  }

  if(netPice < 1 || netPice > 999999 || isNaN(netPiceVal)) {
    errorText += calcErrorText1 + "<br><br>"; 
  }

  if(leasingRate > (netPice * 0.5) || isNaN(leasingRateVal)) {
    errorText += calcErrorText2 + "<br><br>"; 
  }

  if(errorText  != "") {
    clearresult(errorText);
  }else{
    $("#calc_result_monthly").val( currencyPattern.replace(/<NUMBER>/g, String(finalResult.toFixed(2))) );
    $("#calc_result_standard").val( currencyPattern.replace(/<NUMBER>/g, String(terminalValue.toFixed(2))) );
    $("#calc_result").val( mysticP );
  }
}

function clearresult(errorText){
  $("#calc_result_monthly").val("");
  $("#calc_result_standard").val("");
  $("#calc_result").val("");
  if(errorText) {
    calcHide();
    errorText = "<h7>" + calcErrorText0 + "</h7><p>" + errorText + "</p>"  ;
    $("#calc_message_content").html(errorText);
    $("#calc_message_content").jScrollPane({scrollbarWidth:11, scrollbarMargin:0});
    $("#calc_message_pane").css("visibility","visible");
    $("#calc_message_pane").css("display","block");
  }
}

function calcTermsConditions() {
  calcHide();
  $("#calc_message_content").html(calcTermsConditionsText);
  $("#calc_message_content").jScrollPane({scrollbarWidth:11, scrollbarMargin:0});
  $("#calc_message_pane").css("visibility","visible");
  $("#calc_message_pane").css("display","block");
}


function calcInfo(infoNumber) {
  calcHide();
  $("#calc_message_content").html(calcInfoText[infoNumber]);
  $("#calc_message_content").jScrollPane({scrollbarWidth:11, scrollbarMargin:0});
  $("#calc_message_pane").css("visibility","visible");
  $("#calc_message_pane").css("display","block");
}


function calcHide() {
  $("#calculatormessagebox").css("height", $("#calculatorbox").outerHeight()-26);
  $("#calculatorbox").css("display","none");
  $("#calculatormessagebox").css("display","block");
}

$.fn.jForms =
function(options)
{
	var lastKeypress = 0;
    var keyBuffer = '';
    var self = this;

//select boxes
$('select',self).each(function ()
{
	$('body').append('<ul id = "'+this.id+'_fake_list" class="fake_list"></ul>');
	$(this).children().each(function()
	{
		$('#'+$(this).parent().attr('id')+'_fake_list').append('<li>'+$(this).text()+'</li>');
	});
	$('#'+this.id+'_fake_list').css('height',($('#'+this.id+'_fake_list li:first').height()+4)*($('#'+this.id+'_fake_list li').size()<opts.listSize?$('#'+this.id+'_fake_list li').size():opts.listSize)).css('width',80).toggle();

	$('#'+this.id+'_fake_list > li').hover(function(){$(this).addClass('selected')},function(){$(this).removeClass('selected');}).each(function(i)
	{
		$(this).click(function(){
		var id = $(this).parent().attr('id');
		$('#'+id).toggle();
	    $('#'+id.replace('_list','')).attr('value',$(this).text());
		$('#'+id.replace('_fake_list','')).attr('selectedIndex',i).change();
		$('#'+id+' >  li').removeClass('selected');
		$(this).addClass('selected');
	});
	});

$(this).before('<div class="selectArea" style="width:'+($(this).width()+43)+'px"><div class="left"></div><div class="right"><a class="selectButton" href="javascript:;" onclick="$(\'#'+this.id+'_fake\').focus().click()"></a></div><input type = "text" class="center" style="width:'+($(this).width())+'px;cursor:default" id="'+this.id+'_fake"  value="'+this[this.selectedIndex].text+'"  /></div>').css('position','absolute').css('left','-6000px');

	$('#'+this.id+'_fake').click(function(){
		$('#'+this.id+'_list').focus();
		$('#'+this.id+'_list').css('left',$(this).offset().left-8);

		if(($('#'+this.id+'_list').height()+$(this).offset().top -document.documentElement.scrollTop) > $(window).height())
		{
			$('#'+this.id+'_list').css('top',$(this).offset().top-$('#'+this.id+'_list').height()-4);
		}
		else
		{
			$('#'+this.id+'_list').css('top',$(this).offset().top+$(this).height()+4);
		}
		$('#'+this.id+'_list > li').removeClass('selected');
		$('#'+this.id+'_list > li').get($('#'+this.id.replace('_fake','')).attr('selectedIndex')).className='selected';


		$('.fake_list:visible:not(#'+this.id+'_list)').toggle();
		$list = $('#'+this.id+'_list');
		$list.toggle();
		var offSet = (($('.selected', $list).length>0? $('.selected', $list).offset().top:0)- $list.offset().top);
		$list.animate({scrollTop: offSet});
		}).css('font-size',$(this).css('font-size')).css('padding','2px 0px 2px 2px').keyup(function(e)
		{
			var pressedKey = e.charCode || e.keyCode || -1;
			var $dd = $('#'+this.id.replace('_fake',''));
			$('#'+this.id+'_list > li').removeClass('selected');
			switch(pressedKey)
			{
				//down
				case 40:
					var curr = ($dd.attr('selectedIndex')+1>=$('option',$dd).length?0:$dd.attr('selectedIndex')+1);
				break;
				case 38:
					var curr = ($dd.attr('selectedIndex')-1<0?$('option',$dd).length-1:$dd.attr('selectedIndex')-1);
				break;
				case 13:
					$('#'+this.id+'_list').toggle();
					return false;
				break;
				default:
				var t = new Date();
				if(t.getTime()-lastKeypress>1000)
				{
					lastKeypress=t.getTime();
					keyBuffer ='';
				}
					keyBuffer +=String.fromCharCode(pressedKey).toLowerCase();
					curr=-1;
					$('#'+this.id+'_list > li').each(function(i)
					{
						if($(this).text().toLowerCase().indexOf(keyBuffer)==0&&curr==-1)
						{
							curr = i;
							return;
						}
					});
					break;
			}
			if(curr==-1)
			{
				curr=0;
			}
			$($('#'+this.id+'_list > li').get(curr)).addClass('selected').focus();
			$list = $('#'+this.id+'_list');
			var offSet = (($('.selected', $list).length>0? $('.selected', $list).offset().top:0)- $list.offset().top);
			$list.attr('scrollTop',offSet);
			$dd.attr('selectedIndex',curr).change();
			$(this).attr('value', $($('#'+this.id+'_list > li').get(curr)).text());
			return false;

		}).focus(function()
		{
			$(document).keypress(function(e)
			{
				var pressedKey = e.charCode || e.keyCode || -1;
				if(pressedKey==13)
				{
					return false;
				}
			});
		}).blur(function()
		{
			$(document).unbind('keypress').unbind('click');
		});

});

	return self;
}

var defaultValueCalculator = currencyPattern.replace(/<NUMBER>/g, "0");
document.calculator.calc_vehicle_val.value = defaultValueCalculator;
document.calculator.leasing_rate.value = defaultValueCalculator;
