//Javascript Mechanisms for Opencell Configurations (ocl_opencell) entity
function publishFlagOnChange()
{
	var flag = Xrm.Page.getAttribute("ocl_publishoptionsetsflag");
	if (!flag.getValue()) 
	{
		var contextEntityLogicalName = Xrm.Page.data.entity.getEntityName();
		var contextEntityId = Xrm.Page.data.entity.getId();
if (flag.getIsDirty()) {
		Xrm.Page.data.entity.save();}
		Xrm.Utility.openEntityForm(contextEntityLogicalName, contextEntityId);
	}

}
function callSaveDefaultsAction()
{
	var actionName = "ocl_saveDefaults";
	var contextEntityLogicalName = Xrm.Page.data.entity.getEntityName();
	var contextEntityId = Xrm.Page.data.entity.getId();	
	InvokeAction(actionName, contextEntityLogicalName, contextEntityId,"OKMessage", "errorMessage");
}
function callSyncAction()
{
	var conf = confirm("This Action may take a while to complete.\nThe form will refresh when the Synchronization is complete. Please don't try any actions untill then.");
	if (!conf)
		return;

	debugger;
	var actionName = "ocl_synchronizeOpencellConfigurations";
	var contextEntityLogicalName = Xrm.Page.data.entity.getEntityName();
	var contextEntityId = Xrm.Page.data.entity.getId();	
	InvokeAction(actionName, contextEntityLogicalName, contextEntityId,"OKMessage", "errorMessage");
	debugger;
	//Xrm.Page.data.refresh();
	var flag = Xrm.Page.getAttribute("ocl_publishoptionsetsflag");
	flag.setValue(true);
	flag.setSubmitMode("always");
	Xrm.Page.data.entity.save();
	Xrm.Utility.openEntityForm(contextEntityLogicalName, contextEntityId);
	//InvokeGlobalAction(actionName, "OKMessage", "errorMessage", null);
}

// Invoke Action
function InvokeAction(actionLogicalName, contextEntityLogicalName, contextEntityId, OKMessage, errorMessage) {
	var context = window.parent.Xrm.context;
	var rawError;
	var url = Xrm.Page.context.getClientUrl()
	var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
	url += OrgServicePath;

	var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
	"<s:Body>" +
	"<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">" +
	"<request xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\">" +

	"<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">" +
	"<a:KeyValuePairOfstringanyType>" +
	"<c:key>Target</c:key>" +
	"<c:value i:type=\"a:EntityReference\">" +
	"<a:Id>" + contextEntityId + "</a:Id>" +
	"<a:LogicalName>" + contextEntityLogicalName + "</a:LogicalName>" +
	"<a:Name i:nil=\"true\" />" +
	"</c:value>" +
	"</a:KeyValuePairOfstringanyType>" +
	"</a:Parameters>" +
	"<a:RequestId i:nil=\"true\" />" +
	"<a:RequestName>" + actionLogicalName + "</a:RequestName>" +
	"</request>" +
	"</Execute>" +
	"</s:Body>" +
	"</s:Envelope>";

	var req = new XMLHttpRequest();
	req.open("POST", url, false)

    // Responses will return XML.
    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);
    req.responseXML;

    if (req.statusText == "OK" && OKMessage != null) {
    	
        //Xrm.Utility.alertDialog(OKMessage);
        var response = null;
        if (req.responseXML.getElementsByTagName("a:KeyValuePairOfstringanyType").length > 0)
        	response = req.responseXML.getElementsByTagName("a:KeyValuePairOfstringanyType")[0].childNodes[1].textContent;
        else if(req.responseXML.getElementsByTagName("KeyValuePairOfstringanyType").length > 0)
        	response = req.responseXML.getElementsByTagName("KeyValuePairOfstringanyType")[0].childNodes[1].textContent;    

       // Xrm.Page.getAttribute("ocl_webserviceresponse").setValue(response);
       return response;
        //Xrm.Page.data.refresh(false);
    }
    else if (errorMessage != null) {
    	if (req.responseXML.getElementsByTagName("Message").length > 0) {
    		rawError = req.responseXML.getElementsByTagName("Message")[0].textContent;
    	}

        //Xrm.Utility.alertDialog(errorMessage + "\n" + "Error Details: " + rawError);
        Xrm.Utility.alertDialog(rawError);
    }
}

function InvokeGlobalAction(actionLogicalName, OKMessage, errorMessage, params) {
	var parameters ="";
	if (params) {
		if (typeof(params) == "object") 
		{
			if (params.id && params.logicalName) 
			{
				parameters +="<a:Parameters xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
				parameters += "          <a:KeyValuePairOfstringanyType>";
				parameters += "            <b:key>"+params.name+"</b:key>";
				parameters += "            <b:value i:type=\"a:EntityReference\">";
				parameters += "               <a:Id>" + params.id + "</a:Id>";
				parameters += "               <a:LogicalName>" + params.logicalName + "</a:LogicalName>";
				parameters += "               <a:Name i:nil=\"true\" />";
				parameters += "            </b:value>";
				parameters += "          </a:KeyValuePairOfstringanyType>";
				parameters += "        </a:Parameters>";
			}
			else if (params.length > 0) 
			{
				parameters +="<a:Parameters xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
				for (var i = 0, len = params.length; i < len; i++) {
					parameters += "          <a:KeyValuePairOfstringanyType>";
					parameters += "            <b:key>"+params[i].name+"</b:key>";
					parameters += "            <b:value i:type=\"c:string\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">" + params[i].value + "</b:value>";
					parameters += "          </a:KeyValuePairOfstringanyType>";
				}	
				parameters += "        </a:Parameters>";		
			}
		}
		else if(typeof(params) == "string")
		{
			parameters +="<a:Parameters xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
			parameters += "          <a:KeyValuePairOfstringanyType>";
			parameters += "            <b:key>"+params.name+"</b:key>";
			parameters += "            <b:value i:type=\"c:string\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">" + params.value + "</b:value>";
			parameters += "          </a:KeyValuePairOfstringanyType>";
			parameters += "        </a:Parameters>";
		}
	}

	var context = window.parent.Xrm.context;
	var rawError;
	var url = Xrm.Page.context.getClientUrl()
	var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
	url += OrgServicePath;

	var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
	"<s:Body>" +
	"<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">" +
	"<request xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\">" + parameters+
	"<a:RequestId i:nil=\"true\" />" +
	"<a:RequestName>" + actionLogicalName + "</a:RequestName>" +
	"</request>" +
	"</Execute>" +
	"</s:Body>" +
	"</s:Envelope>";

	var req = new XMLHttpRequest();
	req.open("POST", url, false)

    // Responses will return XML.
    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);
    req.responseXML;

    if (req.statusText == "OK" && OKMessage != null) {

        //Xrm.Utility.alertDialog(OKMessage);
        var response = null;
        if (req.responseXML.getElementsByTagName("a:KeyValuePairOfstringanyType").length > 0)
        	response = req.responseXML.getElementsByTagName("a:KeyValuePairOfstringanyType")[0].childNodes[1].textContent;
        else if(req.responseXML.getElementsByTagName("KeyValuePairOfstringanyType").length > 0)
        	response = req.responseXML.getElementsByTagName("KeyValuePairOfstringanyType")[0].childNodes[1].textContent;    

       // Xrm.Page.getAttribute("ocl_webserviceresponse").setValue(response);
       return response;
        //Xrm.Page.data.refresh(false);
    }
    else if (errorMessage != null) {
    	if (req.responseXML.getElementsByTagName("Message").length > 0) {
    		rawError = req.responseXML.getElementsByTagName("Message")[0].textContent;
    	}

        //Xrm.Utility.alertDialog(errorMessage + "\n" + "Error Details: " + rawError);
        Xrm.Utility.alertDialog(rawError);
    }
}