Error executing template "Designs/dechra-dvp/eCom/Productlist/dvp-product-list.cshtml"
System.Net.WebException: The operation has timed out
at System.Net.HttpWebRequest.GetResponse()
at CompiledRazorTemplates.Dynamic.RazorEngine_459281f457b94777a8d481b4df10fa98.DietApi(String method, String productNumber, String cultureInfoName) in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4359
at CompiledRazorTemplates.Dynamic.RazorEngine_459281f457b94777a8d481b4df10fa98.Execute() in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4452
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module
2 @using System.Collections.Generic
3 @using Co3.Espresso.Base.Extensions;
4 @using Co3.Dechra.DVP.Website.UiServices;
5 @using System.Linq;
6 @using System.Web;
7 @using System.Net;
8 @using System.Text.RegularExpressions;
9 @using Co3.Espresso.Website.Services;
10 @using Dynamicweb.Ecommerce;
11 @using System.Collections.Generic;
12 @using Dynamicweb.Frontend;
13 @using Dynamicweb.Content;
14 @using Dynamicweb.Frontend.Devices
15
16 @using System.Web;
17 @using Dynamicweb.Frontend;
18 @using Dynamicweb.Content;
19
20 @helper signIn()
21 {
22 PageView currentPageView = PageView.Current();
23 Area area = currentPageView.Area;
24
25 string redirectToFrontpage = string.Empty;
26
27 if(HttpContext.Current.Request.QueryString["RecoveryToken"] != null)
28 {
29 redirectToFrontpage = "/";
30 }
31
32 string signUpPage = area.Item["SignUpPage"].ToString();
33
34 string azureAuthenticationSignUpSignInPolicyId = area.Item["SignUpSignInPolicyId"].ToString();
35
36
37 string forgotPasswordPage = area.Item["ForgotPasswordPage"].ToString();
38
39 <div class="col-12 col-xl-6 mt-3 d-flex">
40 <div class="w-100 px-2 py-2 px-lg-5 py-lg-3 bg-light">
41 <h3 class="pb-1"><i class="material-icons">lock</i> @Translate("Sign in to your Dechra account", "Sign in to your Dechra account")</h3>
42
43 @if(!string.IsNullOrEmpty(azureAuthenticationSignUpSignInPolicyId))
44 {
45 <p>
46 <a class="btn btn-primary" href="/Admin/Public/Social/ExternalLogin.aspx?action=login&providerID=1">@Translate("Sign in", "Sign in")</a>
47 </p>
48 }
49 else
50 {
51 <form method="post" action="@redirectToFrontpage" name="ExtUserForm">
52 <div class="row">
53 <div class="col-12 form-fields">
54 <input maxlength="250" class="form-control required" placeholder='@Translate("Username", "Username")' name="Username" type="text" value="" />
55 </div>
56 <div class="col-12 form-fields">
57 <input maxlength="250" class="form-control required" placeholder='@Translate("Password", "Password")' type="password" name="Password" value="" />
58 </div>
59 </div>
60 <div class="row pt-2">
61 <div class="col-12 pb-1 d-flex flex-wrap align-items-center justify-content-between">
62 <a class="small" href="/Default.aspx?ID=@forgotPasswordPage&LoginAction=Recovery">@Translate("Forgot your password?", "Forgot your password?")</a> <button class="btn btn-primary" type="submit">@Translate("Sign in", "Sign in")</button>
63 </div>
64 </div>
65 </form>
66 }
67 </div>
68 </div>
69
70 <div class="col-12 col-xl-6 mt-3 d-flex">
71 <div class="w-100 px-2 py-2 px-lg-5 py-lg-3 bg-light">
72 <h3><i class="material-icons">account_box</i> @Translate("Don't have an account yet?", "Don't have an account yet?")</h3>
73 <div class="row">
74 <div class="col-12 small">
75 <p class="mb-1">@Translate("Sign up now to access:", "Sign up now to access:")</p>
76 <ul>
77 <li>@Translate("Complete product and disease information", "Complete product and disease information")</li>
78 <li>@Translate("Free support materials, videos and webcasts", "Free support materials, videos and webcasts")</li>
79 <li>@Translate("Dechra Academy: Our FREE eLearning platform", "Dechra Academy: Our FREE eLearning platform")</li>
80 </ul>
81 </div>
82 </div>
83 <div class="row">
84 <div class="col-12 text-right">
85 <a class="btn btn-cta" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up", "Sign up")</a>
86 </div>
87 </div>
88 </div>
89 </div>
90 }
91
92 @{
93 PageView currentPageView = PageView.Current();
94 Area currentArea = currentPageView.Area;
95 int groupCount = GetLoop("Subgroups").Count();
96 int productCount = GetLoop("Products").Count();
97 string groupColSize = string.Empty;
98 string pageId = GetGlobalValue("Global:Page.ID");
99 string productPageId = currentArea.Item["ProductPage"].ToString();
100 bool shopIsActive = Espresso.Page.Area.Item.GetValue<bool>("Shop");
101 bool isMobile = (PageView.Current().Device == DeviceType.Mobile);
102
103 bool hasAccess = ExtranetUiService.HasAccess();
104 bool restrictProductList = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductList");
105 bool restrictProductDetails = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductDetails");
106 bool restrictProductFiles = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductFiles");
107
108 string restrictProductFileTypesValue = Espresso.Page.Area.Item.GetValue< string >( "RestrictProductFileTypes" );
109 List<string> restrictProductFileTypes = !string.IsNullOrEmpty(restrictProductFileTypesValue) ? restrictProductFileTypesValue.Split( ',' ).ToList() : new List< string >();
110
111 bool showProductFileTypeDatasheet = true;
112 bool showProductFileTypePackInsert = true;
113 bool showProductFileTypeSPC = true;
114 bool showProductFileTypeMSDS = true;
115
116 bool restrictProductFileTypeDatasheet = restrictProductFileTypes.Contains( "Datasheet" );
117 bool restrictProductFileTypePackInsert = restrictProductFileTypes.Contains( "Pack Insert" );
118 bool restrictProductFileTypeSPC = restrictProductFileTypes.Contains( "SPC" );
119 bool restrictProductFileTypeMSDS = restrictProductFileTypes.Contains( "MSDS" );
120
121 if(restrictProductFileTypeDatasheet)
122 {
123 if(!hasAccess)
124 {
125 showProductFileTypeDatasheet = false;
126 }
127 }
128 if(restrictProductFileTypePackInsert)
129 {
130 if(!hasAccess)
131 {
132 showProductFileTypePackInsert = false;
133 }
134 }
135 if(restrictProductFileTypeSPC)
136 {
137 if(!hasAccess)
138 {
139 showProductFileTypeSPC = false;
140 }
141 }
142 if(restrictProductFileTypeMSDS)
143 {
144 if(!hasAccess)
145 {
146 showProductFileTypeMSDS = false;
147 }
148 }
149
150
151 bool restrictSupportMaterials = Espresso.Page.Area.Item.GetValue<bool>("RestrictSupportMaterials");
152
153 bool rangeListLevel = true;
154 bool sortedDESC = false;
155 bool showFilters = true;
156 List<LoopItem> rangeSortOrder = GetLoop("Ranges");
157
158
159 if( Espresso.Item.FiltersShow != null && Espresso.Item.FiltersShow == "False" ) {
160 showFilters = false;
161 }
162
163 string sortOrder = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["SortOrder"]) ? Espresso.Item.ModuleOverride_SortOrder : System.Web.HttpContext.Current.Request["SortOrder"];
164
165 if(Espresso.Item.ModuleOverride_SortOrder != null && sortOrder == "DESC")
166 {
167 sortedDESC = true;
168 rangeSortOrder = GetLoop("Ranges").OrderByDescending(ro => ro.GetString("Range")).ToList();
169 }
170
171 groupColSize = groupCount < 4 ? "4" : "3";
172
173 }
174
175 @{
176 if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]) && GetLoop("Subgroups").Count() == 0)
177 {
178 rangeListLevel = false;
179 }
180
181 if(rangeListLevel)
182 {
183 if(!string.IsNullOrEmpty(GetString("Ecom:Group.Name")))
184 {
185 <div class="row mb-1 mb-md-2">
186 <div class="col-12">
187 <h1 class="d-block d-md-inline mb-0">@GetString("Ecom:Group.Name")</h1>
188 @if(GetInteger("Ecom:Group.ProductCount") > 0)
189 {
190 string productGroupListCountTranslation = GetInteger("Ecom:Group.ProductCount") == 1 ? productGroupListCountTranslation = Translate("product","product") : Translate("products","products");
191
192 <small class="d-block d-md-inline my-0 font-weight-normal h3"> (@GetInteger("Ecom:Group.ProductCount") @productGroupListCountTranslation)</small>
193 }
194 @if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.Teaser")))
195 {
196 <p class="lead mb-0 mt-2">@GetString("Ecom:Group:Field.Teaser")</p>
197 }
198 </div>
199 </div>
200 }
201 else
202 {
203 if( Espresso.Item.HeadingShow != null && Espresso.Item.HeadingShow == "True" ){
204 <div class="row">
205 <div class="col-12">
206 <h1>@Espresso.Item.Name</h1>
207 </div>
208 </div>
209 }
210 }
211 if(groupCount > 0 && productCount < 1)
212 {
213 <div class="row">
214 @foreach(LoopItem subgroup in @GetLoop("Subgroups"))
215 {
216 string groupId = subgroup.GetString("Ecom:Group.ID");
217 string groupName = subgroup.GetString("Ecom:Group.Name");
218 string groupImage = subgroup.GetString("Ecom:Group.LargeImage");
219 string groupDescription = subgroup.GetString("Ecom:Group.Description");
220 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}";
221
222 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small">
223 <div class="card">
224 <a href="@groupUrl" title="@groupName">
225 <p class="card-header font-weight-bold text-center">@groupName</p>
226 @if(!string.IsNullOrEmpty(groupImage))
227 {
228 <div class="p-img-container">
229 <div class="row">
230 <div class="col-12">
231 <img src="/admin/public/getimage.ashx?Crop=0&Image=@groupImage&Format=jpg&Width=600&Quality=75" class="p-img" alt="@groupName">
232 </div>
233 </div>
234 </div>
235 }
236 @if(!string.IsNullOrEmpty(groupDescription))
237 {
238 <div class="p-txt-container">
239 <div class="card-body">
240 <p class="small">@groupDescription</p>
241 </div>
242 </div>
243 }
244 </a>
245 </div>
246 </div>
247 }
248 </div>
249 }
250 else
251 {
252 if(string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]) && pageId == productPageId)
253 {
254
255 Dynamicweb.Ecommerce.Products.GroupCollection groups = Dynamicweb.Ecommerce.Products.Group.GetToplevelGroups(currentArea.EcomLanguageId);
256
257 <div class="row mb-2">
258 <div class="col-12">
259 <h1 class="d-inline">@GetGlobalValue("Global:Page.Name")</h1>
260 </div>
261 </div>
262 <div class="row">
263 @foreach( Dynamicweb.Ecommerce.Products.Group group in groups.Where(gr=> gr.ShopId.Equals(currentArea.EcomShopId) && gr.NavigationShowInMenu.Equals(true) && gr.NavigationClickable.Equals(true)))
264 {
265 if ( currentArea.ID == 67 || currentArea.ID == 75 || currentArea.ID == 77 || currentArea.ID == 78 || currentArea.ID == 79 || currentArea.ID == 64 || currentArea.ID == 65 || currentArea.ID == 84 )
266 {
267 string groupName = group.Name;
268 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={group.Id}";
269 string groupImage = group.LargeImage;
270 string groupDescription = group.Description;
271
272 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small">
273 <div class="card">
274 <a href="@groupUrl" title="@groupName">
275 <p class="card-header font-weight-bold text-center">@groupName</p>
276 @if(!string.IsNullOrEmpty(groupImage))
277 {
278 <div class="p-img-container">
279 <div class="row">
280 <div class="col-12">
281 <img src="/admin/public/getimage.ashx?Crop=0&Image=@groupImage&Format=jpg&Width=600&Quality=75" class="p-img" alt="@groupName">
282 </div>
283 </div>
284 </div>
285 }
286 @if(!string.IsNullOrEmpty(groupDescription))
287 {
288 <div class="p-txt-container">
289 <div class="card-body">
290 <p class="small">@groupDescription</p>
291 </div>
292 </div>
293 }
294 </a>
295 </div>
296 </div>
297 }
298 else
299 {
300 Dynamicweb.Ecommerce.Products.GroupCollection subgroups = group.Subgroups;
301
302 foreach(Dynamicweb.Ecommerce.Products.Group subgroup in subgroups.Where(sgr=> sgr.NavigationClickable.Equals(true) && sgr.NavigationShowInMenu.Equals(true)))
303 {
304 string groupName = subgroup.Name;
305 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={subgroup.Id}";
306 string groupImage = subgroup.LargeImage;
307 string groupDescription = subgroup.Description;
308
309 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small">
310 <div class="card">
311 <a href="@groupUrl" title="@groupName">
312 <p class="card-header font-weight-bold text-center">@groupName</p>
313 @if(!string.IsNullOrEmpty(groupImage))
314 {
315 <div class="p-img-container">
316 <div class="row">
317 <div class="col-12">
318 <img src="/admin/public/getimage.ashx?Crop=0&Image=@groupImage&Format=jpg&Width=600&Quality=75" class="p-img" alt="@groupName">
319 </div>
320 </div>
321 </div>
322 }
323 @if(!string.IsNullOrEmpty(groupDescription))
324 {
325 <div class="p-txt-container">
326 <div class="card-body">
327 <p class="small">@groupDescription</p>
328 </div>
329 </div>
330 }
331 </a>
332 </div>
333 </div>
334 }
335 }
336 }
337 </div>
338 }
339 else
340 {
341 if(rangeSortOrder.Count() > 0)
342 {
343 if(!restrictProductList || hasAccess)
344 {
345 <div class="row">
346 <div class="col-12">
347 <div class="row align-items-end">
348 @if(showFilters)
349 {
350 <div class="col-12 col-sm-3">
351 <h3 class="mb-0">@Translate("Narrow your results","Narrow your results")</h3>
352 <hr class="mt-1 mb-1 mb-md-2">
353 </div>
354 }
355 <div class="col-12 @(showFilters?"col-sm-9 text-md-right":"d-flex justify-content-between")">
356 @if(!showFilters && productCount>0)
357 {
358 string productListCountTranslation = productCount==1 ? Translate("product","product") : Translate("products","products");
359
360 <small class="font-weight-normal h3"> (@productCount @productListCountTranslation)</small>
361 }
362 @if( Espresso.Item.SortShow == null || Espresso.Item.SortShow == "True"){
363 <form class="hidden-mobile">
364 <label class="mr-sm-2 d-block d-md-inline font-weight-bold" for="sortProducts">@Translate("Sort by","Sort by"):</label>
365 <select class="custom-select d-block d-md-inline mb-2 mb-sm-0 sortProducts" id="sortProducts">
366 <option value="ASC" @(sortedDESC?"":"selected")>@Translate("Name: A-Z","Name: A-Z")</option>
367 <option value="DESC" @(sortedDESC?"selected":"")>@Translate("Name: Z-A","Name: Z-A")</option>
368 </select>
369 </form>
370 }
371 @if(showFilters)
372 {
373 <hr class="my-1 mb-2 hidden-mobile">
374 }
375 </div>
376 </div>
377 </div>
378
379 @if(showFilters)
380 {
381 <div class="col-12 col-sm-3">
382 <div class="js-e-productlist">
383 @using Dynamicweb.Ecommerce.Products;
384 @using Dynamicweb.Ecommerce.Products.Categories;
385 @functions {
386 public FieldOption GetTranslatedProductCategoryFieldOption(string value, string categoryId, string fieldId)
387 {
388 FieldOption translatedFieldOption = null;
389
390 var collection = Dynamicweb.Ecommerce.Products.Categories.Category.GetCategories(Dynamicweb.Ecommerce.Common.Context.LanguageID);
391 Category category = collection.FirstOrDefault(c => c.Id.Equals(categoryId));
392
393 if (category.Fields != null)
394 {
395 Field field = category.Fields.FirstOrDefault(f => f.Id.Equals(fieldId));
396 if (field != null && field.FieldOptions != null)
397 {
398 translatedFieldOption = field.FieldOptions.FirstOrDefault(fo => fo.Value.Equals(value));
399 }
400 }
401
402 return translatedFieldOption;
403 }
404 }
405 @if (GetLoop("FacetGroups").Count > 0)
406 {
407 Dictionary<string,Dictionary<string,string>> selectedOptions = new Dictionary<string,Dictionary<string,string>>();
408
409 <div id="js-e-productlist-filters">
410 <form class="js-e-productlist-form" novalidate="novalidate">
411 <input type="hidden" name="SortOrder" value="@(sortedDESC ? "DESC" : "ASC")">
412 <input type="hidden" class="js-e-visible-options-count" value="@Espresso.Item.FiltersVisibleOptionCount">
413 <div class="row">
414 @foreach (LoopItem facetGroup in GetLoop("FacetGroups"))
415 {
416 foreach (LoopItem facet in facetGroup.GetLoop("Facets"))
417 {
418 string facetGroupFacetName = facet.GetString("Facet.Name");
419 string facetGroupFacetNameTranslated = Translate( $"Filter_Facet_Label_{facetGroupFacetName}", facetGroupFacetName );
420
421 string facetGroupFacetField = facet.GetString("Facet.Field");
422
423 string facetQueryParameter = facet.GetString("Facet.QueryParameter");
424
425 string facetGroupFacetType = facet.GetString("Facet.RenderType");
426
427 int espressoItemfiltersVisibleOptionCount;
428 int facetOptionsCount = facet.GetInteger("Facet.OptionResultTotalCount");
429 int facetNotEmptyOptionsCount = facet.GetLoop("FacetOptions").Where(o => !o.GetInteger("FacetOption.Count").Equals(0)).Count();
430
431 bool hasEspressoItemfiltersVisibleOptionCount = Int32.TryParse( Espresso.Item.FiltersVisibleOptionCount, out espressoItemfiltersVisibleOptionCount );
432
433 string[] productCategoryIds = facetGroupFacetField.Split('|');
434
435 var facetOptions = facet.GetLoop("FacetOptions");
436
437 if (facetOptionsCount > 0)
438 {
439 <div class="js-e-productlist-filters-group col-12">
440 <p class="e-productlist-filters-group-header font-weight-bold mb-0">
441 <span class="e-productlist-filters-group-name">@facetGroupFacetNameTranslated</span>
442 </p>
443 <fieldset class="e-productlist-filters-group-options js-e-productlist-filters-group-options small mt-half">
444 <div class="@(isMobile && hasEspressoItemfiltersVisibleOptionCount && facetNotEmptyOptionsCount > espressoItemfiltersVisibleOptionCount ? "js-e-productlist-filters-options-collapse-peek e-productlist-filters-options-collapse-peek is-peeking" : "")">
445 @if(facetGroupFacetType == "Checkboxes"){
446 <div class="e-productlist-filters-option js-e-productlist-filters-option">
447 <label for="reset-filter-@facetGroupFacetName" class="custom-control custom-checkbox mb-1">
448 <input class="js-e-productlist-filters-option-reset-group custom-control-input" name="@facetQueryParameter" id="reset-filter-@facetGroupFacetName" type="checkbox" value="">
449 <span class="custom-control-indicator"></span>
450 <span class="custom-control-description">@Translate("All","All")</span>
451 </label>
452 </div>
453 foreach (LoopItem facetOption in facetOptions)
454 {
455
456 string value = facetOption.GetString("FacetOption.Value");
457 bool selected = facetOption.GetBoolean("FacetOption.Selected");
458
459 Dictionary<string,string> selectedOption = new Dictionary<string,string>();
460 selectedOption.Add(value, facetQueryParameter);
461
462 if(facetNotEmptyOptionsCount < 2)
463 {
464 selected = true;
465 }
466
467 string label = facetOption.GetString("FacetOption.Label");
468 int count = facetOption.GetInteger("FacetOption.Count");
469 string cssClass = "";
470 string disabled = string.Empty;
471
472 FieldOption optionLabel = null;
473
474 if(!string.IsNullOrEmpty(productCategoryIds[1]) && !string.IsNullOrEmpty(productCategoryIds[2]))
475 {
476 optionLabel = GetTranslatedProductCategoryFieldOption(value.ToString(), productCategoryIds[1], productCategoryIds[2]);
477 if(optionLabel != null)
478 {
479 label = optionLabel.Name;
480 }
481 }
482
483 if(selected && count > 0)
484 {
485 selectedOptions.Add($"{facetGroupFacetNameTranslated} / {label}", selectedOption);
486 }
487
488 if (count > 0)
489 {
490 <div class="e-productlist-filters-option js-e-productlist-filters-option @(selected ? "is-selected" : "")">
491 <label for="facet_@(facetGroupFacetName)_@value" class="custom-control custom-checkbox @cssClass" title="@label">
492 <input id="facet_@(facetGroupFacetName)_@value" name="@facetQueryParameter" class="js-e-productlist-filter custom-control-input" type="checkbox" value="@value" checked="@selected" @disabled>
493 <span class="custom-control-indicator"></span>
494 <span class="custom-control-description text-truncate">@label</span>
495 <span class="e-productlist-filters-option-count small text-muted"> (@count)</span>
496 </label>
497 </div>
498 }
499 }
500 }
501 @if ( isMobile && hasEspressoItemfiltersVisibleOptionCount && facetNotEmptyOptionsCount > espressoItemfiltersVisibleOptionCount )
502 {
503 <a href="javascript:void(0);" class="js-e-productlist-filters-options-collapse-peek-toggle e-productlist-filters-options-collapse-peek-toggle small" data-closed-text="@Translate( "eCom Productlist Filter - Options Show More - Link", "Show more" )" data-open-text="@Translate( "eCom Productlist Filter - Options Show Less - Link", "Show less" )"><i class="material-icons">keyboard_arrow_down</i></a>
504 }
505 </div>
506 </fieldset>
507 <hr class="my-1">
508 </div>
509 }
510 }
511 }
512 @if(selectedOptions.Count() > 0)
513 {
514 <div class="e-productlist-filters-group border-0 col-12 order-first">
515 <p class="e-productlist-filters-group-header small mb-1">
516 <a href="javascript:void(0);" class="reset-filter d-block text-left pl-0 js-e-productlist-filters-clear-all">
517 <i class="material-icons material-icons-fixed text-danger text-left mr-1">clear</i>@Translate("eCom Productlist Filters - Reset Filters - Button", "Reset all")
518 </a>
519 </p>
520 <div class="small">
521 <ul class="e-productlist-filters-group-options-selected list-unstyled mb-1">
522 @foreach(KeyValuePair<string, Dictionary<string,string>> selectedOption in selectedOptions)
523 {
524 string value = selectedOption.Value.Keys.FirstOrDefault();
525 string systemName = selectedOption.Value.Values.FirstOrDefault();
526
527 <li class="e-productlist-filters-option-selected is-selected-active pl-0">
528 <a class="js-e-productlist-filters-remove d-block text-truncate" href="javascript:void(0);" data-system-name="@systemName" data-value="@value"><i class="material-icons material-icons-fixed text-danger text-left mr-1">clear</i>@selectedOption.Key</a>
529 </li>
530 }
531 </ul>
532 </div>
533 <hr class="my-1">
534 </div>
535 }
536 </div>
537 </form>
538 </div>
539 }
540
541 </div>
542 @if ( Espresso.Item.SortShow == null || Espresso.Item.SortShow == "True" )
543 {
544 <form class="hidden-desktop mb-2">
545 <select class="custom-select d-inline form-control sortProducts">
546 <option value="ASC" @(sortedDESC ? "" : "selected")>@Translate( "Name: A-Z", "Name: A-Z" )</option>
547 <option value="DESC" @(sortedDESC ? "selected" : "")>@Translate( "Name: Z-A", "Name: Z-A" )</option>
548 </select>
549 </form>
550 }
551 </div>
552 }
553
554 <div class="col-12 @(showFilters?"col-sm-9":"") dvp-ranges-list">
555 @if(!showFilters)
556 {
557 <hr class="mt-1">
558 }
559 <div class="row">
560 @foreach(LoopItem range in rangeSortOrder)
561 {
562 string rangeGroupId = "";
563
564 int productInt = 0;
565 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
566 string rangeName = range.GetString("Range");
567 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
568 string rangeNameCleaned = Regex.Replace(rangeName, @"[^A-Za-z0-9_\~]+", "-");
569
570 <div class="col-12 col-lg-6 mb-3">
571 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames") ? "dvp-range-header" : "")">
572 <h3>@rangeNameSuperscripted@(productsInRangeCount > 1 ? $" <small class='font-weight-normal'>({productsInRangeCount} {Translate("products","products")})</small>" : "")</h3>
573 </div>
574 <div class="col-12 px-1 pt-1 border dvp-range">
575 <div>
576 <div class="row">
577 @foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
578 {
579 Dynamicweb.Ecommerce.Products.Product p = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID"));
580
581 if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]))
582 {
583 Dynamicweb.Ecommerce.Products.GroupCollection gc = p.Groups;
584
585 foreach(Dynamicweb.Ecommerce.Products.Group g in gc.Where(g=>g.Subgroups.Count() == 0))
586 {
587 if(!g.ParentGroups.ContainsById(System.Web.HttpContext.Current.Request["GroupID"]))
588 {
589 foreach(Dynamicweb.Ecommerce.Products.Group sg in g.ParentGroups)
590 {
591 if(sg.ParentGroups.ContainsById(System.Web.HttpContext.Current.Request["GroupID"]))
592 {
593 rangeGroupId = g.Id;
594 }
595 }
596 }
597 else
598 {
599 rangeGroupId = g.Id;
600 }
601 }
602 }
603 else
604 {
605 rangeGroupId = p.PrimaryGroupId;
606 }
607
608 if(!product.GetBoolean("Ecom:Product:Field.AwaitingApproval"))
609 {
610 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
611 }
612
613 if(productInt == 2)
614 {
615 @:</div>
616 @:</div>
617 @:<div class="collapse" id="range-@rangeNameCleaned">
618 @:<div class="row">
619 }
620
621 string url = string.Empty;
622
623 string urlFriendlyProduct = string.Empty;
624
625 string productName = product.GetString("Ecom:Product.Name");
626
627 bool hideProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
628
629 string productDisplayName = productName;
630 string productTitleName = productName;
631
632 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
633 {
634 if(hideProductName)
635 {
636 productDisplayName = rangeNameSuperscripted;
637 productTitleName = rangeName;
638 }
639 else
640 {
641 productDisplayName = $"{rangeNameSuperscripted} {productName}";
642 productTitleName = $"{rangeName} {productName}";
643 }
644 }
645
646 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
647 {
648 url = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
649 }
650 else
651 {
652 url = productName;
653 }
654
655 if(productsInRangeCount > 1)
656 {
657 urlFriendlyProduct = $"#{Regex.Replace(url, @"[^A-Za-z0-9_\~]+", "-")}";
658 }
659
660 string productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
661 string productUrl = "javascript:void(0);";
662
663 if(!string.IsNullOrEmpty(rangeGroupId))
664 {
665 productUrl = $"/Default.aspx?ID={pageId}&GroupID={rangeGroupId}{urlFriendlyProduct}";
666 }
667
668 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
669 <a href="@productUrl" title="@productTitleName">
670 <div class="row">
671 <div class="col-12 dvp-image-container">
672 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productTitleName">
673 </div>
674 <div class="col-12">
675 <p class="m-0 small dvp-range-product-name">@productDisplayName</p>
676 </div>
677 </div>
678 </a>
679 </div>
680
681 productInt++;
682 }
683 </div>
684 </div>
685 <div class="row mt-1 dvp-view-more-products">
686 @if(productsInRangeCount > 2)
687 {
688 int amountOfProductsLeft = productsInRangeCount - 2;
689
690 string amountOfProductsLeftTranslation = productsInRangeCount == 3 ? Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product") : Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
691
692 string amountOfProductsLeftTranslationReplaced = amountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", amountOfProductsLeft.ToString());
693
694 <div class="col-12">
695 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
696 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@rangeNameCleaned" aria-expanded="false" aria-controls="range-@rangeNameCleaned" href="javascript:void(0);">
697 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @amountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
698 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span>
699 </a>
700 </p>
701 </div>
702 }
703 </div>
704 </div>
705
706 </div>
707 }
708 </div>
709 </div>
710 </div>
711
712 }
713 else
714 {
715 <div class="row">
716 @signIn()
717 </div>
718 }
719 }
720 }
721 }
722 }
723 else
724 {
725 if(!restrictProductDetails || hasAccess)
726 {
727 foreach(LoopItem range in rangeSortOrder)
728 {
729 LoopItem productType = range.GetLoop("ProductsInRange").FirstOrDefault();
730
731 if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "pharma")
732 {
733 string rangeName = range.GetString("Range");
734 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
735 string rangeId = string.Empty;
736 string therapyAreaId = string.Empty;
737 string therapyAreaName = string.Empty;
738 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
739 string optionalName = string.Empty;
740 string displayName = string.Empty;
741 string displayNameSuperscripted = string.Empty;
742 string groupId = string.Empty;
743 string productName = string.Empty;
744 string productNameJSON = string.Empty;
745 string productDisplayName = string.Empty;
746 string productDisplayNameSuperscripted = string.Empty;
747 string urlFriendlyProductName = string.Empty;
748 string productShortDescription = string.Empty;
749 string productShortDescriptionJSON = string.Empty;
750 string productActives = string.Empty;
751 string productActivesJSON = string.Empty;
752 string productStorageCondition = string.Empty;
753 string productStorageConditionJSON = string.Empty;
754 string productPackSize = string.Empty;
755 string productWithdrawalPeriod = string.Empty;
756 string lyticsTopics = string.Empty;
757 string productDatasheet = string.Empty;
758 string productPackInsert = string.Empty;
759 string productSPC = string.Empty;
760 string productMSDS = string.Empty;
761 bool hasDocuments = true;
762 string productDisclaimer = string.Empty;
763 string productDisclaimerJSON = string.Empty;
764 string productShopInformation = string.Empty;
765 string productShopInformationJSON = string.Empty;
766 string productImage = string.Empty;
767 string productRewardButtonLink = string.Empty;
768 string productRewardButtonLinkProcessed = string.Empty;
769 string productRewardButtonText = string.Empty;
770 bool showRewardButton = false;
771 string productRewardAdditionalLink = string.Empty;
772 string productRewardAdditionalLinkProcessed = string.Empty;
773 bool showRewardAdditionalLink = false;
774 bool productShowFooterContent = false;
775 string productFooterContent = string.Empty;
776 string productFooterContentJSON = string.Empty;
777 List<string> images = new List<string>();
778 string productUrl = string.Empty;
779 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
780 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames");
781 string signInPage = Espresso.Page.Area.Item.GetValue<string>("SignUpPage");
782
783 <div class="row">
784 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight">
785 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template">
786 {{#if premiumPages.0.searchFriendlyImageBanner}}
787 <div class="js-dvp-product-premium-content-animate fade mb-2">
788 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link">
789 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" />
790 </a>
791 </div>
792 {{/if}}
793 </script>
794 </div>
795 </div>
796
797 if(productsInRangeCount > 1)
798 {
799 <div class="row e-product">
800 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
801 <h1 class="mb-1 font-weight-bold">
802 @rangeNameSuperscripted
803 </h1>
804 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
805 {
806
807 groupId = product.GetString("Ecom:Group.ID");
808
809 productName = product.GetString("Ecom:Product.Name");
810 productNameJSON = productName.Replace("\"",""");
811 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
812
813 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
814 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
815
816 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
817 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON;
818
819 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
820
821 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
822 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
823
824 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
825
826 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
827
828 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
829
830 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
831 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"",""");
832
833 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
834 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"",""");
835
836 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
837 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
838
839 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
840 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
841 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
842 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
843 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
844
845 hasDocuments = true;
846
847 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
848 {
849 hasDocuments = false;
850 }
851
852
853 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value" );
854 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
855 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
856 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty( productRewardButtonText );
857
858 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
859 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
860 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
861
862 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
863 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
864
865 if ( !string.IsNullOrEmpty(productFooterContent) )
866 {
867 string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))";
868
869 Match regexMatch = Regex.Match(productFooterContent, hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1));
870
871 while (regexMatch.Success)
872 {
873 string href = regexMatch.Groups[ 1 ].ToString();
874 if ( href.ToLower().Contains("default.aspx?id=") )
875 {
876 productFooterContent = productFooterContent.Replace(href, SearchEngineFriendlyURLs.GetFriendlyUrl(href.Replace("/","")));
877 }
878 regexMatch = regexMatch.NextMatch();
879 }
880
881 productFooterContentJSON = WebUtility.HtmlDecode(Regex.Replace(productFooterContent, @"\t|\n|\r", " "));
882 }
883 else
884 {
885 productFooterContentJSON = "";
886 }
887
888 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
889 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"",""");
890
891 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value");
892 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>");
893
894 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}";
895
896 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
897
898 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
899
900 dynamic JSON = new {
901 Name = productDisplayName,
902 ShortDescription = productShortDescriptionJSON,
903 Image = productImage,
904 Images = images,
905 Actives = productActivesJSON,
906 StorageCondition = productStorageConditionJSON,
907 PackSize = productPackSize,
908 WithdrawalPeriod = productWithdrawalPeriod,
909 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "",
910 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "",
911 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "",
912 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "",
913 ShowDatasheet = showProductFileTypeDatasheet,
914 ShowPackInsert = showProductFileTypePackInsert,
915 ShowSPC = showProductFileTypeSPC,
916 ShowMSDS = showProductFileTypeMSDS,
917 HasDocuments = hasDocuments,
918 Disclaimer = productDisclaimerJSON,
919 ShopInformation = productShopInformationJSON,
920 ShowRewardButton = showRewardButton,
921 RewardButtonLink = showRewardButton ? productRewardButtonLinkProcessed : "",
922 RewardButtonText = showRewardButton ? productRewardButtonText : "",
923 RewardAdditionalLink = showRewardAdditionalLink ? productRewardAdditionalLinkProcessed : "",
924 FooterContent = productFooterContentJSON
925 };
926
927 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName">
928 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
929 <div class="row px-sm-1 my-2 my-sm-0">
930 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
931 <div class="row">
932 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
933 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
934 </div>
935 <div class="col-9 col-sm-8 px-sm-2 my-auto">
936 <p class="mb-0">
937 @if (applyRangeNameToProductNames)
938 {
939 <b>@productDisplayNameSuperscripted</b>
940 }
941 else
942 {
943 <b class="h3">@displayNameSuperscripted</b>
944 <br>
945 @productDisplayNameSuperscripted
946 }
947 </p>
948 </div>
949 <div class="col-2 d-none d-sm-block my-auto text-center">
950 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
951 </div>
952 </div>
953 <script type="application/json" class="@urlFriendlyProductName">
954 @JsonService.Instance.ToJson(JSON)
955 </script>
956 </div>
957 </div>
958 </a>
959 }
960 </div>
961 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details">
962 <div class="js-dvp-product-details-animate fade">
963 <div class="row">
964 <div class="col-12">
965 <div class="e-product-image-container dvp-product-details-image-container text-center">
966 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="dvp-product-details-image" alt="@productDisplayName">
967 </div>
968 </div>
969 </div>
970 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
971 {
972 <div class="row">
973 <div class="col-12">
974 @productShortDescriptionJSON
975 </div>
976 </div>
977 }
978 <div class="row">
979 <div class="col-12 mt-2 table-responsive">
980 <table class="table">
981 @if(!string.IsNullOrEmpty(productActives))
982 {
983 <tr>
984 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
985 <td>@productActives</td>
986 </tr>
987 }
988 @if(!string.IsNullOrEmpty(productPackSize))
989 {
990 <tr>
991 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
992 <td>@productPackSize</td>
993 </tr>
994 }
995 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
996 {
997 <tr>
998 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
999 <td>@productWithdrawalPeriod</td>
1000 </tr>
1001 }
1002 @if(!string.IsNullOrEmpty(productStorageCondition))
1003 {
1004 <tr>
1005 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
1006 <td>@productStorageCondition</td>
1007 </tr>
1008 }
1009 @if(hasDocuments)
1010 {
1011 <tr>
1012 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
1013 <td>
1014 @if(!string.IsNullOrEmpty(productDatasheet))
1015 {
1016 if ( showProductFileTypeDatasheet )
1017 {
1018 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet">
1019 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
1020 </a>
1021 }
1022 else
1023 {
1024 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1025 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
1026 </a>
1027 }
1028 }
1029 @if(!string.IsNullOrEmpty(productPackInsert))
1030 {
1031 if ( showProductFileTypePackInsert )
1032 {
1033 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert">
1034 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
1035 </a>
1036 }
1037 else
1038 {
1039 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1040 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
1041 </a>
1042 }
1043 }
1044 @if(!string.IsNullOrEmpty(productSPC))
1045 {
1046 if ( showProductFileTypeSPC )
1047 {
1048 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC">
1049 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
1050 </a>
1051 }
1052 else
1053 {
1054 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1055 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
1056 </a>
1057 }
1058 }
1059 @if(!string.IsNullOrEmpty(productMSDS))
1060 {
1061 if ( showProductFileTypeMSDS )
1062 {
1063 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS">
1064 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
1065 </a>
1066 }
1067 else
1068 {
1069 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1070 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
1071 </a>
1072 }
1073 }
1074 </td>
1075 </tr>
1076 }
1077 </table>
1078 </div>
1079 </div>
1080 @if(!string.IsNullOrEmpty(productShopInformationJSON))
1081 {
1082 <div class="row">
1083 <div class="col-12">
1084 <div class="table-responsive">
1085 @productShopInformationJSON
1086 </div>
1087 </div>
1088 </div>
1089 }
1090 @if(!string.IsNullOrEmpty(productDisclaimer))
1091 {
1092 <div class="row">
1093 <div class="col-12">
1094 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
1095 <small>
1096 @productDisclaimer
1097 </small>
1098 </div>
1099 </div>
1100 }
1101 @if ( showRewardButton )
1102 {
1103 <div class="row">
1104 <div class="col-12">
1105 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
1106 </div>
1107 <div class="col-12">
1108 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName">
1109 @productRewardButtonText
1110 </a>
1111 @if ( !hideRequestmoreinformation )
1112 {
1113 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
1114 @Translate("Talk with a Dechra member","Talk with a Dechra member")
1115 </button>
1116 }
1117 @if ( showRewardAdditionalLink )
1118 {
1119 <p class="mb-1 mt-1 small">
1120 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
1121 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
1122 </a>
1123 </p>
1124 }
1125 </div>
1126 </div>
1127 }
1128 else
1129 {
1130 if ( !hideRequestmoreinformation )
1131 {
1132 <div class="row">
1133 <div class="col-12">
1134 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
1135 @Translate( "Request more information", "Request more information" )
1136 </button>
1137 </div>
1138 </div>
1139 }
1140 }
1141 </div>
1142 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
1143 <div class="js-dvp-product-details-animate fade">
1144 <div class="e-product-image-container multi-range">
1145 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
1146 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}">
1147 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
1148 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">
1149 </div>
1150 {{#each Images}}
1151 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
1152 <img src="/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}">
1153 </div>
1154 {{/each}}
1155 </div>
1156 {{#if Images}}
1157 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a>
1158 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a>
1159 <ol class="carousel-indicators">
1160 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
1161 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span>
1162 </li>
1163 {{#each Images}}
1164 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}">
1165 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span>
1166 </li>
1167 {{/each}}
1168 </ol>
1169 {{/if}}
1170 </div>
1171 </div>
1172 {{#if ShortDescription}}
1173 <div class="dvp-short-description">
1174 {{{ShortDescription}}}
1175 </div>
1176 {{/if}}
1177 <div class="row">
1178 <div class="col-12 mt-2 table-responsive">
1179 <table class="table">
1180 {{#if Actives}}
1181 <tr>
1182 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
1183 <td>{{{Actives}}}</td>
1184 </tr>
1185 {{/if}}
1186 {{#if PackSize}}
1187 <tr>
1188 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
1189 <td>{{PackSize}}</td>
1190 </tr>
1191 {{/if}}
1192 {{#if WithdrawalPeriod}}
1193 <tr>
1194 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
1195 <td>{{{WithdrawalPeriod}}}</td>
1196 </tr>
1197 {{/if}}
1198 {{#if StorageCondition}}
1199 <tr>
1200 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
1201 <td>{{{StorageCondition}}}</td>
1202 </tr>
1203 {{/if}}
1204 {{#if HasDocuments}}
1205 <tr>
1206 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
1207 <td>
1208 {{#if Datasheet}}
1209 {{#if ShowDatasheet}}
1210 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}">
1211 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i>
1212 </a>
1213 {{else}}
1214 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1215 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
1216 </a>
1217 {{/if}}
1218 {{/if}}
1219 {{#if PackInsert}}
1220 {{#if ShowPackInsert}}
1221 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{PackInsert}}" data-tracking-type="Pack Insert" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{PackInsert}}">
1222 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i>
1223 </a>
1224 {{else}}
1225 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1226 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
1227 </a>
1228 {{/if}}
1229 {{/if}}
1230 {{#if SPC}}
1231 {{#if ShowSPC}}
1232 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{SPC}}" data-tracking-type="SPC" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{SPC}}">
1233 @Translate("SPC","SPC") <i class="material-icons">get_app</i>
1234 </a>
1235 {{else}}
1236 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1237 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
1238 </a>
1239 {{/if}}
1240 {{/if}}
1241 {{#if MSDS}}
1242 {{#if ShowMSDS}}
1243 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{MSDS}}" data-tracking-type="MSDS" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{MSDS}}">
1244 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i>
1245 </a>
1246 {{else}}
1247 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1248 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
1249 </a>
1250 {{/if}}
1251 {{/if}}
1252 </td>
1253 </tr>
1254 {{/if}}
1255 </table>
1256 </div>
1257 </div>
1258 {{#if ShopInformation}}
1259 <div class="row mt-1">
1260 <div class="col-12">
1261 <div class="table-responsive">
1262 {{{ShopInformation}}}
1263 </div>
1264 </div>
1265 </div>
1266 {{/if}}
1267 {{#if Disclaimer}}
1268 <div class="row mt-1">
1269 <div class="col-12">
1270 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
1271 <small>
1272 {{{Disclaimer}}}
1273 </small>
1274 </div>
1275 </div>
1276 {{/if}}
1277 {{#if ShowRewardButton}}
1278 <div class="row">
1279 <div class="col-12">
1280 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
1281 </div>
1282 <div class="col-12">
1283 <a href="{{{RewardButtonLink}}}" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName">
1284 {{RewardButtonText}}
1285 </a>
1286 @if ( !hideRequestmoreinformation )
1287 {
1288 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
1289 @Translate("Talk with a Dechra member","Talk with a Dechra member")
1290 </button>
1291 }
1292 {{#if RewardAdditionalLink}}
1293 <p class="mb-1 mt-1 small">
1294 <a href="{{RewardAdditionalLink}}" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
1295 @Translate("Not a Dechra Rewards Member? Click here","Not a Dechra Rewards Member? Click here")
1296 </a>
1297 </p>
1298 {{/if}}
1299 </div>
1300 </div>
1301 {{else}}
1302 @if ( !hideRequestmoreinformation )
1303 {
1304 <div class="row">
1305 <div class="col-12">
1306 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
1307 @Translate( "Request more information", "Request more information" )
1308 </button>
1309 </div>
1310 </div>
1311 }
1312 {{/if}}
1313 </div>
1314 </script>
1315 </div>
1316 </div>
1317 }
1318 else
1319 {
1320 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
1321 {
1322
1323 groupId = product.GetString("Ecom:Group.ID");
1324
1325 productName = product.GetString("Ecom:Product.Name");
1326 productNameJSON = productName.Replace("\"",""");
1327
1328 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
1329
1330 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
1331
1332 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
1333 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
1334
1335 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
1336
1337 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
1338
1339 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
1340
1341 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
1342
1343 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
1344 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
1345 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");;
1346 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
1347
1348 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
1349
1350 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
1351 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
1352 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
1353 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
1354
1355 hasDocuments = true;
1356
1357 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
1358 {
1359 hasDocuments = false;
1360 }
1361
1362 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value");
1363 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
1364 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
1365 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText);
1366
1367 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
1368 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
1369 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
1370
1371 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
1372 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
1373
1374 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
1375
1376 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>");
1377
1378 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
1379
1380 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
1381
1382 }
1383 <div class="row e-product dvp-product-details">
1384 <div class="col-12">
1385 <div class="row">
1386 <div class="col-12">
1387 <h1 class="mb-1 font-weight-bold">
1388 @rangeNameSuperscripted
1389 </h1>
1390 </div>
1391 </div>
1392 </div>
1393 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
1394 <div class="row">
1395 <div class="col-12">
1396 <div class="e-product-image-container single-range">
1397 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
1398 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")">
1399 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
1400 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">
1401 </div>
1402
1403 @for(int i = 0; i < images.Count(); i++)
1404 {
1405 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
1406 <img src="/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)">
1407 </div>
1408 }
1409 </div>
1410 @if(images.Any())
1411 {
1412 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a>
1413 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a>
1414 <ol class="carousel-indicators">
1415 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
1416 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span>
1417 </li>
1418 @for(int i = 0; i < images.Count(); i++)
1419 {
1420 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)">
1421 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span>
1422 </li>
1423 }
1424 </ol>
1425 }
1426 </div>
1427 </div>
1428 </div>
1429 </div>
1430 </div>
1431 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3">
1432 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
1433 @if(!string.IsNullOrEmpty(optionalName))
1434 {
1435 <div class="row">
1436 <div class="col-12">
1437 <h2 class="mb-0">@displayNameSuperscripted</h2>
1438 </div>
1439 </div>
1440 }
1441 @if(!string.IsNullOrEmpty(productShortDescription))
1442 {
1443 <div class="row">
1444 <div class="col-12">
1445 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
1446 </div>
1447 </div>
1448 }
1449 <div class="row">
1450 <div class="col-12 mt-2 table-responsive">
1451 <table class="table">
1452 @if(!string.IsNullOrEmpty(productActives))
1453 {
1454 <tr>
1455 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
1456 <td>@productActives</td>
1457 </tr>
1458 }
1459 @if(!string.IsNullOrEmpty(productPackSize))
1460 {
1461 <tr>
1462 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
1463 <td>@productPackSize</td>
1464 </tr>
1465 }
1466 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
1467 {
1468 <tr>
1469 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
1470 <td>@productWithdrawalPeriod</td>
1471 </tr>
1472 }
1473 @if(!string.IsNullOrEmpty(productStorageCondition))
1474 {
1475 <tr>
1476 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
1477 <td>@productStorageCondition</td>
1478 </tr>
1479 }
1480 @if(hasDocuments)
1481 {
1482 <tr>
1483 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
1484 <td>
1485 @if(!string.IsNullOrEmpty(productDatasheet))
1486 {
1487 if ( showProductFileTypeDatasheet )
1488 {
1489 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet">
1490 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
1491 </a>
1492 }
1493 else
1494 {
1495 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1496 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
1497 </a>
1498 }
1499 }
1500 @if(!string.IsNullOrEmpty(productPackInsert))
1501 {
1502 if ( showProductFileTypePackInsert )
1503 {
1504 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert">
1505 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
1506 </a>
1507 }
1508 else
1509 {
1510 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1511 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
1512 </a>
1513 }
1514 }
1515 @if(!string.IsNullOrEmpty(productSPC))
1516 {
1517 if ( showProductFileTypeSPC )
1518 {
1519 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC">
1520 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
1521 </a>
1522 }
1523 else
1524 {
1525 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1526 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
1527 </a>
1528 }
1529 }
1530 @if(!string.IsNullOrEmpty(productMSDS))
1531 {
1532 if ( showProductFileTypeMSDS )
1533 {
1534 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS">
1535 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
1536 </a>
1537 }
1538 else
1539 {
1540 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
1541 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
1542 </a>
1543 }
1544 }
1545 </td>
1546 </tr>
1547 }
1548 </table>
1549 </div>
1550 </div>
1551 @if(!string.IsNullOrEmpty(productShopInformation))
1552 {
1553 <div class="row mt-1">
1554 <div class="col-12">
1555 <div class="table-responsive">
1556 @productShopInformation
1557 </div>
1558 </div>
1559 </div>
1560 }
1561 @if(!string.IsNullOrEmpty(productDisclaimer))
1562 {
1563 <div class="row mt-1">
1564 <div class="col-12">
1565 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
1566 <small>
1567 @productDisclaimer
1568 </small>
1569 </div>
1570 </div>
1571 }
1572 @if ( showRewardButton )
1573 {
1574 <div class="row">
1575 <div class="col-12">
1576 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
1577 </div>
1578 <div class="col-12">
1579 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName">
1580 @productRewardButtonText
1581 </a>
1582 @if ( !hideRequestmoreinformation )
1583 {
1584 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
1585 @Translate("Talk with a Dechra member","Talk with a Dechra member")
1586 </button>
1587 }
1588 @if ( showRewardAdditionalLink )
1589 {
1590 <p class="mb-1 mt-1 small">
1591 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
1592 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
1593 </a>
1594 </p>
1595 }
1596 </div>
1597 </div>
1598 }
1599 else
1600 {
1601 if ( !hideRequestmoreinformation )
1602 {
1603 <div class="row">
1604 <div class="col-12">
1605 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
1606 @Translate( "Request more information", "Request more information" )
1607 </button>
1608 </div>
1609 </div>
1610 }
1611 }
1612 </div>
1613 </div>
1614 }
1615
1616 int productPanelsItemId = 0;
1617
1618 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
1619 {
1620 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
1621
1622 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
1623 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
1624 {
1625 string productPanelNameValue = productPanel.GetValue<string>("Name");
1626
1627 if(productPanelNameValue == "Premium Content")
1628 {
1629 <div class="col-12" id="js-dvp-product-premium-content">
1630 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1631 <div class="row">
1632 <div class="col-12 is-loading">
1633 <div class="e-loading-spinner"></div>
1634 </div>
1635 </div>
1636 </div>
1637 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template">
1638 <div class="js-dvp-product-premium-content-animate fade">
1639 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1640 <div class="row">
1641 <div class="col-12 col-md-4">
1642 <div class="e-product-section-header">
1643 <h2 class="mb-1 mb-md-0">
1644 @Translate("Premium Content","Premium Content")
1645 </h2>
1646 </div>
1647 </div>
1648 <div class="col-12 col-md-8 mt-half">
1649 {{#each premiumPages}}
1650 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
1651 <div class="col-12 col-md-6">
1652 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
1653 </div>
1654 <div class="col-12 col-md-6">
1655 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
1656 <p>{{searchFriendlyDescription}}</p>
1657 <p>
1658 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}">
1659 {{searchFriendlyButtonText}}
1660 </a>
1661 </p>
1662 </div>
1663 </div>
1664 {{/each}}
1665 </div>
1666 </div>
1667 </div>
1668 </div>
1669 </script>
1670 </div>
1671 }
1672 else if(productPanelNameValue == "Supportmaterials for vets")
1673 {
1674 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
1675 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1676 <div class="row">
1677 <div class="col-12 is-loading">
1678 <div class="e-loading-spinner"></div>
1679 </div>
1680 </div>
1681 </div>
1682 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
1683 <div class="js-dvp-product-supportmaterials-vets-animate fade">
1684 {{#if vetSupportmaterials.items}}
1685 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1686 <div class="row">
1687 {{#if vetSupportmaterials.display}}
1688 <div class="col-12 col-md-4">
1689 <div class="e-product-section-header">
1690 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
1691 </div>
1692 </div>
1693 <div class="col-12 col-md-8 mt-half">
1694 {{#each vetSupportmaterials.items}}
1695
1696 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}">
1697 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
1698 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
1699 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
1700 </p>
1701
1702 <div class="row">
1703 <div class="col-12">
1704 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
1705 <div class="row">
1706 <div class="col-12 pl-md-3">
1707 <div class="row">
1708 {{#each materials}}
1709 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
1710 <div class="row">
1711 <div class="col-12 col-md-6 text-center">
1712 {{#if download}}
1713 {{#if loginToDownload}}
1714 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
1715 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1716 </a>
1717 {{else}}
1718 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
1719 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1720 </a>
1721 {{/if}}
1722 {{else}}
1723 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1724 {{/if}}
1725 </div>
1726 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
1727 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
1728
1729 {{#if loginToDownload}}
1730 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
1731 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
1732 </a>
1733 {{else}}
1734 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
1735 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
1736 </a>
1737 {{/if}}
1738
1739 @if(shopIsActive && hasAccess)
1740 {
1741 @:{{#if orderable}}
1742 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
1743 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
1744 <input type="hidden" name="CartCmd" value="Add">
1745 <input type="hidden" name="ProductID" value="{{id}}">
1746 <input type="hidden" name="VariantID" value="">
1747 <input type="hidden" name="UnitID" value="">
1748 <input type="hidden" name="Redirect" value="false">
1749 <input type="hidden" name="Quantity" value="1">
1750 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
1751 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
1752 </form>
1753 @:{{/if}}
1754 }
1755 </div>
1756 </div>
1757 </div>
1758 {{/each}}
1759 </div>
1760 </div>
1761 </div>
1762 </div>
1763 </div>
1764 </div>
1765 {{/each}}
1766 </div>
1767 {{else}}
1768 <div class="col-12 text-center">
1769 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p>
1770 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
1771 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
1772 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
1773 </div>
1774 {{/if}}
1775 </div>
1776 </div>
1777 {{/if}}
1778 </div>
1779 </script>
1780
1781 </div>
1782 }
1783 else if(productPanelNameValue == "Supportmaterials for pet owners")
1784 {
1785 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
1786 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1787 <div class="row">
1788 <div class="col-12 is-loading">
1789 <div class="e-loading-spinner"></div>
1790 </div>
1791 </div>
1792 </div>
1793 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
1794 <div class="js-dvp-product-supportmaterials-clients-animate fade">
1795 {{#if clientSupportmaterials.items}}
1796 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1797 <div class="row">
1798 {{#if clientSupportmaterials.display}}
1799 <div class="col-12 col-md-4">
1800 <div class="e-product-section-header">
1801 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
1802 </div>
1803 </div>
1804 <div class="col-12 col-md-8 mt-half">
1805 {{#each clientSupportmaterials.items}}
1806
1807 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}">
1808 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
1809 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
1810 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
1811 </p>
1812
1813 <div class="row">
1814 <div class="col-12">
1815 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
1816 <div class="row">
1817 <div class="col-12 pl-md-3">
1818 <div class="row">
1819 {{#each materials}}
1820 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
1821 <div class="row">
1822 <div class="col-12 col-md-6 text-center">
1823 {{#if download}}
1824 {{#if loginToDownload}}
1825 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
1826 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1827 </a>
1828 {{else}}
1829 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
1830 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1831 </a>
1832 {{/if}}
1833 {{else}}
1834 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1835 {{/if}}
1836 </div>
1837 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
1838 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
1839 {{#if download}}
1840 <p class="mb-1">
1841 {{#if loginToDownload}}
1842 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a>
1843 {{else}}
1844 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
1845 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
1846 </a>
1847 {{/if}}
1848 </p>
1849 {{/if}}
1850
1851 @if(shopIsActive && hasAccess)
1852 {
1853 @:{{#if orderable}}
1854 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
1855 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
1856 <input type="hidden" name="CartCmd" value="Add">
1857 <input type="hidden" name="ProductID" value="{{id}}">
1858 <input type="hidden" name="VariantID" value="">
1859 <input type="hidden" name="UnitID" value="">
1860 <input type="hidden" name="Redirect" value="false">
1861 <input type="hidden" name="Quantity" value="1">
1862 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
1863 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
1864 </form>
1865 @:{{/if}}
1866 }
1867
1868 </div>
1869 </div>
1870 </div>
1871 {{/each}}
1872 </div>
1873 </div>
1874 </div>
1875 </div>
1876 </div>
1877 </div>
1878 {{/each}}
1879 </div>
1880 {{else}}
1881 <div class="col-12 text-center">
1882 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p>
1883 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
1884 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
1885 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
1886 </div>
1887 {{/if}}
1888 </div>
1889 </div>
1890 {{/if}}
1891 </div>
1892 </script>
1893
1894 </div>
1895 }
1896 else if(productPanelNameValue == "Videos")
1897 {
1898 <div class="col-12" id="js-dvp-product-videos">
1899 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1900 <div class="row">
1901 <div class="col-12 is-loading">
1902 <div class="e-loading-spinner"></div>
1903 </div>
1904 </div>
1905 </div>
1906 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
1907 <div class="js-dvp-product-videos-animate fade">
1908 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1909 <div class="row">
1910 {{#if display}}
1911 <div class="col-12 col-md-4">
1912 <div class="e-product-section-header">
1913 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
1914 </div>
1915 </div>
1916 <div class="col-12 col-md-8 mt-half">
1917 {{#compare totalVideoCount '>' 4}}
1918 <div class="collapse-peek">
1919 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
1920 {{/compare}}
1921 <div class="row">
1922 {{#each videos}}
1923 {{#each videos}}
1924 <div class="col-12 col-md-6">
1925 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}">
1926 <div>
1927 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
1928 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
1929 </div>
1930 </a>
1931 <sc{{handlebarHack}}ript type="application/json">
1932 {
1933 "url":"{{../url}}",
1934 "header":"{{embedTitle}}",
1935 "embedUrl":"{{{embedUrl}}}"
1936 }
1937 </sc{{handlebarHack}}ript>
1938 </div>
1939 {{/each}}
1940 {{/each}}
1941 </div>
1942 {{#compare totalVideoCount '>' 4}}
1943 </div>
1944 <div class="collapse-peek-toggle">
1945 <div class="row">
1946 <div class="col-12 mx-auto text-center">
1947 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
1948 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
1949 </a>
1950 </div>
1951 </div>
1952 </div>
1953 {{/compare}}
1954 </div>
1955 </div>
1956 {{else}}
1957 <div class="col-12 text-center">
1958 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p>
1959 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
1960 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
1961 </div>
1962 {{/if}}
1963 </div>
1964 </div>
1965 </div>
1966 </script>
1967 </div>
1968 }
1969 else if(productPanelNameValue == "Related ranges")
1970 {
1971 <div class="col-12">
1972 @if( GetLoop("RelatedRanges").Count() > 0 )
1973 {
1974 string relatedProductsHeader = Translate("Other related products","Other related products");
1975
1976 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
1977 {
1978 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
1979 }
1980 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1981 <div class="row">
1982 <div class="col-12 col-md-4">
1983 <div class="e-product-section-header">
1984 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
1985 </div>
1986 </div>
1987 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
1988 <div class="row">
1989 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
1990 {
1991 string relatedRangeGroupId = "";
1992
1993 int relatedProductInt = 0;
1994 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
1995 string relatedRangeName = relatedRange.GetString("Range");
1996 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
1997 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
1998
1999 <div class="col-12 col-lg-6 mb-3">
2000 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
2001 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
2002 </div>
2003 <div class="col-12 px-1 pt-1 border dvp-range">
2004 <div>
2005 <div class="row">
2006 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
2007 {
2008 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
2009
2010 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
2011
2012 if(relatedProductInt == 2)
2013 {
2014 @:</div>
2015 @:</div>
2016 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
2017 @:<div class="row">
2018 }
2019
2020 string relatedUrl = string.Empty;
2021
2022 string relatedUrlFriendlyProduct = string.Empty;
2023
2024 string relatedProductName = product.GetString("Ecom:Product.Name");
2025
2026 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
2027
2028 string relatedProductDisplayName = relatedProductName;
2029 string relatedProductTitleName = relatedProductName;
2030
2031 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
2032 {
2033 if(hideRelatedProductName)
2034 {
2035 relatedProductDisplayName = relatedRangeNameSuperscripted;
2036 relatedProductTitleName = relatedRangeName;
2037 }
2038 else
2039 {
2040 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
2041 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
2042 }
2043 }
2044
2045 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
2046 {
2047 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
2048 }
2049 else
2050 {
2051 relatedUrl = relatedProductName;
2052 }
2053
2054 if(relatedProductsInRangeCount > 1)
2055 {
2056 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
2057 }
2058
2059 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
2060
2061 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
2062
2063 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
2064 <a href="@relatedProductUrl" title="@relatedProductTitleName">
2065 <div class="row">
2066 <div class="col-12 dvp-image-container">
2067 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
2068 </div>
2069 <div class="col-12">
2070 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
2071 </div>
2072 </div>
2073 </a>
2074 </div>
2075
2076 relatedProductInt++;
2077 }
2078 </div>
2079 </div>
2080 <div class="row mt-1 dvp-view-more-products">
2081 @if(relatedProductsInRangeCount > 2)
2082 {
2083 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
2084
2085 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
2086
2087 if(relatedProductsInRangeCount == 3 )
2088 {
2089 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
2090 }
2091
2092 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
2093
2094 <div class="col-12">
2095 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
2096 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);">
2097 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
2098 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span>
2099 </a>
2100 </p>
2101 </div>
2102 }
2103 </div>
2104 </div>
2105 </div>
2106 }
2107 </div>
2108 </div>
2109 </div>
2110 </div>
2111 }
2112 </div>
2113 }
2114 else if(productPanelNameValue == "Newsletter")
2115 {
2116 <div class="col-12">
2117 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2118 <div class="row">
2119 <div class="col-12 col-md-4">
2120 <div class="e-product-section-header">
2121 <h2 class="mb-1 mb-md-0">Newsletter</h2>
2122 </div>
2123 </div>
2124 <div class="col-12 col-md-8">
2125 <div class="dvp-newsletter-signup-form">
2126 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
2127 <div class="form-group">
2128 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
2129 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
2130 </div>
2131 <div class="form-group">
2132 <button type="submit" class="btn btn-primary">Sign up</button>
2133 </div>
2134 </form>
2135 </div>
2136 </div>
2137 </div>
2138 </div>
2139 </div>
2140 }
2141 else if(productPanelNameValue == "eLearning")
2142 {
2143 <div class="col-12" id="js-dvp-product-elearning">
2144 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2145 <div class="row">
2146 <div class="col-12 is-loading">
2147 <div class="e-loading-spinner"></div>
2148 </div>
2149 </div>
2150 </div>
2151 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
2152 <div class="js-dvp-product-elearning-animate fade">
2153 {{#if elearning.items}}
2154 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2155 <div class="row">
2156 <div class="col-12 col-md-4">
2157 <div class="e-product-section-header">
2158 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
2159 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
2160 </div>
2161 </div>
2162 <div class="col-12 col-md-8">
2163 <h3>
2164 {{elearning.items.0.courseAmountText}}
2165 </h3>
2166 <div class="row">
2167 <div class="col-12">
2168 <div class="list-group">
2169 {{#if elearning.display}}
2170 {{#each elearning.items.0.courses}}
2171 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
2172 <b>{{name}}</b>
2173 </a>
2174 {{/each}}
2175 {{else}}
2176 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
2177 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
2178 {{/if}}
2179 </div>
2180 </div>
2181 </div>
2182 {{#unless elearning.display}}
2183 <div class="row mt-2">
2184 <div class="col-12">
2185 <div class="bg-academy">
2186 <div class="row p-2">
2187 @{
2188 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
2189 }
2190 <div class="col-12">
2191 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3>
2192 </div>
2193 <div class="col-12 col-md-8 text-white">
2194 <ul class="mb-0">
2195 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
2196 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
2197 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
2198 </ul>
2199 </div>
2200 <div class="col-12 col-md-4 pt-2">
2201 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
2202 </div>
2203 </div>
2204 </div>
2205 </div>
2206 </div>
2207 {{/unless}}
2208 </div>
2209 </div>
2210 </div>
2211 {{/if}}
2212 </div>
2213 </script>
2214 </div>
2215 }
2216 else if(productPanelNameValue == "Product Websites")
2217 {
2218 <div class="col-12" id="js-dvp-product-websites">
2219 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2220 <div class="row">
2221 <div class="col-12 is-loading">
2222 <div class="e-loading-spinner"></div>
2223 </div>
2224 </div>
2225 </div>
2226 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
2227 <div class="js-dvp-product-websites-animate fade">
2228 {{#if websites.items}}
2229 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2230 <div class="row">
2231 {{#if websites.display}}
2232 <div class="col-12 col-md-4">
2233 <div class="e-product-section-header">
2234 <h2 class="mb-1 mb-md-0">
2235 {{#compare count '>' 1}}
2236 @Translate("Product Websites","Product Websites")
2237 {{else}}
2238 @Translate("Product Website","Product Website")
2239 {{/compare}}
2240 </h2>
2241 </div>
2242 </div>
2243 <div class="col-12 col-md-8 mt-half">
2244 {{#each websites.items.0.website}}
2245 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
2246 <div class="col-12 col-md-6">
2247 <p class="lead">
2248 {{name}}
2249 </p>
2250 <p>
2251 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
2252 @Translate("Go to website","Go to website")
2253 </a>
2254 </p>
2255 </div>
2256 <div class="col-12 col-md-6">
2257 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
2258 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
2259 </a>
2260 </div>
2261 </div>
2262 {{/each}}
2263 </div>
2264 {{else}}
2265 <div class="col-12 text-center">
2266 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p>
2267 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
2268 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
2269 </div>
2270 {{/if}}
2271 </div>
2272 </div>
2273 {{/if}}
2274 </div>
2275 </script>
2276 </div>
2277 }
2278 else if(productPanelNameValue == "Previous Premium Content")
2279 {
2280 <div class="col-12" id="js-dvp-product-previous-premium-content">
2281 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2282 <div class="row">
2283 <div class="col-12 is-loading">
2284 <div class="e-loading-spinner"></div>
2285 </div>
2286 </div>
2287 </div>
2288 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template">
2289 <div class="js-dvp-product-previous-premium-content-animate fade">
2290 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2291 <div class="row">
2292 <div class="col-12 col-md-4">
2293 <div class="e-product-section-header">
2294 <h2 class="mb-1 mb-md-0">
2295 @Translate("Previous Premium Content","Premium Content")
2296 </h2>
2297 </div>
2298 </div>
2299 <div class="col-12 col-md-8 mt-half">
2300 {{#each premiumPages}}
2301 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
2302 <div class="col-12 col-md-6">
2303 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
2304 </div>
2305 <div class="col-12 col-md-6">
2306 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
2307 <p>{{searchFriendlyDescription}}</p>
2308 <p>
2309 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}">
2310 {{searchFriendlyButtonText}}
2311 </a>
2312 </p>
2313 </div>
2314 </div>
2315 {{/each}}
2316 </div>
2317 </div>
2318 </div>
2319 </div>
2320 </script>
2321 </div>
2322 }
2323 else if(productPanelNameValue == "Frequent Treatment Questions")
2324 {
2325 <div class="col-12" id="js-dvp-product-faq">
2326 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2327 <div class="row">
2328 <div class="col-12 is-loading">
2329 <div class="e-loading-spinner"></div>
2330 </div>
2331 </div>
2332 </div>
2333 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
2334 <div class="js-dvp-product-faq-animate fade">
2335 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2336 <div class="row">
2337 {{#if display}}
2338 <div class="col-12 col-md-4">
2339 <div class="e-product-section-header">
2340 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
2341 </div>
2342 </div>
2343 <div class="col-12 col-md-8 mt-half dvp-faq">
2344 {{# faqs}}
2345 {{#each faq}}
2346 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
2347 <div class="row">
2348 <div class="col-12">
2349 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
2350 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
2351 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
2352 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
2353 </h3>
2354 </div>
2355 </div>
2356 <div class="row">
2357 <div class="col-12">
2358 <div class="collapse" id="collapse-{{paragraphId}}">
2359 <div class="row">
2360 <div class="col-12 pl-3">
2361 {{#each faqList}}
2362 <div class="row">
2363 <div class="col-12 mt-1">
2364 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}">
2365 {{listHeader}}
2366 </a>
2367 <sc{{handlebarHack}}ript type="application/json">
2368 {
2369 "url":"{{../../url}}",
2370 "categoryName": "{{../categoryName}}",
2371 "header":"{{listHeader}}",
2372 "content":"{{{listContent}}}"
2373 }
2374 </sc{{handlebarHack}}ript>
2375 </div>
2376 </div>
2377 {{/each}}
2378 </div>
2379 </div>
2380 </div>
2381 </div>
2382 </div>
2383 </div>
2384 {{/each}}
2385 {{/faqs}}
2386
2387 {{#each accordions}}
2388 <div class="p col-12 p-accordion" id="{{paragraphID}}">
2389 {{#if introText}}
2390 <div class="p-accordion-lead">
2391 {{{introText}}}
2392 </div>
2393 {{/if}}
2394 <div class="p-accordion-container ">
2395 {{#each accordionItems}}
2396 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
2397 <div class="p-accordion-toggle">
2398 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false">
2399 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
2400 {{heading}}
2401 </span>
2402 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
2403 </p>
2404 </div>
2405 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
2406 <div class="px-2 pb-1 p-accordion-content">
2407 <div class="p-txt-container dvp-rich-text-content pt-1">
2408 {{{text}}}
2409 </div>
2410 </div>
2411 </div>
2412 </div>
2413 {{/each}}
2414 </div>
2415 </div>
2416 {{/each}}
2417
2418
2419 </div>
2420 {{else}}
2421 <div class="col-12 text-center">
2422 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p>
2423 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
2424 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
2425 </div>
2426 {{/if}}
2427 </div>
2428 </div>
2429 </div>
2430 </script>
2431 </div>
2432 }
2433 else if(productPanelNameValue == "Got More Questions form")
2434 {
2435 <div class="col-12 js-dvp-product-details-more-info-section">
2436 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2437 <div class="row">
2438 <div class="col-12 col-md-4">
2439 <div class="e-product-section-header">
2440 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
2441 </div>
2442 </div>
2443 <div class="p col-12 col-md-8 mt-half">
2444 @{
2445 int currentPageId;
2446
2447 int.TryParse(pageId, out currentPageId);
2448
2449 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
2450
2451 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
2452
2453 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
2454 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
2455
2456 int formPageId;
2457 int formParagraphId;
2458
2459 int.TryParse(formPageIdString, out formPageId);
2460 int.TryParse(formParagraphIdString, out formParagraphId);
2461
2462 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
2463 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
2464
2465 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
2466
2467 }
2468 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
2469 </div>
2470 </div>
2471 </div>
2472 </div>
2473 }
2474 }
2475 </div>
2476 }
2477
2478 @:</div></div></div></div></div></section></article>
2479
2480 <footer class="bg-light">
2481 <article>
2482 <section class="e-section">
2483 <div class="container-fluid">
2484 <div class="row" id="js-dvp-product-footer">
2485 @if ( !string.IsNullOrEmpty(productFooterContent) )
2486 {
2487 <div class="col-12 mt-2 small">
2488 @productFooterContent
2489 </div>
2490 }
2491 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template">
2492 {{#if FooterContent}}
2493 <div class="col-12 mt-2 small">
2494 {{{FooterContent}}}
2495 </div>
2496 {{/if}}
2497 </script>
2498 </div>
2499 </div>
2500 </section>
2501 </article>
2502 </footer>
2503
2504 }
2505 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "supplies")
2506 {
2507 string rangeName = range.GetString("Range");
2508 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
2509 string rangeId = string.Empty;
2510 string therapyAreaId = string.Empty;
2511 string therapyAreaName = string.Empty;
2512 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
2513 string optionalName = string.Empty;
2514 string displayName = string.Empty;
2515 string displayNameSuperscripted = string.Empty;
2516 string groupId = string.Empty;
2517 string productName = string.Empty;
2518 string productNameJSON = string.Empty;
2519 string productDisplayName = string.Empty;
2520 string productDisplayNameSuperscripted = string.Empty;
2521 string urlFriendlyProductName = string.Empty;
2522 string productShortDescription = string.Empty;
2523 string productShortDescriptionJSON = string.Empty;
2524 string productActives = string.Empty;
2525 string productActivesJSON = string.Empty;
2526 string productStorageCondition = string.Empty;
2527 string productStorageConditionJSON = string.Empty;
2528 string productPackSize = string.Empty;
2529 string productWithdrawalPeriod = string.Empty;
2530 string lyticsTopics = string.Empty;
2531 string productDatasheet = string.Empty;
2532 string productPackInsert = string.Empty;
2533 string productSPC = string.Empty;
2534 string productMSDS = string.Empty;
2535 bool hasDocuments = true;
2536 string productDisclaimer = string.Empty;
2537 string productDisclaimerJSON = string.Empty;
2538 string productShopInformation = string.Empty;
2539 string productShopInformationJSON = string.Empty;
2540 string productImage = string.Empty;
2541 string productRewardButtonLink = string.Empty;
2542 string productRewardButtonLinkProcessed = string.Empty;
2543 string productRewardButtonText = string.Empty;
2544 bool showRewardButton = false;
2545 string productRewardAdditionalLink = string.Empty;
2546 string productRewardAdditionalLinkProcessed = string.Empty;
2547 bool showRewardAdditionalLink = false;
2548 bool productShowFooterContent = false;
2549 string productFooterContent = string.Empty;
2550 string productFooterContentJSON = string.Empty;
2551 List<string> images = new List<string>();
2552 string productUrl = string.Empty;
2553 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
2554 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames");
2555 string signInPage = Espresso.Page.Area.Item.GetValue<string>("SignUpPage");
2556
2557 <div class="row">
2558 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight">
2559 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template">
2560 {{#if premiumPages.0.searchFriendlyImageBanner}}
2561 <div class="js-dvp-product-premium-content-animate fade mb-2">
2562 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link">
2563 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" />
2564 </a>
2565 </div>
2566 {{/if}}
2567 </script>
2568 </div>
2569 </div>
2570
2571 if(productsInRangeCount > 1)
2572 {
2573 <div class="row e-product">
2574 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
2575 <h1 class="mb-1 font-weight-bold">
2576 @rangeNameSuperscripted
2577 </h1>
2578 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
2579 {
2580
2581 groupId = product.GetString("Ecom:Group.ID");
2582
2583 productName = product.GetString("Ecom:Product.Name");
2584 productNameJSON = productName.Replace("\"",""");
2585 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
2586
2587 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
2588 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
2589
2590 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
2591 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON;
2592
2593 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
2594
2595 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
2596 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
2597
2598 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
2599
2600 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
2601
2602 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
2603
2604 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
2605 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"",""");
2606
2607 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
2608 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"",""");
2609
2610 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
2611 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
2612
2613 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
2614 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
2615 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
2616 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
2617 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
2618
2619 hasDocuments = true;
2620
2621 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
2622 {
2623 hasDocuments = false;
2624 }
2625
2626
2627 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value" );
2628 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
2629 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
2630 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty( productRewardButtonText );
2631
2632 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
2633 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
2634 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
2635
2636 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
2637 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
2638
2639 if ( !string.IsNullOrEmpty(productFooterContent) )
2640 {
2641 string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))";
2642
2643 Match regexMatch = Regex.Match(productFooterContent, hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1));
2644
2645 while (regexMatch.Success)
2646 {
2647 string href = regexMatch.Groups[ 1 ].ToString();
2648 if ( href.ToLower().Contains("default.aspx?id=") )
2649 {
2650 productFooterContent = productFooterContent.Replace(href, SearchEngineFriendlyURLs.GetFriendlyUrl(href.Replace("/","")));
2651 }
2652 regexMatch = regexMatch.NextMatch();
2653 }
2654
2655 productFooterContentJSON = WebUtility.HtmlDecode(Regex.Replace(productFooterContent, @"\t|\n|\r", " "));
2656 }
2657 else
2658 {
2659 productFooterContentJSON = "";
2660 }
2661
2662 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
2663 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"",""");
2664
2665 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value");
2666 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>");
2667
2668 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}";
2669
2670 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
2671
2672 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
2673
2674 dynamic JSON = new {
2675 Name = productDisplayName,
2676 ShortDescription = productShortDescriptionJSON,
2677 Image = productImage,
2678 Images = images,
2679 Actives = productActivesJSON,
2680 StorageCondition = productStorageConditionJSON,
2681 PackSize = productPackSize,
2682 WithdrawalPeriod = productWithdrawalPeriod,
2683 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "",
2684 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "",
2685 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "",
2686 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "",
2687 ShowDatasheet = showProductFileTypeDatasheet,
2688 ShowPackInsert = showProductFileTypePackInsert,
2689 ShowSPC = showProductFileTypeSPC,
2690 ShowMSDS = showProductFileTypeMSDS,
2691 HasDocuments = hasDocuments,
2692 Disclaimer = productDisclaimerJSON,
2693 ShopInformation = productShopInformationJSON,
2694 ShowRewardButton = showRewardButton,
2695 RewardButtonLink = showRewardButton ? productRewardButtonLinkProcessed : "",
2696 RewardButtonText = showRewardButton ? productRewardButtonText : "",
2697 RewardAdditionalLink = showRewardAdditionalLink ? productRewardAdditionalLinkProcessed : "",
2698 FooterContent = productFooterContentJSON
2699 };
2700
2701 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName">
2702 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
2703 <div class="row px-sm-1 my-2 my-sm-0">
2704 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
2705 <div class="row">
2706 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
2707 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
2708 </div>
2709 <div class="col-9 col-sm-8 px-sm-2 my-auto">
2710 <p class="mb-0">
2711 @if (applyRangeNameToProductNames)
2712 {
2713 <b>@productDisplayNameSuperscripted</b>
2714 }
2715 else
2716 {
2717 <b class="h3">@displayNameSuperscripted</b>
2718 <br>
2719 @productDisplayNameSuperscripted
2720 }
2721 </p>
2722 </div>
2723 <div class="col-2 d-none d-sm-block my-auto text-center">
2724 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
2725 </div>
2726 </div>
2727 <script type="application/json" class="@urlFriendlyProductName">
2728 @JsonService.Instance.ToJson(JSON)
2729 </script>
2730 </div>
2731 </div>
2732 </a>
2733 }
2734 </div>
2735 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details">
2736 <div class="js-dvp-product-details-animate fade">
2737 <div class="row">
2738 <div class="col-12">
2739 <div class="e-product-image-container dvp-product-details-image-container text-center">
2740 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="dvp-product-details-image" alt="@productDisplayName">
2741 </div>
2742 </div>
2743 </div>
2744 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
2745 {
2746 <div class="row">
2747 <div class="col-12">
2748 @productShortDescriptionJSON
2749 </div>
2750 </div>
2751 }
2752 <div class="row">
2753 <div class="col-12 mt-2 table-responsive">
2754 <table class="table">
2755 @if(!string.IsNullOrEmpty(productActives))
2756 {
2757 <tr>
2758 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
2759 <td>@productActives</td>
2760 </tr>
2761 }
2762 @if(!string.IsNullOrEmpty(productPackSize))
2763 {
2764 <tr>
2765 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
2766 <td>@productPackSize</td>
2767 </tr>
2768 }
2769 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
2770 {
2771 <tr>
2772 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
2773 <td>@productWithdrawalPeriod</td>
2774 </tr>
2775 }
2776 @if(!string.IsNullOrEmpty(productStorageCondition))
2777 {
2778 <tr>
2779 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
2780 <td>@productStorageCondition</td>
2781 </tr>
2782 }
2783 @if(hasDocuments)
2784 {
2785 <tr>
2786 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
2787 <td>
2788 @if(!string.IsNullOrEmpty(productDatasheet))
2789 {
2790 if ( showProductFileTypeDatasheet )
2791 {
2792 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet">
2793 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
2794 </a>
2795 }
2796 else
2797 {
2798 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
2799 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
2800 </a>
2801 }
2802 }
2803 @if(!string.IsNullOrEmpty(productPackInsert))
2804 {
2805 if ( showProductFileTypePackInsert )
2806 {
2807 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert">
2808 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
2809 </a>
2810 }
2811 else
2812 {
2813 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
2814 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
2815 </a>
2816 }
2817 }
2818 @if(!string.IsNullOrEmpty(productSPC))
2819 {
2820 if ( showProductFileTypeSPC )
2821 {
2822 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC">
2823 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
2824 </a>
2825 }
2826 else
2827 {
2828 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
2829 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
2830 </a>
2831 }
2832 }
2833 @if(!string.IsNullOrEmpty(productMSDS))
2834 {
2835 if ( showProductFileTypeMSDS )
2836 {
2837 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS">
2838 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
2839 </a>
2840 }
2841 else
2842 {
2843 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
2844 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
2845 </a>
2846 }
2847 }
2848 </td>
2849 </tr>
2850 }
2851 </table>
2852 </div>
2853 </div>
2854 @if(!string.IsNullOrEmpty(productShopInformationJSON))
2855 {
2856 <div class="row">
2857 <div class="col-12">
2858 <div class="table-responsive">
2859 @productShopInformationJSON
2860 </div>
2861 </div>
2862 </div>
2863 }
2864 @if(!string.IsNullOrEmpty(productDisclaimer))
2865 {
2866 <div class="row">
2867 <div class="col-12">
2868 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
2869 <small>
2870 @productDisclaimer
2871 </small>
2872 </div>
2873 </div>
2874 }
2875 @if ( showRewardButton )
2876 {
2877 <div class="row">
2878 <div class="col-12">
2879 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
2880 </div>
2881 <div class="col-12">
2882 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName">
2883 @productRewardButtonText
2884 </a>
2885 @if ( !hideRequestmoreinformation )
2886 {
2887 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
2888 @Translate("Talk with a Dechra member","Talk with a Dechra member")
2889 </button>
2890 }
2891 @if ( showRewardAdditionalLink )
2892 {
2893 <p class="mb-1 mt-1 small">
2894 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
2895 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
2896 </a>
2897 </p>
2898 }
2899 </div>
2900 </div>
2901 }
2902 else
2903 {
2904 if ( !hideRequestmoreinformation )
2905 {
2906 <div class="row">
2907 <div class="col-12">
2908 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
2909 @Translate( "Request more information", "Request more information" )
2910 </button>
2911 </div>
2912 </div>
2913 }
2914 }
2915 </div>
2916 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
2917 <div class="js-dvp-product-details-animate fade">
2918 <div class="e-product-image-container multi-range">
2919 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
2920 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}">
2921 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
2922 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">
2923 </div>
2924 {{#each Images}}
2925 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
2926 <img src="/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}">
2927 </div>
2928 {{/each}}
2929 </div>
2930 {{#if Images}}
2931 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a>
2932 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a>
2933 <ol class="carousel-indicators">
2934 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
2935 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span>
2936 </li>
2937 {{#each Images}}
2938 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}">
2939 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span>
2940 </li>
2941 {{/each}}
2942 </ol>
2943 {{/if}}
2944 </div>
2945 </div>
2946 {{#if ShortDescription}}
2947 <div class="dvp-short-description">
2948 {{{ShortDescription}}}
2949 </div>
2950 {{/if}}
2951 <div class="row">
2952 <div class="col-12 mt-2 table-responsive">
2953 <table class="table">
2954 {{#if Actives}}
2955 <tr>
2956 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
2957 <td>{{{Actives}}}</td>
2958 </tr>
2959 {{/if}}
2960 {{#if PackSize}}
2961 <tr>
2962 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
2963 <td>{{PackSize}}</td>
2964 </tr>
2965 {{/if}}
2966 {{#if WithdrawalPeriod}}
2967 <tr>
2968 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
2969 <td>{{{WithdrawalPeriod}}}</td>
2970 </tr>
2971 {{/if}}
2972 {{#if StorageCondition}}
2973 <tr>
2974 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
2975 <td>{{{StorageCondition}}}</td>
2976 </tr>
2977 {{/if}}
2978 {{#if HasDocuments}}
2979 <tr>
2980 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
2981 <td>
2982 {{#if Datasheet}}
2983 {{#if ShowDatasheet}}
2984 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}">
2985 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i>
2986 </a>
2987 {{else}}
2988 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
2989 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
2990 </a>
2991 {{/if}}
2992 {{/if}}
2993 {{#if PackInsert}}
2994 {{#if ShowPackInsert}}
2995 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{PackInsert}}" data-tracking-type="Pack Insert" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{PackInsert}}">
2996 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i>
2997 </a>
2998 {{else}}
2999 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3000 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
3001 </a>
3002 {{/if}}
3003 {{/if}}
3004 {{#if SPC}}
3005 {{#if ShowSPC}}
3006 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{SPC}}" data-tracking-type="SPC" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{SPC}}">
3007 @Translate("SPC","SPC") <i class="material-icons">get_app</i>
3008 </a>
3009 {{else}}
3010 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3011 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
3012 </a>
3013 {{/if}}
3014 {{/if}}
3015 {{#if MSDS}}
3016 {{#if ShowMSDS}}
3017 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{MSDS}}" data-tracking-type="MSDS" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{MSDS}}">
3018 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i>
3019 </a>
3020 {{else}}
3021 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3022 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
3023 </a>
3024 {{/if}}
3025 {{/if}}
3026 </td>
3027 </tr>
3028 {{/if}}
3029 </table>
3030 </div>
3031 </div>
3032 {{#if ShopInformation}}
3033 <div class="row mt-1">
3034 <div class="col-12">
3035 <div class="table-responsive">
3036 {{{ShopInformation}}}
3037 </div>
3038 </div>
3039 </div>
3040 {{/if}}
3041 {{#if Disclaimer}}
3042 <div class="row mt-1">
3043 <div class="col-12">
3044 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
3045 <small>
3046 {{{Disclaimer}}}
3047 </small>
3048 </div>
3049 </div>
3050 {{/if}}
3051 {{#if ShowRewardButton}}
3052 <div class="row">
3053 <div class="col-12">
3054 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
3055 </div>
3056 <div class="col-12">
3057 <a href="{{{RewardButtonLink}}}" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName">
3058 {{RewardButtonText}}
3059 </a>
3060 @if ( !hideRequestmoreinformation )
3061 {
3062 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
3063 @Translate("Talk with a Dechra member","Talk with a Dechra member")
3064 </button>
3065 }
3066 {{#if RewardAdditionalLink}}
3067 <p class="mb-1 mt-1 small">
3068 <a href="{{RewardAdditionalLink}}" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
3069 @Translate("Not a Dechra Rewards Member? Click here","Not a Dechra Rewards Member? Click here")
3070 </a>
3071 </p>
3072 {{/if}}
3073 </div>
3074 </div>
3075 {{else}}
3076 @if ( !hideRequestmoreinformation )
3077 {
3078 <div class="row">
3079 <div class="col-12">
3080 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
3081 @Translate( "Request more information", "Request more information" )
3082 </button>
3083 </div>
3084 </div>
3085 }
3086 {{/if}}
3087 </div>
3088 </script>
3089 </div>
3090 </div>
3091 }
3092 else
3093 {
3094 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
3095 {
3096
3097 groupId = product.GetString("Ecom:Group.ID");
3098
3099 productName = product.GetString("Ecom:Product.Name");
3100 productNameJSON = productName.Replace("\"",""");
3101
3102 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
3103
3104 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
3105
3106 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
3107 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
3108
3109 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
3110
3111 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
3112
3113 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
3114
3115 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
3116
3117 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
3118 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
3119 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");;
3120 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
3121
3122 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
3123
3124 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
3125 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
3126 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
3127 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
3128
3129 hasDocuments = true;
3130
3131 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
3132 {
3133 hasDocuments = false;
3134 }
3135
3136 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value");
3137 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
3138 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
3139 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText);
3140
3141 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
3142 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
3143 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
3144
3145 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
3146 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
3147
3148 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
3149
3150 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>");
3151
3152 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
3153
3154 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
3155
3156 }
3157 <div class="row e-product dvp-product-details">
3158 <div class="col-12">
3159 <div class="row">
3160 <div class="col-12">
3161 <h1 class="mb-1 font-weight-bold">
3162 @rangeNameSuperscripted
3163 </h1>
3164 </div>
3165 </div>
3166 </div>
3167 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
3168 <div class="row">
3169 <div class="col-12">
3170 <div class="e-product-image-container single-range">
3171 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
3172 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")">
3173 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
3174 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">
3175 </div>
3176
3177 @for(int i = 0; i < images.Count(); i++)
3178 {
3179 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
3180 <img src="/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)">
3181 </div>
3182 }
3183 </div>
3184 @if(images.Any())
3185 {
3186 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a>
3187 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a>
3188 <ol class="carousel-indicators">
3189 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
3190 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span>
3191 </li>
3192 @for(int i = 0; i < images.Count(); i++)
3193 {
3194 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)">
3195 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span>
3196 </li>
3197 }
3198 </ol>
3199 }
3200 </div>
3201 </div>
3202 </div>
3203 </div>
3204 </div>
3205 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3">
3206 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
3207 @if(!string.IsNullOrEmpty(optionalName))
3208 {
3209 <div class="row">
3210 <div class="col-12">
3211 <h2 class="mb-0">@displayNameSuperscripted</h2>
3212 </div>
3213 </div>
3214 }
3215 @if(!string.IsNullOrEmpty(productShortDescription))
3216 {
3217 <div class="row">
3218 <div class="col-12">
3219 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
3220 </div>
3221 </div>
3222 }
3223 <div class="row">
3224 <div class="col-12 mt-2 table-responsive">
3225 <table class="table">
3226 @if(!string.IsNullOrEmpty(productActives))
3227 {
3228 <tr>
3229 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
3230 <td>@productActives</td>
3231 </tr>
3232 }
3233 @if(!string.IsNullOrEmpty(productPackSize))
3234 {
3235 <tr>
3236 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
3237 <td>@productPackSize</td>
3238 </tr>
3239 }
3240 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
3241 {
3242 <tr>
3243 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
3244 <td>@productWithdrawalPeriod</td>
3245 </tr>
3246 }
3247 @if(!string.IsNullOrEmpty(productStorageCondition))
3248 {
3249 <tr>
3250 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
3251 <td>@productStorageCondition</td>
3252 </tr>
3253 }
3254 @if(hasDocuments)
3255 {
3256 <tr>
3257 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
3258 <td>
3259 @if(!string.IsNullOrEmpty(productDatasheet))
3260 {
3261 if ( showProductFileTypeDatasheet )
3262 {
3263 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet">
3264 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
3265 </a>
3266 }
3267 else
3268 {
3269 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3270 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
3271 </a>
3272 }
3273 }
3274 @if(!string.IsNullOrEmpty(productPackInsert))
3275 {
3276 if ( showProductFileTypePackInsert )
3277 {
3278 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert">
3279 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
3280 </a>
3281 }
3282 else
3283 {
3284 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3285 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
3286 </a>
3287 }
3288 }
3289 @if(!string.IsNullOrEmpty(productSPC))
3290 {
3291 if ( showProductFileTypeSPC )
3292 {
3293 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC">
3294 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
3295 </a>
3296 }
3297 else
3298 {
3299 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3300 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
3301 </a>
3302 }
3303 }
3304 @if(!string.IsNullOrEmpty(productMSDS))
3305 {
3306 if ( showProductFileTypeMSDS )
3307 {
3308 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS">
3309 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
3310 </a>
3311 }
3312 else
3313 {
3314 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")">
3315 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
3316 </a>
3317 }
3318 }
3319 </td>
3320 </tr>
3321 }
3322 </table>
3323 </div>
3324 </div>
3325 @if(!string.IsNullOrEmpty(productShopInformation))
3326 {
3327 <div class="row mt-1">
3328 <div class="col-12">
3329 <div class="table-responsive">
3330 @productShopInformation
3331 </div>
3332 </div>
3333 </div>
3334 }
3335 @if(!string.IsNullOrEmpty(productDisclaimer))
3336 {
3337 <div class="row mt-1">
3338 <div class="col-12">
3339 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
3340 <small>
3341 @productDisclaimer
3342 </small>
3343 </div>
3344 </div>
3345 }
3346 @if ( showRewardButton )
3347 {
3348 <div class="row">
3349 <div class="col-12">
3350 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
3351 </div>
3352 <div class="col-12">
3353 <a href="@productRewardButtonLinkProcessed" target="_blank" class="btn btn-sm btn-primary text-uppercase mr-1 js-dvp-product-details-tracking-reward-button" data-tracking-range-name="@rangeName">
3354 @productRewardButtonText
3355 </a>
3356 @if ( !hideRequestmoreinformation )
3357 {
3358 <button class="btn btn-sm btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
3359 @Translate("Talk with a Dechra member","Talk with a Dechra member")
3360 </button>
3361 }
3362 @if ( showRewardAdditionalLink )
3363 {
3364 <p class="mb-1 mt-1 small">
3365 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
3366 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
3367 </a>
3368 </p>
3369 }
3370 </div>
3371 </div>
3372 }
3373 else
3374 {
3375 if ( !hideRequestmoreinformation )
3376 {
3377 <div class="row">
3378 <div class="col-12">
3379 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
3380 @Translate( "Request more information", "Request more information" )
3381 </button>
3382 </div>
3383 </div>
3384 }
3385 }
3386 </div>
3387 </div>
3388 }
3389
3390 int productPanelsItemId = 0;
3391
3392 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
3393 {
3394 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
3395
3396 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
3397 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
3398 {
3399 string productPanelNameValue = productPanel.GetValue<string>("Name");
3400
3401 if(productPanelNameValue == "Premium Content")
3402 {
3403 <div class="col-12" id="js-dvp-product-premium-content">
3404 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3405 <div class="row">
3406 <div class="col-12 is-loading">
3407 <div class="e-loading-spinner"></div>
3408 </div>
3409 </div>
3410 </div>
3411 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template">
3412 <div class="js-dvp-product-premium-content-animate fade">
3413 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3414 <div class="row">
3415 <div class="col-12 col-md-4">
3416 <div class="e-product-section-header">
3417 <h2 class="mb-1 mb-md-0">
3418 @Translate("Premium Content","Premium Content")
3419 </h2>
3420 </div>
3421 </div>
3422 <div class="col-12 col-md-8 mt-half">
3423 {{#each premiumPages}}
3424 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
3425 <div class="col-12 col-md-6">
3426 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
3427 </div>
3428 <div class="col-12 col-md-6">
3429 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
3430 <p>{{searchFriendlyDescription}}</p>
3431 <p>
3432 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}">
3433 {{searchFriendlyButtonText}}
3434 </a>
3435 </p>
3436 </div>
3437 </div>
3438 {{/each}}
3439 </div>
3440 </div>
3441 </div>
3442 </div>
3443 </script>
3444 </div>
3445 }
3446 else if(productPanelNameValue == "Supportmaterials for vets")
3447 {
3448 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
3449 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3450 <div class="row">
3451 <div class="col-12 is-loading">
3452 <div class="e-loading-spinner"></div>
3453 </div>
3454 </div>
3455 </div>
3456 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
3457 <div class="js-dvp-product-supportmaterials-vets-animate fade">
3458 {{#if vetSupportmaterials.items}}
3459 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3460 <div class="row">
3461 {{#if vetSupportmaterials.display}}
3462 <div class="col-12 col-md-4">
3463 <div class="e-product-section-header">
3464 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
3465 </div>
3466 </div>
3467 <div class="col-12 col-md-8 mt-half">
3468 {{#each vetSupportmaterials.items}}
3469
3470 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}">
3471 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
3472 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
3473 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
3474 </p>
3475
3476 <div class="row">
3477 <div class="col-12">
3478 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
3479 <div class="row">
3480 <div class="col-12 pl-md-3">
3481 <div class="row">
3482 {{#each materials}}
3483 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
3484 <div class="row">
3485 <div class="col-12 col-md-6 text-center">
3486 {{#if download}}
3487 {{#if loginToDownload}}
3488 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
3489 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3490 </a>
3491 {{else}}
3492 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
3493 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3494 </a>
3495 {{/if}}
3496 {{else}}
3497 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3498 {{/if}}
3499 </div>
3500 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
3501 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
3502
3503 {{#if loginToDownload}}
3504 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
3505 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
3506 </a>
3507 {{else}}
3508 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
3509 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
3510 </a>
3511 {{/if}}
3512
3513 @if(shopIsActive && hasAccess)
3514 {
3515 @:{{#if orderable}}
3516 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
3517 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
3518 <input type="hidden" name="CartCmd" value="Add">
3519 <input type="hidden" name="ProductID" value="{{id}}">
3520 <input type="hidden" name="VariantID" value="">
3521 <input type="hidden" name="UnitID" value="">
3522 <input type="hidden" name="Redirect" value="false">
3523 <input type="hidden" name="Quantity" value="1">
3524 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
3525 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
3526 </form>
3527 @:{{/if}}
3528 }
3529 </div>
3530 </div>
3531 </div>
3532 {{/each}}
3533 </div>
3534 </div>
3535 </div>
3536 </div>
3537 </div>
3538 </div>
3539 {{/each}}
3540 </div>
3541 {{else}}
3542 <div class="col-12 text-center">
3543 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p>
3544 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
3545 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
3546 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
3547 </div>
3548 {{/if}}
3549 </div>
3550 </div>
3551 {{/if}}
3552 </div>
3553 </script>
3554
3555 </div>
3556 }
3557 else if(productPanelNameValue == "Supportmaterials for pet owners")
3558 {
3559 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
3560 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3561 <div class="row">
3562 <div class="col-12 is-loading">
3563 <div class="e-loading-spinner"></div>
3564 </div>
3565 </div>
3566 </div>
3567 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
3568 <div class="js-dvp-product-supportmaterials-clients-animate fade">
3569 {{#if clientSupportmaterials.items}}
3570 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3571 <div class="row">
3572 {{#if clientSupportmaterials.display}}
3573 <div class="col-12 col-md-4">
3574 <div class="e-product-section-header">
3575 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
3576 </div>
3577 </div>
3578 <div class="col-12 col-md-8 mt-half">
3579 {{#each clientSupportmaterials.items}}
3580
3581 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}">
3582 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
3583 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
3584 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
3585 </p>
3586
3587 <div class="row">
3588 <div class="col-12">
3589 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
3590 <div class="row">
3591 <div class="col-12 pl-md-3">
3592 <div class="row">
3593 {{#each materials}}
3594 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
3595 <div class="row">
3596 <div class="col-12 col-md-6 text-center">
3597 {{#if download}}
3598 {{#if loginToDownload}}
3599 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
3600 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3601 </a>
3602 {{else}}
3603 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
3604 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3605 </a>
3606 {{/if}}
3607 {{else}}
3608 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3609 {{/if}}
3610 </div>
3611 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
3612 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
3613 {{#if download}}
3614 <p class="mb-1">
3615 {{#if loginToDownload}}
3616 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a>
3617 {{else}}
3618 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
3619 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
3620 </a>
3621 {{/if}}
3622 </p>
3623 {{/if}}
3624
3625 @if(shopIsActive && hasAccess)
3626 {
3627 @:{{#if orderable}}
3628 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
3629 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
3630 <input type="hidden" name="CartCmd" value="Add">
3631 <input type="hidden" name="ProductID" value="{{id}}">
3632 <input type="hidden" name="VariantID" value="">
3633 <input type="hidden" name="UnitID" value="">
3634 <input type="hidden" name="Redirect" value="false">
3635 <input type="hidden" name="Quantity" value="1">
3636 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
3637 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
3638 </form>
3639 @:{{/if}}
3640 }
3641
3642 </div>
3643 </div>
3644 </div>
3645 {{/each}}
3646 </div>
3647 </div>
3648 </div>
3649 </div>
3650 </div>
3651 </div>
3652 {{/each}}
3653 </div>
3654 {{else}}
3655 <div class="col-12 text-center">
3656 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p>
3657 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
3658 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
3659 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
3660 </div>
3661 {{/if}}
3662 </div>
3663 </div>
3664 {{/if}}
3665 </div>
3666 </script>
3667
3668 </div>
3669 }
3670 else if(productPanelNameValue == "Videos")
3671 {
3672 <div class="col-12" id="js-dvp-product-videos">
3673 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3674 <div class="row">
3675 <div class="col-12 is-loading">
3676 <div class="e-loading-spinner"></div>
3677 </div>
3678 </div>
3679 </div>
3680 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
3681 <div class="js-dvp-product-videos-animate fade">
3682 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3683 <div class="row">
3684 {{#if display}}
3685 <div class="col-12 col-md-4">
3686 <div class="e-product-section-header">
3687 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
3688 </div>
3689 </div>
3690 <div class="col-12 col-md-8 mt-half">
3691 {{#compare totalVideoCount '>' 4}}
3692 <div class="collapse-peek">
3693 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
3694 {{/compare}}
3695 <div class="row">
3696 {{#each videos}}
3697 {{#each videos}}
3698 <div class="col-12 col-md-6">
3699 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}">
3700 <div>
3701 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
3702 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
3703 </div>
3704 </a>
3705 <sc{{handlebarHack}}ript type="application/json">
3706 {
3707 "url":"{{../url}}",
3708 "header":"{{embedTitle}}",
3709 "embedUrl":"{{{embedUrl}}}"
3710 }
3711 </sc{{handlebarHack}}ript>
3712 </div>
3713 {{/each}}
3714 {{/each}}
3715 </div>
3716 {{#compare totalVideoCount '>' 4}}
3717 </div>
3718 <div class="collapse-peek-toggle">
3719 <div class="row">
3720 <div class="col-12 mx-auto text-center">
3721 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
3722 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
3723 </a>
3724 </div>
3725 </div>
3726 </div>
3727 {{/compare}}
3728 </div>
3729 </div>
3730 {{else}}
3731 <div class="col-12 text-center">
3732 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p>
3733 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
3734 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
3735 </div>
3736 {{/if}}
3737 </div>
3738 </div>
3739 </div>
3740 </script>
3741 </div>
3742 }
3743 else if(productPanelNameValue == "Related ranges")
3744 {
3745 <div class="col-12">
3746 @if( GetLoop("RelatedRanges").Count() > 0 )
3747 {
3748 string relatedProductsHeader = Translate("Other related products","Other related products");
3749
3750 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
3751 {
3752 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
3753 }
3754 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3755 <div class="row">
3756 <div class="col-12 col-md-4">
3757 <div class="e-product-section-header">
3758 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
3759 </div>
3760 </div>
3761 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
3762 <div class="row">
3763 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
3764 {
3765 string relatedRangeGroupId = "";
3766
3767 int relatedProductInt = 0;
3768 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
3769 string relatedRangeName = relatedRange.GetString("Range");
3770 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
3771 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
3772
3773 <div class="col-12 col-lg-6 mb-3">
3774 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
3775 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
3776 </div>
3777 <div class="col-12 px-1 pt-1 border dvp-range">
3778 <div>
3779 <div class="row">
3780 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
3781 {
3782 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
3783
3784 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
3785
3786 if(relatedProductInt == 2)
3787 {
3788 @:</div>
3789 @:</div>
3790 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
3791 @:<div class="row">
3792 }
3793
3794 string relatedUrl = string.Empty;
3795
3796 string relatedUrlFriendlyProduct = string.Empty;
3797
3798 string relatedProductName = product.GetString("Ecom:Product.Name");
3799
3800 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
3801
3802 string relatedProductDisplayName = relatedProductName;
3803 string relatedProductTitleName = relatedProductName;
3804
3805 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
3806 {
3807 if(hideRelatedProductName)
3808 {
3809 relatedProductDisplayName = relatedRangeNameSuperscripted;
3810 relatedProductTitleName = relatedRangeName;
3811 }
3812 else
3813 {
3814 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
3815 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
3816 }
3817 }
3818
3819 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
3820 {
3821 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
3822 }
3823 else
3824 {
3825 relatedUrl = relatedProductName;
3826 }
3827
3828 if(relatedProductsInRangeCount > 1)
3829 {
3830 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
3831 }
3832
3833 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
3834
3835 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
3836
3837 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
3838 <a href="@relatedProductUrl" title="@relatedProductTitleName">
3839 <div class="row">
3840 <div class="col-12 dvp-image-container">
3841 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
3842 </div>
3843 <div class="col-12">
3844 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
3845 </div>
3846 </div>
3847 </a>
3848 </div>
3849
3850 relatedProductInt++;
3851 }
3852 </div>
3853 </div>
3854 <div class="row mt-1 dvp-view-more-products">
3855 @if(relatedProductsInRangeCount > 2)
3856 {
3857 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
3858
3859 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
3860
3861 if(relatedProductsInRangeCount == 3 )
3862 {
3863 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
3864 }
3865
3866 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
3867
3868 <div class="col-12">
3869 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
3870 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);">
3871 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
3872 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span>
3873 </a>
3874 </p>
3875 </div>
3876 }
3877 </div>
3878 </div>
3879 </div>
3880 }
3881 </div>
3882 </div>
3883 </div>
3884 </div>
3885 }
3886 </div>
3887 }
3888 else if(productPanelNameValue == "Newsletter")
3889 {
3890 <div class="col-12">
3891 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3892 <div class="row">
3893 <div class="col-12 col-md-4">
3894 <div class="e-product-section-header">
3895 <h2 class="mb-1 mb-md-0">Newsletter</h2>
3896 </div>
3897 </div>
3898 <div class="col-12 col-md-8">
3899 <div class="dvp-newsletter-signup-form">
3900 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
3901 <div class="form-group">
3902 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
3903 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
3904 </div>
3905 <div class="form-group">
3906 <button type="submit" class="btn btn-primary">Sign up</button>
3907 </div>
3908 </form>
3909 </div>
3910 </div>
3911 </div>
3912 </div>
3913 </div>
3914 }
3915 else if(productPanelNameValue == "eLearning")
3916 {
3917 <div class="col-12" id="js-dvp-product-elearning">
3918 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3919 <div class="row">
3920 <div class="col-12 is-loading">
3921 <div class="e-loading-spinner"></div>
3922 </div>
3923 </div>
3924 </div>
3925 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
3926 <div class="js-dvp-product-elearning-animate fade">
3927 {{#if elearning.items}}
3928 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3929 <div class="row">
3930 <div class="col-12 col-md-4">
3931 <div class="e-product-section-header">
3932 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
3933 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
3934 </div>
3935 </div>
3936 <div class="col-12 col-md-8">
3937 <h3>
3938 {{elearning.items.0.courseAmountText}}
3939 </h3>
3940 <div class="row">
3941 <div class="col-12">
3942 <div class="list-group">
3943 {{#if elearning.display}}
3944 {{#each elearning.items.0.courses}}
3945 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
3946 <b>{{name}}</b>
3947 </a>
3948 {{/each}}
3949 {{else}}
3950 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
3951 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
3952 {{/if}}
3953 </div>
3954 </div>
3955 </div>
3956 {{#unless elearning.display}}
3957 <div class="row mt-2">
3958 <div class="col-12">
3959 <div class="bg-academy">
3960 <div class="row p-2">
3961 @{
3962 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
3963 }
3964 <div class="col-12">
3965 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3>
3966 </div>
3967 <div class="col-12 col-md-8 text-white">
3968 <ul class="mb-0">
3969 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
3970 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
3971 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
3972 </ul>
3973 </div>
3974 <div class="col-12 col-md-4 pt-2">
3975 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
3976 </div>
3977 </div>
3978 </div>
3979 </div>
3980 </div>
3981 {{/unless}}
3982 </div>
3983 </div>
3984 </div>
3985 {{/if}}
3986 </div>
3987 </script>
3988 </div>
3989 }
3990 else if(productPanelNameValue == "Product Websites")
3991 {
3992 <div class="col-12" id="js-dvp-product-websites">
3993 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3994 <div class="row">
3995 <div class="col-12 is-loading">
3996 <div class="e-loading-spinner"></div>
3997 </div>
3998 </div>
3999 </div>
4000 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
4001 <div class="js-dvp-product-websites-animate fade">
4002 {{#if websites.items}}
4003 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4004 <div class="row">
4005 {{#if websites.display}}
4006 <div class="col-12 col-md-4">
4007 <div class="e-product-section-header">
4008 <h2 class="mb-1 mb-md-0">
4009 {{#compare count '>' 1}}
4010 @Translate("Product Websites","Product Websites")
4011 {{else}}
4012 @Translate("Product Website","Product Website")
4013 {{/compare}}
4014 </h2>
4015 </div>
4016 </div>
4017 <div class="col-12 col-md-8 mt-half">
4018 {{#each websites.items.0.website}}
4019 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
4020 <div class="col-12 col-md-6">
4021 <p class="lead">
4022 {{name}}
4023 </p>
4024 <p>
4025 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
4026 @Translate("Go to website","Go to website")
4027 </a>
4028 </p>
4029 </div>
4030 <div class="col-12 col-md-6">
4031 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
4032 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
4033 </a>
4034 </div>
4035 </div>
4036 {{/each}}
4037 </div>
4038 {{else}}
4039 <div class="col-12 text-center">
4040 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p>
4041 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
4042 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
4043 </div>
4044 {{/if}}
4045 </div>
4046 </div>
4047 {{/if}}
4048 </div>
4049 </script>
4050 </div>
4051 }
4052 else if(productPanelNameValue == "Previous Premium Content")
4053 {
4054 <div class="col-12" id="js-dvp-product-previous-premium-content">
4055 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4056 <div class="row">
4057 <div class="col-12 is-loading">
4058 <div class="e-loading-spinner"></div>
4059 </div>
4060 </div>
4061 </div>
4062 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template">
4063 <div class="js-dvp-product-previous-premium-content-animate fade">
4064 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4065 <div class="row">
4066 <div class="col-12 col-md-4">
4067 <div class="e-product-section-header">
4068 <h2 class="mb-1 mb-md-0">
4069 @Translate("Previous Premium Content","Premium Content")
4070 </h2>
4071 </div>
4072 </div>
4073 <div class="col-12 col-md-8 mt-half">
4074 {{#each premiumPages}}
4075 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
4076 <div class="col-12 col-md-6">
4077 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
4078 </div>
4079 <div class="col-12 col-md-6">
4080 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
4081 <p>{{searchFriendlyDescription}}</p>
4082 <p>
4083 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}">
4084 {{searchFriendlyButtonText}}
4085 </a>
4086 </p>
4087 </div>
4088 </div>
4089 {{/each}}
4090 </div>
4091 </div>
4092 </div>
4093 </div>
4094 </script>
4095 </div>
4096 }
4097 else if(productPanelNameValue == "Frequent Treatment Questions")
4098 {
4099 <div class="col-12" id="js-dvp-product-faq">
4100 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4101 <div class="row">
4102 <div class="col-12 is-loading">
4103 <div class="e-loading-spinner"></div>
4104 </div>
4105 </div>
4106 </div>
4107 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
4108 <div class="js-dvp-product-faq-animate fade">
4109 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4110 <div class="row">
4111 {{#if display}}
4112 <div class="col-12 col-md-4">
4113 <div class="e-product-section-header">
4114 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
4115 </div>
4116 </div>
4117 <div class="col-12 col-md-8 mt-half dvp-faq">
4118 {{# faqs}}
4119 {{#each faq}}
4120 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
4121 <div class="row">
4122 <div class="col-12">
4123 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
4124 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
4125 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
4126 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
4127 </h3>
4128 </div>
4129 </div>
4130 <div class="row">
4131 <div class="col-12">
4132 <div class="collapse" id="collapse-{{paragraphId}}">
4133 <div class="row">
4134 <div class="col-12 pl-3">
4135 {{#each faqList}}
4136 <div class="row">
4137 <div class="col-12 mt-1">
4138 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}">
4139 {{listHeader}}
4140 </a>
4141 <sc{{handlebarHack}}ript type="application/json">
4142 {
4143 "url":"{{../../url}}",
4144 "categoryName": "{{../categoryName}}",
4145 "header":"{{listHeader}}",
4146 "content":"{{{listContent}}}"
4147 }
4148 </sc{{handlebarHack}}ript>
4149 </div>
4150 </div>
4151 {{/each}}
4152 </div>
4153 </div>
4154 </div>
4155 </div>
4156 </div>
4157 </div>
4158 {{/each}}
4159 {{/faqs}}
4160
4161 {{#each accordions}}
4162 <div class="p col-12 p-accordion" id="{{paragraphID}}">
4163 {{#if introText}}
4164 <div class="p-accordion-lead">
4165 {{{introText}}}
4166 </div>
4167 {{/if}}
4168 <div class="p-accordion-container ">
4169 {{#each accordionItems}}
4170 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
4171 <div class="p-accordion-toggle">
4172 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false">
4173 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
4174 {{heading}}
4175 </span>
4176 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
4177 </p>
4178 </div>
4179 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
4180 <div class="px-2 pb-1 p-accordion-content">
4181 <div class="p-txt-container dvp-rich-text-content pt-1">
4182 {{{text}}}
4183 </div>
4184 </div>
4185 </div>
4186 </div>
4187 {{/each}}
4188 </div>
4189 </div>
4190 {{/each}}
4191
4192
4193 </div>
4194 {{else}}
4195 <div class="col-12 text-center">
4196 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p>
4197 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
4198 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
4199 </div>
4200 {{/if}}
4201 </div>
4202 </div>
4203 </div>
4204 </script>
4205 </div>
4206 }
4207 else if(productPanelNameValue == "Got More Questions form")
4208 {
4209 <div class="col-12 js-dvp-product-details-more-info-section">
4210 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4211 <div class="row">
4212 <div class="col-12 col-md-4">
4213 <div class="e-product-section-header">
4214 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
4215 </div>
4216 </div>
4217 <div class="p col-12 col-md-8 mt-half">
4218 @{
4219 int currentPageId;
4220
4221 int.TryParse(pageId, out currentPageId);
4222
4223 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
4224
4225 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
4226
4227 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
4228 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
4229
4230 int formPageId;
4231 int formParagraphId;
4232
4233 int.TryParse(formPageIdString, out formPageId);
4234 int.TryParse(formParagraphIdString, out formParagraphId);
4235
4236 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
4237 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
4238
4239 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
4240
4241 }
4242 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
4243 </div>
4244 </div>
4245 </div>
4246 </div>
4247 }
4248 }
4249 </div>
4250 }
4251
4252 @:</div></div></div></div></div></section></article>
4253
4254 <footer class="bg-light">
4255 <article>
4256 <section class="e-section">
4257 <div class="container-fluid">
4258 <div class="row" id="js-dvp-product-footer">
4259 @if ( !string.IsNullOrEmpty(productFooterContent) )
4260 {
4261 <div class="col-12 mt-2 small">
4262 @productFooterContent
4263 </div>
4264 }
4265 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template">
4266 {{#if FooterContent}}
4267 <div class="col-12 mt-2 small">
4268 {{{FooterContent}}}
4269 </div>
4270 {{/if}}
4271 </script>
4272 </div>
4273 </div>
4274 </section>
4275 </article>
4276 </footer>
4277
4278 }
4279 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "diet")
4280 {
4281 string rangeName = range.GetString("Range");
4282 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
4283 string rangeId = string.Empty;
4284 string therapyAreaId = string.Empty;
4285 string therapyAreaName = string.Empty;
4286 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
4287 string optionalName = string.Empty;
4288 string displayName = string.Empty;
4289 string displayNameSuperscripted = string.Empty;
4290 string groupId = string.Empty;
4291 string productName = string.Empty;
4292 string productNameJSON = string.Empty;
4293 string productDisplayName = string.Empty;
4294 string productDisplayNameSuperscripted = string.Empty;
4295 string urlFriendlyProductName = string.Empty;
4296 string productShortDescription = string.Empty;
4297 string productShortDescriptionJSON = string.Empty;
4298 string productColorCode = string.Empty;
4299 string productPublicProductCode = string.Empty;
4300 string productIngredients = string.Empty;
4301 string productIngredientsJSON = string.Empty;
4302 string productPackSize = string.Empty;
4303 string lyticsTopics = string.Empty;
4304 string productDatasheet = string.Empty;
4305 string productRecommendation = string.Empty;
4306 string productNotRecommendedFor = string.Empty;
4307 string productIcon1 = string.Empty;
4308 string productIcon2 = string.Empty;
4309 string productIcon3 = string.Empty;
4310 string productIcon4 = string.Empty;
4311 string productIcon5 = string.Empty;
4312 string productIcon6 = string.Empty;
4313 string productTextArea1 = string.Empty;
4314 string productTextArea2 = string.Empty;
4315 string productTextArea3 = string.Empty;
4316 string productTextArea4 = string.Empty;
4317 string productTextArea5 = string.Empty;
4318 string productTextArea6 = string.Empty;
4319 string productFeedingGuideImage = string.Empty;
4320 string productNutrientTableImage = string.Empty;
4321 Dictionary<string, dynamic> dietDetails = new Dictionary<string, dynamic>();
4322 Dictionary<string, dynamic> dietFeedingGuides = new Dictionary<string, dynamic>();
4323 string productImage = string.Empty;
4324 List<string> images = new List<string>();
4325 string productUrl = string.Empty;
4326 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
4327 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames");
4328
4329 <div class="row">
4330 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight">
4331 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template">
4332 {{#if premiumPages.0.searchFriendlyImageBanner}}
4333 <div class="js-dvp-product-premium-content-animate fade mb-2">
4334 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link">
4335 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" />
4336 </a>
4337 </div>
4338 {{/if}}
4339 </script>
4340 </div>
4341 </div>
4342
4343 @functions
4344 {
4345
4346 public dynamic DietApi(string method, string productNumber, string cultureInfoName)
4347 {
4348 if ( !string.IsNullOrEmpty( method ) && !string.IsNullOrEmpty( productNumber ) && !string.IsNullOrEmpty( cultureInfoName ))
4349 {
4350 productNumber = Regex.Replace( productNumber, @".*_", "", RegexOptions.None, TimeSpan.FromMilliseconds( 100 ) );
4351
4352 if ( !string.IsNullOrEmpty( productNumber ) )
4353 {
4354 System.Net.WebRequest request = System.Net.WebRequest.Create($"https://dietspim.dechra.espresso4.dk/api/dechra-diets/v1/{method}/{productNumber}/{cultureInfoName}");
4355 request.Timeout = 1000;
4356 request.Method = "GET";
4357 request.ContentType = "application/json";
4358
4359 using (dynamic response = (System.Net.HttpWebResponse) request.GetResponse())
4360 {
4361 using (System.IO.Stream stream = response.GetResponseStream())
4362 {
4363 using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
4364 {
4365 return Newtonsoft.Json.JsonConvert.DeserializeObject(reader.ReadToEnd());
4366 }
4367 }
4368 }
4369 }
4370 }
4371 return null;
4372 }
4373
4374 }
4375
4376 if(productsInRangeCount > 1)
4377 {
4378 <div class="row e-product">
4379 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
4380 <h1 class="mb-1 font-weight-bold">
4381 @rangeNameSuperscripted
4382 </h1>
4383 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
4384 {
4385 groupId = product.GetString("Ecom:Group.ID");
4386
4387 productName = product.GetString("Ecom:Product.Name");
4388 productNameJSON = productName.Replace("\"",""");
4389 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
4390
4391 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
4392 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
4393
4394 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
4395 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON;
4396
4397 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
4398
4399 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
4400 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
4401
4402 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
4403
4404 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
4405
4406 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
4407
4408 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
4409 productIngredientsJSON = WebUtility.HtmlDecode(Regex.Replace(productIngredients, @"\t|\n|\r", " ")).Replace("\"",""");
4410
4411 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
4412 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
4413
4414 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
4415
4416 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value");
4417
4418 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value");
4419
4420 productRecommendation = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4421 productNotRecommendedFor = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4422
4423 productIcon1 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg" : "";
4424 productIcon2 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg" : "";
4425 productIcon3 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg" : "";
4426 productIcon4 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg" : "";
4427 productIcon5 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg" : "";
4428 productIcon6 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg" : "";
4429
4430 productTextArea1 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4431 productTextArea2 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4432 productTextArea3 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4433 productTextArea4 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4434 productTextArea5 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4435 productTextArea6 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4436
4437 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value");
4438 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value");
4439
4440 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}";
4441
4442 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
4443
4444 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
4445
4446 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) )
4447 {
4448 dietDetails.Add(productDisplayNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4449 dietFeedingGuides.Add(productDisplayNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4450 }
4451
4452 dynamic JSON = new {
4453 Name = productDisplayName,
4454 ShortDescription = productShortDescriptionJSON,
4455 Image = productImage,
4456 Images = images,
4457 Ingredients = productIngredientsJSON,
4458 PackSize = productPackSize,
4459 Datasheet = productDatasheet,
4460 ColorCode = productColorCode,
4461 ProductCode = productPublicProductCode,
4462 Recommendation = productRecommendation,
4463 NotRecommendedFor = productNotRecommendedFor,
4464 Icon1 = productIcon1,
4465 Icon2 = productIcon2,
4466 Icon3 = productIcon3,
4467 Icon4 = productIcon4,
4468 Icon5 = productIcon5,
4469 Icon6 = productIcon6,
4470 TextArea1 = productTextArea1,
4471 TextArea2 = productTextArea2,
4472 TextArea3 = productTextArea3,
4473 TextArea4 = productTextArea4,
4474 TextArea5 = productTextArea5,
4475 TextArea6 = productTextArea6,
4476 FeedingGuideImage = productFeedingGuideImage,
4477 NutrientTableImage = productNutrientTableImage,
4478 Details = DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)
4479 };
4480
4481 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName">
4482 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
4483 <div class="row px-sm-1 my-2 my-sm-0">
4484 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
4485 <div class="row">
4486 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
4487 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
4488 </div>
4489 <div class="col-9 col-sm-8 px-sm-2 my-auto">
4490 <p class="mb-0">
4491 @if (applyRangeNameToProductNames)
4492 {
4493 <b>@productDisplayNameSuperscripted</b>
4494 }
4495 else
4496 {
4497 <b class="h3">@displayNameSuperscripted</b>
4498 <br>
4499 @productDisplayNameSuperscripted
4500 }
4501 </p>
4502 </div>
4503 <div class="col-2 d-none d-sm-block my-auto text-center">
4504 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
4505 </div>
4506 </div>
4507 <script type="application/json" class="@urlFriendlyProductName">
4508 @JsonService.Instance.ToJson(JSON)
4509 </script>
4510 </div>
4511 </div>
4512 </a>
4513 }
4514 </div>
4515 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details">
4516 <div class="js-dvp-product-details-animate fade">
4517 <div class="row">
4518 <div class="col-12">
4519 <div class="e-product-image-container dvp-product-details-image-container text-center">
4520 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="dvp-product-details-image" alt="@productDisplayName">
4521 </div>
4522 </div>
4523 </div>
4524 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
4525 {
4526 <div class="row">
4527 <div class="col-12">
4528 @productShortDescriptionJSON
4529 </div>
4530 </div>
4531 }
4532 <div class="row">
4533 <div class="col-12 mt-2 table-responsive">
4534 <table class="table">
4535 @if(!string.IsNullOrEmpty(productIngredientsJSON))
4536 {
4537 <tr>
4538 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
4539 <td>@productIngredientsJSON</td>
4540 </tr>
4541 }
4542 @if(!string.IsNullOrEmpty(productRecommendation))
4543 {
4544 <tr>
4545 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td>
4546 <td>@productRecommendation</td>
4547 </tr>
4548 }
4549 @if(!string.IsNullOrEmpty(productNotRecommendedFor))
4550 {
4551 <tr>
4552 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td>
4553 <td>@productNotRecommendedFor</td>
4554 </tr>
4555 }
4556 @if(!string.IsNullOrEmpty(productPackSize))
4557 {
4558 <tr>
4559 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
4560 <td>@productPackSize</td>
4561 </tr>
4562 }
4563 @if(!string.IsNullOrEmpty(productDatasheet))
4564 {
4565 <tr>
4566 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
4567 <td>
4568 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet">
4569 @Translate("Download","Download") <i class="material-icons">get_app</i>
4570 </a>
4571 </td>
4572 </tr>
4573 }
4574 </table>
4575 </div>
4576 </div>
4577 @if(!hideRequestmoreinformation)
4578 {
4579 <div class="row">
4580 <div class="col-12">
4581 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
4582 @Translate("Request more information","Request more information")
4583 </button>
4584 </div>
4585 </div>
4586 }
4587 </div>
4588 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
4589 <div class="js-dvp-product-details-animate fade">
4590 <div class="e-product-image-container multi-range">
4591 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
4592 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}">
4593 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
4594 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">
4595 </div>
4596 {{#each Images}}
4597 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
4598 <img src="/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}">
4599 </div>
4600 {{/each}}
4601 </div>
4602 {{#if Images}}
4603 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a>
4604 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a>
4605 <ol class="carousel-indicators">
4606 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
4607 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span>
4608 </li>
4609 {{#each Images}}
4610 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}">
4611 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span>
4612 </li>
4613 {{/each}}
4614 </ol>
4615 {{/if}}
4616 </div>
4617 </div>
4618 {{#if ShortDescription}}
4619 <div class="dvp-short-description">
4620 {{{ShortDescription}}}
4621 </div>
4622 {{/if}}
4623 <div class="row">
4624 <div class="col-12 mt-2 table-responsive">
4625 <table class="table">
4626 {{#if Ingredients}}
4627 <tr>
4628 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
4629 <td>{{{Ingredients}}}</td>
4630 </tr>
4631 {{/if}}
4632 {{#if Recommendation}}
4633 <tr>
4634 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td>
4635 <td>{{{Recommendation}}}</td>
4636 </tr>
4637 {{/if}}
4638 {{#if NotRecommendedFor}}
4639 <tr>
4640 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td>
4641 <td>{{{NotRecommendedFor}}}</td>
4642 </tr>
4643 {{/if}}
4644 {{#if PackSize}}
4645 <tr>
4646 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
4647 <td>{{PackSize}}</td>
4648 </tr>
4649 {{/if}}
4650 {{#if Datasheet}}
4651 <tr>
4652 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
4653 <td>
4654 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}">
4655 @Translate("Download","Download") <i class="material-icons">get_app</i>
4656 </a>
4657 </td>
4658 </tr>
4659 {{/if}}
4660 </table>
4661 </div>
4662 </div>
4663 <div class="row">
4664 {{#if Details}}
4665 {{#each Details}}
4666 <div class="col-12">
4667 <div class="row mb-2">
4668 <div class="col-6 col-md-2">
4669 <div style="background-color:{{../ColorCode}};" class="rounded text-center text-white">
4670 <i class="dechra-details-icon dechra-icon-{{IconCssClass}}"></i>
4671 </div>
4672 </div>
4673 <div class="col-12 col-md-10 d-flex align-items-center">
4674 <p class="mb-0">{{{Description}}}</p>
4675 </div>
4676 </div>
4677 </div>
4678 {{/each}}
4679 {{else}}
4680 {{#if Icon1}}
4681 <div class="col-12">
4682 <div class="row mb-2">
4683 <div class="col-6 col-md-2">
4684 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4685 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon1}}" />
4686 </div>
4687 </div>
4688 <div class="col-12 col-md-10 d-flex align-items-center">
4689 <p class="mb-0">{{{TextArea1}}}</p>
4690 </div>
4691 </div>
4692 </div>
4693 {{/if}}
4694 {{#if Icon2}}
4695 <div class="col-12">
4696 <div class="row mb-2">
4697 <div class="col-6 col-md-2">
4698 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4699 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon2}}" />
4700 </div>
4701 </div>
4702 <div class="col-12 col-md-10 d-flex align-items-center">
4703 <p class="mb-0">{{{TextArea2}}}</p>
4704 </div>
4705 </div>
4706 </div>
4707 {{/if}}
4708 {{#if Icon3}}
4709 <div class="col-12">
4710 <div class="row mb-2">
4711 <div class="col-6 col-md-2">
4712 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4713 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon3}}" />
4714 </div>
4715 </div>
4716 <div class="col-12 col-md-10 d-flex align-items-center">
4717 <p class="mb-0">{{{TextArea3}}}</p>
4718 </div>
4719 </div>
4720 </div>
4721 {{/if}}
4722 {{#if Icon4}}
4723 <div class="col-12">
4724 <div class="row mb-2">
4725 <div class="col-6 col-md-2">
4726 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4727 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon4}}" />
4728 </div>
4729 </div>
4730 <div class="col-12 col-md-10 d-flex align-items-center">
4731 <p class="mb-0">{{{TextArea4}}}</p>
4732 </div>
4733 </div>
4734 </div>
4735 {{/if}}
4736 {{#if Icon5}}
4737 <div class="col-12">
4738 <div class="row mb-2">
4739 <div class="col-6 col-md-2">
4740 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4741 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon5}}" />
4742 </div>
4743 </div>
4744 <div class="col-12 col-md-10 d-flex align-items-center">
4745 <p class="mb-0">{{{TextArea5}}}</p>
4746 </div>
4747 </div>
4748 </div>
4749 {{/if}}
4750 {{#if Icon6}}
4751 <div class="col-12">
4752 <div class="row mb-2">
4753 <div class="col-6 col-md-2">
4754 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4755 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon6}}" />
4756 </div>
4757 </div>
4758 <div class="col-12 col-md-10 d-flex align-items-center">
4759 <p class="mb-0">{{{TextArea6}}}</p>
4760 </div>
4761 </div>
4762 </div>
4763 {{/if}}
4764 {{/if}}
4765 </div>
4766 @if(!hideRequestmoreinformation)
4767 {
4768 <div class="row">
4769 <div class="col-12">
4770 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
4771 @Translate("Request more information","Request more information")
4772 </button>
4773 </div>
4774 </div>
4775 }
4776 </div>
4777 </script>
4778 </div>
4779 </div>
4780 }
4781 else
4782 {
4783 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
4784 {
4785 groupId = product.GetString("Ecom:Group.ID");
4786
4787 productName = product.GetString("Ecom:Product.Name");
4788 productNameJSON = productName.Replace("\"",""");
4789
4790 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
4791
4792 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
4793
4794 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
4795 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
4796
4797 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
4798
4799 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
4800
4801 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
4802
4803 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
4804
4805 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
4806
4807 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
4808 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
4809 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
4810
4811 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value");
4812
4813 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value");
4814
4815 productRecommendation = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value");
4816 productNotRecommendedFor = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value");
4817
4818 productIcon1 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg";
4819 productIcon2 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg";
4820 productIcon3 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg";
4821 productIcon4 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg";
4822 productIcon5 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg";
4823 productIcon6 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg";
4824
4825 productTextArea1 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value");
4826 productTextArea2 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value");
4827 productTextArea3 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value");
4828 productTextArea4 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value");
4829 productTextArea5 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value");
4830 productTextArea6 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value");
4831
4832 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value");
4833 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value");
4834
4835 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
4836
4837 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
4838
4839 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) )
4840 {
4841 dietDetails.Add(rangeNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4842 dietFeedingGuides.Add(rangeNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4843 }
4844 }
4845 <div class="row e-product dvp-product-details">
4846 <div class="col-12">
4847 <div class="row">
4848 <div class="col-12">
4849 <h1 class="mb-1 font-weight-bold">
4850 @rangeNameSuperscripted
4851 </h1>
4852 </div>
4853 </div>
4854 </div>
4855 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
4856 <div class="row">
4857 <div class="col-12">
4858 <div class="e-product-image-container single-range">
4859 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
4860 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")">
4861 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
4862 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">
4863 </div>
4864
4865 @for(int i = 0; i < images.Count(); i++)
4866 {
4867 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
4868 <img src="/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)">
4869 </div>
4870 }
4871 </div>
4872 @if(images.Any())
4873 {
4874 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a>
4875 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a>
4876 <ol class="carousel-indicators">
4877 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
4878 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span>
4879 </li>
4880 @for(int i = 0; i < images.Count(); i++)
4881 {
4882 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)">
4883 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span>
4884 </li>
4885 }
4886 </ol>
4887 }
4888 </div>
4889 </div>
4890 </div>
4891 </div>
4892 </div>
4893 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3">
4894 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
4895 @if(!string.IsNullOrEmpty(optionalName))
4896 {
4897 <div class="row">
4898 <div class="col-12">
4899 <h2 class="mb-0">@displayNameSuperscripted</h2>
4900 </div>
4901 </div>
4902 }
4903 @if(!string.IsNullOrEmpty(productShortDescription))
4904 {
4905 <div class="row">
4906 <div class="col-12">
4907 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
4908 </div>
4909 </div>
4910 }
4911 <div class="row">
4912 <div class="col-12 mt-2 table-responsive">
4913 <table class="table">
4914 @if(!string.IsNullOrEmpty(productIngredients))
4915 {
4916 <tr>
4917 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
4918 <td>@productIngredients</td>
4919 </tr>
4920 }
4921 @if(!string.IsNullOrEmpty(productRecommendation))
4922 {
4923 <tr>
4924 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td>
4925 <td>@productRecommendation</td>
4926 </tr>
4927 }
4928 @if(!string.IsNullOrEmpty(productNotRecommendedFor))
4929 {
4930 <tr>
4931 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td>
4932 <td>@productNotRecommendedFor</td>
4933 </tr>
4934 }
4935 @if(!string.IsNullOrEmpty(productPackSize))
4936 {
4937 <tr>
4938 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
4939 <td>@productPackSize</td>
4940 </tr>
4941 }
4942 @if(!string.IsNullOrEmpty(productDatasheet))
4943 {
4944 <tr>
4945 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
4946 <td>
4947 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet">
4948 @Translate("Download","Download") <i class="material-icons">get_app</i>
4949 </a>
4950 </td>
4951 </tr>
4952 }
4953
4954 </table>
4955 </div>
4956 </div>
4957 @if(!hideRequestmoreinformation)
4958 {
4959 <div class="row">
4960 <div class="col-12">
4961 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName">
4962 @Translate("Request more information","Request more information")
4963 </button>
4964 </div>
4965 </div>
4966 }
4967 </div>
4968 @if ( dietDetails.Count == 0 )
4969 {
4970 if ( !string.IsNullOrEmpty( productIcon1 ) && !string.IsNullOrEmpty( productTextArea1 ) )
4971 {
4972 <div class="col-12 col-md-6">
4973 <div class="row mb-2">
4974 <div class="col-6 col-md-2">
4975 <div style="background-color:@productColorCode;" class="rounded p-1">
4976 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon1"/>
4977 </div>
4978 </div>
4979 <div class="col-12 col-md-10 d-flex align-items-center">
4980 <p class="mb-0">@productTextArea1</p>
4981 </div>
4982 </div>
4983 </div>
4984 }
4985 if ( !string.IsNullOrEmpty( productIcon2 ) && !string.IsNullOrEmpty( productTextArea2 ) )
4986 {
4987 <div class="col-12 col-md-6">
4988 <div class="row mb-2">
4989 <div class="col-6 col-md-2">
4990 <div style="background-color:@productColorCode;" class="rounded p-1">
4991 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon2"/>
4992 </div>
4993 </div>
4994 <div class="col-12 col-md-10 d-flex align-items-center">
4995 <p class="mb-0">@productTextArea2</p>
4996 </div>
4997 </div>
4998 </div>
4999 }
5000 if ( !string.IsNullOrEmpty( productIcon3 ) && !string.IsNullOrEmpty( productTextArea3 ) )
5001 {
5002 <div class="col-12 col-md-6">
5003 <div class="row mb-2">
5004 <div class="col-6 col-md-2">
5005 <div style="background-color:@productColorCode;" class="rounded p-1">
5006 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon3"/>
5007 </div>
5008 </div>
5009 <div class="col-12 col-md-10 d-flex align-items-center">
5010 <p class="mb-0">@productTextArea3</p>
5011 </div>
5012 </div>
5013 </div>
5014 }
5015 if ( !string.IsNullOrEmpty( productIcon4 ) && !string.IsNullOrEmpty( productTextArea4 ) )
5016 {
5017 <div class="col-12 col-md-6">
5018 <div class="row mb-2">
5019 <div class="col-6 col-md-2">
5020 <div style="background-color:@productColorCode;" class="rounded p-1">
5021 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon4"/>
5022 </div>
5023 </div>
5024 <div class="col-12 col-md-10 d-flex align-items-center">
5025 <p class="mb-0">@productTextArea4</p>
5026 </div>
5027 </div>
5028 </div>
5029 }
5030 if ( !string.IsNullOrEmpty( productIcon5 ) && !string.IsNullOrEmpty( productTextArea5 ) )
5031 {
5032 <div class="col-12 col-md-6">
5033 <div class="row mb-2">
5034 <div class="col-6 col-md-2">
5035 <div style="background-color:@productColorCode;" class="rounded p-1">
5036 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon5"/>
5037 </div>
5038 </div>
5039 <div class="col-12 col-md-10 d-flex align-items-center">
5040 <p class="mb-0">@productTextArea5</p>
5041 </div>
5042 </div>
5043 </div>
5044 }
5045 if ( !string.IsNullOrEmpty( productIcon6 ) && !string.IsNullOrEmpty( productTextArea6 ) )
5046 {
5047 <div class="col-12 col-md-6">
5048 <div class="row mb-2">
5049 <div class="col-6 col-md-2">
5050 <div style="background-color:@productColorCode;" class="rounded p-1">
5051 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon6"/>
5052 </div>
5053 </div>
5054 <div class="col-12 col-md-10 d-flex align-items-center">
5055 <p class="mb-0">@productTextArea6</p>
5056 </div>
5057 </div>
5058 </div>
5059 }
5060 }
5061 </div>
5062
5063 if ( !string.IsNullOrEmpty( productFeedingGuideImage ) && string.IsNullOrEmpty(HttpContext.Current.Request["test"]))
5064 {
5065 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
5066 <div class="row">
5067 <div class="col-12 col-md-4">
5068 <div class="e-product-section-header">
5069 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2>
5070 </div>
5071 </div>
5072 <div class="col-12 col-md-8">
5073 <img src="@productFeedingGuideImage" class="p-img"/>
5074 </div>
5075 </div>
5076 </div>
5077 }
5078 if(!string.IsNullOrEmpty(productNutrientTableImage))
5079 {
5080 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5081 <div class="row">
5082 <div class="col-12 col-md-4">
5083 <div class="e-product-section-header">
5084 <h2 class="mb-1 mb-md-0">@Translate("Nutrient table","Nutrient table")</h2>
5085 </div>
5086 </div>
5087 <div class="col-12 col-md-8">
5088 <img src="@productNutrientTableImage" class="p-img" />
5089 </div>
5090 </div>
5091 </div>
5092 }
5093 }
5094
5095 if ( dietDetails.Count > 0 )
5096 {
5097 int tabCounter = 0;
5098
5099 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 pt-2 pt-md-4 mt-2">
5100 @if ( dietDetails.Count > 1 )
5101 {
5102 int tabLinkCounter = 0;
5103
5104 <div class="row mb-3">
5105 <div class="col-12">
5106 <div class="list-group flex-column flex-md-row" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist">
5107 @foreach ( KeyValuePair< string, dynamic > dietDetail in dietDetails )
5108 {
5109 <a class="list-group-item list-group-item-action js-dvp-specific-diet-tabs dvp-specific-diet-tabs d-flex justify-content-between align-items-center@(tabLinkCounter == 0 ? " active" : "")" data-toggle="list" href="#tab-details-@(dietDetail.Key.Replace( " ", "-" ))" role="tab">
5110 @dietDetail.Key
5111 <i class="material-icons d-block d-md-none">keyboard_arrow_right</i>
5112 <i class="material-icons d-none d-md-block">keyboard_arrow_down</i>
5113 </a>
5114
5115 tabLinkCounter++;
5116 }
5117 </div>
5118 </div>
5119 </div>
5120 }
5121 @foreach ( KeyValuePair<string, dynamic> dietDetail in dietDetails )
5122 {
5123 if ( dietDetails.Count > 1 )
5124 {
5125 if ( tabCounter == 0 )
5126 {
5127 @:<div class="tab-content">
5128 }
5129 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-details-@dietDetail.Key.Replace(" ","-")" role="tabpanel">
5130 @:<div class="row">
5131 }
5132 else
5133 {
5134 @:<div class="row">
5135 }
5136 foreach ( dynamic detail in dietDetail.Value )
5137 {
5138 if ( detail.IconCssClass != null && detail.Description != null )
5139 {
5140 <div class="col-12 col-md-6">
5141 <div class="row mb-2">
5142 <div class="col-6 col-md-2">
5143 <div style="background-color:@productColorCode;" class="rounded text-center text-white">
5144 <i class="dechra-details-icon dechra-icon-@detail.IconCssClass"></i>
5145 </div>
5146 </div>
5147 <div class="col-12 col-md-10 d-flex align-items-center">
5148 <p class="mb-0">@detail.Description</p>
5149 </div>
5150 </div>
5151 </div>
5152 }
5153 }
5154 if ( dietDetails.Count > 1 )
5155 {
5156 @:</div>
5157 @:</div>
5158
5159 tabCounter++;
5160
5161 if(tabCounter == dietDetails.Count)
5162 {
5163 @:</div>
5164 }
5165 }
5166 else
5167 {
5168 @:</div>
5169 }
5170 }
5171 </div>
5172 }
5173
5174 if ( dietFeedingGuides.Count > 0 )
5175 {
5176 int tabCounter = 0;
5177
5178 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
5179 <div class="row">
5180 <div class="col-12 col-md-4">
5181 @if ( dietFeedingGuides.Count > 1 )
5182 {
5183 int tabLinkCounter = 0;
5184
5185 <div class="list-group mb-3" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist">
5186 @foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides )
5187 {
5188 <a class="list-group-item list-group-item-action js-dvp-specific-diet-tabs dvp-specific-diet-tabs d-flex justify-content-between align-items-center@(tabLinkCounter == 0 ? " active" : "")" data-toggle="list" href="#tab-feeding-@(dietFeedingGuide.Key.Replace( " ", "-" ))" role="tab">
5189 @dietFeedingGuide.Key
5190 <i class="material-icons">keyboard_arrow_right</i>
5191 </a>
5192
5193 tabLinkCounter++;
5194 }
5195 </div>
5196 }
5197 else
5198 {
5199 foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides )
5200 {
5201 foreach ( dynamic guide in dietFeedingGuide.Value )
5202 {
5203 <div class="e-product-section-header">
5204 <h2 class="mb-1 mb-md-0">@guide.Name</h2>
5205 </div>
5206 }
5207 }
5208 }
5209 </div>
5210 <div class="col-12 col-md-8">
5211 @foreach ( KeyValuePair<string, dynamic> dietFeedingGuide in dietFeedingGuides )
5212 {
5213 foreach ( dynamic guide in dietFeedingGuide.Value )
5214 {
5215 if ( dietFeedingGuides.Count > 1 )
5216 {
5217 if ( tabCounter == 0 )
5218 {
5219 @:<div class="tab-content">
5220 }
5221 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-feeding-@dietFeedingGuide.Key.Replace(" ","-")" role="tabpanel">
5222 <p class="mb-0 h3 text-center">@guide.Name</p>
5223 <p class="mb-1 mt-0 h4 text-center">@dietFeedingGuide.Key</p>
5224 }
5225 <table class="table table-condensed border">
5226 <thead>
5227 <tr>
5228 @foreach ( dynamic th in guide.Headers )
5229 {
5230 <th style="background: @productColorCode" class="text-center text-white">
5231 <img class="p-img" src="@th.Icon" alt="@th.Header">
5232 <br>
5233 @th.Header
5234 </th>
5235 }
5236 </tr>
5237 </thead>
5238 <tbody>
5239 @foreach ( dynamic tr in guide.Rows )
5240 {
5241 <tr>
5242 @foreach ( dynamic td in tr.Row )
5243 {
5244 <td class="text-center">
5245 @td.Value
5246 </td>
5247 }
5248 </tr>
5249 }
5250 </tbody>
5251 </table>
5252
5253 if ( dietFeedingGuides.Count > 1 )
5254 {
5255 @:</div>
5256
5257 tabCounter++;
5258
5259 if(tabCounter == dietFeedingGuides.Count)
5260 {
5261 @:</div>
5262 }
5263 }
5264 }
5265 }
5266 </div>
5267 </div>
5268 </div>
5269 }
5270
5271 int productPanelsItemId = 0;
5272
5273 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
5274 {
5275 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
5276
5277 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
5278 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
5279 {
5280 string productPanelNameValue = productPanel.GetValue<string>("Name");
5281
5282 if(productPanelNameValue == "Premium Content")
5283 {
5284 <div class="col-12" id="js-dvp-product-premium-content">
5285 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5286 <div class="row">
5287 <div class="col-12 is-loading">
5288 <div class="e-loading-spinner"></div>
5289 </div>
5290 </div>
5291 </div>
5292 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template">
5293 <div class="js-dvp-product-premium-content-animate fade">
5294 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5295 <div class="row">
5296 <div class="col-12 col-md-4">
5297 <div class="e-product-section-header">
5298 <h2 class="mb-1 mb-md-0">
5299 @Translate("Premium Content","Premium Content")
5300 </h2>
5301 </div>
5302 </div>
5303 <div class="col-12 col-md-8 mt-half">
5304 {{#each premiumPages}}
5305 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
5306 <div class="col-12 col-md-6">
5307 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
5308 </div>
5309 <div class="col-12 col-md-6">
5310 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
5311 <p>{{searchFriendlyDescription}}</p>
5312 <p>
5313 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}">
5314 {{searchFriendlyButtonText}}
5315 </a>
5316 </p>
5317 </div>
5318 </div>
5319 {{/each}}
5320 </div>
5321 </div>
5322 </div>
5323 </div>
5324 </script>
5325 </div>
5326 }
5327 else if(productPanelNameValue == "Supportmaterials for vets")
5328 {
5329 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
5330 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5331 <div class="row">
5332 <div class="col-12 is-loading">
5333 <div class="e-loading-spinner"></div>
5334 </div>
5335 </div>
5336 </div>
5337 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
5338 <div class="js-dvp-product-supportmaterials-vets-animate fade">
5339 {{#if vetSupportmaterials.items}}
5340 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5341 <div class="row">
5342 {{#if vetSupportmaterials.display}}
5343 <div class="col-12 col-md-4">
5344 <div class="e-product-section-header">
5345 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
5346 </div>
5347 </div>
5348 <div class="col-12 col-md-8 mt-half">
5349 {{#each vetSupportmaterials.items}}
5350
5351 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}">
5352 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
5353 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
5354 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
5355 </p>
5356
5357 <div class="row">
5358 <div class="col-12">
5359 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
5360 <div class="row">
5361 <div class="col-12 pl-md-3">
5362 <div class="row">
5363 {{#each materials}}
5364 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
5365 <div class="row">
5366 <div class="col-12 col-md-6 text-center">
5367 {{#if download}}
5368 {{#if loginToDownload}}
5369 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
5370 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5371 </a>
5372 {{else}}
5373 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
5374 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5375 </a>
5376 {{/if}}
5377 {{else}}
5378 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5379 {{/if}}
5380 </div>
5381 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
5382 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
5383
5384 {{#if loginToDownload}}
5385 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
5386 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
5387 </a>
5388 {{else}}
5389 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
5390 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
5391 </a>
5392 {{/if}}
5393
5394 @if(shopIsActive && hasAccess)
5395 {
5396 @:{{#if orderable}}
5397 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
5398 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
5399 <input type="hidden" name="CartCmd" value="Add">
5400 <input type="hidden" name="ProductID" value="{{id}}">
5401 <input type="hidden" name="VariantID" value="">
5402 <input type="hidden" name="UnitID" value="">
5403 <input type="hidden" name="Redirect" value="false">
5404 <input type="hidden" name="Quantity" value="1">
5405 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
5406 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
5407 </form>
5408 @:{{/if}}
5409 }
5410 </div>
5411 </div>
5412 </div>
5413 {{/each}}
5414 </div>
5415 </div>
5416 </div>
5417 </div>
5418 </div>
5419 </div>
5420 {{/each}}
5421 </div>
5422 {{else}}
5423 <div class="col-12 text-center">
5424 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p>
5425 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
5426 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
5427 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
5428 </div>
5429 {{/if}}
5430 </div>
5431 </div>
5432 {{/if}}
5433 </div>
5434 </script>
5435
5436 </div>
5437 }
5438 else if(productPanelNameValue == "Supportmaterials for pet owners")
5439 {
5440 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
5441 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5442 <div class="row">
5443 <div class="col-12 is-loading">
5444 <div class="e-loading-spinner"></div>
5445 </div>
5446 </div>
5447 </div>
5448 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
5449 <div class="js-dvp-product-supportmaterials-clients-animate fade">
5450 {{#if clientSupportmaterials.items}}
5451 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5452 <div class="row">
5453 {{#if clientSupportmaterials.display}}
5454 <div class="col-12 col-md-4">
5455 <div class="e-product-section-header">
5456 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
5457 </div>
5458 </div>
5459 <div class="col-12 col-md-8 mt-half">
5460 {{#each clientSupportmaterials.items}}
5461
5462 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}">
5463 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
5464 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
5465 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
5466 </p>
5467
5468 <div class="row">
5469 <div class="col-12">
5470 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
5471 <div class="row">
5472 <div class="col-12 pl-md-3">
5473 <div class="row">
5474 {{#each materials}}
5475 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
5476 <div class="row">
5477 <div class="col-12 col-md-6 text-center">
5478 {{#if download}}
5479 {{#if loginToDownload}}
5480 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
5481 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5482 </a>
5483 {{else}}
5484 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
5485 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5486 </a>
5487 {{/if}}
5488 {{else}}
5489 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5490 {{/if}}
5491 </div>
5492 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
5493 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
5494 {{#if download}}
5495 <p class="mb-1">
5496 {{#if loginToDownload}}
5497 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a>
5498 {{else}}
5499 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
5500 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
5501 </a>
5502 {{/if}}
5503 </p>
5504 {{/if}}
5505
5506 @if(shopIsActive && hasAccess)
5507 {
5508 @:{{#if orderable}}
5509 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
5510 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
5511 <input type="hidden" name="CartCmd" value="Add">
5512 <input type="hidden" name="ProductID" value="{{id}}">
5513 <input type="hidden" name="VariantID" value="">
5514 <input type="hidden" name="UnitID" value="">
5515 <input type="hidden" name="Redirect" value="false">
5516 <input type="hidden" name="Quantity" value="1">
5517 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
5518 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
5519 </form>
5520 @:{{/if}}
5521 }
5522
5523 </div>
5524 </div>
5525 </div>
5526 {{/each}}
5527 </div>
5528 </div>
5529 </div>
5530 </div>
5531 </div>
5532 </div>
5533 {{/each}}
5534 </div>
5535 {{else}}
5536 <div class="col-12 text-center">
5537 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p>
5538 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
5539 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
5540 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
5541 </div>
5542 {{/if}}
5543 </div>
5544 </div>
5545 {{/if}}
5546 </div>
5547 </script>
5548
5549 </div>
5550 }
5551 else if(productPanelNameValue == "Videos")
5552 {
5553 <div class="col-12" id="js-dvp-product-videos">
5554 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5555 <div class="row">
5556 <div class="col-12 is-loading">
5557 <div class="e-loading-spinner"></div>
5558 </div>
5559 </div>
5560 </div>
5561 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
5562 <div class="js-dvp-product-videos-animate fade">
5563 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5564 <div class="row">
5565 {{#if display}}
5566 <div class="col-12 col-md-4">
5567 <div class="e-product-section-header">
5568 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
5569 </div>
5570 </div>
5571 <div class="col-12 col-md-8 mt-half">
5572 {{#compare totalVideoCount '>' 4}}
5573 <div class="collapse-peek">
5574 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
5575 {{/compare}}
5576 <div class="row">
5577 {{#each videos}}
5578 {{#each videos}}
5579 <div class="col-12 col-md-6">
5580 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}">
5581 <div>
5582 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
5583 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
5584 </div>
5585 </a>
5586 <sc{{handlebarHack}}ript type="application/json">
5587 {
5588 "url":"{{../url}}",
5589 "header":"{{embedTitle}}",
5590 "embedUrl":"{{{embedUrl}}}"
5591 }
5592 </sc{{handlebarHack}}ript>
5593 </div>
5594 {{/each}}
5595 {{/each}}
5596 </div>
5597 {{#compare totalVideoCount '>' 4}}
5598 </div>
5599 <div class="collapse-peek-toggle">
5600 <div class="row">
5601 <div class="col-12 mx-auto text-center">
5602 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
5603 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
5604 </a>
5605 </div>
5606 </div>
5607 </div>
5608 {{/compare}}
5609 </div>
5610 </div>
5611 {{else}}
5612 <div class="col-12 text-center">
5613 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p>
5614 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
5615 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
5616 </div>
5617 {{/if}}
5618 </div>
5619 </div>
5620 </div>
5621 </script>
5622 </div>
5623 }
5624 else if(productPanelNameValue == "Related ranges")
5625 {
5626 <div class="col-12">
5627 @if( GetLoop("RelatedRanges").Count() > 0 )
5628 {
5629 string relatedProductsHeader = Translate("Other related products","Other related products");
5630
5631 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
5632 {
5633 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
5634 }
5635 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5636 <div class="row">
5637 <div class="col-12 col-md-4">
5638 <div class="e-product-section-header">
5639 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
5640 </div>
5641 </div>
5642 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
5643 <div class="row">
5644 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
5645 {
5646 string relatedRangeGroupId = "";
5647
5648 int relatedProductInt = 0;
5649 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
5650 string relatedRangeName = relatedRange.GetString("Range");
5651 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
5652 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
5653
5654 <div class="col-12 col-lg-6 mb-3">
5655 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
5656 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
5657 </div>
5658 <div class="col-12 px-1 pt-1 border dvp-range">
5659 <div>
5660 <div class="row">
5661 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
5662 {
5663 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
5664
5665 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
5666
5667 if(relatedProductInt == 2)
5668 {
5669 @:</div>
5670 @:</div>
5671 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
5672 @:<div class="row">
5673 }
5674
5675 string relatedUrl = string.Empty;
5676
5677 string relatedUrlFriendlyProduct = string.Empty;
5678
5679 string relatedProductName = product.GetString("Ecom:Product.Name");
5680
5681 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
5682
5683 string relatedProductDisplayName = relatedProductName;
5684 string relatedProductTitleName = relatedProductName;
5685
5686 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
5687 {
5688 if(hideRelatedProductName)
5689 {
5690 relatedProductDisplayName = relatedRangeNameSuperscripted;
5691 relatedProductTitleName = relatedRangeName;
5692 }
5693 else
5694 {
5695 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
5696 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
5697 }
5698 }
5699
5700 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
5701 {
5702 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
5703 }
5704 else
5705 {
5706 relatedUrl = relatedProductName;
5707 }
5708
5709 if(relatedProductsInRangeCount > 1)
5710 {
5711 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
5712 }
5713
5714 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
5715
5716 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
5717
5718 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
5719 <a href="@relatedProductUrl" title="@relatedProductTitleName">
5720 <div class="row">
5721 <div class="col-12 dvp-image-container">
5722 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
5723 </div>
5724 <div class="col-12">
5725 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
5726 </div>
5727 </div>
5728 </a>
5729 </div>
5730
5731 relatedProductInt++;
5732 }
5733 </div>
5734 </div>
5735 <div class="row mt-1 dvp-view-more-products">
5736 @if(relatedProductsInRangeCount > 2)
5737 {
5738 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
5739
5740 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
5741
5742 if(relatedProductsInRangeCount == 3 )
5743 {
5744 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
5745 }
5746
5747 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
5748
5749 <div class="col-12">
5750 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
5751 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);">
5752 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
5753 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span>
5754 </a>
5755 </p>
5756 </div>
5757 }
5758 </div>
5759 </div>
5760 </div>
5761 }
5762 </div>
5763 </div>
5764 </div>
5765 </div>
5766 }
5767 </div>
5768 }
5769 else if(productPanelNameValue == "Newsletter")
5770 {
5771 <div class="col-12">
5772 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5773 <div class="row">
5774 <div class="col-12 col-md-4">
5775 <div class="e-product-section-header">
5776 <h2 class="mb-1 mb-md-0">Newsletter</h2>
5777 </div>
5778 </div>
5779 <div class="col-12 col-md-8">
5780 <div class="dvp-newsletter-signup-form">
5781 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
5782 <div class="form-group">
5783 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
5784 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
5785 </div>
5786 <div class="form-group">
5787 <button type="submit" class="btn btn-primary">Sign up</button>
5788 </div>
5789 </form>
5790 </div>
5791 </div>
5792 </div>
5793 </div>
5794 </div>
5795 }
5796 else if(productPanelNameValue == "eLearning")
5797 {
5798 <div class="col-12" id="js-dvp-product-elearning">
5799 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5800 <div class="row">
5801 <div class="col-12 is-loading">
5802 <div class="e-loading-spinner"></div>
5803 </div>
5804 </div>
5805 </div>
5806 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
5807 <div class="js-dvp-product-elearning-animate fade">
5808 {{#if elearning.items}}
5809 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5810 <div class="row">
5811 <div class="col-12 col-md-4">
5812 <div class="e-product-section-header">
5813 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
5814 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
5815 </div>
5816 </div>
5817 <div class="col-12 col-md-8">
5818 <h3>
5819 {{elearning.items.0.courseAmountText}}
5820 </h3>
5821 <div class="row">
5822 <div class="col-12">
5823 <div class="list-group">
5824 {{#if elearning.display}}
5825 {{#each elearning.items.0.courses}}
5826 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
5827 <b>{{name}}</b>
5828 </a>
5829 {{/each}}
5830 {{else}}
5831 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
5832 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
5833 {{/if}}
5834 </div>
5835 </div>
5836 </div>
5837 {{#unless elearning.display}}
5838 <div class="row mt-2">
5839 <div class="col-12">
5840 <div class="bg-academy">
5841 <div class="row p-2">
5842 @{
5843 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
5844 }
5845 <div class="col-12">
5846 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3>
5847 </div>
5848 <div class="col-12 col-md-8 text-white">
5849 <ul class="mb-0">
5850 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
5851 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
5852 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
5853 </ul>
5854 </div>
5855 <div class="col-12 col-md-4 pt-2">
5856 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
5857 </div>
5858 </div>
5859 </div>
5860 </div>
5861 </div>
5862 {{/unless}}
5863 </div>
5864 </div>
5865 </div>
5866 {{/if}}
5867 </div>
5868 </script>
5869 </div>
5870 }
5871 else if(productPanelNameValue == "Product Websites")
5872 {
5873 <div class="col-12" id="js-dvp-product-websites">
5874 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5875 <div class="row">
5876 <div class="col-12 is-loading">
5877 <div class="e-loading-spinner"></div>
5878 </div>
5879 </div>
5880 </div>
5881 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
5882 <div class="js-dvp-product-websites-animate fade">
5883 {{#if websites.items}}
5884 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5885 <div class="row">
5886 {{#if websites.display}}
5887 <div class="col-12 col-md-4">
5888 <div class="e-product-section-header">
5889 <h2 class="mb-1 mb-md-0">
5890 {{#compare count '>' 1}}
5891 @Translate("Product Websites","Product Websites")
5892 {{else}}
5893 @Translate("Product Website","Product Website")
5894 {{/compare}}
5895 </h2>
5896 </div>
5897 </div>
5898 <div class="col-12 col-md-8 mt-half">
5899 {{#each websites.items.0.website}}
5900 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
5901 <div class="col-12 col-md-6">
5902 <p class="lead">
5903 {{name}}
5904 </p>
5905 <p>
5906 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
5907 @Translate("Go to website","Go to website")
5908 </a>
5909 </p>
5910 </div>
5911 <div class="col-12 col-md-6">
5912 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
5913 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
5914 </a>
5915 </div>
5916 </div>
5917 {{/each}}
5918 </div>
5919 {{else}}
5920 <div class="col-12 text-center">
5921 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p>
5922 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
5923 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
5924 </div>
5925 {{/if}}
5926 </div>
5927 </div>
5928 {{/if}}
5929 </div>
5930 </script>
5931 </div>
5932 }
5933 else if(productPanelNameValue == "Previous Premium Content")
5934 {
5935 <div class="col-12" id="js-dvp-product-previous-premium-content">
5936 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5937 <div class="row">
5938 <div class="col-12 is-loading">
5939 <div class="e-loading-spinner"></div>
5940 </div>
5941 </div>
5942 </div>
5943 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template">
5944 <div class="js-dvp-product-previous-premium-content-animate fade">
5945 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5946 <div class="row">
5947 <div class="col-12 col-md-4">
5948 <div class="e-product-section-header">
5949 <h2 class="mb-1 mb-md-0">
5950 @Translate("Previous Premium Content","Premium Content")
5951 </h2>
5952 </div>
5953 </div>
5954 <div class="col-12 col-md-8 mt-half">
5955 {{#each premiumPages}}
5956 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
5957 <div class="col-12 col-md-6">
5958 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
5959 </div>
5960 <div class="col-12 col-md-6">
5961 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
5962 <p>{{searchFriendlyDescription}}</p>
5963 <p>
5964 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}">
5965 {{searchFriendlyButtonText}}
5966 </a>
5967 </p>
5968 </div>
5969 </div>
5970 {{/each}}
5971 </div>
5972 </div>
5973 </div>
5974 </div>
5975 </script>
5976 </div>
5977 }
5978 else if(productPanelNameValue == "Frequent Treatment Questions")
5979 {
5980 <div class="col-12" id="js-dvp-product-faq">
5981 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5982 <div class="row">
5983 <div class="col-12 is-loading">
5984 <div class="e-loading-spinner"></div>
5985 </div>
5986 </div>
5987 </div>
5988 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
5989 <div class="js-dvp-product-faq-animate fade">
5990 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5991 <div class="row">
5992 {{#if display}}
5993 <div class="col-12 col-md-4">
5994 <div class="e-product-section-header">
5995 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
5996 </div>
5997 </div>
5998 <div class="col-12 col-md-8 mt-half dvp-faq">
5999 {{# faqs}}
6000 {{#each faq}}
6001 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
6002 <div class="row">
6003 <div class="col-12">
6004 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
6005 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
6006 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
6007 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
6008 </h3>
6009 </div>
6010 </div>
6011 <div class="row">
6012 <div class="col-12">
6013 <div class="collapse" id="collapse-{{paragraphId}}">
6014 <div class="row">
6015 <div class="col-12 pl-3">
6016 {{#each faqList}}
6017 <div class="row">
6018 <div class="col-12 mt-1">
6019 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}">
6020 {{listHeader}}
6021 </a>
6022 <sc{{handlebarHack}}ript type="application/json">
6023 {
6024 "url":"{{../../url}}",
6025 "categoryName": "{{../categoryName}}",
6026 "header":"{{listHeader}}",
6027 "content":"{{{listContent}}}"
6028 }
6029 </sc{{handlebarHack}}ript>
6030 </div>
6031 </div>
6032 {{/each}}
6033 </div>
6034 </div>
6035 </div>
6036 </div>
6037 </div>
6038 </div>
6039 {{/each}}
6040 {{/faqs}}
6041
6042 {{#each accordions}}
6043 <div class="p col-12 p-accordion" id="{{paragraphID}}">
6044 {{#if introText}}
6045 <div class="p-accordion-lead">
6046 {{{introText}}}
6047 </div>
6048 {{/if}}
6049 <div class="p-accordion-container ">
6050 {{#each accordionItems}}
6051 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
6052 <div class="p-accordion-toggle">
6053 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false">
6054 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
6055 {{heading}}
6056 </span>
6057 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
6058 </p>
6059 </div>
6060 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
6061 <div class="px-2 pb-1 p-accordion-content">
6062 <div class="p-txt-container dvp-rich-text-content pt-1">
6063 {{{text}}}
6064 </div>
6065 </div>
6066 </div>
6067 </div>
6068 {{/each}}
6069 </div>
6070 </div>
6071 {{/each}}
6072
6073
6074 </div>
6075 {{else}}
6076 <div class="col-12 text-center">
6077 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p>
6078 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
6079 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
6080 </div>
6081 {{/if}}
6082 </div>
6083 </div>
6084 </div>
6085 </script>
6086 </div>
6087 }
6088 else if(productPanelNameValue == "Got More Questions form")
6089 {
6090 <div class="col-12 js-dvp-product-details-more-info-section">
6091 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6092 <div class="row">
6093 <div class="col-12 col-md-4">
6094 <div class="e-product-section-header">
6095 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
6096 </div>
6097 </div>
6098 <div class="p col-12 col-md-8 mt-half">
6099 @{
6100 int currentPageId;
6101
6102 int.TryParse(pageId, out currentPageId);
6103
6104 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
6105
6106 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
6107
6108 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
6109 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
6110
6111 int formPageId;
6112 int formParagraphId;
6113
6114 int.TryParse(formPageIdString, out formPageId);
6115 int.TryParse(formParagraphIdString, out formParagraphId);
6116
6117 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
6118 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
6119
6120 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
6121
6122 }
6123 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
6124 </div>
6125 </div>
6126 </div>
6127 </div>
6128 }
6129 }
6130 </div>
6131 }
6132
6133 }
6134 else if(productType.GetBoolean("Ecom:Product:Field.IsPharma"))
6135 {
6136 string rangeName = range.GetString("Range");
6137 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
6138 string rangeId = string.Empty;
6139 string therapyAreaId = string.Empty;
6140 string therapyAreaName = string.Empty;
6141 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
6142 string optionalName = string.Empty;
6143 string displayName = string.Empty;
6144 string displayNameSuperscripted = string.Empty;
6145 string groupId = string.Empty;
6146 string productName = string.Empty;
6147 string productDisplayName = string.Empty;
6148 string urlFriendlyProductName = string.Empty;
6149 string productShortDescription = string.Empty;
6150 string productShortDescriptionJSON = string.Empty;
6151 string productActives = string.Empty;
6152 string productActivesJSON = string.Empty;
6153 string productPackSize = string.Empty;
6154 string productWithdrawalPeriod = string.Empty;
6155 string productDatasheet = string.Empty;
6156 string productPackInsert = string.Empty;
6157 string productSPC = string.Empty;
6158 string productMSDS = string.Empty;
6159 bool hasDocuments = true;
6160 string productDisclaimer = string.Empty;
6161 string productDisclaimerJSON = string.Empty;
6162 string productImage = string.Empty;
6163 string productUrl = string.Empty;
6164 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
6165
6166 if(productsInRangeCount > 1)
6167 {
6168 <div class="row">
6169 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
6170 <h1 class="mb-1 font-weight-bold">
6171 @rangeNameSuperscripted
6172 </h1>
6173 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
6174 {
6175
6176 groupId = product.GetString("Ecom:Group.ID");
6177
6178 productName = product.GetString("Ecom:Product.Name");
6179 productDisplayName = productName;
6180 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
6181
6182 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
6183 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
6184
6185 optionalName = product.GetString("Ecom:Product:Field.OptionalName");
6186
6187 if(!string.IsNullOrEmpty(optionalName))
6188 {
6189 displayName = optionalName;
6190 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>");
6191 }
6192 else
6193 {
6194 displayName = rangeName;
6195 displayNameSuperscripted = rangeNameSuperscripted;
6196 }
6197
6198 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
6199 {
6200 productDisplayName = displayNameSuperscripted + " " + productName;
6201 }
6202
6203 rangeId = "0";
6204 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value")))
6205 {
6206 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value");
6207 }
6208
6209 therapyAreaId = "0";
6210 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value")))
6211 {
6212 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value");
6213 }
6214
6215 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel");
6216
6217 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value");
6218 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"",""");
6219
6220 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");
6221 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value");
6222
6223 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value");
6224 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value");
6225 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value");
6226 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value");
6227
6228 hasDocuments = true;
6229
6230 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
6231 {
6232 hasDocuments = false;
6233 }
6234
6235 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value");
6236 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"",""");
6237
6238 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
6239 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName;
6240
6241 <a class="js-dvp-product-list-details" href="@productUrl" title="@displayName - @productName" data-productname="@urlFriendlyProductName">
6242 <div class="row px-sm-1 my-2 my-sm-0">
6243 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
6244 <div class="row">
6245 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
6246 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
6247 </div>
6248 <div class="col-9 col-sm-8 px-sm-2 my-auto">
6249 <p class="mb-0">
6250 @if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
6251 {
6252 <b>@productDisplayName</b>
6253 }
6254 else
6255 {
6256 <b class="h3">@displayNameSuperscripted</b>
6257 <br> @productDisplayName
6258 }
6259 </p>
6260 </div>
6261 <div class="col-2 d-none d-sm-block my-auto text-center">
6262 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
6263 </div>
6264 </div>
6265 <script type="application/json" class="@urlFriendlyProductName">
6266 {
6267 "Name":"@productDisplayName",
6268 "ShortDescription":"@productShortDescriptionJSON",
6269 "Image":"@productImage",
6270 "Actives":"@productActivesJSON",
6271 "PackSize":"@productPackSize",
6272 "WithdrawalPeriod":"@productWithdrawalPeriod",
6273 "Datasheet":"@productDatasheet",
6274 "PackInsert":"@productPackInsert",
6275 "SPC":"@productSPC",
6276 "MSDS":"@productMSDS",
6277 "HasDocuments":"@hasDocuments",
6278 "Disclaimer":"@productDisclaimerJSON"
6279 }
6280 </script>
6281 </div>
6282 </div>
6283 </a>
6284 }
6285 </div>
6286 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-4 pb-4 mt-sm-0 pl-sm-3 align-self-center dvp-product-details">
6287 <div class="js-dvp-product-details-animate fade">
6288 <div class="row">
6289 <div class="col-12">
6290 <div class="e-product-image-container dvp-product-details-image-container text-center">
6291 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="dvp-product-details-image" alt="@productDisplayName">
6292 </div>
6293 </div>
6294 </div>
6295 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
6296 {
6297 <div class="row">
6298 <div class="col-12">
6299 @productShortDescriptionJSON
6300 </div>
6301 </div>
6302 }
6303 <div class="row">
6304 <div class="col-12 mt-2 table-responsive">
6305 <table class="table">
6306 @if(!string.IsNullOrEmpty(productActives))
6307 {
6308 <tr>
6309 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
6310 <td>@productActives</td>
6311 </tr>
6312 }
6313 @if(!string.IsNullOrEmpty(productPackSize))
6314 {
6315 <tr>
6316 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
6317 <td>@productPackSize</td>
6318 </tr>
6319 }
6320 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
6321 {
6322 <tr>
6323 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
6324 <td>@productWithdrawalPeriod</td>
6325 </tr>
6326 }
6327 @if(hasDocuments)
6328 {
6329 <tr>
6330 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
6331 <td>
6332 @if(!string.IsNullOrEmpty(productDatasheet))
6333 {
6334 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productDatasheet">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a>
6335 }
6336 @if(!string.IsNullOrEmpty(productPackInsert))
6337 {
6338 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productPackInsert">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a>
6339 }
6340 @if(!string.IsNullOrEmpty(productSPC))
6341 {
6342 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productSPC">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a>
6343 }
6344 @if(!string.IsNullOrEmpty(productMSDS))
6345 {
6346 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="@productMSDS">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a>
6347 }
6348 </td>
6349 </tr>
6350 }
6351 </table>
6352 </div>
6353 </div>
6354 @if(!string.IsNullOrEmpty(productDisclaimer))
6355 {
6356 <div class="row">
6357 <div class="col-12">
6358 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
6359 <small>
6360 @productDisclaimer
6361 </small>
6362 </div>
6363 </div>
6364 }
6365 @if(!hideRequestmoreinformation)
6366 {
6367 <div class="row">
6368 <div class="col-12">
6369 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button>
6370 </div>
6371 </div>
6372 }
6373 </div>
6374 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
6375 <div class="js-dvp-product-details-animate fade">
6376
6377 <div class="e-product-image-container dvp-product-details-image-container text-center">
6378 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="dvp-product-details-image" alt="{{Name}}">
6379 </div>
6380 {{#if ShortDescription}}
6381 <div class="dvp-short-description">
6382 {{{ShortDescription}}}
6383 </div>
6384 {{/if}}
6385 <div class="row">
6386 <div class="col-12 mt-2 table-responsive">
6387 <table class="table">
6388 {{#if Actives}}
6389 <tr>
6390 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
6391 <td>{{{Actives}}}</td>
6392 </tr>
6393 {{/if}}
6394 {{#if PackSize}}
6395 <tr>
6396 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
6397 <td>{{PackSize}}</td>
6398 </tr>
6399 {{/if}}
6400 {{#if WithdrawalPeriod}}
6401 <tr>
6402 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
6403 <td>{{{WithdrawalPeriod}}}</td>
6404 </tr>
6405 {{/if}}
6406 {{#compare HasDocuments '===' 'True'}}
6407 <tr>
6408 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
6409 <td>
6410 {{#if Datasheet}}
6411 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{Datasheet}}">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a>
6412 {{/if}}
6413 {{#if PackInsert}}
6414 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{PackInsert}}">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a>
6415 {{/if}}
6416 {{#if SPC}}
6417 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{SPC}}">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a>
6418 {{/if}}
6419 {{#if MSDS}}
6420 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="{{MSDS}}">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a>
6421 {{/if}}
6422 </td>
6423 </tr>
6424 {{/compare}}
6425 </table>
6426 </div>
6427 </div>
6428 {{#if Disclaimer}}
6429 <div class="row mt-1">
6430 <div class="col-12">
6431 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
6432 <small>
6433 {{{Disclaimer}}}
6434 </small>
6435 </div>
6436 </div>
6437 {{/if}}
6438 @if(!hideRequestmoreinformation)
6439 {
6440 <div class="row">
6441 <div class="col-12">
6442 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button>
6443 </div>
6444 </div>
6445 }
6446 </div>
6447 </script>
6448 </div>
6449 </div>
6450 }
6451 else
6452 {
6453 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
6454 {
6455
6456 groupId = product.GetString("Ecom:Group.ID");
6457
6458 productName = product.GetString("Ecom:Product.Name");
6459
6460 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
6461
6462 optionalName = product.GetString("Ecom:Product:Field.OptionalName");
6463
6464 if(!string.IsNullOrEmpty(optionalName))
6465 {
6466 displayName = optionalName;
6467 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>");
6468 }
6469
6470 rangeId = "0";
6471 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value")))
6472 {
6473 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value");
6474 }
6475
6476 therapyAreaId = "0";
6477 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value")))
6478 {
6479 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value");
6480 }
6481
6482 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel");
6483
6484 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value");
6485 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");;
6486 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value");
6487
6488 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value");
6489 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value");
6490 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value");
6491 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value");
6492
6493 hasDocuments = true;
6494
6495 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
6496 {
6497 hasDocuments = false;
6498 }
6499
6500 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value");
6501
6502 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
6503 }
6504 <div class="row dvp-product-details">
6505 <div class="col-12">
6506 <div class="row">
6507 <div class="col-12">
6508 <h1 class="mb-1 font-weight-bold">
6509 @rangeNameSuperscripted
6510 </h1>
6511 </div>
6512 </div>
6513 </div>
6514 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
6515 <div class="row">
6516 <div class="col-12">
6517 <div class="e-product-image-container dvp-product-details-image-container text-center">
6518 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="dvp-product-details-image" alt="@productName">
6519 </div>
6520 </div>
6521 </div>
6522 </div>
6523 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 pb-4 mt-sm-0 pl-sm-3">
6524 @if(!string.IsNullOrEmpty(optionalName))
6525 {
6526 <div class="row">
6527 <div class="col-12">
6528 <h2 class="mb-0">@displayNameSuperscripted</h2>
6529 </div>
6530 </div>
6531 }
6532 @if(!string.IsNullOrEmpty(productShortDescription))
6533 {
6534 <div class="row">
6535 <div class="col-12">
6536 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
6537 </div>
6538 </div>
6539 }
6540 <div class="row">
6541 <div class="col-12 mt-2 table-responsive">
6542 <table class="table">
6543 @if(!string.IsNullOrEmpty(productActives))
6544 {
6545 <tr>
6546 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
6547 <td>@productActives</td>
6548 </tr>
6549 }
6550 @if(!string.IsNullOrEmpty(productPackSize))
6551 {
6552 <tr>
6553 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
6554 <td>@productPackSize</td>
6555 </tr>
6556 }
6557 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
6558 {
6559 <tr>
6560 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
6561 <td>@productWithdrawalPeriod</td>
6562 </tr>
6563 }
6564 @if(hasDocuments)
6565 {
6566 <tr>
6567 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
6568 <td>
6569 @if(!string.IsNullOrEmpty(productDatasheet))
6570 {
6571 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productDatasheet">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a>
6572 }
6573 @if(!string.IsNullOrEmpty(productPackInsert))
6574 {
6575 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productPackInsert">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a>
6576 }
6577 @if(!string.IsNullOrEmpty(productSPC))
6578 {
6579 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productSPC">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a>
6580 }
6581 @if(!string.IsNullOrEmpty(productMSDS))
6582 {
6583 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="@productMSDS">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a>
6584 }
6585 </td>
6586 </tr>
6587 }
6588 </table>
6589 </div>
6590 </div>
6591 @if(!string.IsNullOrEmpty(productDisclaimer))
6592 {
6593 <div class="row mt-1">
6594 <div class="col-12">
6595 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
6596 <small>
6597 @productDisclaimer
6598 </small>
6599 </div>
6600 </div>
6601 }
6602 @if(!hideRequestmoreinformation)
6603 {
6604 <div class="row">
6605 <div class="col-12">
6606 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button>
6607 </div>
6608 </div>
6609 }
6610 </div>
6611 </div>
6612 }
6613
6614 int productPanelsItemId = 0;
6615
6616 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
6617 {
6618 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
6619
6620 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
6621 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
6622 {
6623 string productPanelNameValue = productPanel.GetValue<string>("Name");
6624
6625 if(productPanelNameValue == "Supportmaterials for vets")
6626 {
6627 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
6628 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6629 <div class="row">
6630 <div class="col-12 is-loading">
6631 <div class="e-loading-spinner"></div>
6632 </div>
6633 </div>
6634 </div>
6635 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
6636 <div class="js-dvp-product-supportmaterials-vets-animate fade">
6637 {{#if vetSupportmaterials.items}}
6638 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6639 <div class="row">
6640 {{#if vetSupportmaterials.display}}
6641 <div class="col-12 col-md-4">
6642 <div class="e-product-section-header">
6643 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
6644 </div>
6645 </div>
6646 <div class="col-12 col-md-8 mt-half">
6647 {{#each vetSupportmaterials.items}}
6648
6649 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}">
6650 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
6651 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
6652 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
6653 </p>
6654
6655 <div class="row">
6656 <div class="col-12">
6657 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
6658 <div class="row">
6659 <div class="col-12 pl-md-3">
6660 <div class="row">
6661 {{#each materials}}
6662 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
6663 <div class="row">
6664 <div class="col-12 col-md-6 text-center">
6665 {{#if download}}
6666 {{#if loginToDownload}}
6667 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
6668 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6669 </a>
6670 {{else}}
6671 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
6672 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6673 </a>
6674 {{/if}}
6675 {{else}}
6676 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6677 {{/if}}
6678 </div>
6679 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
6680 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
6681
6682 {{#if loginToDownload}}
6683 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
6684 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
6685 </a>
6686 {{else}}
6687 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians">
6688 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
6689 </a>
6690 {{/if}}
6691
6692 @if(shopIsActive && hasAccess)
6693 {
6694 @:{{#if orderable}}
6695 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
6696 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
6697 <input type="hidden" name="CartCmd" value="Add">
6698 <input type="hidden" name="ProductID" value="{{id}}">
6699 <input type="hidden" name="VariantID" value="">
6700 <input type="hidden" name="UnitID" value="">
6701 <input type="hidden" name="Redirect" value="false">
6702 <input type="hidden" name="Quantity" value="1">
6703 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
6704 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
6705 </form>
6706 @:{{/if}}
6707 }
6708 </div>
6709 </div>
6710 </div>
6711 {{/each}}
6712 </div>
6713 </div>
6714 </div>
6715 </div>
6716 </div>
6717 </div>
6718 {{/each}}
6719 </div>
6720 {{else}}
6721 <div class="col-12 text-center">
6722 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p>
6723 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
6724 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
6725 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
6726 </div>
6727 {{/if}}
6728 </div>
6729 </div>
6730 {{/if}}
6731 </div>
6732 </script>
6733
6734 </div>
6735 }
6736 else if(productPanelNameValue == "Supportmaterials for pet owners")
6737 {
6738 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
6739 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6740 <div class="row">
6741 <div class="col-12 is-loading">
6742 <div class="e-loading-spinner"></div>
6743 </div>
6744 </div>
6745 </div>
6746 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
6747 <div class="js-dvp-product-supportmaterials-clients-animate fade">
6748 {{#if clientSupportmaterials.items}}
6749 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6750 <div class="row">
6751 {{#if clientSupportmaterials.display}}
6752 <div class="col-12 col-md-4">
6753 <div class="e-product-section-header">
6754 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
6755 </div>
6756 </div>
6757 <div class="col-12 col-md-8 mt-half">
6758 {{#each clientSupportmaterials.items}}
6759
6760 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}">
6761 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
6762 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
6763 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
6764 </p>
6765
6766 <div class="row">
6767 <div class="col-12">
6768 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
6769 <div class="row">
6770 <div class="col-12 pl-md-3">
6771 <div class="row">
6772 {{#each materials}}
6773 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
6774 <div class="row">
6775 <div class="col-12 col-md-6 text-center">
6776 {{#if download}}
6777 {{#if loginToDownload}}
6778 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
6779 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6780 </a>
6781 {{else}}
6782 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
6783 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6784 </a>
6785 {{/if}}
6786 {{else}}
6787 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6788 {{/if}}
6789 </div>
6790 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
6791 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
6792 {{#if download}}
6793 <p class="mb-1">
6794 {{#if loginToDownload}}
6795 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a>
6796 {{else}}
6797 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients">
6798 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
6799 </a>
6800 {{/if}}
6801 </p>
6802 {{/if}}
6803
6804 @if(shopIsActive && hasAccess)
6805 {
6806 @:{{#if orderable}}
6807 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
6808 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
6809 <input type="hidden" name="CartCmd" value="Add">
6810 <input type="hidden" name="ProductID" value="{{id}}">
6811 <input type="hidden" name="VariantID" value="">
6812 <input type="hidden" name="UnitID" value="">
6813 <input type="hidden" name="Redirect" value="false">
6814 <input type="hidden" name="Quantity" value="1">
6815 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
6816 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
6817 </form>
6818 @:{{/if}}
6819 }
6820
6821 </div>
6822 </div>
6823 </div>
6824 {{/each}}
6825 </div>
6826 </div>
6827 </div>
6828 </div>
6829 </div>
6830 </div>
6831 {{/each}}
6832 </div>
6833 {{else}}
6834 <div class="col-12 text-center">
6835 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p>
6836 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p>
6837 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
6838 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
6839 </div>
6840 {{/if}}
6841 </div>
6842 </div>
6843 {{/if}}
6844 </div>
6845 </script>
6846
6847 </div>
6848 }
6849 else if(productPanelNameValue == "Videos")
6850 {
6851 <div class="col-12" id="js-dvp-product-videos">
6852 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6853 <div class="row">
6854 <div class="col-12 is-loading">
6855 <div class="e-loading-spinner"></div>
6856 </div>
6857 </div>
6858 </div>
6859 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
6860 <div class="js-dvp-product-videos-animate fade">
6861 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6862 <div class="row">
6863 {{#if display}}
6864 <div class="col-12 col-md-4">
6865 <div class="e-product-section-header">
6866 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
6867 </div>
6868 </div>
6869 <div class="col-12 col-md-8 mt-half">
6870 {{#compare totalVideoCount '>' 4}}
6871 <div class="collapse-peek">
6872 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
6873 {{/compare}}
6874 <div class="row">
6875 {{#each videos}}
6876 {{#each videos}}
6877 <div class="col-12 col-md-6">
6878 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}">
6879 <div>
6880 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
6881 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
6882 </div>
6883 </a>
6884 <sc{{handlebarHack}}ript type="application/json">
6885 {
6886 "url":"{{../url}}",
6887 "header":"{{embedTitle}}",
6888 "embedUrl":"{{{embedUrl}}}"
6889 }
6890 </sc{{handlebarHack}}ript>
6891 </div>
6892 {{/each}}
6893 {{/each}}
6894 </div>
6895 {{#compare totalVideoCount '>' 4}}
6896 </div>
6897 <div class="collapse-peek-toggle">
6898 <div class="row">
6899 <div class="col-12 mx-auto text-center">
6900 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
6901 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
6902 </a>
6903 </div>
6904 </div>
6905 </div>
6906 {{/compare}}
6907 </div>
6908 </div>
6909 {{else}}
6910 <div class="col-12 text-center">
6911 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p>
6912 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
6913 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
6914 </div>
6915 {{/if}}
6916 </div>
6917 </div>
6918 </div>
6919 </script>
6920 </div>
6921 }
6922 else if(productPanelNameValue == "Related ranges")
6923 {
6924 <div class="col-12">
6925 @if( GetLoop("RelatedRanges").Count() > 0 )
6926 {
6927 string relatedProductsHeader = Translate("Other related products","Other related products");
6928
6929 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
6930 {
6931 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
6932 }
6933 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6934 <div class="row">
6935 <div class="col-12 col-md-4">
6936 <div class="e-product-section-header">
6937 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
6938 </div>
6939 </div>
6940 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
6941 <div class="row">
6942 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
6943 {
6944 string relatedRangeGroupId = "";
6945
6946 int relatedProductInt = 0;
6947 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
6948 string relatedRangeName = relatedRange.GetString("Range");
6949 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
6950 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
6951
6952 <div class="col-12 col-lg-6 mb-3">
6953 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
6954 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
6955 </div>
6956 <div class="col-12 px-1 pt-1 border dvp-range">
6957 <div>
6958 <div class="row">
6959 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
6960 {
6961 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
6962
6963 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
6964
6965 if(relatedProductInt == 2)
6966 {
6967 @:</div>
6968 @:</div>
6969 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
6970 @:<div class="row">
6971 }
6972
6973 string relatedUrl = string.Empty;
6974
6975 string relatedUrlFriendlyProduct = string.Empty;
6976
6977 string relatedProductName = product.GetString("Ecom:Product.Name");
6978
6979 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
6980
6981 string relatedProductDisplayName = relatedProductName;
6982 string relatedProductTitleName = relatedProductName;
6983
6984 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
6985 {
6986 if(hideRelatedProductName)
6987 {
6988 relatedProductDisplayName = relatedRangeNameSuperscripted;
6989 relatedProductTitleName = relatedRangeName;
6990 }
6991 else
6992 {
6993 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
6994 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
6995 }
6996 }
6997
6998 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
6999 {
7000 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
7001 }
7002 else
7003 {
7004 relatedUrl = relatedProductName;
7005 }
7006
7007 if(relatedProductsInRangeCount > 1)
7008 {
7009 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
7010 }
7011
7012 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
7013
7014 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
7015
7016 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
7017 <a href="@relatedProductUrl" title="@relatedProductTitleName">
7018 <div class="row">
7019 <div class="col-12 dvp-image-container">
7020 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
7021 </div>
7022 <div class="col-12">
7023 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
7024 </div>
7025 </div>
7026 </a>
7027 </div>
7028
7029 relatedProductInt++;
7030 }
7031 </div>
7032 </div>
7033 <div class="row mt-1 dvp-view-more-products">
7034 @if(relatedProductsInRangeCount > 2)
7035 {
7036 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
7037
7038 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
7039
7040 if(relatedProductsInRangeCount == 3 )
7041 {
7042 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
7043 }
7044
7045 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
7046
7047 <div class="col-12">
7048 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
7049 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);">
7050 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
7051 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span>
7052 </a>
7053 </p>
7054 </div>
7055 }
7056 </div>
7057 </div>
7058 </div>
7059 }
7060 </div>
7061 </div>
7062 </div>
7063 </div>
7064 }
7065 </div>
7066 }
7067 else if(productPanelNameValue == "Newsletter")
7068 {
7069 <div class="col-12">
7070 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7071 <div class="row">
7072 <div class="col-12 col-md-4">
7073 <div class="e-product-section-header">
7074 <h2 class="mb-1 mb-md-0">Newsletter</h2>
7075 </div>
7076 </div>
7077 <div class="col-12 col-md-8">
7078 <div class="dvp-newsletter-signup-form">
7079 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
7080 <div class="form-group">
7081 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
7082 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
7083 </div>
7084 <div class="form-group">
7085 <button type="submit" class="btn btn-primary">Sign up</button>
7086 </div>
7087 </form>
7088 </div>
7089 </div>
7090 </div>
7091 </div>
7092 </div>
7093 }
7094 else if(productPanelNameValue == "eLearning")
7095 {
7096 <div class="col-12" id="js-dvp-product-elearning">
7097 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7098 <div class="row">
7099 <div class="col-12 is-loading">
7100 <div class="e-loading-spinner"></div>
7101 </div>
7102 </div>
7103 </div>
7104 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
7105 <div class="js-dvp-product-elearning-animate fade">
7106 {{#if elearning.items}}
7107 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7108 <div class="row">
7109 <div class="col-12 col-md-4">
7110 <div class="e-product-section-header">
7111 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
7112 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
7113 </div>
7114 </div>
7115 <div class="col-12 col-md-8">
7116 <h3>
7117 {{elearning.items.0.courseAmountText}}
7118 </h3>
7119 <div class="row">
7120 <div class="col-12">
7121 <div class="list-group">
7122 {{#if elearning.display}}
7123 {{#each elearning.items.0.courses}}
7124 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
7125 <b>{{name}}</b>
7126 </a>
7127 {{/each}}
7128 {{else}}
7129 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
7130 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
7131 {{/if}}
7132 </div>
7133 </div>
7134 </div>
7135 {{#unless elearning.display}}
7136 <div class="row mt-2">
7137 <div class="col-12">
7138 <div class="bg-academy">
7139 <div class="row p-2">
7140 @{
7141 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
7142 }
7143 <div class="col-12">
7144 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3>
7145 </div>
7146 <div class="col-12 col-md-8 text-white">
7147 <ul class="mb-0">
7148 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
7149 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
7150 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
7151 </ul>
7152 </div>
7153 <div class="col-12 col-md-4 pt-2">
7154 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
7155 </div>
7156 </div>
7157 </div>
7158 </div>
7159 </div>
7160 {{/unless}}
7161 </div>
7162 </div>
7163 </div>
7164 {{/if}}
7165 </div>
7166 </script>
7167 </div>
7168 }
7169 else if(productPanelNameValue == "Product Websites")
7170 {
7171 <div class="col-12" id="js-dvp-product-websites">
7172 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7173 <div class="row">
7174 <div class="col-12 is-loading">
7175 <div class="e-loading-spinner"></div>
7176 </div>
7177 </div>
7178 </div>
7179 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
7180 <div class="js-dvp-product-websites-animate fade">
7181 {{#if websites.items}}
7182 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7183 <div class="row">
7184 {{#if websites.display}}
7185 <div class="col-12 col-md-4">
7186 <div class="e-product-section-header">
7187 <h2 class="mb-1 mb-md-0">
7188 {{#compare count '>' 1}}
7189 @Translate("Product Websites","Product Websites")
7190 {{else}}
7191 @Translate("Product Website","Product Website")
7192 {{/compare}}
7193 </h2>
7194 </div>
7195 </div>
7196 <div class="col-12 col-md-8 mt-half">
7197 {{#each websites.items.0.website}}
7198 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}">
7199 <div class="col-12 col-md-6">
7200 <p class="lead">
7201 {{name}}
7202 </p>
7203 <p>
7204 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
7205 @Translate("Go to website","Go to website")
7206 </a>
7207 </p>
7208 </div>
7209 <div class="col-12 col-md-6">
7210 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}">
7211 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
7212 </a>
7213 </div>
7214 </div>
7215 {{/each}}
7216 </div>
7217 {{else}}
7218 <div class="col-12 text-center">
7219 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p>
7220 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
7221 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
7222 </div>
7223 {{/if}}
7224 </div>
7225 </div>
7226 {{/if}}
7227 </div>
7228 </script>
7229 </div>
7230 }
7231 else if(productPanelNameValue == "Frequent Treatment Questions")
7232 {
7233 <div class="col-12" id="js-dvp-product-faq">
7234 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7235 <div class="row">
7236 <div class="col-12 is-loading">
7237 <div class="e-loading-spinner"></div>
7238 </div>
7239 </div>
7240 </div>
7241 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
7242 <div class="js-dvp-product-faq-animate fade">
7243 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7244 <div class="row">
7245 {{#if display}}
7246 <div class="col-12 col-md-4">
7247 <div class="e-product-section-header">
7248 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
7249 </div>
7250 </div>
7251 <div class="col-12 col-md-8 mt-half dvp-faq">
7252 {{# faqs}}
7253 {{#each faq}}
7254 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
7255 <div class="row">
7256 <div class="col-12">
7257 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
7258 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
7259 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
7260 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
7261 </h3>
7262 </div>
7263 </div>
7264 <div class="row">
7265 <div class="col-12">
7266 <div class="collapse" id="collapse-{{paragraphId}}">
7267 <div class="row">
7268 <div class="col-12 pl-3">
7269 {{#each faqList}}
7270 <div class="row">
7271 <div class="col-12 mt-1">
7272 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}">
7273 {{listHeader}}
7274 </a>
7275 <sc{{handlebarHack}}ript type="application/json">
7276 {
7277 "url":"{{../../url}}",
7278 "categoryName": "{{../categoryName}}",
7279 "header":"{{listHeader}}",
7280 "content":"{{{listContent}}}"
7281 }
7282 </sc{{handlebarHack}}ript>
7283 </div>
7284 </div>
7285 {{/each}}
7286 </div>
7287 </div>
7288 </div>
7289 </div>
7290 </div>
7291 </div>
7292 {{/each}}
7293 {{/faqs}}
7294
7295 {{#each accordions}}
7296 <div class="p col-12 p-accordion" id="{{paragraphID}}">
7297 {{#if introText}}
7298 <div class="p-accordion-lead">
7299 {{{introText}}}
7300 </div>
7301 {{/if}}
7302 <div class="p-accordion-container ">
7303 {{#each accordionItems}}
7304 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
7305 <div class="p-accordion-toggle">
7306 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false">
7307 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
7308 {{heading}}
7309 </span>
7310 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
7311 </p>
7312 </div>
7313 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
7314 <div class="px-2 pb-1 p-accordion-content">
7315 <div class="p-txt-container dvp-rich-text-content pt-1">
7316 {{{text}}}
7317 </div>
7318 </div>
7319 </div>
7320 </div>
7321 {{/each}}
7322 </div>
7323 </div>
7324 {{/each}}
7325
7326
7327 </div>
7328 {{else}}
7329 <div class="col-12 text-center">
7330 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p>
7331 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
7332 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p>
7333 </div>
7334 {{/if}}
7335 </div>
7336 </div>
7337 </div>
7338 </script>
7339 </div>
7340 }
7341 else if(productPanelNameValue == "Got More Questions form")
7342 {
7343 <div class="col-12 js-dvp-product-details-more-info-section">
7344 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7345 <div class="row">
7346 <div class="col-12 col-md-4">
7347 <div class="e-product-section-header">
7348 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
7349 </div>
7350 </div>
7351 <div class="p col-12 col-md-8 mt-half">
7352 @{
7353 int currentPageId;
7354
7355 int.TryParse(pageId, out currentPageId);
7356
7357 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
7358
7359 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
7360
7361 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
7362 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
7363
7364 int formPageId;
7365 int formParagraphId;
7366
7367 int.TryParse(formPageIdString, out formPageId);
7368 int.TryParse(formParagraphIdString, out formParagraphId);
7369
7370 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
7371 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
7372
7373 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
7374
7375 }
7376 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
7377 </div>
7378 </div>
7379 </div>
7380 </div>
7381 }
7382 }
7383 </div>
7384 }
7385 }
7386 else if(productType.GetBoolean("Ecom:Product:Field.IsDiets"))
7387 {
7388 string rangeName = range.GetString("Range");
7389 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
7390 string groupId = string.Empty;
7391 string productName = string.Empty;
7392 string publicProductCode = string.Empty;
7393 string urlFriendlyProductName = string.Empty;
7394 string productShortDescription = string.Empty;
7395 string productShortDescriptionJSON = string.Empty;
7396 string productIngredients = string.Empty;
7397 string productIngredientsJSON = string.Empty;
7398 string productPackSize = string.Empty;
7399 string productDatasheet = string.Empty;
7400 string productImage = string.Empty;
7401 string productUrl = string.Empty;
7402
7403 if(productsInRangeCount > 1)
7404 {
7405 <div class="col-12 col-sm-6 pr-sm-3">
7406 <h1 class="mb-1 font-weight-bold">
7407 @rangeName
7408 </h1>
7409 @foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
7410 {
7411
7412 groupId = product.GetString("Ecom:Group.ID");
7413
7414 productName = product.GetString("Ecom:Product.Name");
7415
7416 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
7417
7418 urlFriendlyProductName = Regex.Replace(publicProductCode, @"[^A-Za-z0-9_\~]+", "-");
7419
7420 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
7421 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
7422
7423 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value");
7424 productIngredientsJSON = Regex.Replace(productIngredients, @"\t|\n|\r", " ");
7425
7426 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value");
7427 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value");
7428
7429 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
7430 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName;
7431
7432 <a class="js-dvp-product-list-details" href="@productUrl" title="@rangeName - @productName" data-productname="@urlFriendlyProductName">
7433 <div class="row px-sm-1">
7434 <div class="dvp-product-list-details col-12 p-sm-1">
7435 <div class="row">
7436 <div class="col-3 col-sm-2 my-auto text-center">
7437 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" class="p-img" alt="@productName">
7438 </div>
7439 <div class="col-9 col-sm-8 px-sm-2 my-auto">
7440 <p class="mb-0"><b class="h3">@rangeName</b><br> @productName</p>
7441 </div>
7442 <div class="col-2 d-none d-sm-block my-auto text-center">
7443 <i class="material-icons material-icons-5x">keyboard_arrow_right</i>
7444 </div>
7445 </div>
7446 <script type="application/json" class="@urlFriendlyProductName">
7447 {
7448 "Name":"@productName",
7449 "ShortDescription":"@productShortDescriptionJSON",
7450 "Image":"@productImage",
7451 "Ingredients":"@productIngredientsJSON",
7452 "PackSize":"@productPackSize",
7453 "Datasheet":"@productDatasheet"
7454 }
7455 </script>
7456 </div>
7457 </div>
7458 </a>
7459 }
7460 </div>
7461 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3 align-self-center dvp-details">
7462 <div class="js-dvp-product-details-animate fade">
7463 <div class="row">
7464 <div class="col-12">
7465 <div class="e-product-image-container">
7466 <div class="e-product-image-wrapper text-center">
7467 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="p-img" alt="@productName">
7468 </div>
7469 </div>
7470 </div>
7471 </div>
7472 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
7473 {
7474 <div class="row">
7475 <div class="col-12">
7476 @productShortDescriptionJSON
7477 </div>
7478 </div>
7479 }
7480 <div class="row">
7481 <div class="col-12 mt-2 table-responsive">
7482 <table class="table">
7483 @if(!string.IsNullOrEmpty(productIngredientsJSON))
7484 {
7485 <tr>
7486 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
7487 <td>@productIngredientsJSON</td>
7488 </tr>
7489 }
7490 @if(!string.IsNullOrEmpty(productPackSize))
7491 {
7492 <tr>
7493 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
7494 <td>@productPackSize</td>
7495 </tr>
7496 }
7497 @if(!string.IsNullOrEmpty(productDatasheet))
7498 {
7499 <tr>
7500 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
7501 <td><a target="_blank" class="btn btn-sm btn-primary mr-1" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td>
7502 </tr>
7503 }
7504 </table>
7505 </div>
7506 </div>
7507 </div>
7508 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
7509 <div class="js-dvp-product-details-animate fade dvp-details">
7510 <div class="row">
7511 <div class="col-12">
7512 <div class="e-product-image-container">
7513 <div class="e-product-image-wrapper text-center">
7514 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="p-img" alt="{{Name}}">
7515 </div>
7516 </div>
7517 </div>
7518 </div>
7519 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
7520 {
7521 <div class="row">
7522 <div class="col-12">
7523 {{{ShortDescription}}}
7524 </div>
7525 </div>
7526 }
7527 <div class="row">
7528 <div class="col-12 mt-2 table-responsive">
7529 <table class="table">
7530 @if(!string.IsNullOrEmpty(productIngredientsJSON))
7531 {
7532 <tr>
7533 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
7534 <td>{{Ingredients}}</td>
7535 </tr>
7536 }
7537 @if(!string.IsNullOrEmpty(productPackSize))
7538 {
7539 <tr>
7540 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
7541 <td>{{PackSize}}</td>
7542 </tr>
7543 }
7544 @if(!string.IsNullOrEmpty(productDatasheet))
7545 {
7546 <tr>
7547 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
7548 <td><a target="_blank" class="btn btn-sm btn-primary mr-1" href="{{Datasheet}}">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td>
7549 </tr>
7550 }
7551 </table>
7552 </div>
7553 </div>
7554 </div>
7555 </script>
7556 </div>
7557 }
7558 else
7559 {
7560 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
7561 {
7562 groupId = product.GetString("Ecom:Group.ID");
7563
7564 productName = product.GetString("Ecom:Product.Name");
7565
7566 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
7567
7568 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
7569
7570 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value");
7571 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value");
7572 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value");
7573
7574 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
7575 }
7576 <div class="col-12">
7577 <div class="row">
7578 <div class="col-12">
7579 <h1 class="mb-1 font-weight-bold">
7580 @rangeName
7581 </h1>
7582 </div>
7583 </div>
7584 </div>
7585 <div class="col-12 col-sm-6 pr-sm-3">
7586 <div class="row">
7587 <div class="col-12">
7588 <div class="e-product-image-container">
7589 <div class="e-product-image-wrapper text-center">
7590 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" class="p-img" alt="@productName">
7591 </div>
7592 </div>
7593 </div>
7594 </div>
7595 </div>
7596 <div class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3">
7597 @if(!string.IsNullOrEmpty(productShortDescription))
7598 {
7599 <div class="row">
7600 <div class="col-12">
7601 @productShortDescription
7602 </div>
7603 </div>
7604 }
7605 <div class="row">
7606 <div class="col-12 mt-2 table-responsive">
7607 <table class="table">
7608 @if(!string.IsNullOrEmpty(productIngredients))
7609 {
7610 <tr>
7611 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
7612 <td>@productIngredients</td>
7613 </tr>
7614 }
7615 @if(!string.IsNullOrEmpty(productPackSize))
7616 {
7617 <tr>
7618 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
7619 <td>@productPackSize</td>
7620 </tr>
7621 }
7622 @if(!string.IsNullOrEmpty(productDatasheet))
7623 {
7624 <tr>
7625 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
7626 <td><a target="_blank" class="btn btn-sm btn-secondary" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td>
7627 </tr>
7628 }
7629 </table>
7630 </div>
7631 </div>
7632 </div>
7633 }
7634
7635 <div class="col-12" id="js-dvp-product-supportmaterials">
7636 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0">
7637 <div class="row">
7638 <div class="col-12 is-loading">
7639 <div class="e-loading-spinner"></div>
7640 </div>
7641 </div>
7642 </div>
7643 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials" type="text/x-handlebars-template">
7644 <div class="js-dvp-product-supportmaterials-animate fade">
7645 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0 border-bottom-0">
7646 <div class="row">
7647 <div class="col-12 col-md-4">
7648 <div class="e-product-section-header">
7649 <h2 class="m-a-0">@Translate("Supplementary Materials","Supplementary Materials")</h2>
7650 </div>
7651 </div>
7652 <div class="col-12 col-md-8 mt-half">
7653 {{#each supportmaterials}}
7654 <div class="row pb-1">
7655 <div class="col-12">
7656 <p class="collapsed mb-1 font-weight-bold dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-supportmaterials-{{categoryId}}">
7657 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
7658 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
7659 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
7660 </p>
7661 </div>
7662 </div>
7663 <div class="row">
7664 <div class="col-12">
7665 <div class="collapse" id="collapse-details-supportmaterials-{{categoryId}}">
7666 <div class="row">
7667 <div class="col-12 pl-3 pb-2">
7668 <div class="row border border-top-0 border-right-0 border-left-0">
7669 {{#each materials}}
7670 <div class="col-12 col-md-6 py-2">
7671 <div class="row">
7672 <div class="col-12 col-md-6 text-center">
7673 <img class="p-img" src="{{imageLarge}}" alt="{{name}}">
7674 </div>
7675 <div class="col-12 col-md-6 pr-1 mt-1">
7676 <p class="font-weight-bold">{{name}}</p>
7677 {{#if download}}
7678 <a target="_blank" href="{{url}}"><i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u></a>
7679 {{/if}}
7680 </div>
7681 </div>
7682 </div>
7683 {{/each}}
7684 </div>
7685 </div>
7686 </div>
7687 </div>
7688 </div>
7689 </div>
7690 {{/each}}
7691 </div>
7692 </div>
7693 </div>
7694 </div>
7695 </script>
7696 </div>
7697 }
7698 else
7699 {
7700 <div class="card text-white bg-danger mt-3 mx-auto" style="width: 850px;">
7701 <div class="card-header py-2">
7702 <h2 class="m-0 text-center text-white">ERROR!</h2>
7703 </div>
7704 <div class="card-body py-2">
7705 <h1 class="card-text m-0 text-center text-white">This product range group is <br>missing a ProductCategory</h1>
7706 </div>
7707 <div class="card-footer py-2">
7708 <h3 class="m-0 text-center text-white">Fix this to show products</h3>
7709 </div>
7710 </div>
7711 }
7712 <code class="d-none js-e-breadcrumb-item-go-back-link">
7713 <li class="breadcrumb-go-back-link breadcrumb-item m-0 p-0">
7714 <a href="javascript:history.back();">
7715 <span>@Translate("Go back","Go back")</span>
7716 </a>
7717 </li>
7718 </code>
7719 }
7720 }
7721 else
7722 {
7723 <div class="row mt-2">
7724 @signIn()
7725 </div>
7726 }
7727 }
7728 }
7729