jQuery.fn.formpages = function(passedArgsObj) {
	// Default arguments
	var args = {
		pageClass: 'formpage',
		head: 'h3:first',
		hideHead: true,
		conditions: true
	}
	
	// Overwrite defaults
	for (var i in passedArgsObj) {
		args[i] = passedArgsObj[i];
	}
	
	return this.each(function() {
		var container = jQuery(this);
		var pages = container.find('.' + args.pageClass)
		var pagesmenu = null;
		var form = container.parent().parent();
		var direction = 'next';
		
		// Set class
		container.addClass('formpages_processed');
		
		// Hide all pages
		pages.hide();
		
		// Display first page
		container.find('.' + args.pageClass + ':first').show();
		
		// Add pages menu
		container.prepend('<ul class="pagesmenu"></ul>');
		pagesmenu = container.children('ul.pagesmenu');
		
		// Process pages
		pages.each(function() {
			var page = $(this);
			
			// Page title
			var head = page.children(args.head);
			this.title = head.text();
			if (args.hideHead) {
				head.hide();
			}
			
			// Add to pages menu
			pagesmenu.append('<li title="' + this.title + '">' + this.title + '</li>');
			
			// Add previous/next buttons
			page.append('<div class="pagesbuttons"></div>');
			
			var buttons = page.find('div.pagesbuttons');
			buttons.append('<input type="button" value="Vorige" class="previous" />');
			buttons.append('<input type="button" value="Volgende" class="next" />');
		});
		
		// Set onclick for the pages
		pagesmenu.children('li').click(function() {
			var el = $(this);
			if (el.hasClass('active') || el.hasClass('done') || el.hasClass('skipped')) {
				page = container.find('.' + args.pageClass + '[title=' + this.title + ']');
				
				if (checkConditions(page)) {
					// Hide all pages
					pages.hide();
					
					// Display clicked page
					page.show();
					
					// Remove active class
					var active = pagesmenu.find('li.active');
					active.addClass('done');
					active.removeClass('active');
					
					// Add active class
					el.addClass('active');
					el.removeClass('skipped');
					
					// Remove done class from next pages
					el.nextAll().removeClass('done');
					
					direction = 'next';
				}
				else {
					el.removeClass('active');
					el.addClass('skipped');
					if (direction == 'previous') {
						var nextEl = el.prev();
					}
					else {
						var nextEl = el.next();
					}
					nextEl.addClass('active');
					nextEl.click();
				}
			}
		});
		
		var checkConditions = function(page) {
			if (page.find('input.conditions').length > 0) {
				var conditions = page.find('input.conditions')[0].value;
				var conditionsAnd = conditions.split('|');
				var conditionsOr;
				var condition;
				var field;
				var met = false;
				var metAnd;
				for (i = 0; i < conditionsAnd.length; i++) {
					conditionsOr = conditionsAnd[i].split('&');
					metAnd = true;
					for (j = 0; j < conditionsOr.length; j++) {
						condition = conditionsOr[j].split('=');
						field = $('#tx_fceforms_pi1_' + $.trim(condition[0]));
						metAnd = metAnd && checkFieldCondition(field, condition[1]);
					}
					if (metAnd) {
						met = true;
						break;
					}
				}
				
				return met;
			}
			else {
				return true;
			}
		}
		
		var checkFieldCondition = function(field, condition) {
			if ($(field).hasClass('fields')) {
				var subFields = field.find('input');
				if (subFields.length > 0) {
					for (var i = 0; i < subFields.length; i++) {
						if (subFields[i].checked && $.trim(subFields[i].value) == $.trim(condition)) {
							return true;
						}
					}
				}
			}
			else {
				return ($.trim(field.val()) == $.trim(condition));
			}
			
			return false;
		}
		
		// Set onclick for the previous buttons
		pages.find('div.pagesbuttons input.previous').click(function() {
			direction = 'previous';
			var title = $(this).parent().parent().attr('title');
			var pagesmenuitem = $(this).parents('div.formpages').children('ul.pagesmenu').children('li[title=' + title + ']').prev();
			pagesmenuitem.click();
		});
		
		// Set onclick for the next buttons
		pages.find('div.pagesbuttons input.next').click(function() {
			var button = $(this);
			button.checkValidation = $.fceformSubmit;
			if (button.checkValidation()) {
				direction = 'next';
				var title = button.parent().parent().attr('title');
				var pagesmenuitem = button.parents('div.formpages').children('ul.pagesmenu').children('li[title=' + title + ']').next();
				pagesmenuitem.addClass('active');
				pagesmenuitem.click();
			}
		});
		
		// Set first pagesmenu item to active
		pagesmenu.find('li:first').addClass('active');
		
		// Remove "previous" button from first page
		container.find('.' + args.pageClass + ':first div.pagesbuttons input.previous').remove();
		
		// Remove "next" button from last page
		container.find('.' + args.pageClass + ':last div.pagesbuttons input.next').remove();
		
		// Add submit button to last page
		var submit = form.find('input[type=submit]');
		container.find('.' + args.pageClass + ':last div.pagesbuttons').append(submit);
	});
}
