﻿var DdlHelper = {
    Clear: function (_id) {
        var dropdown = document.getElementById(_id)
        dropdown.options.length = 0;
        var opt = document.createElement('option');
        dropdown.appendChild(opt);
    },
    SelectDefault: function (_id, valueToSelect) {
        var element = document.getElementById(_id);
        element.value = valueToSelect;
    },
    Sort: function (_id) {
        var tmpAry = new Array();
        for (var i = 0; i < _id.options.length; i++) {
            tmpAry[i] = new Array();
            tmpAry[i][0] = _id.options[i].text;
            tmpAry[i][1] = _id.options[i].value;
        }
        tmpAry.sort();
        while (_id.options.length > 0) {
            _id.options[0] = null;
        }
        for (var i = 0; i < tmpAry.length; i++) {
            var op = new Option(tmpAry[i][0], tmpAry[i][1]);
            _id.options[i] = op;
        }
        return;
    }
};

var FormType = {
    UNDEFINED: 0, CREATE: 1, UPDATE: 2, READ_ONLY: 3,
    DISABLED: 4, QUICK_CREATE: 5, BULK_EDIT: 6, READ_OPTIMIZED: 11
}

var ActionType = {
    SAVE: "123030000",
    OPEN: "123030001",
    ATTACH_EMAIL: "123030002",
    SAVE_NOTES: "123030003"
};

var FileFormat = {
    123030000: 'PDF',
    123030001: 'EXCEL',
    123030002: 'WORD'
};

var Constant = {
    TrialFailError: "Trial period has expired. Please contact sales@iotap.com for product license.",
    NotesAttached: "Report has been attached to Notes.",
    DynamicButtonError: "Please add proper ActionId in Dynamic button. Contact sales@iotap.com for help.",
    RequiredDdlReportError: "Report must be selected.",
    RequiredDdlFileFormatError: "File Format must be selected.",
    RequiredDdlActionError: "Action must be selected.",
    FieldMandatoryError: "You must provide a value for ",
    OrgService: "/xrmservices/2011/OrganizationData.svc/",
    WebRes: {
        DownloadOption: "iotap_DownloadOptions.htm",
        ReportSelector: "WebResource_ReportSelector"
    }
};

var ConfigEntity = {
    LogicalName: "iotap_1clickdoc"

};

function _getUrl(objContext) {
    var url = objContext.getClientUrl();
    if (url.match(/\/$/))
        url = url.substring(0, url.length - 1);
    if (typeof objContext.getClientUrl != "undefined")
        url = objContext.getClientUrl();
    return url;
};

function Log(_msg) {
    try {
        //alert(_msg);
        if (typeof console != "undefined")
            console.log(_msg);
        //console.error(_msg);
        //throw new Error(_msg);
    } catch (e) {
    }
};

function IsCRM2013() {
    var isCRM2013 = false; if (parent.Xrm.Page.context.client != undefined) { isCRM2013 = true; }
    return isCRM2013;
}

function IsOnlineCrm(objContext) {
    var url = _getUrl(parent.Xrm.Page.context);
    var urlArray = url.split('.');
    var length = urlArray.length;

    if (urlArray[length - 1] == 'com' && urlArray[length - 2] == 'dynamics')
        return true;
    else
        return false;
}

function _getXmlHttpRequestObject() {
    var xmlhttp;
    if (navigator.appName == "Microsoft Internet Explorer")
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    else
        xmlhttp = new XMLHttpRequest();
    return xmlhttp;
};

function ExecuteOdata(_orgUrl, _serviceUrl, _oDataQuerry) {
    var req = _getXmlHttpRequestObject();
    var _url = _orgUrl + _serviceUrl + _oDataQuerry;

    Log(_url);
    req.open("GET", _url, false);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.send();

    if (req.status == 200) {
        var response = req.responseText;
        if (response != null && response != undefined) {
            var jsResp = eval('(' + response + ')');
            if (jsResp != null) {
                if (jsResp.d.results.length > 0)
                    return jsResp.d.results;
                else
                    return null;
            }
        }
    }
    if (req.status == 500) {
        alert(Constant.TrialFailError);
        return;
    }
    else
        throw new Error("Fails to execute " + _url);
}

function getDataParam(number) {
    var vals = new Array();
    if (location.search != "") {
        vals = location.search.substr(1).split("&");
        for (var i in vals) {
            vals[i] = vals[i].replace(/\+/g, " ").split("=");
        }
        for (var i in vals) {
            if (vals[i][0].toLowerCase() == "data") {
                var datavalue = vals[i][1];
                if (datavalue != "") {
                    var vals = new Array();
                    vals = decodeURIComponent(datavalue).split("&");
                    return vals[0].replace(/\+/g, " ").split("|")[number];
                }
            }
        }
    }
    else
        throw new Error("No data parameter was passed to this page");
}

function CreateEntity_odata(_orgUrl, entityObject, entityName) {
    var jsonEntity = JSON.stringify(entityObject);
    var createEntityReq = new XMLHttpRequest();
    var ODataPath = _orgUrl + Constant.OrgService;
    createEntityReq.open("POST", ODataPath + "/" + entityName + "Set", false);
    createEntityReq.setRequestHeader("Accept", "application/json");
    createEntityReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    createEntityReq.send(jsonEntity);
    var newEntity = JSON.parse(createEntityReq.responseText).d;
    return newEntity;
}

function getMscrm_DdlText(fieldName) {
    var value = Xrm.Page.getAttribute(fieldName).getSelectedOption();
    if (value == null)
        return ''
    else
        return value.text;
}

function ExecuteFetchXml(_orgUrl, _fetchXml) {
    var _encodeXml = CrmEncodeDecode.CrmXmlEncode(_fetchXml);
    _serviceUrl = "/XRMServices/2011/Organization.svc/web";

    var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body>";
    request += '<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">' +
    '<request i:type="b:RetrieveMultipleRequest" ' +
    ' xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" ' +
    ' xmlns:i="http://www.w3.org/2001/XMLSchema-instance">' +
        '<b:Parameters xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic">' +
            '<b:KeyValuePairOfstringanyType>' +
                '<c:key>Query</c:key>' +
                '<c:value i:type="b:FetchExpression">' +
                    '<b:Query>' + _encodeXml + '</b:Query>' +
                '</c:value>' +
            '</b:KeyValuePairOfstringanyType>' +
        '</b:Parameters>' +
        '<b:RequestId i:nil="true"/>' +
        '<b:RequestName>RetrieveMultiple</b:RequestName>' +
    '</request></Execute></s:Body></s:Envelope>';

    var req = _getXmlHttpRequestObject();

    req.open("POST", _orgUrl + _serviceUrl, false);
    req.setRequestHeader("Accept", "application/xml, text/xml, */* ");
    req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
    req.send(request);

    if (req.status == 200) {
        try {
            if ($.browser.mozilla)
                return req.response;
            else
                return req.responseXML

        } catch (e) {
            Log('ERROR in RESPONSE');
        }
    }
    else
        throw new Error("Fails to execute FetchXml.");

    /*
    var _encodeXml = CrmEncodeDecode.CrmXmlEncode(_fetchXml);
    _serviceUrl = "/XRMServices/2011/Organization.svc/web";

    var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body>";
    request += '<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">' +
    '<request i:type="b:RetrieveMultipleRequest" ' +
    ' xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" ' +
    ' xmlns:i="http://www.w3.org/2001/XMLSchema-instance">' +
        '<b:Parameters xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic">' +
            '<b:KeyValuePairOfstringanyType>' +
                '<c:key>Query</c:key>' +
                '<c:value i:type="b:FetchExpression">' +
                    '<b:Query>' + _encodeXml + '</b:Query>' +
                '</c:value>' +
            '</b:KeyValuePairOfstringanyType>' +
        '</b:Parameters>' +
        '<b:RequestId i:nil="true"/>' +
        '<b:RequestName>RetrieveMultiple</b:RequestName>' +
    '</request></Execute></s:Body></s:Envelope>';

    var req = _getXmlHttpRequestObject();

    req.open("POST", _orgUrl + _serviceUrl, false);
    req.setRequestHeader("Accept", "application/xml, text/xml, * / * ");
    req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
    req.send(request);
    
    if (req.status == 200)
    {
        var response = req.responseText;
        if (response != null && response != undefined)
        {
            return { ResponseText: response, ResponseXml: req.responseXML };
        }
    }
    else
        throw new Error("Fails to execute FetchXml.");
    */
}

function StringToXml(_text) {
    try {
        var xmlDoc = null;
        if (window.DOMParser) {
            var parser = new DOMParser();
            xmlDoc = parser.parseFromString(_text, "text/xml");
        }
        else // code for IE
        {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(_text);
        }
        return xmlDoc;
    } catch (e) {
        Log("Unalbe to parse the XML.");
    }
}

function IsRequiredPluginPresent() {
    return true; //todo: remove this line while

    var path = "SdkMessageProcessingStepSet?$filter=startswith(Name,%27LicensePlugin.LicensePlugin:%27)";
    var result = ExecuteOdata("https://crm.brodwell.com/BrodwellCRM/", Constant.OrgService, path);

    if (result == null) { return false; }

    var length = result.length;

    if (length < 2) { return false; }

    for (var i = 0; i < length; i++) {
        if (!(result[i].StateCode.Value == 0 && result[0].StatusCode.Value == 1))
        { return false; }
    }
    return true;
}

function CheckSilverlightAvailability() {
    //var installed = false;
    //installed = !!navigator.plugins["Silverlight Plug-In"]
    //         || !!(window.ActiveXObject &amp;&amp; new ActiveXObject('AgControl.AgControl'));

    if (!Silverlight.isInstalled()) {
        var r = confirm("This application requries Silverlight plug-in. \n Do you want to download??");
        if (r == true)
            window.open("http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0", "silvelight", "", "");
    }
}

var silverlightObject;

function pluginLoaded(sender, args) {
    silverlightObject = sender.getHost();
}

function CallSilverlight(downloadPath) {
    silverlightObject.Content.iotap.StrToByteArray(downloadPath);
}

function AppendSilverlightObject(url) {
    var divTag = document.getElementById("silverlightControlHost");
    divTag.innerHTML = '<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="0%" height="0%">                     ' +
                            '<param name="source" value="' + url + '/WebResources/iotap_Base64Convertor.xap">                                           ' +
                            '<param name="onError" value="onSilverlightError">                                                                          ' +
                            '<param name="background" value="white">                                                                                    ' +
                            '<param name="minRuntimeVersion" value="5.0.61118.0">                                                                       ' +
                            '<param name="autoUpgrade" value="true">                                                                                    ' +
                            '<param name="onLoad" value="pluginLoaded">                                                                                 ' +
                            '<a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=5.0.61118.0" style="text-decoration: none">                   ' +
                                '<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none">   ' +
                            '</a>                                                                                                                       ' +
                        '</object>                                                                                                                      ' +
                        '<iframe id="_sl_historyFrame" style="visibility: hidden; height: 0px; width: 0px; border: 0px"></iframe>                       ';
}