var foo = false;

(function($) {

	$.fn.sortList = function(groups, options) {
	
		var opts = $.extend({
			loading : 'De ingredi&euml;nten worden geladen&hellip;',
			sections : 0,
			prefixes : null
		}, options);
	
		return this.each(function() {
		
			var list = $(this);
			if(list.attr('nodeName') == 'UL') {
			
				var elements = list.find('li');			
				if(elements.length) {
					
					var message = $('<p />', {
						className : 'sort-list-message',
						html : opts.loading
					});
					message.insertBefore(list);
					
					var container = $('<div />', {
						className : 'sort-list-container',
						css : {
							'display' : 'none'
						}
					});
					container.insertBefore(list);
					
					if(opts.sections) {
						
						var sections = [],
							sectionsNumber = Math.ceil(groups.length / opts.sections),
							targetCounter = 0,
							sectionCounter = 0;
						
						for(var i = 0, j = sectionsNumber; i < j; i++) {
							var section = $('<div />', {
								className : 'section section-' + i
							});
							sections.push(section);
						};
						
					};
					
					list.remove();
					
					$.each(groups, function() {
						
						var group = $(this),
							chars = group[0].toLowerCase(),
							label = group[1],
							groupElements = group[2] = [];
						
						elements.each(function() {
							
							var el = $(this),
								pre = el.text().substring(0, 2).toLowerCase(),
								subPos = [0, 1];
							
							if(opts.prefixes) {
								if(pre == "'s" || pre == "'t") {
									$.each(opts.prefixes, function(i) {
										var prefix = opts.prefixes[i];
										if(pre == prefix) {
											subPos = [prefix.length + 1, prefix.length + 2];
											return false;
										};
									});
								};
							};
							
							if(chars.indexOf(el.text().substring(subPos[0], subPos[1]).toLowerCase()) >= 0) {
								groupElements.push(el);
							};
							
						});
						
						if(groupElements.length) {
						
							var target = container;
							if(opts.sections) {
								target = sections[sectionCounter];
								targetCounter++;
								if(targetCounter == opts.sections) {
									sectionCounter++;
									targetCounter = 0;
								};
							};
							
							var div = $('<div class="element" />');
							target.append(div);
							
							var groupTitle = $('<h2 />', {
								text : label
							});
							div.append(groupTitle);
							
							var groupList = $('<ul />');
							div.append(groupList);
							
							groupElements.sort(function(c, d) {
								
								var a = c.text().toString().toLowerCase(),
									b = d.text().toString().toLowerCase();
								
								if(opts.prefixes) {
								
									var aPre = a.substring(0, 2),
										bPre = b.substring(0, 2);
									
									$.each(opts.prefixes, function(i) {
										var prefix = opts.prefixes[i];
										if(aPre == prefix) {
											a = a.substring(3);
										};
										if(bPre == prefix) {
											b = b.substring(3);
										};
									});
									
								};
									
								if(a < b) {
									return -1;
								} else if(a > b) {
									return 1;
								} else {
									return 0;
								};
								
							});
							
							$.each(groupElements, function() {
								groupList.append($(this));
							});
							
							if(opts.sections) {
								$.each(sections, function() {
									$(this).appendTo(container);
								});
							};
							
						};
					
					});
					
					message.remove();
					container.show();

				};
			
			};
		
		});
		
	};
	
})(jQuery);
