dkamera.kamera = {};

dkamera.kamera.selector = (function($) {
	var $dialog = null;
	var $dialog_form = null;
	var $dialog_form_hersteller = null;
	var $dialog_form_query = null;
	var $dialog_form_typ = null;
	var $dialog_form_alter = null;
	var $dialog_results = null;
	var search_url = null;
	var selected_callback = null;
	var last_search_url = null;
	var search_query = {};
	
	function _dialog()
	{
		if ($dialog) return $dialog;
		$dialog = $('<div>').attr('id', 'kamera-select-dialog');
		$dialog_form = $('<div>').attr('class', 'form');
		$dialog_form_hersteller = $('<select>');
		$dialog_form_hersteller.append($('<option>').attr('value', '').text('[Hersteller]'));
		$.getJSON('/digitalkamera/ajax/hersteller', null, function(data, status) {
			if (status != 'success') return;
			if (data.status != 'ok') return;
			$.each(data.hersteller, function (i, h) {
				$dialog_form_hersteller.append($('<option>').attr('value', h.pk).text(h.name));
			});
		});
		$dialog_form_hersteller.bind('change', function (e) { start_search(); });
		$dialog_form_hersteller.bind('keyup', function (e) { if (e.keyCode == 13) { start_search(); } });
		$dialog_form.append($('<div>').attr('class', 'hersteller-container container').append($('<label>').text('Hersteller')).append($dialog_form_hersteller));
		$dialog_form_query = $('<input>').attr('type', 'text');
		$dialog_form_query.bind('keyup', function (e) { if (e.keyCode == 13) { start_search(); } });
		$dialog_form.append($('<div>').attr('class', 'query-container container').append($('<label>').text('Suche')).append($dialog_form_query));
		$dialog_form_typ = $('<select>');
		$dialog_form_typ.append($('<option>').attr('value', '').text('[Typ]'));
		$dialog_form_typ.append($('<option>').attr('value', 'kompakt').text('Kompakt'));
		$dialog_form_typ.append($('<option>').attr('value', 'bridge').text('Bridge'));
		$dialog_form_typ.append($('<option>').attr('value', 'dslr').text('DSLR'));
		$dialog_form_typ.bind('change', function (e) { start_search(); });
		$dialog_form_typ.bind('keyup', function (e) { if (e.keyCode == 13) { start_search(); } });
		$dialog_form.append($('<div>').attr('class', 'typ-container container').append($('<label>').text('Typ')).append($dialog_form_typ));
		$dialog_form_alter = $('<select>');
		$dialog_form_alter.append($('<option>').attr('value', '').text('[Alter]'));
		$dialog_form_alter.append($('<option>').attr('value', 1).text('maximal 1 Jahr alt'));
		$dialog_form_alter.append($('<option>').attr('value', 2).text('maximal 2 Jahre alt'));
		$dialog_form_alter.append($('<option>').attr('value', 3).text('maximal 3 Jahre alt'));
		$dialog_form_alter.bind('change', function (e) { start_search(); });
		$dialog_form_alter.append($('<option>').attr('value', 5).text('maximal 5 Jahre alt'));
		$dialog_form_alter.bind('keyup', function (e) { if (e.keyCode == 13) { start_search(); } });
		$dialog_form.append($('<div>').attr('class', 'alter-container container').append($('<label>').text('Alter')).append($dialog_form_alter));
		$dialog_form_button = $('<input>').attr('type', 'submit').attr('name', 'submit').attr('class', 'submit').attr('value', 'Kamera suchen');
		$dialog_form_button.bind('click', function () { start_search(); })
		$dialog_form.append($dialog_form_button);
		$dialog.append($dialog_form);
		$dialog_results = $('<div>').attr('class', 'results');
		$dialog.append($dialog_results);
		$dialog.dialog({
			autoOpen: false,
			height: 500,
			width: 750,
			modal: true,
			resizable: false,
			//closeOnEscape: true,
			title: 'Kamera wählen'
		});
		return $dialog;
	}
	
	function start_search()
	{
		_dialog();
		search_query = {
			hersteller: $dialog_form_hersteller.val(),
			typ: $dialog_form_typ.val(),
			alter: $dialog_form_alter.val(),
			query: $dialog_form_query.val()
		};
		load_results();
	}
	
	function load_results(page)
	{
		_dialog();
		if (!dkamera.exists(page))
			page = 1;
		//dkamera.log('SEARCH');
		if (search_url)
		{
			var loading = dkamera.loading.start($dialog_results);
			$.getJSON(search_url, $.extend({
				page: page
			}, search_query), function(data, status) {
				if (status != 'success') return;
				if (data.status != 'ok') return;
				$dialog_results.empty();
				$.each(data.results, function (i, result) {
					var $result = $('<div class="result">');
					var image_src = result.image;
					if (!image_src)
						image_src = '/media/bilder/kamerauebersicht/dummy.jpg';
					$result.append($('<div>').attr('class', 'image').append($('<img>').attr('src', image_src)).append($('<br>')));
					$result.append($('<h4>').text(result.name).append('&nbsp;'));
					$result.bind('click', function () { select(result); close(); });
					$dialog_results.append($result);
				});
				$dialog_results.append($('<div>').attr('class', 'clear'));
				$dialog_results.append($('<div>').attr('class', 'pages').text('Seite ' + data.page + ' von ' + data.num_pages));
				if (data.has_previous)
					$dialog_results.append($('<a>').attr('class', 'previous').text('Zurück').bind('click', function () { load_results(data.previous_page); }));
				if (data.has_next)
					$dialog_results.append($('<a>').attr('class', 'next').text('Weiter').bind('click', function () { load_results(data.next_page); }));
				loading.stop();
			});
		}
	}
	
	function select(result)
	{
		if (selected_callback)
			selected_callback(result);
	}
	
	function open(url, callback)
	{
		_dialog();
		if (url) search_url = url;
		else search_url = null;
		if (callback) selected_callback = callback;
		else selected_callback = null;
		if (search_url != last_search_url) $dialog_results.empty();
		last_search_url = search_url;
		$dialog.dialog('open')
		//start_search();
	}
	
	function close()
	{
		_dialog().dialog('close')
	}
	
	function init()
	{
		_dialog();
	}
	
	return {
		init: init,
		open: open,
		close: close,
		start_search: start_search
	};
})(jQuery);

