( function($) {	
	
	$(document).ready(function() {
		matrix.init();
	});
	
	var matrix = {
		
		BASE_URL : document.location.protocol + '//' + document.location.host + '/typo3conf/ext/rb_matrix/',
		AJAX_PATH_ITEM_LOADER : 'lib/handlers/ajax.itemloader.php',
		
		itemContainer : '',
		selectionContainer : '',
		selectArr : [],
		
		init : function() {
			this.itemContainer = $('#items');
			this.selectionContainer = $('#selection-list');
			
			$('.maincat').css('background', 'url("' + matrix.BASE_URL + 'res/img/openclose.png") no-repeat scroll 97% 4px #932D67')
			
			$('.maincat ul').hide();

			$('#category-selection').show();
			
			$('#expandAll').add('#collapseAll').show().click( matrix.toggleAll );
			
			$('.maincat').click( function(event) {
				if (!$(event.target).is('.noChild')) {
					matrix.toggleChildren(event);
				}
			});
			
			$('#dAll').click(function() {
				$('.catCheck').attr('checked', false);
				matrix.selectArr = [];
			});

			$('.catCheck').add('input[name="aOo"]').change( function(event) {
				if ($(event.target).attr('name') != 'aOo') {
					if ($(event.target).attr('checked') == true) {
						matrix.selectArr.push($(event.target).attr('value'));
					} else {
						matrix.removeByValue(matrix.selectArr, $(event.target).attr('value'));
					}
					//console.log(matrix.selectArr);
					matrix.selectChildren();
				} else {
					matrix.selectChildren();
				}
			});

			$('.deleteSelection').live('click', function(event) {
				var $selector = '#check'+$(event.target).next().attr('value');
				$($selector).attr('checked', false);
				matrix.removeByValue(matrix.selectArr, $(event.target).next().attr('value'));
				matrix.selectChildren();
			});
		},
		
		toggleChildren : function(event) {
			var $target = $(event.target);
			if ($target.is('li'))
				$($target).toggleClass('act').find('ul').toggle();
			if ($target.is('span'))
				$($target).parent().toggleClass('act').find('ul').toggle();
		},
		
		toggleAll : function(event) {
			if ($(event.target).is('#expandAll') || $(event.target).parent().is('#expandAll')) {
				$('.maincat').addClass('act').find('ul').show();
			} else if ($(event.target).is('#collapseAll') || $(event.target).parent().is('#collapseAll')) {
				$('.maincat').removeClass('act').find('ul').hide();
			}
		},
		
		selectChildren : function( callback ) {
			
			var $selectCats = [];
			var $idString = '';
			
			$('.catCheck:checked').each(function() {
				$selectCats.push($(this));
			});
			
			$.each(matrix.selectArr, function(index, value) {
				$idString += value;
				$idString += (index != matrix.selectArr.length-1) ? ',' : '';
			});
			var $link = $('input[name="aOo"]:checked').attr('value') != 'undefined' ? $('input[name=aOo]:checked').attr('value') : 0;
			var $language = $('input[name="lang_id"]').attr('value') != 'undefined' ? $('input[name="lang_id"]').attr('value') : 'default';
			var $param = { 
				'checked' : $idString,
				'link' : $link,
				'lang' : $language
			};
			
			var $anything = null;
			
			$.ajax({
				url : '?eID=getItems',
				dataType : 'json',
				data : $param,
				type : 'POST',
				success : function(response) {
					//console.log(response);
					
					$('#catTree label span').removeClass('act');
					$.each($selectCats, function(index, value) {
						var $selector = 'label[for="'+value.attr('id')+'"] span';
						$($selector).addClass('act');
						$anything = true;
					});
					
					matrix.itemContainer.html(response.content);
					matrix.selectionContainer.html(response.selection);
					matrix.itemContainer.find('.ka-panel.close .ka-content').hide();
					
					$('.ka-handler').unbind('click').click(function(event, data) {
						$panel = $(this).parents('.ka-panel');
						$content = $panel.find('.ka-content');		
						if($panel.is('.close')) {
							$('.ka-panel.ka-opend').removeClass('ka-opend');
							//Dieses Panel aufklappen
							switch(tx_kiwiaccordion_effect) {
								case 'slide':
									$content.slideDown();
									break;
								case 'fade':
									$content.fadeIn();
									break;
								default:
									$content.show();				
							}
							$panel.removeClass('close').addClass('open');
							//Wenn nur ein offenes Panel erlaubt ist, andere Panels schließen
							if(tx_kiwiaccordion_exclusive) {
								$('.ka-panel.open .ka-handler').trigger('click', {clicked: $('.ka-panel').index($panel)});
							}
						}
						else {
							if(!data) {
								data = { clicked: -1 };
							}
							if(data.clicked != $('.ka-panel').index($panel)) {
								//Diesen Panel zuklappen
								switch(tx_kiwiaccordion_effect) {
									case 'slide':
										$content.slideUp();
										break;
									case 'fade':
										$content.fadeOut();
										break;
									default:
										$content.hide();				
								}
								$panel.removeClass('open').addClass('close');
							}
						}
					});
					
					if ($anything === true) {
						$('#deleteAll').show();
					} else {
						$('#deleteAll').hide();
					}
				}
			});
		},
		
		removeByValue : function (arr, val) {
		    for(var i=0; i<arr.length; i++) {
		        if(arr[i] == val) {
		            arr.splice(i, 1);
		            break;
		        }
		    }
		}
	}
	
})(jQuery);
