/* [FIXME] : удалить файл после перехода на тему Courts_model */
function func_number(num) {
	var cnt = 0;
	num = num.toString();
	for (var x = num.length; x >= 0; x--) {
		if (cnt % 3 == 0 && cnt > 0 && x > 0)
			num = num.substr(0, x)+' '+num.substr(x, num.length);
		cnt++;
	}
	return num;
}

function Sum2Str(sum, is_cent) {
	if (!sum) var sum = '0';
	sum = sum.toString();
	sum = parseFloat(sum.replace(/,/, '.'));
	iSum = parseInt(sum);
	rSum = Math.round((sum - iSum) * 100);

	if (is_cent == false)
	   return '<span class="rub">'+func_number(iSum) + '</span> руб.';
	else
		return '<span class="rub">'+func_number(iSum) + '</span> руб. <span class="kop">' + rSum + '</span> коп. ';
}

function DoOnLoad(){
    $.datepicker.setDefaults($.extend({showMonthAfterYear: false, showOtherMonths: true, selectOtherMonths: true,  onClose: function(dateText, inst) { Recalc() } }, $.datepicker.regional['']));
    $("#d1").add(("#d2")).datepicker($.datepicker.regional['ru']);

    $("#sumwnds").keyup(OnKeyUp).bind('focus mousedown mouseup keyup keydown keypress blur', function(e){
		var input = $(this),
			val = input.val();
		val = parseInt(val.replace(/[^\d]/g, ''));
		input.val(val ? val : (e.type == 'blur' ? 0 : ''));
    });

   $("#sumwnds2").keyup(OnKeyUp).bind('focus mousedown mouseup keyup keydown keypress blur', function(e){
		var input = $(this),
			val = input.val();
		val = parseInt(val.replace(/[^\d]/g, ''));
		input.val(val ? val : (e.type == 'blur' ? 0 : ''));
    });

    $("#d1").keyup(OnKeyUp);
    $("#d2").keyup(OnKeyUp);
    $("#d1").change(Recalc);
    $("#d2").change(Recalc);

    $("#nds").click(func_show_nds);
    $("#nds-input input").blur(func_hide_nds);
    $("#nds-input input").keyup(func_nds_calc);

	$("#refinancing_rate").click(func_show_refinancing_rate);
    $("#refinancing_rate-input input").blur(func_hide_refinancing_rate);
    $("#refinancing_rate-input input").keyup(func_refinancing_rate_calc);

    $('.period-switcher span').each(function() {
        $(this).click(function() {
            $('.period-switcher span').each(function() { $(this).removeClass('checked') });

            period_switcher = $(this).attr('id');
            $(this).addClass('checked');
            if (period_switcher == 'ps-5')
                $('#ps-dates').css('display', '');
            else
                $('#ps-dates').css('display', 'none');
            Recalc();
        });
    });
    Recalc();
    checkInput();
}

function func_show_nds(e) {
    $("#nds-input").css('display', '');
    $("#nds").css('display', 'none');
    $("#nds-input").focus();
}

function func_nds_calc() {
    var sum=$('#nds-input input').val();
    var sum_orig = sum.replace( ',','.');
    def_nds = parseFloat(sum_orig);
    $("#nds").html(def_nds);

    Recalc();

}

function func_hide_nds(e) {
    $("#nds-input").css('display', 'none');
    $("#nds").css('display', '');

    func_nds_calc();
}

function func_show_refinancing_rate(e) {
    $("#refinancing_rate-input").css('display', '');
    $("#refinancing_rate").css('display', 'none');
    $("#refinancing_rate-input").focus();
}

function func_hide_refinancing_rate(e) {
    $("#refinancing_rate-input").css('display', 'none');
    $("#refinancing_rate").css('display', '');

    func_refinancing_rate_calc();
}

function func_refinancing_rate_calc() {
    var rate=$('#refinancing_rate-input input').val();
    var rate_orig = rate.replace( ',','.');
    def_stavkaref = parseFloat(rate_orig);
    $("#refinancing_rate").html(def_stavkaref);
	
	Recalc();
}

function OnKeyUp(e){
    var keynum, keychar, charcheck;
    if(window.event) // IE
       keynum = e.keyCode;
    else if(e.which) // Netscape/Firefox/Opera
       keynum = e.which;
    if(keynum==8 || keynum==46 || keynum==190 || (keynum>=48 && keynum<=57) || (keynum>=96 && keynum<=105) ) Recalc();
    checkInput();
}

function checkInput() {
    try {
        if($('#sumwnds').val().match(/\D/gi).length) $('#p_itog').html('Неверный формат ввода');
    } catch(e) { }
}

function getDaysDiff(dt1,dt2){
	if (dt1 == null || dt2 == null) return 0;
	var dif = 0,
		y1 = dt1.getFullYear(),
		y2 = dt2.getFullYear(),
		m1 = dt1.getMonth(),
		m2 = dt2.getMonth(),
		d1 = dt1.getDate(),
		d2 = dt2.getDate(),
		days = [31,28,31,30,31,30,31,31,30,31,30,31];

	if (y1 != y2) {
		dif = (y2 - y1 > 1 ? (y2 - y1 - 1) * 360 : 0) + 30 * (11 - m1 + m2) + days[m1] - d1 + d2 + (days[m1] == 31 && d1 == 1 ? 0 : 1) - (d2 == 31 ? 1 : 0) + (days[m2] == 28 && d2 == 28 ? 2 : 0);
	} else {
		dif = (m2 - m1 - 1) * 30  + days[m1] - d1 + d2 + (days[m1] == 31 && d1 == 1 ? 0 : 1) - (d2 == 31 ? 1 : 0) + (days[m2] == 28 && d2 == 28 ? 2 : 0);
	}

	   if (dif < 0 || y1 > y2) {
		dif = 0;
	}

	   return dif;
}

function Recalc(){
    var sum=$('#sumwnds').val();
    var kop=$('#sumwnds2').val();
    sum = sum+"."+kop;
    var sum_orig = sum.replace( ',','.');
    sum = parseFloat(sum_orig);
    if (isNaN(sum)) {
        sum=0;
        sum_orig='' ;
    }
    var nds = parseFloat(def_nds);
    if (isNaN(nds)) nds=0;
    if (nds < 0) nds = 0;

     //def_stavkaref = '0.08';							//ставка рефинансирования
    var stavkaref = parseFloat(def_stavkaref / 100);
    if (isNaN(stavkaref)) stavkaref=0;

    var sum_wo_nds = sum * 100/(100 + nds);
    var sum_nds =sum - sum_wo_nds;

    var daydiff=0;
    var d1 = $('#d1');
    var d2 = $('#d2');
    var dt1= $("#d1").datepicker('getDate');
    var dt2= $("#d2").datepicker('getDate');
    if (period_switcher == 'ps-1')
        daydiff = 30;
    else if (period_switcher == 'ps-2')
        daydiff = 60;
    else if (period_switcher == 'ps-3')
        daydiff = 90;
    else if (period_switcher == 'ps-4')
        daydiff = 360;
    else if (period_switcher == 'ps-5')
        daydiff=getDaysDiff(dt1,dt2);

    if(daydiff<0) daydiff=0;

    var p_itog = '('+ sum + ') * ' + daydiff + ' * ' + stavkaref + '/360';
    var itog=eval(p_itog);
    $('#p_itog').html(Sum2Str(itog));
    $('#p_nds').html(Sum2Str(sum_nds));
}

$(function() {
	/**
	 * Функция, возвращающая кол-во дней между двумя датами
	 *
	 * @param {Date} dt1 Дата начала
	 * @param {Date} dt2 Дата завершения
	 * @return {int} Количество дней между датами
	 */
	function getDaysDiff(dt1,dt2){
	    if (dt1 == null || dt2 == null) return 0;
		var dif = 0,
			y1 = dt1.getFullYear(),
			y2 = dt2.getFullYear(),
			m1 = dt1.getMonth(),
			m2 = dt2.getMonth(),
			d1 = dt1.getDate(),
			d2 = dt2.getDate(),
			days = [31,28,31,30,31,30,31,31,30,31,30,31];

		if (y1 != y2) {
			dif = (y2 - y1 > 1 ? (y2 - y1 - 1) * 360 : 0) + 30 * (11 - m1 + m2) + days[m1] - d1 + d2 + (days[m1] == 31 && d1 == 1 ? 0 : 1) - (d2 == 31 ? 1 : 0) + (days[m2] == 28 && d2 == 28 ? 2 : 0);
		} else {
			dif = (m2 - m1 - 1) * 30  + days[m1] - d1 + d2 + (days[m1] == 31 && d1 == 1 ? 0 : 1) - (d2 == 31 ? 1 : 0) + (days[m2] == 28 && d2 == 28 ? 2 : 0);
		}

	    if (dif < 0 || y1 > y2) {
			dif = 0;
		}

	    return dif;
	}
	
	/**
	 * Возвращаем строку формата '%d-%m-%Y'
	 *
	 * @param {Date} date Объект даты и времени
	 * @return {string} Строка в формате '%d-%m-%Y'
	 */
	function getStringDate(date) {
		if (!date)
			return '';
		// Получаем текущий день и месяц с ведущими нулями, а также две последних цифры года
		var todayDate = date.getDate(),
			todayStringDate = ((todayDate < 10) ? '0' : '') + todayDate.toString(),
			todayMonth = date.getMonth() + 1,
			todayStringMonth = ((todayMonth < 10) ? '0' : '') + todayMonth.toString();
			todayYear = date.getFullYear();
		// Формируем строку в формате '%d-%m-%Y'
		return todayStringDate + '.' + todayStringMonth + '.' + todayYear;
	}
	
	// Функция для склонения русских числительных
	function declOfNum(number, titles)  
	{  
		cases = [2, 0, 1, 1, 1, 2];  
		return titles[(number%100>4 && number%100<20) ? 2 : cases[(number%10<5)?number%10:5]];  
	}
	
	// Инициализация всплывающего окна для печати результатов
	var api = $("a#calc_print_link[rel]").overlay({
		api:true,
		top:'center',
		// Перед открытием окна передаем туда данные
		onBeforeLoad: function() {
			// Передаем в окно для печати переменные калькулятора
			// Текущий адрес страницы
			$('.b-calc_print_window-url').text(document.URL);
			// Сумма задолженности
			var debt_roubles = func_number($('input#sumwnds').val()) + ' руб.',
				debt_kop = $('input#sumwnds2').val();
			debt_kop = (debt_kop == 0) ? '' : (' ' + debt_kop + ' коп.');
			$('.b-calc_print_window-debt').text(debt_roubles + debt_kop);
			// НДС
			$('.b-calc_print_window-nds').text($('#p_nds').text());
			$('.b-calc_print_window-nds_percent').text($('#nds').text());
			// Период просрочки
			var periodText = '';
			switch ($('.period-switcher span[class~="checked"]').attr('id')) {
				case 'ps-1':
					periodText = '1 месяц'
					break;
				case 'ps-2':
					periodText = '2 месяца'
					break;
				case 'ps-3':
					periodText = '3 месяца'
					break;
				case 'ps-4':
					periodText = '1 год'
					break;
				case 'ps-5':
					var dateStart = $('#d1').datepicker('getDate'),
						dateFinish = $('#d2').datepicker('getDate'),
						daysCount = getDaysDiff(dateStart, dateFinish);
					periodText = daysCount + ' ' + declOfNum(daysCount, ['день', 'дня', 'дней']);
					var dateStartDMY = getStringDate(dateStart),
						dateFinishDMY =  getStringDate(dateFinish);
					if (dateStartDMY && dateFinishDMY)
						periodText += ' (c ' + getStringDate(dateStart) + ' по ' + getStringDate(dateFinish) + ')';
					break;
				default:
					periodText = 'не задан';
			}
			$('.b-calc_print_window-period').text(periodText);
			// Ставка рефинансирования
			$('.b-calc_print_window-refinancing_rate').text($('#refinancing_rate').text());
			// Итог
			$('.b-calc_print_window-total').html($('#p_itog').html());
		}
	});
	
	// Обработчик нажатия на ссылке "Печатать"
	$('.js-calc_print_window-print_link').click(function() {
		api.close();
		window.print();
	});
	
	// Обработчик нажатия на ссылке "Закрыть"
	$('.js-calc_print_window-close_link').click(function() {
		api.close();
	});
});

