﻿<html><head><title>North52 BPA - Quick 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.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.entity.save();

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

    N52QuickButton.RetrieveFormulaCallBack = function (e) {

        var entityName = parent.Xrm.Page.data.entity.getEntityName();
        var id = parent.Xrm.Page.data.entity.getId();
        var name = parent.Xrm.Page.data.entity.getPrimaryAttributeValue();

        var a = N52QuickButton.GetAction();
 
        switch (a) {
            case "saveandnew":
                parent.Xrm.Page.data.entity.save('saveandnew');
                break;
            case "saveandclose":
                parent.Xrm.Page.data.entity.save("saveandclose");
                break;
            case "savecloseandcopy":
                parent.Xrm.Page.data.entity.save();

                var p = N52QuickButton.GetParams();
                var link = N52QuickButton.GetLink();
                var parameters = {};

                var l = p.length;
                for (var i = 0; i < l; i++)
                {
                    var attrName = p[i];

                    if (parent.Xrm.Page.getAttribute(attrName) != null)
                    {
                        var attrType = parent.Xrm.Page.getAttribute(attrName).getAttributeType();

                        switch (attrType) {
                            case "lookup":
                                var lookup = parameters[attrName] = parent.Xrm.Page.getAttribute(attrName).getValue();
                                parameters[attrName] = lookup[0].id;
                                parameters[attrName + "name"] = lookup[0].name;
                                break;
                            default:
                                parameters[attrName] = parent.Xrm.Page.getAttribute(attrName).getValue();
                        }                     
                    }
                }             

                if (link != null) {
                    parameters[link] = id;
                    parameters[link + "name"] = name;
                }

                parent.Xrm.Page.data.entity.save("saveandclose");
                parent.Xrm.Utility.openEntityForm(entityName, null, parameters);
                break;
            default:
                parent.Xrm.Page.data.refresh(false);
                break;
        }
    }

    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.GetAction = function () {
        var e = N52QuickButton.GetQuerystring("data");
        var t = decodeURIComponent(e);
        var n = t.split("|");

        if (n.length > 3) {
            return n[3];
        }
        else {
            return "save";
        }
    }

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

        if (n.length > 4) {
            attrList = n[4].split(",");
            return attrList;
        }
        else {
            return null;
        }        
    }

    N52QuickButton.GetLink = function () {
        var e = N52QuickButton.GetQuerystring("data");
        var t = decodeURIComponent(e);
        var n = t.split("|");
        if (n.length > 5) {
            return n[5];
        }
        else {
            return null;
        }  
    }


    N52QuickButton.FormulasRetrieveComplete = function () {

    }

    N52QuickButton.Initialize = function () {

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


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

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