﻿function FormLoad() {
    if (Xrm.Page.ui.getFormType() == 1 || Xrm.Page.ui.getFormType() == 5) {
        var QueryParameters = Xrm.Page.context.getQueryStringParameters();
        if (QueryParameters.iotap_caseguid) {
            var caseGuid = QueryParameters.iotap_caseguid;
            SetEmailRecipientAndSubject(caseGuid);
            EmailFeeds(caseGuid);
        }
    }
}

function SetEmailRecipientAndSubject(caseGuid) {
    var casetitle = null;
    //var responsiblecontact = null;

    var context = Xrm.Page.context;
    var serverUrl = context.getClientUrl();
    var ODataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
    var request = new XMLHttpRequest();
    request.open("GET", ODataPath + "/IncidentSet?$select=TicketNumber,ResponsibleContactId,Title,iotap_outgoingemailfromqueue&$filter=IncidentId eq guid'" + caseGuid + "'", false); //True= Asynchronous and False=Synchronous.
    request.setRequestHeader("Accept", "application/json");
    request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    request.send();
    if (request.readyState == 4 /* complete */) {
        if (request.status == 200) {
            var caseObj = JSON.parse(request.responseText).d.results;
            if (caseObj.length > 0) {
                var formatedSubject = "[" + caseObj[0].TicketNumber + "]" + " " + caseObj[0].Title;

                var lookupContact = new Array();
                lookupContact[0] = new Object();
                lookupContact[0].id = caseObj[0].ResponsibleContactId.Id;
                lookupContact[0].name = caseObj[0].ResponsibleContactId.Name;
                lookupContact[0].entityType = "contact";
                Xrm.Page.getAttribute("to").setValue(lookupContact);

                //---------------------------------------------------
                var lookupIncident = new Array();
                lookupIncident[0] = new Object();
                lookupIncident[0].id = caseGuid;
                lookupIncident[0].name = caseObj[0].Title;
                lookupIncident[0].entityType = "incident";
                Xrm.Page.getAttribute("regardingobjectid").setValue(lookupIncident);
                //---------------------------------------------------------

                //Xrm.Page.getAttribute("subject").setValue(caseObj[0].TicketNumber);
                Xrm.Page.getAttribute("subject").setValue(formatedSubject);

                var fromQueue = caseObj[0].iotap_outgoingemailfromqueue;
                if (fromQueue.Id) {
                    var activityPartyListFrom = new Array();
                    activityPartyListFrom[0] = new Object();
                    activityPartyListFrom[0].id = fromQueue.Id;
                    activityPartyListFrom[0].name = fromQueue.Name;
                    activityPartyListFrom[0].entityType = fromQueue.LogicalName;
                    Xrm.Page.getAttribute("from").setValue(activityPartyListFrom);
                }
            }
        }
    }
}

function EmailFeeds(caseGuid) {
    var URL;
    if (Xrm.Page.context.getClientUrl)//Post UR 12
    {
        URL = Xrm.Page.context.getClientUrl();
    }
    else    //Pre UR 12
    {
        URL = Xrm.Page.context.getServerUrl();
    }

    var sFetchXml = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">' +
  '<entity name="iotap_caseemailfeeds">' +
    '<attribute name="iotap_caseemailfeedsid" />' +
    '<attribute name="iotap_description" />' +
    '<attribute name="iotap_caseguid" />' +
    '<attribute name="iotap_attachmentids" />' +
    '<attribute name="iotap_fromemailid" />' +
    '<attribute name="createdon" />' +
    '<attribute name="iotap_toemailids" />' +
    '<attribute name="iotap_ccemailids" />' +
    '<attribute name="iotap_subject" />' +
    '<attribute name="iotap_emailguid" />' +
    '<attribute name="iotap_actualenddate" />' +
    '<attribute name="iotap_directioncode" />' +
    '<order attribute="iotap_actualenddate" descending="true" />' +
    '<filter type="and">' +
      '<condition attribute="iotap_caseguid" operator="eq" value="' + caseGuid + '" />' +
      '<condition attribute="iotap_public" operator="eq" value="1" />' +
    '</filter>' +
  '</entity>' +
'</fetch>';

    var request = '<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">' +
'<s:Body>' +
'<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>';
    request += CrmEncodeDecode.CrmXmlEncode(sFetchXml);
    request += '</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 xmlhttp;
    if (navigator.appName == "Microsoft Internet Explorer")
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    else
        xmlhttp = new XMLHttpRequest();

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

    var resultXml = xmlhttp.responseXML;
    if (navigator.appName == "Microsoft Internet Explorer")
        var xmlText = resultXml.xml || resultXml.activeElement.innerHTML;
    else
        var xmlText = (new XMLSerializer()).serializeToString(resultXml);

    if (window.DOMParser) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmlText, "text/xml");
    }
    else // Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(xmlText);
    }


    var emails = [];
    var Entities = (navigator.appName == "Netscape" && (navigator.vendor == "Google Inc." || navigator.vendor == "Apple Computer, Inc.")) ? xmlDoc.getElementsByTagName("Entities")[0].childNodes : xmlDoc.getElementsByTagName("a:Entities")[0].childNodes;
    for (j = 0; j < Entities.length; j++) {
        var description = fromEmailId = toEmailIds = actualEndDate = directionCode = "";
        var getEntity = (navigator.appName == "Netscape" && (navigator.vendor == "Google Inc." || navigator.vendor == "Apple Computer, Inc.")) ? xmlDoc.getElementsByTagName("Entity") : xmlDoc.getElementsByTagName("a:Entity");
        for (i = 0; i <= getEntity[j].childNodes[0].childNodes.length - 1; i++) {
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_description") {
                description = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;
                description = description.replace(/\n\s*\n/g, '<br>');
            }
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_fromemailid")
                fromEmailId = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_toemailids")
                toEmailIds = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_directioncode")
                directionCode = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_actualenddate") {
                actualEndDate = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;
                actualEndDate = new Date(actualEndDate).toLocaleString();
            }
        }
        result =
            {
                Description: description,
                FromEmailId: fromEmailId,
                ToEmailIds: toEmailIds,
                ActualEndDate: actualEndDate,
                DirectionCode: directionCode
            };

        emails.push(result);
    }

    if (emails.length > 0) {
        var displaySettings = DispalySettings();
        var descriptionString = "";
        if (displaySettings.length > 0)
            descriptionString += displaySettings[0].Header;
        descriptionString += "<br>----------------------------------------------------------------------------------------------<br>";
        for (var i = 0; i < emails.length; i++) {
            descriptionString += "<b>" + emails[i].FromEmailId + ", " + emails[i].ActualEndDate + "</b><br>";

            descriptionString += "<br>" + emails[i].Description + "<br>";
            descriptionString += "----------------------------------------------------------------------------------------------<br>";

        }
        if (displaySettings.length > 0)
            descriptionString += displaySettings[0].Footer;
        descriptionText = descriptionString;
        setDescription();
    }
}

var descriptionText;
function setDescription() {
    Xrm.Page.getAttribute("description").setValue(descriptionText);
    Xrm.Page.getAttribute("description").setSubmitMode("always");
    setTimeout("setDescription()", 50);

    //var iframeId = document.getElementById("descriptionIFrame");
    //if (iframeId.readyState == "complete" || iframeId.readyState == undefined)
    //{
    //    try
    //    {
    //        if (navigator.userAgent.indexOf("Chrome") != -1)
    //        {
    //            var iFrame = $("#descriptionIFrame");
    //            var iFrameDoc = iFrame[0].contentDocument || iFrame[0].contentWindow.document;
    //            if (iFrameDoc.readyState == 'complete')
    //            {
    //                setTimeout(function ()
    //                {
    //                    Xrm.Page.getAttribute("description").setValue(descriptionText);
    //                }, 100);
    //            }
    //            else
    //                setTimeout("setDescription()", 50);
    //        }
    //        else
    //        {
    //            Xrm.Page.getAttribute("description").setValue(descriptionText);
    //            Xrm.Page.getAttribute("description").setSubmitMode("always");
    //        }
    //    }
    //    catch (ex)
    //    {
    //        alert("error - " + ex.message);
    //    }
    //}
    //else
    //    setTimeout("setDescription()", 50);
}

function DispalySettings() {
    var URL;
    if (Xrm.Page.context.getClientUrl)//Post UR 12
    {
        URL = Xrm.Page.context.getClientUrl();
    }
    else    //Pre UR 12
    {
        URL = Xrm.Page.context.getServerUrl();
    }
    var sFetchXml = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">' +
'<entity name="iotap_emailfeedsdisplaysetting">' +
'<attribute name="iotap_emailfeedsdisplaysettingid" />' +
'<attribute name="iotap_name" />' +
'<attribute name="createdon" />' +
'<attribute name="iotap_collapsewhitespacecheck" />' +
'<attribute name="iotap_header" />' +
'<attribute name="iotap_footer" />' +
'<order attribute="iotap_name" descending="false" />' +
'</entity>' +
'</fetch>';

    var request = '<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">' +
'<s:Body>' +
'<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>';
    request += CrmEncodeDecode.CrmXmlEncode(sFetchXml);
    request += '</b:Query>' +
'</c:value>' +
'</b:KeyValuePairOfstringanyType>' +
'</b:Parameters>' +
'<b:RequestId i:nil="true"/>' +
'<b:RequestName>RetrieveMultiple</b:RequestName>' +
'</request>' +
'</Execute>' +
'</s:Body></s:Envelope>';
    //return request;


    var xmlhttp;
    if (navigator.appName == "Microsoft Internet Explorer")
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    else
        xmlhttp = new XMLHttpRequest();

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

    var resultXml = xmlhttp.responseXML;
    if (navigator.appName == "Microsoft Internet Explorer")
        var xmlText = resultXml.xml || resultXml.activeElement.innerHTML;
    else
        var xmlText = (new XMLSerializer()).serializeToString(resultXml);

    if (window.DOMParser) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmlText, "text/xml");
    }
    else // Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(xmlText);
    }

    var settings = [];
    var getData = [];
    var dateFormat = "", createdOn = "", inBoundFrom = "", inBoundToCc = "", outBoundFrom = "", outBoundToCc = "", collapseLineBreaks = header = footer = "";
    var Entities = (navigator.appName == "Netscape" && (navigator.vendor == "Google Inc." || navigator.vendor == "Apple Computer, Inc.")) ? xmlDoc.getElementsByTagName("Entities")[0].childNodes : xmlDoc.getElementsByTagName("a:Entities")[0].childNodes;
    for (j = 0; j < Entities.length; j++) {
        var getEntity = (navigator.appName == "Netscape" && (navigator.vendor == "Google Inc." || navigator.vendor == "Apple Computer, Inc.")) ? xmlDoc.getElementsByTagName("Entity") : xmlDoc.getElementsByTagName("a:Entity");
        for (i = 0; i <= getEntity[j].childNodes[0].childNodes.length - 1; i++) {
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_header")
                header = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;
            if (getEntity[j].childNodes[0].childNodes[i].childNodes[0].textContent == "iotap_footer")
                footer = getEntity[j].childNodes[0].childNodes[i].childNodes[1].textContent;

        }

        var result =
          {
              Header: header,
              Footer: footer
          };

        settings.push(result);
    }
    return settings;
}