//////////////////////////////***********Global Variables Start******************//////////////////
var FORM_CREATE = 1;
var FORM_UPDATE = 2;
var FORM_QUICK_CREATE = 5;

//////////////////////////////***********Global Variables End******************//////////////////


//////////////////////////////////********Common Functions Start************///////////////////////////

function SetRequiredLevel(attributeName, requirement) {
    Xrm.Page.getAttribute(attributeName).setRequiredLevel(requirement);
}

function DisableField(attributeName, isDisabled) {
    Xrm.Page.getAttribute(attributeName).controls.get(0).setDisabled(isDisabled);
}

function GetAttributeValue(attributeName) {
    return Xrm.Page.getAttribute(attributeName).getValue();
}

function SetAttributeValue(attributeName, attributeValue) {
    Xrm.Page.getAttribute(attributeName).setValue(attributeValue);
}

///////////////////////////********Common Functions End************//////////////////////


///////////////////////////********Validating Customer Selection Type Start************//////////////////////
function ValidateCustomerSelection() {
    //var wrControl = Xrm.Page.ui.controls.get("WebResource_CustomerAttributes"); iotap_nocustomeridentified
    //wrControl.setSrc(wrControl.getSrc());
    var customernotidentified = GetAttributeValue("iotap_nocustomeridentified");
    switch (customernotidentified) {
        case 1:
            SetRequiredLevel("iotap_dummycontact", "none");
            SetRequiredLevel("iotap_dummyaccount", "none");
            DisableField("iotap_dummycontact", true);
            DisableField("iotap_dummyaccount", true);
            break;
        case 2:
            SetRequiredLevel("iotap_dummycontact", "none");
            SetRequiredLevel("iotap_dummyaccount", "required");
            DisableField("iotap_dummycontact", true);
            DisableField("iotap_dummyaccount", false);
            break;
        case 3:
            SetRequiredLevel("iotap_dummycontact", "required");
            SetRequiredLevel("iotap_dummyaccount", "none");
            DisableField("iotap_dummycontact", false);
            DisableField("iotap_dummyaccount", true);
            break;
        default:
            SetRequiredLevel("iotap_dummycontact", "none");
            SetRequiredLevel("iotap_dummyaccount", "none");
            DisableField("iotap_dummycontact", true);
            DisableField("iotap_dummyaccount", true);
    }
}
///////////////////////////********Validating Customer Selection Type End************//////////////////////


///////////////////////////********Validating Case Owner Selection Type Start************//////////////////////

function ValidateCaseOwnerSelection() {
    var ownertype = GetAttributeValue("iotap_ownertype");
    switch (ownertype) {
        case 1:
            SetRequiredLevel("iotap_caseowninguser", "required");
            SetRequiredLevel("iotap_caseowningteam", "none");
            SetRequiredLevel("iotap_caseowningqueue", "none");
            SetAttributeValue("iotap_caseowningteam", null);
            SetAttributeValue("iotap_caseowningqueue", null);
            DisableField("iotap_caseowningqueue", true);
            DisableField("iotap_caseowningteam", true);
            DisableField("iotap_caseowninguser", false);
            break;

        case 2:
        case 3:
            SetRequiredLevel("iotap_caseowninguser", "none");
            SetRequiredLevel("iotap_caseowningteam", "required");
            SetRequiredLevel("iotap_caseowningqueue", "none");
            SetAttributeValue("iotap_caseowninguser", null);
            SetAttributeValue("iotap_caseowningqueue", null);
            DisableField("iotap_caseowningteam", false);
            DisableField("iotap_caseowninguser", true);
            DisableField("iotap_caseowningqueue", true);
            break;

        case 4:
            SetRequiredLevel("iotap_caseowningqueue", "required");
            SetRequiredLevel("iotap_caseowninguser", "none");
            SetRequiredLevel("iotap_caseowningteam", "none");
            SetAttributeValue("iotap_caseowninguser", null);
            SetAttributeValue("iotap_caseowningteam", null);
            DisableField("iotap_caseowningteam", true);
            DisableField("iotap_caseowninguser", true);
            DisableField("iotap_caseowningqueue", false);
        default:
            SetRequiredLevel("iotap_caseowninguser", "none");
            SetRequiredLevel("iotap_caseowningteam", "none");
            SetRequiredLevel("iotap_caseowningqueue", "none");
            SetAttributeValue("iotap_caseowninguser", null);
            SetAttributeValue("iotap_caseowningteam", null);
            DisableField("iotap_caseowningteam", true);
            DisableField("iotap_caseowninguser", true);
    }
}

///////////////////////////********Validating Case Owner Selection Type End************//////////////////////


///////////////////////////********Set E2CP Config Name Start************//////////////////////

function SetE2CPConfigName() {
    var supportQueueLookup = new Array();
    var supportQueueName = "";
    supportQueueLookup = GetAttributeValue("iotap_supportqueue");

    if (supportQueueLookup != null) {
        supportQueueName = supportQueueLookup[0].name;
        SetAttributeValue("iotap_name", supportQueueName);
    }
    else {
        SetAttributeValue("iotap_name", null);
    }
}

///////////////////////////********Set E2CP Config Name  End************//////////////////////

///////////////////////////********Set E2CP Config Default Attributes Start************//////////////////////

function SetDefaultAttributes() {
    if (Xrm.Page.ui.getFormType() == FORM_CREATE || Xrm.Page.ui.getFormType() == FORM_QUICK_CREATE) {
        //Set the Subject Exception Keywords
        var subjectKeywords = "Undeliverable;Delivery Failure;No Reply;Out Of Office;spam";
        SetAttributeValue("iotap_subject", subjectKeywords);

        //Set user counter value to 0
        var userCounter = 0;
        SetAttributeValue("iotap_usercounter", userCounter);

        // Set Case Title Prefix Keyword by Default
        var caseTitlePrefix = "[Auto-Created]";
        SetAttributeValue("iotap_casetitleprefix", caseTitlePrefix);

        //Set Existing Case Check Option
        SetAttributeValue("iotap_checknewemailregarding", 2);

        //Set Server Url
        var serverUrl = Xrm.Page.context.getClientUrl();
        SetAttributeValue("iotap_serverurl", serverUrl);

    }
}

///////////////////////////********Set E2CP Config Default Attributes End************//////////////////////


///////////////////////////********Set E2CP Existing Case Check Start************//////////////////////
function CheckExistingCaseReopen() {
    var checkExistingCaseOption = GetAttributeValue("iotap_checknewemailregarding");
    // if Reopen an existing case is selected then enable "Re-open case closed within X hours" & "Re-Assign queue"
    if (parseInt(checkExistingCaseOption) == 4) {
        // Enable the controls
        DisableField("iotap_anexistingcasereopenhrs", false);
        DisableField("iotap_reassignqueue", false);
        DisableField("iotap_reopenedcasestatusreasonnumber", false);

        // Set default to 0.
        SetAttributeValue("iotap_anexistingcasereopenhrs", 0);
        SetAttributeValue("iotap_reopenedcasestatusreasonnumber", 0);
    } else {
        // Clear the values & disable the controls
        SetAttributeValue("iotap_anexistingcasereopenhrs", null);
        SetAttributeValue("iotap_reassignqueue", null);
        SetAttributeValue("iotap_reopenedcasestatusreasonnumber", null);

        DisableField("iotap_anexistingcasereopenhrs", true);
        DisableField("iotap_reassignqueue", true);
        DisableField("iotap_reopenedcasestatusreasonnumber", true);
    }
}

///////////////////////////********Set E2CP Existing Case Check End************//////////////////////


function CaseOwnerOverrideOnChange() {

    var ownerOverrideOption = GetAttributeValue("iotap_caseowneroverride");
    //var control = Xrm.Page.ui.controls.get("WebResource_GetAccountContactAttributes");
    //control.setSrc(null);
    //control.setSrc(control.getSrc());

    /*
    var webResourceControl = Xrm.Page.getControl("WebResource_GetAccountContactAttributes");
    var src = webResourceControl.getSrc();
    webResourceControl.setSrc(null);
    webResourceControl.setSrc(src);*/

    var webResourceControl = Xrm.Page.ui.controls.get("WebResource_GetAccountContactAttributes");
    var src = "/WebResources/iotap_/E2CM/HTML/GetAccountContactAttribute.htm?data=" +Math.floor(Math.random() * 100);
    var globalContext = Xrm.Utility.getGlobalContext().getClientUrl();
    src = globalContext + src;
    webResourceControl.setSrc(null);
    webResourceControl.setSrc(src);
}

function FormOnLoad() {
    SetDefaultAttributes();
    ValidateCaseOwnerSelection();
    ValidateCustomerSelection();

    if (Xrm.Page.ui.getFormType() == FORM_CREATE)
        CheckExistingCaseReopen();
}

function OnSave() {
    var caseOwningQueueLookup = new Array();
    var caseOwningLookupId = null;
    caseOwningQueueLookup = GetAttributeValue("iotap_caseowningqueue");

    if (caseOwningQueueLookup != null) {
        caseOwningLookupId = caseOwningQueueLookup[0].id;
        caseOwningLookupId = caseOwningLookupId.replace("{", "").replace("}", "");
        SetAttributeValue("iotap_userqueueguid", caseOwningLookupId);
    }
    else
        SetAttributeValue("iotap_userqueueguid", null);
}

