﻿function ExecuteServiceMethod(methodName, parameters) {
    try {
        Enterprise.ZArchitecture.Web.ServerServices.WebServiceShared.Execute(methodName, parameters, HandleServiceMethodResponse);
    }
    catch (ex) { alert(ex); }
}

function HandleServiceMethodResponse(response) {
    var responseObject;
    try {
        responseTokens = JSON.decode(response, true);
        if (responseTokens) {
            responseTokens.each(function (responseToken, index) {
                if (AllowExecution(responseToken)) {
                    if (responseToken.Action == 'Error') {
                        HandleShowErrorResponse(responseToken);
                    } else if (responseToken.Action == 'Update') {
                        HandleUpdateValueResponse(responseToken);
                    } else if (responseToken.Action == 'Focus') {
                        HandleSetFocusResponse(responseToken);
                    } else {
                        alert('Unknown WebService response type: ' + responseToken.Action);
                    }
                }
            });
        }
    }
    catch (ex) { alert (ex) }
}

function AllowExecution(responseToken) {
    var result = true;
    var firstCondition = true;
    var conditionToken;
    if (responseToken.Conditions) {
        for (var i = 0; i < responseToken.Conditions.length; i++) {
            conditionToken = responseToken.Conditions[i];
            if (conditionToken && conditionToken.JavaScript) {
                if (conditionToken.JavaScript.trim() != "") {
                    if (firstCondition) {
                        firstCondition = false;
                        result = false;
                    }
                    result = result || (eval(conditionToken.JavaScript) && AllowExecution(conditionToken));
                    if (result) {
                        return result;
                    }
                }
            }
        }
    }
    return result;
}

function HandleSetFocusResponse(responseToken) {
    setTimeout("$('" + responseToken.ControlID + "').focus()", 100);
}

function HandleUpdateValueResponse(responseToken) {
    var control = $(responseToken.ControlID);
    if (control) {
        if (control.tagName == 'SPAN') {
            control.innerHTML = responseToken.Value;
        }
        else if (control.get('value') != responseToken.Value) {
            control.set('value', responseToken.Value);
            try {
                control.onchange();
            }
            catch (ex) { }
        }
    }
}

function HandleShowErrorResponse(responseToken) {
    alert('Error: ' + responseToken.Value);
}
