function Sortenlexikon() {

	instanceOne = null;
	var imageFlowId = 'apple_carousel';
	var iconClassName = "apple-gallery";
	var iconIdPrefix = "apple-gallery_";
	var imageFlowPrefix = "imageFlow_";
	var imageFlowClass = "apple-image-flow";
	var categoryHeaderClass = "category-header";
	var categoryIdPrefix = "category_";
	var valueClass = "values";
	var ajaxUrlUpdateApples = "/sortenlexikon/ajaxUpdateApples";
	var ajaxUrlGetInfo = "sortenlexikon/ajaxGetInfo";
	var allApples = new Object();
	var allAppleIds = new Array();
	var idName = "apple_name";
	var idIntroText = "apple_introtext";
	var idDescription = "apple_description";
	var idAvailability = "apple_availability";
	var idApplication = "apple_application";
	var selectedApple = 6;

	selectedValues = new Object();

	function getAllApples() {
		return allApples;
	}

	function getAllAppleIds() {
		return allAppleIds;
	}

	this.init = function() {
		initImageFlowGallery();
		initIconGallery();
		initCategoryMenu();
		addClickEventOnCategoryValue();
	}

	function initCategoryMenu() {
		var selector = "." + categoryHeaderClass;
		var items = $(selector);
		for (i = 1; i < items.length; i++) {
			var item = $(items.get(i));
			item.next('li').slideToggle();
		}
		addToggleOnCategories(items);
	}

	function setValueToCategory(category, value) {
		selectedValues[category] = value;
	}

	function ajaxGetVisibleApples() {

		var values = new Array();
		for (key in selectedValues) {
			var value = selectedValues[key];
			if (!isEmpty(value)) {
				values.push(selectedValues[key]);
			}
		}

		var data = new Object();
		data['values[]'] = values;

		var url = ajaxUrlUpdateApples;
		var callback = ajaxGetVisibleApplesCallback;
		var type = "json";
		$.post(url, data, callback, type);
	}

	function ajaxGetVisibleApplesCallback(data, textStatus) {
		shownAppleIds = data['apples'];
		showApples(shownAppleIds);

	}

	function showApples(appleIds) {

		var selector = "";
		var selectorItems = new Array();

		var apples = getAllApples();
		var allAppleIds = getAllAppleIds();

		for (i = 0; i < allAppleIds.length; i++) {

			var key = allAppleIds[i];
			var apple = $(apples[key]);
			if (in_array(key, appleIds)) {
				apple.show(400);
			} else {
				apple.hide(400);
			}

		}

	}

	function hideAllApples() {

		var selector = "." + iconClassName;
		$(selector).hide();

	}




	function addClickEventOnCategoryValue() {

		var selector = "form#auswahl input";
		$(selector).click(categoryValueClickHandler);
	}

	function categoryValueClickHandler() {

		var self = $(this);

		var appleCheckBoxes = $("input.appleCheckBox");

		for (i=0;i<appleCheckBoxes.length;i++) {
			var cbx = $(appleCheckBoxes[i]);
			if (cbx.attr('checked')) {
				setValueToCategory(cbx.attr('id'), cbx.attr('value'));
			} else {
				setValueToCategory(cbx.attr('id'), null);
			}
		}

		ajaxGetVisibleApples();

	}

	function addToggleOnCategories(items) {

		items.click(categoryClickHandler);

	}

	function categoryClickHandler() {

		toggleCategoryMenu($(this));
	}

	function toggleCategoryMenu(cat) {
		cat.next('li').slideToggle(500);
	}

	function initImageFlowGallery() {
		instanceOne = new ImageFlow();
		instanceOne.init( {
			ImageFlowID : imageFlowId
		});

		var selector = "." + imageFlowClass;
		var allIcons = $(selector);
		allIcons.click(imageFlowClickHandler);
	}

	function imageFlowClickHandler() {
		var id = $(this).attr('id');
		var numericId = getAppendix(imageFlowPrefix, id);
		ajaxGetInfo(numericId);
	}

	function initIconGallery() {
		addEventsOnIcons();
	}

	function addEventsOnIcons() {

		var selector = "." + iconClassName;
		var allIcons = $(selector);
		allIcons.mouseover(iconMouseOverHandler);
		allIcons.mouseout(iconMouseOutHandler);
		allIcons.click(iconClickHandler);
		var apples = getAllApples();
		var appleIds = getAllAppleIds();
		for ( var i = 0; i < allIcons.length; i++) {
			var id = $(allIcons[i]).attr('id');
			var key = getAppendix(iconIdPrefix, id);
			apples[key] = allIcons[i];
			appleIds.push(key);
		}

	}

	function iconMouseOutHandler(){
		var numericId = selectedApple;
		var imageFlowId = imageFlowPrefix + numericId;
		var imageFlowIndex = instanceOne.getIndex()[imageFlowId];
		instanceOne.glideTo(imageFlowIndex);

	}

	this.activateApple = function(id){
		ajaxGetInfo(id);
		var imageFlowId = imageFlowPrefix + id;
		var imageFlowIndex = instanceOne.getIndex()[imageFlowId];
		instanceOne.glideTo(imageFlowIndex);
	}


	function iconClickHandler() {
		var id = $(this).attr('id');
		var numericId = getAppendix(iconIdPrefix, id);
		selectedApple = numericId;
		ajaxGetInfo(numericId);

	}

	function ajaxGetInfo(id) {
		var url = ajaxUrlGetInfo + "/id/" + id;
		var callback = ajaxUrlGetInfoCallback;
		var type = "json";
		var data = {
			id : id
		};
		var t = $("<div style='text-align:center;width:100%;'><img src='/images/ajax-loader.gif' /></div>");
		$("." + idName).html(t);
		$.post(url, data, callback, type);
	}

	function ajaxUrlGetInfoCallback(data, textStatus) {

		var name = data['name'];
		var introText = data['introtext'];
		var description = data['description'];
		var availability = data['availability'];
		var application = data['application'];
		$("." + idName).html(name);
		$("#" + idIntroText).html(introText);
		$("#" + idDescription).html(description);
		$("#" + idAvailability).html(availability);
		$("#" + idApplication).html(application);

	}

	function iconMouseOverHandler() {
		var id = $(this).attr('id');
		var numericId = getAppendix(iconIdPrefix, id);
		var imageFlowId = imageFlowPrefix + numericId;
		var imageFlowIndex = instanceOne.getIndex()[imageFlowId];
		instanceOne.glideTo(imageFlowIndex);

	}

	this.setLoading = function() {

		var t = $("<img src='/images/ajax-loader.gif' />");
		$("#" + idIntroText).html(t);

	}

}

