	var submitForm = function(formElement, buttonElement) {
		var data = jQuery(formElement).serialize();
		
		data = data + '&partial=true';
		
		if(buttonElement) {
			var btn = $(buttonElement);
			data = data + '&' + btn.attr('name') + '=' + btn.attr('value');
		}
		
		var postCallback = function(respData, textStatus) {
			jQuery('#result_list').html(respData);
			initSortLinks('sortlink');
			initSortLinks('sortbuttonlink');
			resetLinkHrefs();
		};
		
		jQuery.ajax({
			type: 'POST',
			url: ajaxPostUrl,
			data: data,
			success: postCallback,
			error: function(XMLHttpRequest, textStatus, errorThrown) {alert(textStatus)}
		});
	}
	
	var loadAjaxUrl = function(url) {
		var callback = function(data, textStatus) {
			if(textStatus == "success") {
				jQuery('#result_list').html(data);
				
				initSortLinks('sortlink');
				initSortLinks('sortbuttonlink');
				resetLinkHrefs();
			}
			else {
				alert("Error: " + textStatus);
			}		
		}
		
		jQuery.get(url, null, callback);
	};
	

  var initSortLinks = function(className) {
    $('#programme_form .' + className).click( function() {
    	var theLink = jQuery(this);
    	var href = theLink.attr('href');
    	var params = href.substring(href.indexOf('?'));
    	var url = ajaxPostUrl + params;
    	url = url + "&rnd=" + new Date().getTime() + "&partial=true";
    	
    	loadAjaxUrl(url);

    	return false;
    });
  };

	var resetLinkHrefs = function() {
		jQuery('table.projektliste a').each(function() {
			var theLink = jQuery(this);
			var href = theLink.attr('href');
			href = href.replace(/\$projekte_details_uri/g, projekteDetailsUri);
			theLink.attr('href', href);
		});
	};

	
	var initPage = function() {
		jQuery('#programme_form').submit(function() {submitForm(this); return false;});
		jQuery('#programme_form select').change(function() {submitForm(this.form); return false;});
		
		initSortLinks('sortlink');
		initSortLinks('sortbuttonlink');
	}
	
	jQuery(document).ready(initPage);
	
