<!DOCTYPE HTML>
<html>
<head>
	<!--<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">-->
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>OpenCell: Create Subscription</title>
	<!--<script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>-->
	<!-- XrmServiceToolkit libraries -->
	<script src="../scripts/xrmservicetoolkit.js" type="text/javascript"></script>
	<style type="text/css">

		.newClass{
			float: left;
		}

		.hidden{
			display:none;
		}

		table#prices th {
			text-align: left;
			min-width: 100px;
			padding-right: 10px;
		}
		table#prices td {
			text-align: left;
		}

		.formlabel{
			clear:left;
			display:block;
			float:left;
			/*text-align:right;*/
			margin:0 0 1em 0;
			padding:0 0.5em 0 0;
			width:10em;
			font-weight: bold;
		}

		.forminput{
			float:left;
			margin:0 0.5em 0.5em 0;
		}
		.req:after{
			content:"*" ;
			color:red   
		}

	</style>

	<script type="text/javascript">
	//var parameters = GetGlobalContext().getQueryStringParameters();

//Prototypes compatibility --------
	if (!String.prototype.endsWith) {
		String.prototype.endsWith = function(searchString, position) {
			var subjectString = this.toString();
			if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
				position = subjectString.length;
			}
			position -= searchString.length;
			var lastIndex = subjectString.lastIndexOf(searchString, position);
			return lastIndex !== -1 && lastIndex === position;
		};
	}

	if (window.Element && !Element.prototype.closest) {
		Element.prototype.closest = 
		function(s) {
			var matches = (this.document || this.ownerDocument).querySelectorAll(s),
			i,
			el = this;
			do {
				i = matches.length;
				while (--i >= 0 && matches.item(i) !== el) {};
			} while ((i < 0) && (el = el.parentElement)); 
			return el;
		};
	}
//End Prototypes compatibility --------

	var Xrm = window.parent.Xrm;
	var context = Xrm.context;
	var url = Xrm.Page.context.getClientUrl();
	var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
	url += OrgServicePath;
	var contextEntityLogicalName = "ocl_subscription";
	var contextEntityId = Xrm.Page.data.entity.getId();
	//var contextEntityId = "8E693EA7-8DE0-E511-80EB-5065F38B9471";
	//var contextEntityId = "00000000-0000-0000-0000-000000000000";
	var step = 0;
	var offer = "";
	var offerName = "";
	var servicesList = "";

	var subsCode = "";

	var lcid = Xrm.Page.context.getUserLcid();
	var filename = "../scripts/"+lcid+".js";
	var fileref=document.createElement('script');
	fileref.setAttribute("type","text/javascript");
	fileref.setAttribute("src", filename);
	document.getElementsByTagName("head")[0].appendChild(fileref)

	//Global resources

	var lbl_Quantity = "Quantity";
	var lbl_Total = "Total";
/*	var lbl_CreationQuote = "Creation Quote";
	var lbl_ListDetails = "A subscription will be created according to the following information:";
	var lbl_AccountName = "Nom Compte";
	var lbl_OpportunityName = "Nom Opportunit&#233;";
	var lbl_QuoteName = "Nom Devis";
	var lbl_ValidityDate = "Date de Validit&#233;";
	var lbl_Duration = "Dur&#233;e (Ann&#233;es)";
	var lbl_Service = "Service";
	var lbl_Price = "Prix";
	var lbl_OverridePrice = "Prix Client";
	var lbl_SubscriptionName = "Code Souscription";
	var lbl_Description = "Description";
	var lbl_Criteria = "Criteria";
	var btn_Back = "Retour";
	var btn_Next = "Suivant";
	var btn_Done = "Enregistrer";
	var rbtn_NewSubscription = "Nouvel souscription";
	var rbtn_TerminateSubscription = "Mettre fin souscription existant";
	var rbtn_ChangeSubscription = "Changer l&#39;souscription  en cours";
	var lbl_ErrorRequiredFields = "S&#39;il vous pla&#238;t remplir tous les champs obligatoires."; 

	var lbl_CreationQuote = "Creation Quote";
	var lbl_ListDetails = "A subscription will be created according to the following information:";
	var lbl_AccountName = "Account Name";
	var lbl_OpportunityName = "Opportunity Name";
	var lbl_QuoteName = "Quote Name";
	var lbl_ValidityDate = "Validity Date";
	var lbl_Duration = "Duration (mMnths)";
	var lbl_Service = "Service";
	var lbl_Price = "Price";
	var lbl_OverridePrice = "Client Price";
	var lbl_SubscriptionName = "Subscription Code";
	var lbl_Description = "Description";
	var lbl_Criteria = "Criteria";
	var btn_Back = "Back";
	var btn_Next = "Next";
	var btn_Done = "Save";
	var rbtn_NewSubscription = "New Subscription";
	var rbtn_TerminateSubscription = "Terminate Subscription";
	var rbtn_ChangeSubscription = "Update Subscription";
	var lbl_ErrorRequiredFields = "Please, fill in all the required fields";*/

	
	function loadPage()
	{	
	//step = Xrm.Page.getAttribute("ocl_quotecreationprocessstep").getValue();
	document.getElementById("errorDiv").innerHTML = "";
	document.getElementById("back").value = btn_Back;
	document.getElementById("next").value = btn_Next;
	document.getElementById("done").value = btn_Done;
	buttonsDisplay();
	debugger;
	if(step == 0){
		chooseOffer();
	}
	else if(step == 1){
		chooseServices();
	}
	else if(step == 2){
		listPrices();
		listDetails();
		
	}
	else
		return;
	
}
function buttonsDisplay()
{
	if (step == 2)
	{
		document.getElementById("done").style.display = "inline-block";
		document.getElementById("next").style.display = "none";
	}
	else
	{
		document.getElementById("done").style.display = "none";
		document.getElementById("next").style.display = "inline-block";
	}
}
function nextStep()
{
	if (step == 1) 
	{
		document.getElementById("errorDiv").innerHTML = "";
		servicesList = servicesSelected();
	}	
	step++;
	loadPage();
}
function prevStep()
{
	if (step == 2)
		servicesList = "";

	step--;	
	loadPage();
}
function finishCreationProcess()
{
	debugger;
	var account = Xrm.Page.getAttribute("ocl_accountid").getValue();
	var entity = new XrmServiceToolkit.Soap.BusinessEntity("ocl_subscription");

	entity.attributes["ocl_name"] = subsCode;
	entity.attributes["ocl_accountid"] = { id : account[0].id, logicalName : account[0].entityType, type : 'EntityReference' };
	entity.attributes["ocl_description"] = subsCode;
	entity.attributes["ocl_subscriptiondate"] = new Date();
	entity.attributes["ocl_creationprocessfinished"] = true;
	entity.attributes["ocl_offer"] = offer;
	entity.attributes["ocl_offerid"] = offer;
	entity.attributes["ocl_offre"] = offerName;

	contextEntityId = XrmServiceToolkit.Soap.Create(entity);	

	//contextEntityId = Xrm.Page.data.entity.getId();
	createServicesRecords();
	//savePricesInService();
	var params = {name:"Subscription", id: contextEntityId, logicalName:contextEntityLogicalName};
	InvokeGlobalAction("ocl_CreateSubscriptionGlobal", "OKMessage", "errorMessage", params);

	
	Xrm.Utility.openEntityForm("ocl_subscription", contextEntityId);

}

function chooseOperation()
{
	//alert("chooseOperation");
	drawOperationForm();
}
function savePricesInService()
{
	debugger;
	//get prices table
	var table  = document.getElementById("prices");
	var rows = table.getElementsByTagName("tr");
	var services = getQuoteServices(contextEntityId);
	//for each row:
	for (var i = 1, len = rows.length; i < len; i++) {
		var input = rows[i].getElementsByTagName("input")[0];
		var overriddenPrice;
		var defaultPrice = rows[i].getElementsByTagName("td")[1].textContent;
	//. get service name
	var serviceName = input.name;
	//. get value from input
	// 	-> case null, get value from "Value" collumn
	if (input.value)
		overriddenPrice = input.value;
	else
		overriddenPrice = defaultPrice;
	//. save price in service record
	for (var j = 0, jlen = services.length; j<jlen; j++) 
	{
		if (services[j].attributes["ocl_name"].value == serviceName) 
		{
			var be = services[j];
			be.attributes["ocl_defaultprice"] = {value: parseFloat(defaultPrice), type:'Money'};
			be.attributes["ocl_overriddenprice"] = {value: parseFloat(overriddenPrice), type:'Money'};
			XrmServiceToolkit.Soap.Update(be,null);
			break;
		}
		
	}

}
}
function createServicesRecords()
{
	debugger;
	//window.parent.location.reload();
	//contextEntityId = Xrm.Page.data.entity.getId();
	var tab = document.getElementById("prices");
	var trs = tab.getElementsByTagName("tr");
	for (var i = 1, len = trs.length; i < len; i++) {
		//if (services[i].checked)
		var tds = trs[i].getElementsByTagName("td");
		//{			
			var entity = new XrmServiceToolkit.Soap.BusinessEntity("ocl_listofservices");

			var matrice = tds[4].textContent;
			var filterCriteria = tds[5].textContent;
			entity.attributes["ocl_name"] = tds[3].textContent;
			entity.attributes["ocl_description"] = tds[0].textContent;
			entity.attributes["ocl_subscription"] = { id : contextEntityId, logicalName : contextEntityLogicalName, type : 'EntityReference' };
			entity.attributes["ocl_overriddenprice"] = {value: parseFloat(tds[2].textContent), type:'Money'};
			entity.attributes["ocl_defaultprice"] = {value: parseFloat(tds[2].textContent), type:'Money'};

			var quantity = tds[6].childNodes[0].value;			
			if (isNaN(parseFloat(quantity)))
				quantity = "1";
			entity.attributes["ocl_quantity"] = {value: parseFloat(quantity), type:'decimal'};

			entity.attributes["ocl_matrice"] = matrice;

			var filterCriteriaFinal="";
			if (filterCriteria.trim() == "") {
				filterCriteriaFinal = tds[2].textContent;
			}
			else{
				filterCriteriaFinal = "{'"+filterCriteria+"':"+tds[2].textContent+"}";
			}
			entity.attributes["ocl_filtercriteria"] = filterCriteriaFinal;

			XrmServiceToolkit.Soap.Create(entity);
		//}
	}
	
}
function deleteServicesRecords()
{
	//fetch all related services
	var services = getQuoteServices(contextEntityId);
	//delete all related services
	for (var i = 0, len = services.length; i < len; i++) 
	{
		XrmServiceToolkit.Soap.Delete(services[i].logicalName,services[i].id,null);
	}
}
function getQuoteServices(id)
{		
	var fetch = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' no-lock='true'>"
	+"  <entity name='ocl_listofservices'>"
	+"    <attribute name='ocl_listofservicesid' />"
	+"    <attribute name='ocl_name' />"
	+"    <attribute name='ocl_status' />"
	+"    <attribute name='ocl_quote' />"
	+"    <attribute name='ocl_quantity' />"
	+"    <attribute name='ocl_description' />"
	+"    <order attribute='ocl_name' descending='false' />"
	+"    <filter type='and'>"
	+"      <condition attribute='ocl_quote' operator='eq' value='"+id+"' />"
	+"    </filter>"
	+"  </entity>"
	+"</fetch>";


	var results = null

	try {
		results = XrmServiceToolkit.Soap.Fetch(fetch);

	} catch (e) {
		results = new Object();
	}

	return results;
}
function getSubsByName(name)
{
	debugger;
	var fetch = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' no-lock='true'>"
	+"  <entity name='ocl_subscription'>"
	+"    <attribute name='ocl_subscriptionid' />"
	+"    <filter type='and'>"
	+"      <condition attribute='ocl_name' operator='like' value='"+name+"%' />"
	+"    </filter>"
	+"  </entity>"
	+"</fetch>";
	var results = null

	try {
		results = XrmServiceToolkit.Soap.Fetch(fetch);

	} catch (e) {
		results = new Object();
	}

	return results;
}
function fillDetails()
{	
	var customer = Xrm.Page.getAttribute("customerid");
	var opportunity = Xrm.Page.getAttribute("opportunityid");
	var form = "<form id='details'>"
	+"<br>"
	+"<label for='account' class='formlabel'>" + lbl_AccountName + "</label><input type='text' name='account' class='forminput' value='"+customer.getValue()[0].name+"' disabled/>"
	+"<label for='opportunity' class='formlabel'>" + lbl_OpportunityName + "</label><input type='text' name='opportunity' class='forminput'value='"+opportunity.getValue()[0].name+"' disabled/>"
	+"<label for='quote' class='formlabel req'>" + lbl_QuoteName + "</label><input type='text' id='quotename' name='quote' class='forminput' onchange='setQuoteName()' required/>"
	+"<label for='validity' class='formlabel req'>" + lbl_ValidityDate + "</label><input type='date' id='validitydate' name='validity' class='forminput' onchange='setValidityDate()' placeholder='mm/dd/yyyy' required />"
	+"<label for='duration' class='formlabel req'>" + lbl_Duration + "</label><input type='number' id='duration' name='duration' class='forminput' onchange='setDuration()' required />"	
	+"</form>";
	
	document.getElementById("main").innerHTML = form;

}
function setQuoteName()
{
	Xrm.Page.getAttribute("name").setValue(document.getElementById("quotename").value);
	Xrm.Page.data.entity.save();
}
function setValidityDate()
{
	
	Xrm.Page.getAttribute("ocl_validitydate").setValue(new Date(document.getElementById("validitydate").value));
	Xrm.Page.data.entity.save();
}
function setDuration()
{
	Xrm.Page.getAttribute("ocl_contractduration").setValue(document.getElementById("duration").value);
	Xrm.Page.data.entity.save();
}

function chooseOffer()
{
	//alert("chooseOffer");
	getOffersFromWS();
}
function chooseServices()
{
	getServicesFromWS();
}

function listPrices()
{
	getPricesFromWS();
	pricesCalcTotalGlobal();
	return;
}

function listDetails()
{

}

function drawOperationForm()
{
	var form = "<form id='operations'>"
	+"<br>"
	+"<input type='radio' name='operation' value='new' checked>" + rbtn_NewSubscription + "<br>"
	+"<input type='radio' name='operation' value='terminate'>" + rbtn_TerminateSubscription + "<br>"
	+"<input type='radio' name='operation' value='change'>" + rbtn_ChangeSubscription + "<br><br>	 "
	+"</form>";
	document.getElementById("main").innerHTML = form;

}

function getOffersFromWS() { //contextEntityLogicalName, contextEntityId
	var actionName = "ocl_getOffersGlobal";  
	var result = JSON.parse(InvokeGlobalAction(actionName, "OKMessage", "ErrorMessage", null));
	var form = "<form id='offers'>";
	form += "<div style='float:left; width:200px; position:relative; display:block'>";
	for (var i = 0, len = result.length; i< len; i++){
		if (i> 0 && i%10 == 0)
			form+="</div><div style='position:relative; width:200px; float:left; display:block'>";

		form+="<input type='radio' name='offer' id='"+result[i].id+"' value='"+result[i].description+"' onchange='offerSelected()'>"+result[i].description+"<br>";		
	}
	form+="</div></form>";
	document.getElementById("main").innerHTML = form;
}
function getServicesFromWS()
{
	var actionName = "ocl_getServicesGlobal";
	var params = {name:"Offer", value: offer};
	var services = JSON.parse(InvokeGlobalAction(actionName, "OKMessage", "ErrorMessage", params));
	var productSpecChar = services.productSpecCharacteristic;
	var productSpecCharVal = productSpecChar[0].productSpecCharacteristicValue;


	var len;
	if (services)
	{
		var form = "<form id='services'>";
		if (productSpecCharVal.length) {
			for (var i = 0, len = productSpecCharVal.length; i< len; i++){
				form+="<input type='checkbox' name='service' id='"+productSpecCharVal[i].value+"' value='"+productSpecCharVal[i].value+"' >"+productSpecCharVal[i].value.replace("_REC","")+"<br>";
			}
		}
		else
			form+="<input type='checkbox' name='service' id='"+productSpecCharVal.value+"' value='"+productSpecCharVal.value+"' >"+productSpecCharVal.value.replace("_REC","")+"<br>";

		form+="</form>";
		document.getElementById("main").innerHTML = form;

	}
	else
		document.getElementById("main").innerHTML = "No Service was found!";
}
function getServicePriceFromXMLString(xmlString)
{
	debugger;
	var result="";
	if (window.DOMParser)
	{
		parser=new DOMParser();
		xmlDoc=parser.parseFromString(xmlString,"text/xml");
	}
	else // Internet Explorer
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		xmlDoc.loadXML(xmlString);
	}

	if (xmlDoc.getElementsByTagName("serviceTemplate").length>0) 
	{
		var service = xmlDoc.getElementsByTagName("serviceTemplate")[0].attributes["description"].value;
		var servId = xmlDoc.getElementsByTagName("serviceTemplate")[0].attributes["code"].value;
		var customFields = xmlDoc.getElementsByTagName("customField");
		var accountId = Xrm.Page.getAttribute("ocl_accountid").getValue()[0].id;
		var filterValues = getFilterValuesFromAccount(accountId);
		var prevCustomField;

	  //var table = "<table id='prices'><tr><th>Service</th><th>Custom Field</th><th>Value</th><th>Override Value</th></tr>";
	  for (var i = 0, ilen = customFields.length; i < ilen; i++) 
	  {
	  	var customField = customFields[i].attributes[0].value;

			if (prevCustomField && prevCustomField == customField) {
				continue; //Skip duplicated values
			}
			else{prevCustomField = customField;}

	  	var customField = customFields[i].attributes[0].value;

	  	if (!(customField.endsWith("_REC") || customField.endsWith("_OS") || customField.endsWith("_USG")))
				continue;

	  	var entries = customFields[i].getElementsByTagName("entry");
	  	var ignoreEntry = null;
	  	var filterKey;
	  	var valueCriteria = [];
	  	var skipfilter = true;

	  	var mapValues = customFields[i].getElementsByTagName("mapValue");
			if (mapValues.length && mapValues.length > 0) {
				continue; //Skip mapValue
			}

	  	if (entries.length == 0) {				
	  		if (customFields[i].getElementsByTagName("doubleValue").length > 0) {
	  			var price = customFields[i].getElementsByTagName("doubleValue")[0].textContent;
	  			/*result+= "<tr><td>"+service+"</td><td> </td><td>"+price+"</td><td><input name='"+servId+"' type='number'></td><td style='visibility:hidden'>"+customField+"</td><td style='visibility:hidden'> </td></tr>";*/
	  			result+= "<tr><td>"+service+"</td><td> </td><td>"+price+"</td><td class='hidden'>"+servId+"</td><td class='hidden'>"+customField+"</td><td class='hidden'> </td><td><input name='"+servId+"_quant' type='number' min='0' value='1' onchange='pricesCalcTotal(this)'></td><td><input name='"+servId+"_total' type='number' disabled></td></tr>";
	  		}
	  		else{
					continue;
				}
	  		break;
	  	}

	  	for (var e = 0, elen = entries.length; e < elen; e++) 
	  	{
	  		if (customFields[i].getElementsByTagName("entry")[e].childNodes[0].textContent == "key")
	  		{
	  			if(customFields[i].getElementsByTagName("entry")[e].childNodes[1].textContent.indexOf("#{account.") != -1) 
	  			{
	  				filterKey = customFields[i].getElementsByTagName("entry")[e].childNodes[1].textContent;
	  				skipfilter = false;
	  			}
	  			ignoreEntry = e;
	  		}
	  	}

	  	for (var j = 0, jlen = entries.length; j < jlen; j++) 
	  	{
	  		if (j == ignoreEntry)
	  			continue;

	  		var flagNoFilter = false;
	  		var filterKeyArray;
	  		var entryKeys;
	  		if (ignoreEntry == null || skipfilter)
	  			flagNoFilter = true;
	  		else
	  		{

	  			filterKeyArray = filterKey.split("/");
	  			entryKeys = entries[j].childNodes[0].textContent.split("|");

	  			var entryKeysGreater = entryKeys[0].split("<");
	  			var entryKeysLower = entryKeys[0].split(">");
	  		//for (var k = 0, len = entryKeys.length; k< len-1; k++) 
	  		//{
	  			var attName = "ocl_"+filterKeyArray[0].split("#{account.")[1].split("}")[0];
	  			var filterRule = applyFilterRules(entryKeysGreater, entryKeysLower, filterValues, attName);	  		
	  		}
	  		if (flagNoFilter || filterRule || entryKeys[0].toLowerCase() == "null") 
	  		{
	  			var attName2;
	  			if (filterKeyArray && filterKeyArray[1]) 
	  			{
	  				attName2 = "ocl_"+filterKeyArray[1].split("#{account.")[1].split("}")[0];
	  			}
	  			debugger;
	  			var filterRule2;
	  			if (attName2 && filterValues[0].attributes[attName2.toLowerCase()] && entryKeys[1]) 
	  			{
	  				var entryKeysGreater2 = entryKeys[1].split("<");
	  				var entryKeysLower2 = entryKeys[1].split(">");
	  				filterRule2 = applyFilterRules(entryKeysGreater2, entryKeysLower2, filterValues, attName2);
	  			/*	if (entryKeysGreater2.length == 2)
	  				{
	  					filterRule2 = (entryKeysGreater2[0] <= filterValues[0].attributes[attName2.toLowerCase()].value && entryKeysGreater2[1] > filterValues[0].attributes[attName2.toLowerCase()].value);
	  				}
	  				else if (entryKeysGreater2.length == 1) 
	  				{
	  					filterRule2 = (entryKeysGreater2[0] < filterValues[0].attributes[attName2.toLowerCase()].value);
	  				}
	  				else if (entryKeysLower2.length == 2)
	  				{
	  					filterRule2 = (entryKeysLower2[0] > filterValues[0].attributes[attName2.toLowerCase()].value && entryKeysLower2[1] <= filterValues[0].attributes[attName2.toLowerCase()].value);
	  				}
	  				else if (entryKeysLower2.length == 1) 
	  				{
	  					filterRule2 = (entryKeysGreater2[0] > filterValues[0].attributes[attName2.toLowerCase()].value);
	  				}

	  				if(!filterRule2 && entryKeysGreater2.length == 1 && entryKeysLower2.length == 1)	  	
	  				{
	  					debugger;
	  					filterRule2 = entryKeysGreater2[0].toLowerCase() == filterValues[0].attributes[attName2.toLowerCase()].formattedValue.toLowerCase();
	  				}					
	  				*/
	  			}
	  			debugger;		  			
	  			if (flagNoFilter || !attName2 || filterRule2 || entryKeys[1].toLowerCase() == "null") 
	  			{
	  				if (attName) {
	  					var attNameStr = getCustomFieldName(attName);
	  					var filterVal = getFilterVal(filterValues[0].attributes[attName.toLowerCase()]);
	  					valueCriteria.push(attNameStr+ "=" + filterVal);
	  					/*if (filterKeyArray[0].split("#{account.")[1].split("}")[0] == "typeSej") {
							valueCriteria.push("Type sejour=" + filterValues[0].attributes[attName.toLowerCase()].formattedValue);// = valueCriteria + "Type sejour=" + filterValues[0].attributes[attName.toLowerCase()].formattedValue;
						}
						else if(filterKeyArray[0].split("#{account.")[1].split("}")[0] == "nbLits") { //|| filterKeyArray[1].split("#{account.")[1].split("}")[0] == "nbUsers"
							valueCriteria.push(filterKeyArray[0].split("#{account.")[1].split("}")[0].replace("nb","Nombre de ") + "=" + filterValues[0].attributes[attName.toLowerCase()].value)
					}
					else if(filterKeyArray[0].split("#{account.")[1].split("}")[0] == "machineType") {
								valueCriteria.push("Machine Type=" + filterValues[0].attributes[attName.toLowerCase()].formattedValue);// = valueCriteria + "Type sejour=" + 	filterValues[0].attributes[attName.toLowerCase()].formattedValue;	
							}
							else if(filterKeyArray[0].split("#{account.")[1].split("}")[0] == "nbCapsules") { //|| filterKeyArray[1].split("#{account.")[1].split("}")[0] == 	"nb	Users"	
								valueCriteria.push(filterKeyArray[0].split("#{account.")[1].split("}")[0].replace("nb","Amount of ") + "=" + filterValues[0].attributes[attName.toLowerCase()].value)	
						}
						else if(filterKeyArray[0].split("#{account.")[1].split("}")[0] == "nbUsers") {
							valueCriteria.push(filterKeyArray[0].split("#{account.")[1].split("}")[0].replace("nb","Nombre d'") + "=" + filterValues[0].attributes[attName.toLowerCase()].value)
						}*/
					}
					
					if (attName2) {
						var attNameStr2 = getCustomFieldName(attName2);
						var filterVal2 = getFilterVal(filterValues[0].attributes[attName2.toLowerCase()]);
						valueCriteria.push(attNameStr2+ "=" + filterVal2);
						/*if (filterKeyArray[1].split("#{account.")[1].split("}")[0] == "typeSej") {
							valueCriteria.push("Type sejour=" + filterValues[0].attributes[attName2.toLowerCase()].formattedValue);// = valueCriteria + "Type sejour=" + filterValues[0].attributes[attName.toLowerCase()].formattedValue;
						}
						else if(filterKeyArray[1].split("#{account.")[1].split("}")[0] == "nbLits") { //|| filterKeyArray[1].split("#{account.")[1].split("}")[0] == "nbUsers"
							valueCriteria.push(filterKeyArray[1].split("#{account.")[1].split("}")[0].replace("nb","Nombre de ") + "=" + filterValues[0].attributes[attName2.toLowerCase()].value)
					}	
					else if(filterKeyArray[1].split("#{account.")[1].split("}")[0] == "machineType") {	
									valueCriteria.push("Machine Type=" + filterValues[0].attributes[attName2.toLowerCase()].formattedValue);// = valueCriteria + "Type sejour=" + 	filterValues[0].attributes[attName.toLowerCase()].formattedValue;	
								}
							else if(filterKeyArray[1].split("#{account.")[1].split("}")[0] == "nbCapsules") { //|| filterKeyArray[1].split("#{account.")[1].split("}")[0] == 	"	nbUsers"	
								valueCriteria.push(filterKeyArray[1].split("#{account.")[1].split("}")[0].replace("nb","Amount of ") + "=" + filterValues[0].attributes[attName2.toLowerCase()].value)	
						}
						else if(filterKeyArray[1].split("#{account.")[1].split("}")[0] == "nbUsers") {
							valueCriteria.push(filterKeyArray[1].split("#{account.")[1].split("}")[0].replace("nb","Nombre d'") + "=" + filterValues[0].attributes[attName2.toLowerCase()].value)
						}*/
					}
					
					var valueCriteriaFinal = "";
					for (var w=0; w < valueCriteria.length; w++){
						valueCriteriaFinal = valueCriteriaFinal + valueCriteria[w];
						
						if (w< valueCriteria.length-1) {
							valueCriteriaFinal = valueCriteriaFinal + "<br>";
						}
					};
					var f = "";
					if(entryKeys)
					{
						f = entryKeys.join("|");
					}
					result+= "<tr><td>"+service+"</td><td>"+valueCriteriaFinal+"</td><td>"+entries[j].childNodes[1].textContent+"</td><td class='hidden'>"+servId+"</td><td class='hidden'>"+customField+"</td><td class='hidden'>"+ f +"</td><td><input name='"+servId+"_quant' type='number' min='0' value='1' onchange='pricesCalcTotal(this)'></td><td><input name='"+servId+"_total' type='number' disabled></td></tr>";
				}
			}
		  //}
		}
	}
}
return result;
}
function pricesCalcTotalGlobal()
{
	var tab = document.getElementById("prices");
	var trs = tab.getElementsByTagName("tr");
	for (var i = 1; i < trs.length; i++) {
		pricesCalcTotal(trs[i]);
	}
}
function pricesCalcTotal(input)
{
	var tr = input.closest('tr');
	var tds = tr.getElementsByTagName('td');
	var quantCol = tds[6];
	var quantInput = quantCol.childNodes[0];

	var dPriceCol = tds[2];
	//var oPriceCol = tds[3];
	//var oPriceInput = oPriceCol.childNodes[0];
	var calcPrice = parseFloat(dPriceCol.textContent);
	

	if (quantInput.value <= 0) {
		quantInput.value = 0;
	}
	var calcQuant = quantInput.value;
	var totalCol = tds[7];
	var totalInput = totalCol.childNodes[0];

	totalInput.value = calcPrice*calcQuant;

}

function getFilterVal(filterValObj)
{
	if (filterValObj.type == "OptionSetValue")
		return filterValObj.formattedValue;
	else
		return filterValObj.value;
}
/*function getCustomFieldName(schemaname)
{
	var fetch ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' no-lock='true'>"
+"  <entity name='ocl_customfield'>"
+"    <attribute name='ocl_customfieldid' />"
+"    <attribute name='ocl_name' />"
+"    <attribute name='createdon' />"
+"    <order attribute='ocl_name' descending='false' />"
+"    <filter type='and'>"
+"      <condition attribute='ocl_schemaname' operator='eq' value='"+schemaname+"' />"
+"    </filter>"
+"  </entity>"
+"</fetch>";

		var retrieve = XrmServiceToolkit.Soap.Fetch(fetch);

		if(retrieve.length > 0)
		{
			return retrieve[0].attributes["ocl_name"].value;	
		}
		else 
			return "";
	}*/
	function generateSubsName()
	{
		var count = "";

		var today = new Date();
		var dd = today.getDate();
	var mm = today.getMonth()+1; //January is 0!
	var yyyy = today.getFullYear();

	if(dd<10) {
		dd='0'+dd
	} 

	if(mm<10) {
		mm='0'+mm
	} 

	today ="Commande "+ yyyy+mm+dd;
	var subs = getSubsByName(today);
	if (subs.length > 0) 
	{
		today += "_"+subs.length;
	}
	return today;
}

function getCustomFieldName(schemaname)
{
	var retrieve = getCustomField(schemaname);

	if(retrieve && retrieve.length > 0)
	{
		return retrieve[0].attributes["ocl_name"].value;	
	}
	else 
		return "";
}

function getCustomField(schemaname)
{
	var fetch ="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' no-lock='true'>"
	+"  <entity name='ocl_customfield'>"
	+"    <attribute name='ocl_customfieldid' />"
	+"    <attribute name='ocl_name' />"
	+"    <attribute name='ocl_accounttype' />"
	+"    <order attribute='ocl_name' descending='false' />"
	+"    <filter type='and'>"
	+"      <condition attribute='ocl_schemaname' operator='eq' value='"+schemaname+"' />"
	+"    </filter>"
	+"  </entity>"
	+"</fetch>";

	var retrieve = XrmServiceToolkit.Soap.Fetch(fetch);

	if(retrieve.length > 0)
	{
		return retrieve;	
	}
	else 
		return null;
}
function applyFilterRules(entryKeysGreater, entryKeysLower, filterValues, attName){	
	var filterRule;

	if (filterValues[0].attributes[attName.toLowerCase()]) 
	{
		if (entryKeysGreater.length == 2)
		{
			if (!entryKeysGreater[1])
				filterRule = (entryKeysGreater[0] < filterValues[0].attributes[attName.toLowerCase()].value);
			else
				filterRule = (entryKeysGreater[0] <= filterValues[0].attributes[attName.toLowerCase()].value && entryKeysGreater[1] > filterValues[0].attributes[attName.toLowerCase()].value);
		}
		else if (entryKeysLower.length == 2)
		{
			if(!entryKeysLower[1])
				filterRule = (entryKeysLower[0] < filterValues[0].attributes[attName.toLowerCase()].value);
			else
				filterRule = (entryKeysLower[0] > filterValues[0].attributes[attName.toLowerCase()].value && entryKeysLower[1] <= filterValues[0].attributes[attName.toLowerCase()].value);
		}
		if(!filterRule && entryKeysGreater.length == 1 && entryKeysLower.length == 1)
		{
			filterRule = entryKeysGreater[0].toLowerCase() == filterValues[0].attributes[attName.toLowerCase()].formattedValue.toLowerCase();
		}
	}

	if (filterValues[0].attributes["ocl_accnttype"])
	{
		var accType = filterValues[0].attributes["ocl_accnttype"].value;
		var customField = getCustomField(attName);
		if (customField && customField.length > 0)
		{
			var customFieldAccType = customField[0].attributes["ocl_accounttype"].value;
			if (!(customFieldAccType == accType))
				return null;			
		}
	}
	else
		return null;

	return filterRule;
}


/*
function applyFilterRules(entryKeysGreater, entryKeysLower, filterValues, attName)
{
	var filterRule;
	if (filterValues[0].attributes[attName.toLowerCase()]) 
	{
		if (entryKeysGreater.length == 2)
		{
			if (!entryKeysGreater[1])
				filterRule = (entryKeysGreater[0] < filterValues[0].attributes[attName.toLowerCase()].value);
			else
				filterRule = (entryKeysGreater[0] <= filterValues[0].attributes[attName.toLowerCase()].value && entryKeysGreater[1] > filterValues[0].attributes[attName.toLowerCase()].value);
		}
		else if (entryKeysLower.length == 2)
		{
			if(!entryKeysLower[1])
				filterRule = (entryKeysLower[0] < filterValues[0].attributes[attName.toLowerCase()].value);
			else
				filterRule = (entryKeysLower[0] > filterValues[0].attributes[attName.toLowerCase()].value && entryKeysLower[1] <= filterValues[0].attributes[attName.toLowerCase()].value);
		}
		if(!filterRule && entryKeysGreater.length == 1 && entryKeysLower.length == 1)
		{
			filterRule = entryKeysGreater[0].toLowerCase() == filterValues[0].attributes[attName.toLowerCase()].formattedValue.toLowerCase();
		}
	}
	return filterRule;
}
*/
function getPricesFromWS(serviceCode)
{
	debugger;
	subsCode = generateSubsName();
	var customer = Xrm.Page.getAttribute("ocl_accountid");
	var details = "<h3>"+lbl_ListDetails+"</h3>"
	+"<h4>Details:</h4>"
	+"<form id='subDetails' style='clear:both;'>"
	+"<label for='code' class='formlabel'>" + lbl_SubscriptionName + "</label><label name='code' class='forminput'>"+subsCode+"</label>"
	+"<label for='account' class='formlabel'>" + lbl_AccountName + "</label><label name='account' class='forminput'>"+customer.getValue()[0].name+"</label>"	
	+"<label for='desc' class='formlabel'>" + lbl_Description + "</label><label name='desc' class='forminput'>"+subsCode+"</label>"
	+"</form>"
	+"<br>"
	+"<table id='prices'style='clear: both;'><tr><th style='width:200px;'>" + lbl_Service + "</th><th>"+lbl_Criteria+"</th><th>" + lbl_Price + "</th><th class='hidden'>ServiceId</th><th class='hidden'>customField</th><th class='hidden'>criteria</th><th>"+lbl_Quantity+"</th><th>"+lbl_Total+"</th></tr>";
	
	var count = 0;

	var actionName = "ocl_getPricesGlobal";	
	var params = {name:"ServicesList", value: servicesList};
	var resultFromWS = InvokeGlobalAction(actionName, "OKMessage", "ErrorMessage", params);
	var resultsArray = resultFromWS.split("||");
	for (var r = 0, len = resultsArray.length; r < len; r++) 
	{
		if (resultsArray[r]) 
		{
			
			var x = getServicePriceFromXMLString(resultsArray[r]);
			if (x)
				details+=x;
			else
				count++;
		}
	}
	details+= "</form>";
	 // if (count>0)
	 document.getElementById("main").innerHTML = details;
	 // else
	  //	document.getElementById("main").innerHTML = "No Prices for the chosen services match the Parameters on the account.<br>Please make sure all the relevant information is filled in in the Account form.";

	}
	function getFilterValuesFromAccount(accountId)
	{
		var fetch ="<fetch mapping='logical'>" +
		"<entity name='account'>" +
		"<all-attributes />" +
		"<filter>" +
		"<condition attribute='accountid' operator='eq' value='" + accountId + "' />" +
		"</filter>" +
		"</entity>" +
		"</fetch>";

		var retrieve = XrmServiceToolkit.Soap.Fetch(fetch);

		if(retrieve.length > 0)
		{
			return retrieve;	
		}
		else 
			return null;
	}

	function offerSelected()
	{
		var val = getRadioChecked(document.getElementById("offers"), "offer");
		offer =val.id;
		offerName = val.value;

	}

	function servicesSelected()
	{
		debugger;
		var val = getCheckboxChecked(document.getElementById("services"), "service");
		return val;


	}
	function getCheckboxChecked(form, name)
	{
		var val="";
    // get list of radio buttons with specified name
    var box = form.elements[name];
    
    // loop through list of radio buttons
    if (!box.length && box) {
    	if (box.checked) {
    		val = box.id;
    	}
    }
    else{
    	for (var i=0, len=box.length; i<len; i++) {
        if ( box[i].checked ) { // radio checked?
            val += box[i].id + "||"; // if so, hold its value in val           
        }
    }
}
    return val; // return value of checked radio or undefined if none checked
}

function getRadioChecked(form, name) {
	var val;
    // get list of radio buttons with specified name
    var radios = form.elements[name];
    
    // loop through list of radio buttons
    for (var i=0, len=radios.length; i<len; i++) {
        if ( radios[i].checked ) { // radio checked?
            val = radios[i]; // if so, hold its value in val
            break; // and break out of for loop
        }
    }
    return val; // return value of checked radio or undefined if none checked
}

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
        	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 (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
		{
			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);
    }
}

</script>

</head>
<body onload="loadPage()" style="font-family: Segoe\000020UI; font-size: 12px;">
	<div id="main" style="height:200px; overflow: auto;">

	</div> 
	<div id="buttonsBot" style="display: block;clear:left;">
		<input type="button" id="back" value="" onclick="prevStep()"/>
		<input type="submit" id="next" value="" onclick="nextStep()" style="display: inline-block"/>
		<input type="button" id="done" value="" onclick="finishCreationProcess()" style="display: none"/>
		<div id="errorDiv" style="display: inline-block; color: red;"></div>
	</div>
	
</body>

</html>