(function($) {
	$.preloadImages = function() {
		if ($.preloadImages.cache == undefined) {
			$.preloadImages.cache = [];
		}
		var args_len = arguments.length;
		for (var i = args_len; i--;) {
			var cacheImage = document.createElement('img');
			cacheImage.src = arguments[i];
			$.preloadImages.cache.push(cacheImage);
		}
	}
})(jQuery);

function typeOf(value) {
	var s = typeof value;
	if (s === 'object') {
		if (value) {
			if (value instanceof Array) {
				s = 'array';
			}
		} else {
			s = 'null';
		}
	}
	return s;
}

function fillComboAjax(source, target, url, params, staticCount, selectedValue, onSuccess, onError) {
	if (typeof staticCount == "undefined") staticCount = 0;
	var sourceSelect = jQuery('#' + source);
	var select = jQuery('#' + target);
	if (select.size() == 0) return;
	select.attr('disabled', 'disabled');
	sourceSelect.attr('disabled', 'disabled');
	select.children().slice(staticCount).remove();
	select.prepend(jQuery(document.createElement('option')).val('__loading').text('Učitavanje...'));
	select.val('__loading');
	jQuery.ajax({
		url: url,
		type: "GET",
		data: params,
		dataType: "json",
		cache: false,
		success: function(data) {
			select.children().slice(0, 1).remove();
			sourceSelect.removeAttr('disabled');
			select.removeAttr('disabled');
			fillCombo(target, data, selectedValue, staticCount);
			if (onSuccess) onSuccess(data);
		},
		error: function() {
			select.children().slice(0, 1).remove();
			select.append(jQuery(document.createElement('option')).val('__error').text('Greška! Probajte ponovo!'));
			select.val('__error');
			sourceSelect.removeAttr('disabled');
			if (onError) onError();
		}
	});
}

function fillCombo(id, items, selectedValue, staticCount) {
	if (typeof staticCount == "undefined") staticCount = 0;
	var select = jQuery('#' + id);
	if (select.size() == 0) return;
	select.children().slice(staticCount).remove();
	if (items.length == 0) select.attr('disabled', 'disabled');
	else for (var i = 0, len = items.length; i < len; i++) {
		if (typeOf(items[i].value) == 'array') {
			var group = jQuery(document.createElement('optgroup'))
				.attr('label', items[i].text)
				.attr('title', items[i].text);
			var nestedItems = items[i].value;
			for (var j = 0, nlen = nestedItems.length; j < nlen; j++) {
				group.append(jQuery(document.createElement('option'))
					.attr('value', nestedItems[j].value)
					.attr('title', nestedItems[j].text)
					.attr('selected', nestedItems[j].value == selectedValue)
					.text(nestedItems[j].text));
			}
			select.append(group);
		} else {
			select.append(jQuery(document.createElement('option'))
				.attr('value', items[i].value)
				.attr('title', items[i].text)
				.attr('selected', items[i].value == selectedValue)
				.text(items[i].text));
		}
	}
}