<html><head><title>North52 Formula Manager Target Entity</title>

<style type="text/css">

html, body{
margin: 0px;
padding: 0px;
background-color: transparent;
}
</style>

<script src="ClientGlobalContext.js.aspx"></script>

<script type="text/javascript" src="north52_/javascript/jquery"></script>

<script type="text/javascript" src="north52_/javascript/north52.htmlwebresource.helper"></script>

<script type="text/javascript" src="north52_/javascript/north52_dialog_helper"></script>

<script type="text/javascript" src="north52_/javascript/JSON2"></script>

<script type="text/javascript" src="north52_/Javascript/sdk.metadata.js"></script>

<script type="text/javascript" src="north52_/javascript/north52.htmlwebresource.helper"></script>






<script type="text/javascript">

  $(document).ready(function () { TargetEntity.Init();
     });



var TargetEntity = {}; 

TargetEntity.Disable= function() {  
$("#targetentity").attr("disabled", true);
};

TargetEntity.Init= function() {  

   $("#targetentity").hide();

   var data = N52.HTMLWebResourceHelper.GetParameterByName('data');

  if (data!= "")
  {
      var vals = N52.HTMLWebResourceHelper.GetDataParameterArray(data);
      var type =  vals[0][1];
       
     if (type == 'insert')
      {
          var Name=  vals[1][1];
          var Value=  vals[2][1];
          var isReset =  vals[3][1];

        TargetEntity.InsertRecord(Name, Value, isReset );
     }    
     else if (type == 'query')
        TargetEntity.BuildTargetEntityDownhierarchy();

   }
   
  };


TargetEntity.InsertRecord = function(Name, Value, isReset ) {  

  $("select[id$=targetentity] > option").remove();
  if (isReset == true) {parent.Xrm.Page.data.entity.attributes.get("north52_targetentityproperty").setValue(""); }


  if (Name != Value)
  {
     N52.HTMLWebResourceHelper.InsertOptionSetItem("targetentity", Name,Value);
      
     TargetEntity.DropDownChanged(Value);
        $('#loading').hide(); 
        $('#targetentity').show(); 
   }
   else
   {
       SDK.Metadata.RetrieveEntity(SDK.Metadata.EntityFilters.Relationships, Value, null, false, function (entityMetadata) {
TargetEntity.successRetrieveAttributes (entityMetadata, Value); }, TargetEntity.errorRetrieveAttributes);

   }


};

TargetEntity.successRetrieveAttributes = function(entityMetadata, entityLogicalName) {  

     var entityDisplayName = entityMetadata.DisplayName.UserLocalizedLabel.Label;
     N52.HTMLWebResourceHelper.InsertOptionSetItem("targetentity", entityDisplayName ,entityLogicalName);
      
     TargetEntity.DropDownChanged(entityLogicalName);
        $('#loading').hide(); 
        $('#targetentity').show(); 

};

TargetEntity.errorRetrieveAttributes = function(error) {  
    alert("North52 Formula Manager : " + error.message);
  };

TargetEntity.DropDownChanged= function(value) {  

try
{
    if (value != null && value!="")
    {  
       parent.Xrm.Page.data.entity.attributes.get("north52_targetentityname").setValue(value);
       
       var url = parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').getSrc();
       url = url.indexOf('?') > 0 ? url.substring(0, url.indexOf('?')) : url;

       var command = encodeURIComponent("type=load&value=" + value + "&parentReference=north52_targetentityproperty&addAllProperties=false" + "&random=" + Math.random());
       url = url + "?data=" +command;
       parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').setSrc(url);
         
     }

   }
   catch(ex)
   {
      alert('North52 Formula Manager: Communication issue, please click Ok & then F5 to refresh the screen. Message: ' + ex.message);
   }
} ; 



TargetEntity.BuildTargetEntityDownhierarchy= function() {  

try
{

    $("select[id$=targetentity] > option").remove();
    var querystringparams = parent.Xrm.Page.context.getQueryStringParameters();
    var guid = querystringparams['id'];

    if (guid  != undefined)
    {
    var serverUrl = N52.DialogHelpers.GetServerUrl();

    var oDataServer = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
   
    var oDataQuery = "north52_formuladetailSet?$select=north52_name,north52_Query&$filter=north52_formula_north52_formuladetail_Id/Id eq guid'" + guid + "' and north52_QueryType/Value eq 217890001";

     var oDataSelect = oDataServer + oDataQuery;

     $.ajax({
     type: "GET",
     contentType: "application/json; charset=utf-8",
     datatype: "json",
     url: oDataSelect,
     beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
     success: function (data, textStatus, XmlHttpRequest)
     {
            TargetEntity.RetrieveEntityData(data.d);

     },
     error: function (XmlHttpRequest, textStatus, errorThrown) { alert('OData Select Failed: ' + oDataSelect ); }
     });
    
   } 
   else {
          N52.HTMLWebResourceHelper.InsertOptionSetItem("targetentity", "No Target data found.","Note if you have just created a formula detail record then you will need to click the refresh button on the ribbon to view the data.");

            var url = parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').getSrc();
            url = url.indexOf('?') > 0 ? url.substring(0, url.indexOf('?')) : url;

          var command = encodeURIComponent("type=clear"+ "&random=" + Math.random());
          url = url + "?data=" +command;


            parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').setSrc(url);


           $('#loading').hide(); 
           $('#targetentity').show(); 

   }

 }
 catch(ex)
 {
    alert('North52 Formula Manager: Communication issue, please click Ok & then F5 to refresh the screen. Message: ' + ex.message);

 }

};

TargetEntity.RetrieveEntityData= function(Entity) {  

 try
 {

   if (Entity.results[0] == undefined)
   {
         N52.HTMLWebResourceHelper.InsertOptionSetItem("targetentity", "No Target data found.","Note if you have just created a formula detail record then you will need to click the refresh button on the ribbon to view the data.");

           var url = parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').getSrc();
            url = url.indexOf('?') > 0 ? url.substring(0, url.indexOf('?')) : url;

          var command = encodeURIComponent("type=clear" + "&random=" + Math.random());
          url = url + "?data=" +command;

            parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').setSrc(url);
    }
   else
   {
    var name  = Entity.results[0].north52_name;
    var query = Entity.results[0].north52_Query;

    var doc = N52.HTMLWebResourceHelper.GetXmlDocument(query);
    var entityNode = N52.HTMLWebResourceHelper.GetXmlNodes(doc , "//entity");
    var entityName = entityNode[0].attributes[0].value;

    N52.HTMLWebResourceHelper.InsertOptionSetItem("targetentity", name,name);

    var queryAttributes = '';
    var attributes = N52.HTMLWebResourceHelper.GetXmlNodes(doc , "//attribute");     
                  
   for (var i = 0; i < attributes.length; i++) 
   {
    var node = attributes [i];
    var value = node.attributes[0].value;
    queryAttributes += value + ',';
   
     }  
       queryAttributes = queryAttributes.substring(0, queryAttributes .length-1);

        var url = parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').getSrc();
       url = url.indexOf('?') > 0 ? url.substring(0, url.indexOf('?')) : url;

        var command = encodeURIComponent("type=query&value=" + name  + "&parentReference=north52_targetentityproperty&query=" + queryAttributes + "&random=" + Math.random());
       url = url + "?data=" +command;
       parent.Xrm.Page.ui.controls.get('WebResource_html_metadata_targetproperty').setSrc(url);
  
     parent.Xrm.Page.data.entity.attributes.get("north52_targetentityname").setValue(entityName);

     }

   $('#loading').hide(); 
   $('#targetentity').show(); 

 }
 catch(ex)
 {
   alert('North52 Formula Manager: Communication issue, please click Ok & then F5 to refresh the screen. Message: ' + ex.message);
 }

  };


</script>

<style type="text\css">
#loading { 
  width: 100%; 
  height: 100%; 
  top: 0px; 
  left: 0px; 
  opacity: 0.7; 
  background-color: #fff; 
  z-index: 99; 
  text-align: center; 
} 
 
#loading-image { 
  top: 0px; 
  left: 0px; 
  z-index: 100; 
}
.main { 
  display: none;  
  width: 100%; 
  height: 100%; 
  top: 0px; 
  left: 0px; 
  }

</style>

<meta charset="utf-8">
</head><body>&nbsp;</body></html>