﻿ function jAjaxSubmit(form, e, waitPanelId, targetToUpdate, methodName) {
    if (!$.browser.msie && e!=null) {
        e.stopPropagation();
    }
    var isValid = true;
    if (typeof methodName != 'undefined') {
        isValid = methodName(form, null); 
    }
    if (isValid) {
        // create the form body
        var body = $(form).serialize();
        renderContent2(targetToUpdate, waitPanelId, form.action, body, form.method);
    }
    return false;
}

function jAjaxSubmitOnclick(submitButton, e, action, waitPanelId, targetToUpdate, methodName) {
    var form = $(submitButton).parents("form:first");
    if (!$.browser.msie && e!=null) {
        e.stopPropagation();
    }
    var isValid = true;
    if (typeof methodName != 'undefined') {
        isValid = methodName(form, null);
    }
    if (isValid) {
        var body = $(form).serialize();
        renderContent2(targetToUpdate, waitPanelId, action, body, form.method);
    }
    return false;
}

function jAjaxGet(url, waitPanelId, targetToUpdate) {
    if (!$.browser.msie) {
        e.stopPropagation();
    }
    renderContent2(targetToUpdate, waitPanelId, url, "", "GET");
    return false;
}

function jAjaxGetUpdateControl(url, waitPanelId, targetToUpdate, callback) {
    renderContent2(targetToUpdate, waitPanelId, url, "", "GET", callback);
    return false;
}


function renderContent(elementId, waitElementId, url, params, callback) {
    renderContent2(elementId, waitElementId, url, params, "GET", callback);
}

function renderContent2(elementId, waitElementId, url, params, actionType, callback) {
    $("#" + waitElementId).show();
    $.ajax({
        type: actionType,
        dataType: "html",
        url: url,
        data: params,
        cache: false,
        success: function(result) {
            $("#" + elementId).html(result);
            $("#" + waitElementId).hide();

            if (typeof callback != 'undefined')
                callback();
        },
        error: function(error) {
            $("#" + waitElementId).hide();
            ErrorHandler.TechnicalError(error);
            //TODO:// write your log here
        }
    });
}

var AjaxHelper = function() {
}


AjaxHelper.Json = function(sender, controllerName, actionName, successCallback, errorCallback) {
    var form = $(sender).parents("form:first");
    var body = $(form).serialize();
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "/" + controllerName + "/" + actionName,
        data: body,
        success: function(result) {
            if (typeof successCallback != 'undefined')
                successCallback(result);
        },
        error: function(error) {
            if (typeof errorCallback != 'undefined')
                errorCallback(error);
            else
                ErrorHandler.TechnicalError("Erreur lors de l'exécution de l'opération suivante : " + controllerName + "." + actionName + "\r\n" + error);
        }
    });
    return false;
}


AjaxHelper.JsonUpdateControls = function(sender, controllerName, actionName, successCallback, errorCallback) {
    var form = $(sender).parents("form:first");
    var body = $(form).serialize();
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "/" + controllerName + "/" + actionName,
        data: body,
        success: function(result) {
            for (var i = 0; i < result.length; i++) {
                if (typeof result[i].ControlName != 'undefined') {
                    if (typeof result[i].Value != 'undefined')
                        $('#' + result[i].ControlName).attr("value", result[i].Value);
                    else if (typeof result[i].InnerHtml != 'undefined')
                        $('#' + result[i].ControlName).html(result[i].InnerHtml);
                }
            }

            if (typeof successCallback != 'undefined')
                successCallback(result);
        },
        error: function(error) {
            if (typeof errorCallback != 'undefined')
                errorCallback(error);
            else
                ErrorHandler.TechnicalError("Erreur lors de l'exécution de l'opération suivante : " + controllerName + "." + actionName + "\r\n" + error);
        }
    });
}
