/* конфиг по-умолчанию для jquery datepicker-а */
var defaultDatepickerConfig = {
		dateFormat: 'dd.mm.yy',
		showOn: 'button',
		buttonImageOnly: true,
		buttonImage: tm_urlLocal + 'i2/cal.gif',
		buttonText: 'календарь',
		showDefault: true
	}

function getAbsolutePosition(el) {
	var r = { x: el.offsetLeft, y: el.offsetTop };
	if (el.offsetParent) {
		var tmp = getAbsolutePosition(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}
$.fn.overlay=function() {
	var el=$(this);
	$('body').prepend('<div id="overlay"></div>');
	$('#overlay').click(function(){el.hide();$('#overlay').remove();});
	$('#overlay').show('slow');
	return this;
};
$.fn.centering=function() {
	this.css("position","absolute");
	this.css("top", ( $(window).height() - this.height() ) / 2+$(window).scrollTop() + "px");
	this.css("left", ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + "px");
	return this;
};

// Taken from http://javascript.nwbox.com/cursor_position/
function getSelectionStart(o) {
	if (o.createTextRange) {  // IE
		var r = document.selection.createRange().duplicate();
		r.moveEnd('character', o.value.length);
		if (r.text == '') return o.value.length;
		return o.value.lastIndexOf(r.text);
	} else
		return o.selectionStart;
}

// Taken from http://javascript.nwbox.com/cursor_position/
function getSelectionEnd(o) {
	if (o.createTextRange) {  // IE
		var r = document.selection.createRange().duplicate();
		r.moveStart('character', -o.value.length);
		return r.text.length;
	} else
		return o.selectionEnd;
}

// Taken from http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/
function setSelectionRange(o, start, end) {
	if (o.createTextRange) {  // IE
		var r = o.createTextRange();
		r.collapse(true);
		r.moveEnd('character', end);
		r.moveStart('character', start);
		r.select();
	} else
		o.setSelectionRange(start, end);
}


// yearRangeEnum: 'birthday' | null/undefined.
function setupDatePickers(inputs, options, yearRangeEnum) {
    var futureYears = 0;
    switch (yearRangeEnum) {
        case 'birthday':
            futureYears = 0;
            break;
        case 'valid-till':
            futureYears = 18;
            break;
        default:
            futureYears = 2;
    }
    
	var maxYear = (new Date).getFullYear() + futureYears;
	inputs.datepicker({
		dateFormat: 'dd.mm.yy',
		showOn: 'button',
		buttonImageOnly: true,
		buttonImage: tm_urlLocal + 'i2/cal.gif',
		buttonText: 'календарь',
		showDefault: true,
		changeMonth: true,
		changeYear: true,
		yearRange: 'c-100:' + maxYear,
		showAnim: ''
	});
	if (options)
		inputs.datepicker('option', options);
	
	inputs.keydown(datePickerOnKeyDown);

    // События при потере фокуса
    inputs.blur(dataPickerOnBlur);
}

/**
 * Разбивает введеную дату по точкам (d.m.y)
 * Если год введен в двухзначном формате, добавляет век.
 * @param event
 */
function dataPickerOnBlur(event) {
    var o = event.target;

    // Исходная строка
    var s = o.value;

    // Год
    var year = s.slice(6);

    // Дата
    var date = s.slice(0,6);

    // Если год двухзначный
    if (year.length == 2) {
        var c = year[0];
        var century = (c >= '3') ? '19' : '20';
        year = century + year;
    }
    o.value = date + year;
}

function datePickerOnKeyDown(event) {
	var c;
	var i = event.keyCode;
//		document.title += ' ' + i; return;
	if (i >= 48 && i <= 57) c = String.fromCharCode(i);  // main keyboard
	else if (i >= 96 && i <= 105) c = String.fromCharCode(i - 48);  // numpad
	else if (i == 190 || i == 110) c = '.';  // main || numpad
	else return true;  // pass on; jquery won't allow wrong chars inserted

	// Обработчик трабатывает перед добавлением символа в поле,
	// так что, например, при нажатии '0' в пустом поле будет s.length==0, selectionStart==0.
	var o = event.target;
	var s = o.value;
	var sel1 = getSelectionStart(o);
	var sel2 = getSelectionEnd(o);

	if (sel2 < s.length)
		// Если редактирование внутри строки, ну её нафиг все возможные случаи обрабатывать.
		return true;
	
	if (sel1 >= 10 || (c == '.' && sel1 != 1 && sel1 != 2 && sel1 != 4 && sel1 != 5) || (c != '.' && sel1 != 0 && sel1 != 1 && sel1 != 3 && sel1 != 4 && sel1 < 6))
		// Если ввод по маске, запрещаем всякие глупости.
		// Точки в позициях 1 и 5 - для сокращённого вода типа 8.9.2010.
		return false;

	if (sel1 < s.length) {
		// Шестая позиция - это первая цифра года, спец.обработка века см. далее.
		if (s.charAt(sel1) == c && sel1 != 6) {
			var sel1new = sel1 + (sel1 == 1 || sel1 == 4 ? 2 : 1);
			setSelectionRange(o, sel1new, Math.max(sel1new, sel2));
			return false;
		}
		s = o.value = s.substr(0, sel1);
		setSelectionRange(o, sel1, sel1);
	}
	// Сейчас курсор за последним символом.

	var today = new Date();
	var mm = (today.getMonth() + 1).toString();
	if (mm.length == 1)
		mm = '0' + mm;
	var yyyy = (today.getYear() + ($.browser.msie ? 0 : 1900)).toString();

	if (sel1 != 1 && sel1 != 4) {
		// Анализируем первую цифру года, чтобы подсунуть век.
		if (sel1 == 6) {

			// Штука для подстановки века
			//var century = (c >= '3') ? '19' : '20';
				//o.value = s + century + c;
            o.value = s + c;
				setSelectionRange(o, 9, 9);
			return false;
		}
		return true;
	}

	if (sel1 == 1) {
		o.value = (c == '.' ? '0' + s : s + c) + '.' + mm + '.' + yyyy;
		setSelectionRange(o, 3, 10);
	} else if (sel1 == 4) {
		o.value = (c == '.' ? s.substr(0, 3) + '0' + s.substr(3, 1) : s + c) + '.' + yyyy;
		setSelectionRange(o, 6, 10);
	}
	return false;
}

function setupTimePickers(inputs) {
	// Didn't work with jquery 1.4, was deleted (r13073 by n0dwis).
	//inputs.timepickr({ rangeMin: [00, 10, 20, 30, 40, 50] });
}

$(document).ready(function(){
	$('.expand').click(function(){
		$(this).toggleClass('active');
		$('.expand-block').eq($('.expand').index(this)).toggle();
		return false;
	});
	$('.leftmenu p').click(function(){
		$(this).toggleClass('close');
		$(this).next('ul').toggle();
		return false;
	});
	/* popups */
	$('.close_pp').click(function(){
		$(this).parents('div.popup').eq(0).hide();
		$('#overlay').remove();
		return false;
	});

	$('#link-add').click(function(){
		$('#pp-add').overlay().toggle().css({right:20,top:getAbsolutePosition(this).y-$('#main').scrollTop()+20});
		return false;
	});
	
	$('td.key a').click(function(){
		$('#itemInfo').overlay().toggle().css({left:getAbsolutePosition(this).x,top:getAbsolutePosition(this).y-$('#main').scrollTop()+20});
		return false;
	});
	$('#hist_toggle a').click(function(){
		if ($(this).text() == 'краткий') {$('tr.hidden-tr').hide(); $(this).siblings('a').removeClass('active').end().addClass('active'); $('img.img-blue').removeClass('img-minus').addClass('img-plus'); return false;}
		else if ($(this).text() == 'подробный') {$('tr.hidden-tr').show(); $(this).siblings('a').removeClass('active').end().addClass('active'); $('img.img-blue').removeClass('img-plus').addClass('img-minus'); return false;}
		return false;
	});
	
	$('select.clients').change(function(){
		if ($(this).val()=='new') {$('.newclient').eq($('select.clients').index(this)).show();}
		else {$('.newclient').eq($('select.clients').index(this)).hide();}
	});	
	
});


jQuery( document ).ready(function(){
    $('#history-table a.toggle-history').click(function(){
        var splitByHash = this.href.split('#')[1];
        var id = splitByHash.split('-')[1];
        var $img = $(this).find('img');
        if($img.hasClass('img-plus')) {
        $('#history-' + id).toggle();
        $img.removeClass('img-plus').addClass('img-minus');
        }
        else {
        $('#history-' + id).toggle();
        $img.removeClass('img-minus').addClass('img-plus');
        }
        return false;
    });

});

