<html><head><title>Button</title>
<script src="ClientGlobalContext.js.aspx"></script>

<script src="north52_/javascript/jquery" type="text/javascript"></script>

<script src="north52_/javascript/north52_dialog_helper" type="text/javascript"></script>

<script src="north52_/javascript/n52.json2" type="text/javascript"></script>

<script src="north52_/javascript/n52.rest" type="text/javascript"></script>

<link href="north52_purecss.css" rel="stylesheet" type="text/css">

<style type="text/css">

html, body{ height: 100%; overflow: auto;  border-width: 0px; }

body {  padding: 0;  margin: 0;  }

</style>

<script type="text/javascript">

    var N52QuickButton = {};

    $(document).ready(function () {
        N52QuickButton.Initialize();
    });

    N52QuickButton.MouseOver = function () {
        parent.Xrm.Page.data.entity.save();
    }

    N52QuickButton.Click = function () {

        var e = parent.Xrm.Page.data.entity.getId();
        var t = parent.Xrm.Page.data.entity.getEntityName();
        var n = e == null ? "1" : "2";
        var r = N52QuickButton.GetShortCode();
        var i = "<" + t + "></" + t + ">";
        var s = "$select=north52_Result&$filter=north52_name eq " + "'" + r + "' and north52_Parameters eq '" + i + "' and north52_TargetEntityID eq '" + e + "' and north52_FormulaType eq '" + n + "'";

        document.getElementById("n52button").disabled = true;
        document.getElementById("n52button").textContent = "In-Progress...";

        parent.Xrm.Page.data.setFormDirty();
        parent.Xrm.Page.data.entity.save();

        N52.REST.retrieveMultipleRecords("north52_formulacalculation", s, N52QuickButton.RetrieveFormulaCallBack, function (e) { alert(e.message); }, N52QuickButton.FormulasRetrieveComplete);
    }

    N52QuickButton.RetrieveFormulaCallBack = function (e) {
        parent.Xrm.Page.data.refresh(false);

        if (e[0].north52_Result != "NoOp") {
            var result = N52JSON.parse(e[0].north52_Result).PropertyValueAction.toString();

            if (result != "NoOp") {
                if (result == "saveandnew") {
                    parent.Xrm.Page.data.entity.save("saveandnew");
                }
                else if (result.substring(0, 16) == "saveandnewsticky") {
                    var entityName = parent.Xrm.Page.data.entity.getEntityName();
                    var fieldList = result.substring(17, result.length);
                    var p = fieldList.split("|");

                    var params = {};

                    for (var i = 0; i < p.length; i++) {
                        var f = p[i].split(",");
                        var name = f[0];
                        var type = f[1];

                        if (type == "current") {
                            var id = parent.Xrm.Page.data.entity.getId();
                            var value = parent.Xrm.Page.data.entity.getPrimaryAttributeValue();

                            params[name] = id;
                            params[name + "name"] = value;
                        }
                        else if (parent.Xrm.Page.getAttribute(name) != null) {
                            var val = parent.Xrm.Page.getAttribute(name).getValue();

                            if (val != "null" && val != null) {
                                if (type == "lookup") {
                                    params[name] = val[0].id;
                                    params[name + "name"] = val[0].name;
                                }
                                else if (type == "date") {
                                    var outputstring = (val.getMonth() + 1) + "/" + val.getDate() + "/" + val.getFullYear();
                                    params[name] = outputstring;
                                }
                                else {
                                    params[name] = val;
                                }
                            }
                        }
                    }

                    parent.Xrm.Page.data.entity.save();
                    parent.Xrm.Utility.openEntityForm(entityName, null, params);
                }
                else if (result == "saveandclose") {
                    parent.Xrm.Page.data.entity.save("saveandclose");
                }
                else if (result == "reload") {
                    var id = parent.Xrm.Page.data.entity.getId();
                    var entityName = parent.Xrm.Page.data.entity.getEntityName();

                    parent.Xrm.Page.data.entity.save();
                    parent.Xrm.Utility.openEntityForm(entityName, id);
                }
                else if (result.substring(0, 14) == "openentityform") {
                    var args = result.substring(15, result.length);
                    var listItems = args.split("|");
                    var entityName = listItems[0];
                    var id = listItems[1];

                    parent.Xrm.Page.data.entity.save();
                    parent.Xrm.Utility.openEntityForm(entityName, id);
                }
                else if (result.substring(0, 11) == "opennewform") {
                    var args = result.substring(12, result.length);
                    var listItems = args.split("|");
                    var entityName = listItems[0];

                    var extraqs = "";

                    for (var i = 1; i < listItems.length; i++) {
                        if (i != 1) { extraqs += "&"; }
                        var f = listItems[i].split(",");
                        var sourceName = f[0];
                        var targetName = f[1];
                        var type = f[2];

                        if (type == "current") {
                            var id = parent.Xrm.Page.data.entity.getId();
                            var value = parent.Xrm.Page.data.entity.getPrimaryAttributeValue();

                            extraqs += targetName;
                            extraqs += "=";
                            extraqs += id;
                            extraqs += "&";
                            extraqs += targetName;
                            extraqs += "name=";
                            extraqs += value;
                        }
                        else if (parent.Xrm.Page.getAttribute(sourceName) != null) {
                            var val = parent.Xrm.Page.getAttribute(sourceName).getValue();

                            if (val != "null" && val != null) {
                                if (type == "lookup") {
                                    extraqs += targetName;
                                    extraqs += "=";
                                    extraqs += val[0].id;
                                    extraqs += "&";
                                    extraqs += targetName;
                                    extraqs += "name=";
                                    extraqs += val[0].name;
                                }
                                else if (type == "date") {
                                    var dateString = (val.getMonth() + 1) + "/" + val.getDate() + "/" + val.getFullYear();
                                    extraqs += targetName;
                                    extraqs += "=";
                                    extraqs += dateString;
                                }
                                else {
                                    extraqs += targetName;
                                    extraqs += "=";
                                    extraqs += val;
                                }
                            }
                        }
                    }

                    parent.Xrm.Page.data.entity.save();

                    var url = Xrm.Page.context.getClientUrl();
                    url += "/main.aspx?etn=";
                    url += entityName;
                    url += "&pagetype=entityrecord&navbar=off&extraqs="

                    url += encodeURIComponent(extraqs);
                    var features = "width=1000px,height=700px,location=no,menubar=no,status=no,toolbar=no";

                    window.open(url, "_blank", features, false);
                }
                else if (result.substring(0, 16) == "openexistingform") {
                    var args = result.substring(17, result.length);
                    var listItems = args.split("|");
                    var entityName = listItems[0];

                    for (var i = 1; i < listItems.length; i++) {
                        var f = listItems[i].split(",");
                        var targetName = f[0];
                        var guid = f[1];
                    }

                    parent.Xrm.Page.data.entity.save();

                    var url = Xrm.Page.context.getClientUrl();
                    url += "/main.aspx?etn=";
                    url += entityName;
                    url += "&pagetype=entityrecord&id=";
                    url += guid;
                    url += "&navbar=off&extraqs="

                    url += encodeURIComponent(extraqs);
                    var features = "width=1000px,height=700px,location=no,menubar=no,status=no,toolbar=no";

                    window.open(url, "_blank", features, false);
                }
                else if (result.substring(0, 6) == "notify") {
                    debugger;
                    var args = result.substring(7, result.length);
                    var listItems = args.split("|");

                    for (var i = 0; i < listItems.length; i++) {
                        var notification = listItems[i].split(",");
                        var msg = notification[0];
                        var level = notification[1];
                        var id = notification[2];

                        parent.Xrm.Page.ui.clearFormNotification(id);
                        parent.Xrm.Page.ui.setFormNotification(msg, level, id);

                    }
                }
                else {
                    parent.Xrm.Page.ui.clearFormNotification('msgbutton');
                    parent.Xrm.Page.ui.setFormNotification(result, 'INFO', 'msgbutton');
                }
            }
        }

        document.getElementById("n52button").disabled = false;
        N52QuickButton.Initialize();
    }

    N52QuickButton.GetQuerystring = function (e) {
        var t = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var n = new RegExp("[\\?&]" + t + "=([^&#]*)");

        var r = n.exec(window.location.href);

        if (r == null)
            return null;

        return r[1]
    }

    N52QuickButton.GetShortCode = function () {
        var e = N52QuickButton.GetQuerystring("data");
        var t = decodeURIComponent(e);
        var n = t.split("|");

        return n[0];
    }

    N52QuickButton.GetButtonDescription = function () {
        var e = N52QuickButton.GetQuerystring("data");
        var t = decodeURIComponent(e);
        var n = t.split("|");

        return n[1];
    }

    N52QuickButton.GetButtonStyle = function () {
        var e = N52QuickButton.GetQuerystring("data");
        var t = decodeURIComponent(e);
        var n = t.split("|");

        return n[2];
    }

    N52QuickButton.FormulasRetrieveComplete = function () {

    }

    N52QuickButton.Initialize = function () {

        var buttonDescription = N52QuickButton.GetButtonDescription();
        var buttonStyle = N52QuickButton.GetButtonStyle();

        document.title = buttonDescription;
        document.getElementById("n52button").textContent = buttonDescription;
        document.getElementById("n52button").className = buttonStyle;

        $('body').focus(function () {
            $('#n52button').focus();
        });
    }

</script>
<meta charset="utf-8"><meta><meta><meta></head><body style="-ms-word-wrap: break-word;"><button id="n52button" onclick="N52QuickButton.Click();" onmouseover="N52QuickButton.MouseOver();" type="button">Click ME</button></body></html>
