(function($) {
	$.widget('ui.personsearch', $.ui.dialog, {
		_dialogCreate: $.ui.dialog.prototype._create,
		_create: function() {
			var widget = this;
			widget._dialogCreate();
			var height = $(window).height();
			if (height > 690) {
				height = 690;
			}
			widget.option({
				title: 'Henkilöhaku',
				modal: true,
				width: 600,
				height: height,
				buttons: {
					'Peruuta' : function() {
						widget.close();
					}
				}
			});
			widget.searchFilterDiv = $('<div class="filter"></div>').appendTo(widget.element);
			widget.searchForm = $('<form method="post" action="henkilot"></form>').appendTo(widget.searchFilterDiv);
			widget.searchForm.append('<div class="fieldset"><div class="field"><label>Nimi<br /><input type="text" name="filter[name]" /></label></div><div class="field"><label><br /><input id="fe-supervisorsonly" type="checkbox" class="radio" name="filter[supervisors_only]" value="1" /> Vain työnjohtajat</label></div></div>');
			widget.searchForm.append('<div class="fieldset"><input type="submit" value="Hae" /></div>').find('input[type="submit"]').button();
			widget.searchForm.submit(function() {
				widget.pagination.hide();
				widget.searchResults.html('&#160;').addClass('ajax-loading');
				$.getJSON($(this).attr('action'), $(this).serialize(), function(data) {
					widget._handleSearchResult(data);
				});
				return false;
			});
			widget.pagination = $('<p></p>').appendTo(widget.element);
			widget.searchResults = $('<div />').appendTo(widget.element);
			widget.element.find('a.ownerpersonselect').live('click', function() {
				var tr = $(this).parent().parent();
				var personid = tr.find('.personid').text();
				var personname = tr.find('.personname').text();
				widget._trigger('ownerPersonSelected', null, {
					personid: personid,
					personname: personname
				});
				return false;
			});
			widget.element.find('a.supervisorselect').live('click', function() {
				var tr = $(this).parent().parent();
				var personid = tr.find('.personid').text();
				var personname = tr.find('.personname').text();
				widget._trigger('supervisorSelected', null, {
					personid: personid,
					personname: personname
				});
				return false;
			});
		},
		_handleSearchResult: function(data) {
			var widget = this;
			widget.searchResults.removeClass('ajax-loading');
			if (data.errors) {
				$('<div />').validationerrordialog({
					validationErrors: data.errors
				});
			}
			else {
				var currentPage = data.page;
				var totalPages = data.totalPages;
				var totalCount = data.totalCount;
				var resultsperpage = data.resultsPerPage;
				if (totalPages > 20) {
					totalPages = 20;
				}
				var start = (currentPage - 1) * resultsperpage + 1;
				var end = start + resultsperpage - 1;
				if (end > totalCount) {
					end = totalCount;
				}
				this.pagination.show().html('').append('Henkilöt ' + start + '-' + end + '/' + totalCount + ' Sivut: ');
				for (var i=1; i<=totalPages; i++) {
					var filter = data.filter;
					if (filter.length === 0) {
						filter = {};
					}
					filter.page = i;
					var anchor = $('<a href="henkilot?' + $.param({filter:filter}) + '"></a>');
					if (i == currentPage) {
						anchor.html('<strong>' + i + '</strong>');
					}
					else {
						anchor.text(i);
					}
					anchor.click(function() {
						widget.searchResults.html('&#160;').addClass('ajax-loading');
						$.getJSON($(this).attr('href'), function(data) { widget._handleSearchResult(data);});
						return false;
					});
					this.pagination.append(anchor).append(' ');
				}
					var searchResultTable = $('<table cellpadding="0" cellspacing="0"><tr><th>Nro</th><th>Nimi</th><th>&#160;</th><th>&#160;</th></table>');
				widget.searchResults.html('')
					.append(searchResultTable);
				$.each(data.persons, function(key, person) {
					searchResultTable.append('<tr><td class="personid">' + person.Id + '</td><td class="personname">' + person.Name + '</td><td><a class="ownerpersonselect" href="#">Työntekijäksi</td><td><a href="#" class="supervisorselect">Työnjohtajaksi</a></td></tr>');
				});
			}
		},
		setSupervisorCheckbox: function(value) {
			if (value) {
				this.searchForm.find('#fe-supervisorsonly').attr('checked', 'checked');
			}
			else {
				this.searchForm.find('#fe-supervisorsonly').attr('checked', false);
			}
		}
	});
}(jQuery));
