/* Datentyp: Select */

wv.Select = {};
wv.Select.badChars = /[:|]/i;

(function($) {
	
	wv.Select.changeSource = function(selectbox)
	{
		if ($(selectbox).val() == 0) { // Werteliste
			$('#datatype_3_source_query_container').hide();
			$('#datatype_3_source_choices_container').show();
		}
		else { // SQL-Statements
			$('#datatype_3_source_query_container').show();
			$('#datatype_3_source_choices_container').hide();
		}
	};
	
	wv.Select.clickChoiceElement = function(valueSpan)
	{
		var key   = $(valueSpan).prev('span').text();
		var value = $(valueSpan).text();
		
		key = key.substring(0, key.length-1); // Doppelpunkt am Ende abschneiden
		
		$('#datatype_3_source_input_key').val(key).select().focus();
		$('#datatype_3_source_input_value').val(value);
		wv.Select.keyUp(null); // Button aktualisieren
	};
	
	wv.Select.removeChoiceElement = function(sourceSpan)
	{
		var item = $(sourceSpan).parent('.item.choice');
		var key  = item.attr('id').substring(7);
		
		// Element löschen
		item.remove();
		
		// Element aus der Auswahlbox für Standardwerte löschen
		$('#datatype_3_choices_default [value=' + key + ']').remove();
		
		wv.Select.recreateChoiceString();
	};
	
	wv.Select.generateNextID = function()
	{
		var max = -1;
		
		$('#datatype_3_choices_list span.item.choice').each(function()
		{
			var key = $(this).attr('id').substring(7);
			if (!isNaN(key) && key > max) max = parseInt(key);
		});
		
		return max + 1;
	};
	
	wv.Select.keyPress = function(src,event)
	{
		if (event.keyCode != 13) return true;
		
		if (src == 'value') {
			wv.Select.addChoiceElement();
			$('#datatype_3_source_input_key').focus();
		}
		else {
			$('#datatype_3_source_input_value').focus();
		}
		
		$('#datatype_3_add_button').val('Hinzufügen');
		return false;
	};
	
	wv.Select.keyUp = function(event)
	{
		var valueInput = $('#datatype_3_source_input_value');
		var keyInput   = $('#datatype_3_source_input_key');
		var addButton  = $('#datatype_3_add_button');
		var value      = valueInput.val();
		var key        = keyInput.val();
		
		validValue = !wv.Select.badChars.test(value);
		validKey   = !wv.Select.badChars.test(key);
		
		$.each(
			[valueInput, keyInput],
			function() { this.toggleClass('normal', validValue).toggleClass('error', !validValue) }
		);
		
		if (!validKey || !validValue) {
			addButton.attr('disabled', 'disabled');
		}
		else {
			addButton.removeAttr('disabled');
		}
		
		addButton.val(wv.Select.keyIsInList(key) ? 'Element ändern' : 'Hinzufügen');
	};
	
	wv.Select.keyIsInList = function(key)
	{
		return $('#datatype_3_choices_list span[id=choice_'+key+']').length >= 1;
	};
	
	wv.Select.editChoiceElement = function(key, value)
	{
		var item = $('#datatype_3_choices_list span[id=choice_' + key +']')
		$('span.value', item).text(value);
		$('#datatype_3_choices_default option[value=' + key + ']').text(key+': '+value);
		$('#datatype_3_source_input_key').val('');
		$('#datatype_3_source_input_value').val('');
	};
	
	wv.Select.addChoiceElement = function()
	{
		var key   = $('#datatype_3_source_input_key').val();
		var value = $('#datatype_3_source_input_value').val();
		
		if (value == '') return;
		if (key == '') key = wv.Select.generateNextID();
		if (wv.Select.badChars.test(key)) return;
		if (wv.Select.badChars.test(value)) return;
	
		if (wv.Select.keyIsInList(key)) {
			wv.Select.editChoiceElement(key, value);
			wv.Select.recreateChoiceString();
			return;
		}
		
		$('#datatype_3_choices_list').append(
			'<span id="choice_' + key + '" class="item choice">' +
			'<span class="key">' + key + ':</span> ' +
			'<span class="value" onclick="wv.Select.clickChoiceElement(this)">' + value + '</span> ' +
			'<a href="javascript:;" onclick="wv.Select.removeChoiceElement(this)" title="Element entfernen">&times;</a>' +
			'</span>'
		);
		
		$('#datatype_3_source_input_key').val('');
		$('#datatype_3_source_input_value').val('');
		
		$('#datatype_3_choices_default').append('<option value="' + key + '">' + key + ': ' + value + '</option>');
		wv.Select.recreateChoiceString();
	};
	
	wv.Select.recreateChoiceString = function(container)
	{
		var str = '';
		
		$('#datatype_3_choices_list span.item.choice').each(function()
		{
			if (str.length > 0) str += '|';
			str += $(this).attr('id').substring(7) + ':' + $('span.value', this).text();
		});
		
		$('#datatype_3_choices').val(str);
	};
	
	wv.Select.updateRangeContainer = function(selectbox)
	{
		var container = $('#datatype_3_range_container');
		var display   = $(selectbox).val();
		
		// Bei Radioboxen ist diese Auswahl zur Anzeige unnötig
		container.css('display', display == 2 ? 'none' : 'block');
		
		// Nur bei Selextboxen zeigen wir die Größe an
		$('#datatype_3_range_size').css('display', display == 0 ? 'inline' : 'none');
	};
	
	wv.Select.fetchChoices = function()
	{
		var query = $('#datatype_3_query').val();
		
		$.get('index.php?page=developer_utils&subpage=ajaxquery&query='+encodeURIComponent(query), {} , function(data)
		{
			var elements  = data.split('|');
			var selectbox = $('#datatype_3_query_default option[value!=-1]').remove();
			
			if (data == '') return;
			
			for (var i = 0; i < elements.length; ++i) {
				var element = elements[i].split(':');
				$('#datatype_3_query_default').append('<option value="' + element[0] + '">' + element[0] + ': ' + element[1] + '</option>');
			}
		});
	};

})(jQuery);

/* Datentyp: Datum & Uhrzeit */

// wv.DateTime = {}; // wird bereits in devutils.js definiert

(function($) {
	
	wv.DateTime.updateRangeContainer = function(selectbox)
	{
		$('div[id^=datatype_8_container_]').hide();
		$('div#datatype_8_container_'+$(selectbox).val()).show();
	};

})(jQuery);
