$.datepicker.setDefaults($.extend($.datepicker.regional['ru']));
$.datepicker.setDefaults({yearRange: '-100:+10'});

function uiWaitLine(element, text)
{
	if (text === undefined)
		text = 'Подождите...';
	/*element.css({
		"position" : "relative"
	});*/

	var height = 20;
	var top = (element.height() - height) / 2;

	element.html("<div class='uih-wait-line'></div>");
	element = element.find('div');
	element.progressbar({value: 100});
	element.css({
		'height': height,
		'background' : 'none',
		'border': 'none'/*,
		"position" : "absolute",
		"top": top,
		"left": 10,
		"right": 10*/
	});
	element.find('.ui-progressbar-value').html(text).addClass('ui-animated-progressbar').css({'padding-left': '10px', 'width': ''});
	return element;
}

function uiBlockElement(element, text)
{
	element.css("position", "relative");
	var wline = $("<div></div>").appendTo(element);
	wline.css({
		"position":"absolute",
		"left":0,
		"right":0,
		"top":0,
		"bottom":0
	});
	uiWaitLine(wline, text);
	return function()
	{
		wline.remove();
	}
}

function uiWaitBox(title, text)
{
	if (text === undefined)
		text = 'Подождите...';
	if (title === undefined)
		title = '';
	var dialog = $("<div><div class='ui-state-highlight'><span class='ui-icon ui-icon-info' style='float:left; margin:0 7px 20px 0;' /><div class='line'></div><div/></div>").appendTo('body');
	dialog.dialog({
		'title': title,
		width: 400,
		bgiframe: true,
		modal: true
	});

	uiWaitLine(dialog.find('.line'), text);

	return function(){
		dialog.dialog("destroy");
	}
}

function uiSetProgress(element, value)
{
	element.find('.value').css('width', value * 100 + '%');
}

/**
 * Позволяет показать произвольное диалоговое окно
 * @param state статус 'error', 'highlight', false
 */
function uiCombineDialog(title, msg, state, fields, buttons, settings, extra)
{
	var str = msg;
	str += "<div class='combine-dialog-extra'></div>";
	if (fields)
		$.each(fields, function(key, val){
			str += "<br /><input class='" + key + "' value='" + val + "' />";
		});
	str = "<p>" + str + "</p>";
	if (state !== false)
		str = "<div class='ui-state-" + state + "'>" + str + "</div>";
	str = "<div>" + str + "</div>";
	var dialog = $(str).appendTo('body');

	/*if (buttons)
		$.each(buttons, function(name, callback){
			buttons[name] = function(e){
				callback(e, dialog);
			}
		});*/

	var config = {
		'title': title,
		width: 400,
		bgiframe: true,
		modal: true,
		'buttons': buttons
	};

	if (extra)
		dialog.find('.combine-dialog-extra').append(extra);

	if (settings)
		$.extend(config, settings);

	return dialog.dialog(config);
}

function uiConfirm(title, msg, callback)
{
	var dialog = $("<div><div class='ui-state-highlight'><span class='ui-icon ui-icon-info' style='float:left; margin:0 7px 20px 0;' /><p>" + msg + '<p/><div/></div>').appendTo('body');
	dialog.dialog({
		'title': title,
		width: 400,
		bgiframe: true,
		modal: true,
		buttons:{
			'Да' : function(e){
				callback();
				dialog.dialog('destroy');
				dialog.remove();
			},
			'Нет' : function(e){
				dialog.dialog('destroy');
				dialog.remove();
			}
		}
	});
}

function uiPrompt(title, msg, callback, value)
{
	var dialog = $("<div><div class='ui-state-highlight'><span class='ui-icon ui-icon-info' style='float:left; margin:0 7px 20px 0;' /><p>" + msg + "<br/><input class='prompt-value' " + (value === undefined ? '' : "value = '" + value + "'") + '/>' + '<p/><div/></div>').appendTo('body');
	dialog.dialog({
		'title': title,
		width: 400,
		bgiframe: true,
		modal: true,
		buttons:{
			'Ok' : function(e){
				callback(dialog.find('.prompt-value').val());
				dialog.dialog('destroy');
				dialog.remove();
			},
			'Отмена' : function(e){
				dialog.dialog('destroy');
				dialog.remove();
			}
		}
	});
}

function uiDialogError(title, msg)
{
	var dialog = $("<div><div class='ui-state-error'><span class='ui-icon ui-icon-alert' style='float:left; margin:0 7px 20px 0;' /><p>" + msg + '</p><div/></div>').appendTo('body');
	dialog.dialog({
		'title': title,
		width: 400,
		bgiframe: true,
		modal: true,
		buttons:{
			'Закрыть' : function(e){
				dialog.dialog('destroy');
				dialog.remove();
			}
		}
	});
}

function uiDialogInfo(title, msg)
{
	var dialog = $("<div><div class='ui-state-highlight'><span class='ui-icon ui-icon-info' style='float:left; margin:0 7px 20px 0;' /><p>" + msg + '</p><div/></div>').appendTo('body');
	dialog.dialog({
		'title': title,
		width: 400,
		bgiframe: true,
		modal: true,
		buttons:{
			'Ok' : function(e){
				dialog.dialog('destroy');
				dialog.remove();
			}
		}
	});
}

function uiInitPagination(pagination, itemsNum)
{
	var config = {};
	eval('config = ' + pagination.attr('pager_conf'));
	pagination.pagination(itemsNum, config);
}

function uiSetPagination(pagination, curPage, totalPages, callback)
{
	var lastTotalPages = pagination.data('totalPages');
	if (lastTotalPages != totalPages)
	{
		var config = {};
		eval('config = ' + pagination.attr('pager_conf'));
		pagination.data('curPage', curPage);
		pagination.data('totalPages', totalPages);
		pagination.data('enablePagination', false);
		pagination.data('setPage', function(page){
			if (page == 'last')
				page = totalPages;
			if (page.substr && page.substr(0, 1) == '+')
				page = curPage + parseInt(page.substr(1));
			if (page.substr && page.substr(0, 1) == '-')
				page = curPage - parseInt(page.substr(1));
			if (page > totalPages)
				page = totalPages;
			if (page < 1)
				page = 1;
			pagination.find('.page[page=' + (page - 1) + ']').eq(0).click();
		});
		pagination.pagination(totalPages, $.extend(config, {
			items_per_page: 1,
			current_page: curPage - 1,
			'callback': function(page)
			{
				if (pagination.data('enablePagination'))
					callback(page + 1);
			}
		}));
		pagination.data('enablePagination', true);
	}
}
