var ajax = function () {
    var calls = {};

    calls.postJSON = function (properties) {
        var property;
        var data = "";
        var names;
        var values;

        names = properties.paramNames.split(',');
        values = properties.paramValues.split(',');

        if (names.length === values.length) {
            for (var index = 0; index < names.length; index++) {
                if ((names[index] !== "") && (values[index] !== "")) {
                    try {
                        data = data + ((data.length === 0) ? "" : "&") + names[index] + "=" + eval(values[index]);
                    }
                    catch (ex) {
                        data = data + ((data.length === 0) ? "" : "&") + names[index] + "=" + values[index];
                    }
                }
            }
        }

        jQuery.ajax({
            type: "POST",
            url: "/" + properties.controller + "/" + properties.action,
            data: data,
            cache: false,
            dataType: "json",
            beforeSend: function () { eval(properties.objectCallback).Begin(properties.updatePanelId, properties.refreshPanelId); },
            success: function (result) { eval(properties.objectCallback).Success(properties.updatePanelId, result); },
            error: function () { eval(properties.objectCallback).Error(properties.updatePanelId, properties.errorMessage); },
            complete: function () { eval(properties.objectCallback).Complete(properties.refreshPanelId, properties.updatePanelId, properties.region); }
        });
    };

    calls.refresh = function (properties) {
        if (properties.objectCallback === undefined) {
            jQuery.ajax({
                type: "POST",
                url: "/" + properties.controller + "/" + properties.action,
                data: "script=" + properties.script,
                cache: false,
                dataType: "script"
            });
        } else {
            jQuery.ajax({
                type: "POST",
                url: "/" + properties.controller + "/" + properties.action,
                data: "script=" + properties.script,
                cache: false,
                dataType: "script",
                beforeSend: function () { eval(properties.objectCallback).Begin(); },
                success: function (result) { eval(properties.objectCallback).Success(); },
                error: function (result) { eval(properties.objectCallback).Error(); },
                complete: function () { eval(properties.objectCallback).Complete(); }
            });
        }
    };

    return calls;
};

internovat.addObject('Ajax', ajax());
