﻿function handleAjaxFormSubmit(form, ajaxOptions) {
    var action = form.action;
    var params = getAjaxFormParameters(form);

    var errorFunction = ajaxOptions.onFailure || function() { };
    var successFunction = ajaxOptions.onSuccess || function() { };
    var completeFunction = ajaxOptions.onComplete || function() { };

    $.ajax({
        type: 'POST',
        url: action,
        data: params,
        success: function(data, textStatus) {

            if (ajaxOptions.updateTargetId) {
                if (typeof ajaxOptions.insertMode == 'undefined' || ajaxOptions.insertionMode == 0)
                    $('#' + ajaxOptions.updateTargetId).html(data);
                else if (ajaxOptions.insertionMode == 1)
                    $('#' + ajaxOptions.updateTargetId).prepend(data);
                if (ajaxOptions.insertionMode == 2)
                    $('#' + ajaxOptions.updateTargetId).append(data);

                if (typeof ajaxOptions.onSuccess != 'undefined')
                    ajaxOptions.onSuccess();
            }
        },
        error: function(requestObject) { errorFunction(requestObject.responseText); },
        complete: completeFunction
    });

    return false;
}

function getAjaxFormParameters(form) {
    var params = {};

    $(form).find('input[type=text], input[type=password], input[type=hidden], textarea').each(function() {
        params[this.name || this.id || this.parentNode.name || this.parentNode.id] = this.value;
    });

    $(form).find('input[type=checkbox], input[type=radio]').each(function() {
        if (this.checked)
            params[this.name || this.id || this.parentNode.name || this.parentNode.id] = this.value;
    });

    $(form).find('select').each(function() {
        if (this.options != null) {
            params[this.name || this.id || this.parentNode.name || this.parentNode.id] = this.value;
        }
    });

    return params;
}