function UpdateFeedbackType() {
    var feedbackType = $('#feedback-type').val();

    $('.feedback-form').each(function() {
	    $(this).css('display', 'none');
	});

    showBlock('feedback-form-' + feedbackType);
}

function SubmitFeedback() {
    var feedbackType = $('#feedback-type').val();

    // clear previous errors and check form
    ClearError('feedback-other-error');
    $('.feedback-error').each(function() {
	    ClearError('feedback-form-' + feedbackType + ' #' + $(this).attr('id'));
	});

    
    var postData = 'feedbackType=' + feedbackType;

    var inputNames = [];

    $('#feedback-form-' + feedbackType).find('.feedback-input').each(function() {
	    var id = $(this).attr('id');
	    var name = id.substr(15); // truncate the leading "feedback-input-"
	    postData += '&' + name + '=' + encodeURIComponent($(this).val());

	    inputNames.push(name);
	});
    
    // disable buttons and advise of status
    showBlock('feedback-status');
    ToggleButton('feedback-submit', false);

    $.ajax({
            type: "POST",
            url: "/feedback.py/Submit",
            data: postData,
            error: function(request, status, error) {
		HandleEditError('8', 'feedback-other-error');
	    },
            complete: function(request, status) {
		hide('feedback-status');
		ToggleButton('feedback-submit', true);
	    },
            success: function(msg) {
		if (msg.charAt(0) == '0') {
		    showAlert('feedback-success');

		    // clear old data
		    for (var i = 0; i < inputNames.length; i++) {
			$('#feedback-form-' + feedbackType + ' .feedback-input').each(function() {
				$(this).val('');
			    });
		    }
                }
                else if (msg.charAt(0) == '1') { // handle input errors
		    var results = JSON.parse(msg.substr(1));

		    for (var i = 0; i < inputNames.length; i++) {
			if (!results[inputNames[i]]['VALID']) {
			    SetError('feedback-form-' + feedbackType + ' #feedback-input-error-' + inputNames[i], results[inputNames[i]]['ERROR_MESSAGE']);
			}
		    }
                }
                else { // handle errors
		    HandleEditError(msg, 'feedback-other-error');
                }
            }
        });
}
