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_a150c3cfaeb04e7e97d875015bae3925.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 4415
at CompiledRazorTemplates.Dynamic.RazorEngine_a150c3cfaeb04e7e97d875015bae3925.Execute() in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4508
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 {{#if FeedingGuideImage}}
1315 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
1316 <div class="row">
1317 <div class="col-12 col-md-4">
1318 <div class="e-product-section-header">
1319 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2>
1320 </div>
1321 </div>
1322 <div class="col-12 col-md-8">
1323 <img src="{{FeedingGuideImage}}" class="p-img"/>
1324 </div>
1325 </div>
1326 </div>
1327 {{/if}}
1328 {{#if NutrientTableImage}}
1329 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
1330 <div class="row">
1331 <div class="col-12 col-md-4">
1332 <div class="e-product-section-header">
1333 <h2 class="mb-1 mb-md-0">@Translate( "Nutrient table","Nutrient table")</h2>
1334 </div>
1335 </div>
1336 <div class="col-12 col-md-8">
1337 <img src="{{NutrientTableImage}}" class="p-img"/>
1338 </div>
1339 </div>
1340 </div>
1341 {{/if}}
1342 </script>
1343 </div>
1344 </div>
1345 }
1346 else
1347 {
1348 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
1349 {
1350
1351 groupId = product.GetString("Ecom:Group.ID");
1352
1353 productName = product.GetString("Ecom:Product.Name");
1354 productNameJSON = productName.Replace("\"",""");
1355
1356 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
1357
1358 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
1359
1360 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
1361 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
1362
1363 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
1364
1365 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
1366
1367 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
1368
1369 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
1370
1371 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
1372 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
1373 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");;
1374 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
1375
1376 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
1377
1378 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
1379 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
1380 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
1381 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
1382
1383 hasDocuments = true;
1384
1385 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
1386 {
1387 hasDocuments = false;
1388 }
1389
1390 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value");
1391 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
1392 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
1393 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText);
1394
1395 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
1396 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
1397 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
1398
1399 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
1400 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
1401
1402 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
1403
1404 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>");
1405
1406 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
1407
1408 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
1409
1410 }
1411 <div class="row e-product dvp-product-details">
1412 <div class="col-12">
1413 <div class="row">
1414 <div class="col-12">
1415 <h1 class="mb-1 font-weight-bold">
1416 @rangeNameSuperscripted
1417 </h1>
1418 </div>
1419 </div>
1420 </div>
1421 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
1422 <div class="row">
1423 <div class="col-12">
1424 <div class="e-product-image-container single-range">
1425 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
1426 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")">
1427 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
1428 <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">
1429 </div>
1430
1431 @for(int i = 0; i < images.Count(); i++)
1432 {
1433 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
1434 <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)">
1435 </div>
1436 }
1437 </div>
1438 @if(images.Any())
1439 {
1440 <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>
1441 <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>
1442 <ol class="carousel-indicators">
1443 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
1444 <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>
1445 </li>
1446 @for(int i = 0; i < images.Count(); i++)
1447 {
1448 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)">
1449 <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>
1450 </li>
1451 }
1452 </ol>
1453 }
1454 </div>
1455 </div>
1456 </div>
1457 </div>
1458 </div>
1459 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3">
1460 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
1461 @if(!string.IsNullOrEmpty(optionalName))
1462 {
1463 <div class="row">
1464 <div class="col-12">
1465 <h2 class="mb-0">@displayNameSuperscripted</h2>
1466 </div>
1467 </div>
1468 }
1469 @if(!string.IsNullOrEmpty(productShortDescription))
1470 {
1471 <div class="row">
1472 <div class="col-12">
1473 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
1474 </div>
1475 </div>
1476 }
1477 <div class="row">
1478 <div class="col-12 mt-2 table-responsive">
1479 <table class="table">
1480 @if(!string.IsNullOrEmpty(productActives))
1481 {
1482 <tr>
1483 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
1484 <td>@productActives</td>
1485 </tr>
1486 }
1487 @if(!string.IsNullOrEmpty(productPackSize))
1488 {
1489 <tr>
1490 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
1491 <td>@productPackSize</td>
1492 </tr>
1493 }
1494 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
1495 {
1496 <tr>
1497 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
1498 <td>@productWithdrawalPeriod</td>
1499 </tr>
1500 }
1501 @if(!string.IsNullOrEmpty(productStorageCondition))
1502 {
1503 <tr>
1504 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
1505 <td>@productStorageCondition</td>
1506 </tr>
1507 }
1508 @if(hasDocuments)
1509 {
1510 <tr>
1511 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
1512 <td>
1513 @if(!string.IsNullOrEmpty(productDatasheet))
1514 {
1515 if ( showProductFileTypeDatasheet )
1516 {
1517 <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">
1518 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
1519 </a>
1520 }
1521 else
1522 {
1523 <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")">
1524 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
1525 </a>
1526 }
1527 }
1528 @if(!string.IsNullOrEmpty(productPackInsert))
1529 {
1530 if ( showProductFileTypePackInsert )
1531 {
1532 <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">
1533 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
1534 </a>
1535 }
1536 else
1537 {
1538 <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")">
1539 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
1540 </a>
1541 }
1542 }
1543 @if(!string.IsNullOrEmpty(productSPC))
1544 {
1545 if ( showProductFileTypeSPC )
1546 {
1547 <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">
1548 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
1549 </a>
1550 }
1551 else
1552 {
1553 <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")">
1554 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
1555 </a>
1556 }
1557 }
1558 @if(!string.IsNullOrEmpty(productMSDS))
1559 {
1560 if ( showProductFileTypeMSDS )
1561 {
1562 <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">
1563 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
1564 </a>
1565 }
1566 else
1567 {
1568 <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")">
1569 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
1570 </a>
1571 }
1572 }
1573 </td>
1574 </tr>
1575 }
1576 </table>
1577 </div>
1578 </div>
1579 @if(!string.IsNullOrEmpty(productShopInformation))
1580 {
1581 <div class="row mt-1">
1582 <div class="col-12">
1583 <div class="table-responsive">
1584 @productShopInformation
1585 </div>
1586 </div>
1587 </div>
1588 }
1589 @if(!string.IsNullOrEmpty(productDisclaimer))
1590 {
1591 <div class="row mt-1">
1592 <div class="col-12">
1593 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
1594 <small>
1595 @productDisclaimer
1596 </small>
1597 </div>
1598 </div>
1599 }
1600 @if ( showRewardButton )
1601 {
1602 <div class="row">
1603 <div class="col-12">
1604 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
1605 </div>
1606 <div class="col-12">
1607 <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">
1608 @productRewardButtonText
1609 </a>
1610 @if ( !hideRequestmoreinformation )
1611 {
1612 <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">
1613 @Translate("Talk with a Dechra member","Talk with a Dechra member")
1614 </button>
1615 }
1616 @if ( showRewardAdditionalLink )
1617 {
1618 <p class="mb-1 mt-1 small">
1619 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
1620 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
1621 </a>
1622 </p>
1623 }
1624 </div>
1625 </div>
1626 }
1627 else
1628 {
1629 if ( !hideRequestmoreinformation )
1630 {
1631 <div class="row">
1632 <div class="col-12">
1633 <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">
1634 @Translate( "Request more information", "Request more information" )
1635 </button>
1636 </div>
1637 </div>
1638 }
1639 }
1640 </div>
1641 </div>
1642 }
1643
1644 int productPanelsItemId = 0;
1645
1646 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
1647 {
1648 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
1649
1650 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
1651 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
1652 {
1653 string productPanelNameValue = productPanel.GetValue<string>("Name");
1654
1655 if(productPanelNameValue == "Premium Content")
1656 {
1657 <div class="col-12" id="js-dvp-product-premium-content">
1658 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1659 <div class="row">
1660 <div class="col-12 is-loading">
1661 <div class="e-loading-spinner"></div>
1662 </div>
1663 </div>
1664 </div>
1665 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template">
1666 <div class="js-dvp-product-premium-content-animate fade">
1667 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1668 <div class="row">
1669 <div class="col-12 col-md-4">
1670 <div class="e-product-section-header">
1671 <h2 class="mb-1 mb-md-0">
1672 @Translate("Premium Content","Premium Content")
1673 </h2>
1674 </div>
1675 </div>
1676 <div class="col-12 col-md-8 mt-half">
1677 {{#each premiumPages}}
1678 <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}}">
1679 <div class="col-12 col-md-6">
1680 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
1681 </div>
1682 <div class="col-12 col-md-6">
1683 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
1684 <p>{{searchFriendlyDescription}}</p>
1685 <p>
1686 <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}}">
1687 {{searchFriendlyButtonText}}
1688 </a>
1689 </p>
1690 </div>
1691 </div>
1692 {{/each}}
1693 </div>
1694 </div>
1695 </div>
1696 </div>
1697 </script>
1698 </div>
1699 }
1700 else if(productPanelNameValue == "Supportmaterials for vets")
1701 {
1702 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
1703 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1704 <div class="row">
1705 <div class="col-12 is-loading">
1706 <div class="e-loading-spinner"></div>
1707 </div>
1708 </div>
1709 </div>
1710 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
1711 <div class="js-dvp-product-supportmaterials-vets-animate fade">
1712 {{#if vetSupportmaterials.items}}
1713 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1714 <div class="row">
1715 {{#if vetSupportmaterials.display}}
1716 <div class="col-12 col-md-4">
1717 <div class="e-product-section-header">
1718 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
1719 </div>
1720 </div>
1721 <div class="col-12 col-md-8 mt-half">
1722 {{#each vetSupportmaterials.items}}
1723
1724 <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}}">
1725 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
1726 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
1727 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
1728 </p>
1729
1730 <div class="row">
1731 <div class="col-12">
1732 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
1733 <div class="row">
1734 <div class="col-12 pl-md-3">
1735 <div class="row">
1736 {{#each materials}}
1737 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
1738 <div class="row">
1739 <div class="col-12 col-md-6 text-center">
1740 {{#if download}}
1741 {{#if loginToDownload}}
1742 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
1743 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1744 </a>
1745 {{else}}
1746 <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">
1747 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1748 </a>
1749 {{/if}}
1750 {{else}}
1751 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1752 {{/if}}
1753 </div>
1754 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
1755 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
1756
1757 {{#if loginToDownload}}
1758 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
1759 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
1760 </a>
1761 {{else}}
1762 <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">
1763 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
1764 </a>
1765 {{/if}}
1766
1767 @if(shopIsActive && hasAccess)
1768 {
1769 @:{{#if orderable}}
1770 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
1771 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
1772 <input type="hidden" name="CartCmd" value="Add">
1773 <input type="hidden" name="ProductID" value="{{id}}">
1774 <input type="hidden" name="VariantID" value="">
1775 <input type="hidden" name="UnitID" value="">
1776 <input type="hidden" name="Redirect" value="false">
1777 <input type="hidden" name="Quantity" value="1">
1778 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
1779 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
1780 </form>
1781 @:{{/if}}
1782 }
1783 </div>
1784 </div>
1785 </div>
1786 {{/each}}
1787 </div>
1788 </div>
1789 </div>
1790 </div>
1791 </div>
1792 </div>
1793 {{/each}}
1794 </div>
1795 {{else}}
1796 <div class="col-12 text-center">
1797 <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>
1798 <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>
1799 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
1800 <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>
1801 </div>
1802 {{/if}}
1803 </div>
1804 </div>
1805 {{/if}}
1806 </div>
1807 </script>
1808
1809 </div>
1810 }
1811 else if(productPanelNameValue == "Supportmaterials for pet owners")
1812 {
1813 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
1814 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1815 <div class="row">
1816 <div class="col-12 is-loading">
1817 <div class="e-loading-spinner"></div>
1818 </div>
1819 </div>
1820 </div>
1821 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
1822 <div class="js-dvp-product-supportmaterials-clients-animate fade">
1823 {{#if clientSupportmaterials.items}}
1824 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1825 <div class="row">
1826 {{#if clientSupportmaterials.display}}
1827 <div class="col-12 col-md-4">
1828 <div class="e-product-section-header">
1829 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
1830 </div>
1831 </div>
1832 <div class="col-12 col-md-8 mt-half">
1833 {{#each clientSupportmaterials.items}}
1834
1835 <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}}">
1836 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
1837 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
1838 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
1839 </p>
1840
1841 <div class="row">
1842 <div class="col-12">
1843 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
1844 <div class="row">
1845 <div class="col-12 pl-md-3">
1846 <div class="row">
1847 {{#each materials}}
1848 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
1849 <div class="row">
1850 <div class="col-12 col-md-6 text-center">
1851 {{#if download}}
1852 {{#if loginToDownload}}
1853 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
1854 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1855 </a>
1856 {{else}}
1857 <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">
1858 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1859 </a>
1860 {{/if}}
1861 {{else}}
1862 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
1863 {{/if}}
1864 </div>
1865 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
1866 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
1867 {{#if download}}
1868 <p class="mb-1">
1869 {{#if loginToDownload}}
1870 <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>
1871 {{else}}
1872 <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">
1873 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
1874 </a>
1875 {{/if}}
1876 </p>
1877 {{/if}}
1878
1879 @if(shopIsActive && hasAccess)
1880 {
1881 @:{{#if orderable}}
1882 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
1883 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
1884 <input type="hidden" name="CartCmd" value="Add">
1885 <input type="hidden" name="ProductID" value="{{id}}">
1886 <input type="hidden" name="VariantID" value="">
1887 <input type="hidden" name="UnitID" value="">
1888 <input type="hidden" name="Redirect" value="false">
1889 <input type="hidden" name="Quantity" value="1">
1890 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
1891 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
1892 </form>
1893 @:{{/if}}
1894 }
1895
1896 </div>
1897 </div>
1898 </div>
1899 {{/each}}
1900 </div>
1901 </div>
1902 </div>
1903 </div>
1904 </div>
1905 </div>
1906 {{/each}}
1907 </div>
1908 {{else}}
1909 <div class="col-12 text-center">
1910 <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>
1911 <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>
1912 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
1913 <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>
1914 </div>
1915 {{/if}}
1916 </div>
1917 </div>
1918 {{/if}}
1919 </div>
1920 </script>
1921
1922 </div>
1923 }
1924 else if(productPanelNameValue == "Videos")
1925 {
1926 <div class="col-12" id="js-dvp-product-videos">
1927 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1928 <div class="row">
1929 <div class="col-12 is-loading">
1930 <div class="e-loading-spinner"></div>
1931 </div>
1932 </div>
1933 </div>
1934 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
1935 <div class="js-dvp-product-videos-animate fade">
1936 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
1937 <div class="row">
1938 {{#if display}}
1939 <div class="col-12 col-md-4">
1940 <div class="e-product-section-header">
1941 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
1942 </div>
1943 </div>
1944 <div class="col-12 col-md-8 mt-half">
1945 {{#compare totalVideoCount '>' 4}}
1946 <div class="collapse-peek">
1947 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
1948 {{/compare}}
1949 <div class="row">
1950 {{#each videos}}
1951 {{#each videos}}
1952 <div class="col-12 col-md-6">
1953 <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}}}">
1954 <div>
1955 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
1956 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
1957 </div>
1958 </a>
1959 <sc{{handlebarHack}}ript type="application/json">
1960 {
1961 "url":"{{../url}}",
1962 "header":"{{embedTitle}}",
1963 "embedUrl":"{{{embedUrl}}}"
1964 }
1965 </sc{{handlebarHack}}ript>
1966 </div>
1967 {{/each}}
1968 {{/each}}
1969 </div>
1970 {{#compare totalVideoCount '>' 4}}
1971 </div>
1972 <div class="collapse-peek-toggle">
1973 <div class="row">
1974 <div class="col-12 mx-auto text-center">
1975 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
1976 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
1977 </a>
1978 </div>
1979 </div>
1980 </div>
1981 {{/compare}}
1982 </div>
1983 </div>
1984 {{else}}
1985 <div class="col-12 text-center">
1986 <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>
1987 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
1988 <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>
1989 </div>
1990 {{/if}}
1991 </div>
1992 </div>
1993 </div>
1994 </script>
1995 </div>
1996 }
1997 else if(productPanelNameValue == "Related ranges")
1998 {
1999 <div class="col-12">
2000 @if( GetLoop("RelatedRanges").Count() > 0 )
2001 {
2002 string relatedProductsHeader = Translate("Other related products","Other related products");
2003
2004 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
2005 {
2006 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
2007 }
2008 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2009 <div class="row">
2010 <div class="col-12 col-md-4">
2011 <div class="e-product-section-header">
2012 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
2013 </div>
2014 </div>
2015 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
2016 <div class="row">
2017 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
2018 {
2019 string relatedRangeGroupId = "";
2020
2021 int relatedProductInt = 0;
2022 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
2023 string relatedRangeName = relatedRange.GetString("Range");
2024 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
2025 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
2026
2027 <div class="col-12 col-lg-6 mb-3">
2028 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
2029 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
2030 </div>
2031 <div class="col-12 px-1 pt-1 border dvp-range">
2032 <div>
2033 <div class="row">
2034 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
2035 {
2036 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
2037
2038 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
2039
2040 if(relatedProductInt == 2)
2041 {
2042 @:</div>
2043 @:</div>
2044 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
2045 @:<div class="row">
2046 }
2047
2048 string relatedUrl = string.Empty;
2049
2050 string relatedUrlFriendlyProduct = string.Empty;
2051
2052 string relatedProductName = product.GetString("Ecom:Product.Name");
2053
2054 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
2055
2056 string relatedProductDisplayName = relatedProductName;
2057 string relatedProductTitleName = relatedProductName;
2058
2059 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
2060 {
2061 if(hideRelatedProductName)
2062 {
2063 relatedProductDisplayName = relatedRangeNameSuperscripted;
2064 relatedProductTitleName = relatedRangeName;
2065 }
2066 else
2067 {
2068 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
2069 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
2070 }
2071 }
2072
2073 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
2074 {
2075 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
2076 }
2077 else
2078 {
2079 relatedUrl = relatedProductName;
2080 }
2081
2082 if(relatedProductsInRangeCount > 1)
2083 {
2084 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
2085 }
2086
2087 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
2088
2089 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
2090
2091 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
2092 <a href="@relatedProductUrl" title="@relatedProductTitleName">
2093 <div class="row">
2094 <div class="col-12 dvp-image-container">
2095 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
2096 </div>
2097 <div class="col-12">
2098 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
2099 </div>
2100 </div>
2101 </a>
2102 </div>
2103
2104 relatedProductInt++;
2105 }
2106 </div>
2107 </div>
2108 <div class="row mt-1 dvp-view-more-products">
2109 @if(relatedProductsInRangeCount > 2)
2110 {
2111 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
2112
2113 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
2114
2115 if(relatedProductsInRangeCount == 3 )
2116 {
2117 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
2118 }
2119
2120 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
2121
2122 <div class="col-12">
2123 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
2124 <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);">
2125 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
2126 <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>
2127 </a>
2128 </p>
2129 </div>
2130 }
2131 </div>
2132 </div>
2133 </div>
2134 }
2135 </div>
2136 </div>
2137 </div>
2138 </div>
2139 }
2140 </div>
2141 }
2142 else if(productPanelNameValue == "Newsletter")
2143 {
2144 <div class="col-12">
2145 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2146 <div class="row">
2147 <div class="col-12 col-md-4">
2148 <div class="e-product-section-header">
2149 <h2 class="mb-1 mb-md-0">Newsletter</h2>
2150 </div>
2151 </div>
2152 <div class="col-12 col-md-8">
2153 <div class="dvp-newsletter-signup-form">
2154 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
2155 <div class="form-group">
2156 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
2157 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
2158 </div>
2159 <div class="form-group">
2160 <button type="submit" class="btn btn-primary">Sign up</button>
2161 </div>
2162 </form>
2163 </div>
2164 </div>
2165 </div>
2166 </div>
2167 </div>
2168 }
2169 else if(productPanelNameValue == "eLearning")
2170 {
2171 <div class="col-12" id="js-dvp-product-elearning">
2172 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2173 <div class="row">
2174 <div class="col-12 is-loading">
2175 <div class="e-loading-spinner"></div>
2176 </div>
2177 </div>
2178 </div>
2179 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
2180 <div class="js-dvp-product-elearning-animate fade">
2181 {{#if elearning.items}}
2182 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2183 <div class="row">
2184 <div class="col-12 col-md-4">
2185 <div class="e-product-section-header">
2186 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
2187 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
2188 </div>
2189 </div>
2190 <div class="col-12 col-md-8">
2191 <h3>
2192 {{elearning.items.0.courseAmountText}}
2193 </h3>
2194 <div class="row">
2195 <div class="col-12">
2196 <div class="list-group">
2197 {{#if elearning.display}}
2198 {{#each elearning.items.0.courses}}
2199 <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}}">
2200 <b>{{name}}</b>
2201 </a>
2202 {{/each}}
2203 {{else}}
2204 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
2205 <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>
2206 {{/if}}
2207 </div>
2208 </div>
2209 </div>
2210 {{#unless elearning.display}}
2211 <div class="row mt-2">
2212 <div class="col-12">
2213 <div class="bg-academy">
2214 <div class="row p-2">
2215 @{
2216 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
2217 }
2218 <div class="col-12">
2219 <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>
2220 </div>
2221 <div class="col-12 col-md-8 text-white">
2222 <ul class="mb-0">
2223 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
2224 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
2225 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
2226 </ul>
2227 </div>
2228 <div class="col-12 col-md-4 pt-2">
2229 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
2230 </div>
2231 </div>
2232 </div>
2233 </div>
2234 </div>
2235 {{/unless}}
2236 </div>
2237 </div>
2238 </div>
2239 {{/if}}
2240 </div>
2241 </script>
2242 </div>
2243 }
2244 else if(productPanelNameValue == "Product Websites")
2245 {
2246 <div class="col-12" id="js-dvp-product-websites">
2247 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2248 <div class="row">
2249 <div class="col-12 is-loading">
2250 <div class="e-loading-spinner"></div>
2251 </div>
2252 </div>
2253 </div>
2254 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
2255 <div class="js-dvp-product-websites-animate fade">
2256 {{#if websites.items}}
2257 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2258 <div class="row">
2259 {{#if websites.display}}
2260 <div class="col-12 col-md-4">
2261 <div class="e-product-section-header">
2262 <h2 class="mb-1 mb-md-0">
2263 {{#compare count '>' 1}}
2264 @Translate("Product Websites","Product Websites")
2265 {{else}}
2266 @Translate("Product Website","Product Website")
2267 {{/compare}}
2268 </h2>
2269 </div>
2270 </div>
2271 <div class="col-12 col-md-8 mt-half">
2272 {{#each websites.items.0.website}}
2273 <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}}">
2274 <div class="col-12 col-md-6">
2275 <p class="lead">
2276 {{name}}
2277 </p>
2278 <p>
2279 <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}}">
2280 @Translate("Go to website","Go to website")
2281 </a>
2282 </p>
2283 </div>
2284 <div class="col-12 col-md-6">
2285 <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}}">
2286 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
2287 </a>
2288 </div>
2289 </div>
2290 {{/each}}
2291 </div>
2292 {{else}}
2293 <div class="col-12 text-center">
2294 <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>
2295 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
2296 <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>
2297 </div>
2298 {{/if}}
2299 </div>
2300 </div>
2301 {{/if}}
2302 </div>
2303 </script>
2304 </div>
2305 }
2306 else if(productPanelNameValue == "Previous Premium Content")
2307 {
2308 <div class="col-12" id="js-dvp-product-previous-premium-content">
2309 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2310 <div class="row">
2311 <div class="col-12 is-loading">
2312 <div class="e-loading-spinner"></div>
2313 </div>
2314 </div>
2315 </div>
2316 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template">
2317 <div class="js-dvp-product-previous-premium-content-animate fade">
2318 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2319 <div class="row">
2320 <div class="col-12 col-md-4">
2321 <div class="e-product-section-header">
2322 <h2 class="mb-1 mb-md-0">
2323 @Translate("Previous Premium Content","Premium Content")
2324 </h2>
2325 </div>
2326 </div>
2327 <div class="col-12 col-md-8 mt-half">
2328 {{#each premiumPages}}
2329 <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}}">
2330 <div class="col-12 col-md-6">
2331 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
2332 </div>
2333 <div class="col-12 col-md-6">
2334 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
2335 <p>{{searchFriendlyDescription}}</p>
2336 <p>
2337 <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}}">
2338 {{searchFriendlyButtonText}}
2339 </a>
2340 </p>
2341 </div>
2342 </div>
2343 {{/each}}
2344 </div>
2345 </div>
2346 </div>
2347 </div>
2348 </script>
2349 </div>
2350 }
2351 else if(productPanelNameValue == "Frequent Treatment Questions")
2352 {
2353 <div class="col-12" id="js-dvp-product-faq">
2354 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2355 <div class="row">
2356 <div class="col-12 is-loading">
2357 <div class="e-loading-spinner"></div>
2358 </div>
2359 </div>
2360 </div>
2361 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
2362 <div class="js-dvp-product-faq-animate fade">
2363 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2364 <div class="row">
2365 {{#if display}}
2366 <div class="col-12 col-md-4">
2367 <div class="e-product-section-header">
2368 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
2369 </div>
2370 </div>
2371 <div class="col-12 col-md-8 mt-half dvp-faq">
2372 {{# faqs}}
2373 {{#each faq}}
2374 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
2375 <div class="row">
2376 <div class="col-12">
2377 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
2378 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
2379 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
2380 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
2381 </h3>
2382 </div>
2383 </div>
2384 <div class="row">
2385 <div class="col-12">
2386 <div class="collapse" id="collapse-{{paragraphId}}">
2387 <div class="row">
2388 <div class="col-12 pl-3">
2389 {{#each faqList}}
2390 <div class="row">
2391 <div class="col-12 mt-1">
2392 <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}}">
2393 {{listHeader}}
2394 </a>
2395 <sc{{handlebarHack}}ript type="application/json">
2396 {
2397 "url":"{{../../url}}",
2398 "categoryName": "{{../categoryName}}",
2399 "header":"{{listHeader}}",
2400 "content":"{{{listContent}}}"
2401 }
2402 </sc{{handlebarHack}}ript>
2403 </div>
2404 </div>
2405 {{/each}}
2406 </div>
2407 </div>
2408 </div>
2409 </div>
2410 </div>
2411 </div>
2412 {{/each}}
2413 {{/faqs}}
2414
2415 {{#each accordions}}
2416 <div class="p col-12 p-accordion" id="{{paragraphID}}">
2417 {{#if introText}}
2418 <div class="p-accordion-lead">
2419 {{{introText}}}
2420 </div>
2421 {{/if}}
2422 <div class="p-accordion-container ">
2423 {{#each accordionItems}}
2424 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
2425 <div class="p-accordion-toggle">
2426 <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">
2427 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
2428 {{heading}}
2429 </span>
2430 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
2431 </p>
2432 </div>
2433 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
2434 <div class="px-2 pb-1 p-accordion-content">
2435 <div class="p-txt-container dvp-rich-text-content pt-1">
2436 {{{text}}}
2437 </div>
2438 </div>
2439 </div>
2440 </div>
2441 {{/each}}
2442 </div>
2443 </div>
2444 {{/each}}
2445
2446
2447 </div>
2448 {{else}}
2449 <div class="col-12 text-center">
2450 <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>
2451 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
2452 <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>
2453 </div>
2454 {{/if}}
2455 </div>
2456 </div>
2457 </div>
2458 </script>
2459 </div>
2460 }
2461 else if(productPanelNameValue == "Got More Questions form")
2462 {
2463 <div class="col-12 js-dvp-product-details-more-info-section">
2464 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
2465 <div class="row">
2466 <div class="col-12 col-md-4">
2467 <div class="e-product-section-header">
2468 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
2469 </div>
2470 </div>
2471 <div class="p col-12 col-md-8 mt-half">
2472 @{
2473 int currentPageId;
2474
2475 int.TryParse(pageId, out currentPageId);
2476
2477 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
2478
2479 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
2480
2481 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
2482 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
2483
2484 int formPageId;
2485 int formParagraphId;
2486
2487 int.TryParse(formPageIdString, out formPageId);
2488 int.TryParse(formParagraphIdString, out formParagraphId);
2489
2490 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
2491 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
2492
2493 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
2494
2495 }
2496 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
2497 </div>
2498 </div>
2499 </div>
2500 </div>
2501 }
2502 }
2503 </div>
2504 }
2505
2506 @:</div></div></div></div></div></section></article>
2507
2508 <footer class="bg-light">
2509 <article>
2510 <section class="e-section">
2511 <div class="container-fluid">
2512 <div class="row" id="js-dvp-product-footer">
2513 @if ( !string.IsNullOrEmpty(productFooterContent) )
2514 {
2515 <div class="col-12 mt-2 small">
2516 @productFooterContent
2517 </div>
2518 }
2519 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template">
2520 {{#if FooterContent}}
2521 <div class="col-12 mt-2 small">
2522 {{{FooterContent}}}
2523 </div>
2524 {{/if}}
2525 </script>
2526 </div>
2527 </div>
2528 </section>
2529 </article>
2530 </footer>
2531
2532 }
2533 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "supplies")
2534 {
2535 string rangeName = range.GetString("Range");
2536 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
2537 string rangeId = string.Empty;
2538 string therapyAreaId = string.Empty;
2539 string therapyAreaName = string.Empty;
2540 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
2541 string optionalName = string.Empty;
2542 string displayName = string.Empty;
2543 string displayNameSuperscripted = string.Empty;
2544 string groupId = string.Empty;
2545 string productName = string.Empty;
2546 string productNameJSON = string.Empty;
2547 string productDisplayName = string.Empty;
2548 string productDisplayNameSuperscripted = string.Empty;
2549 string urlFriendlyProductName = string.Empty;
2550 string productShortDescription = string.Empty;
2551 string productShortDescriptionJSON = string.Empty;
2552 string productActives = string.Empty;
2553 string productActivesJSON = string.Empty;
2554 string productStorageCondition = string.Empty;
2555 string productStorageConditionJSON = string.Empty;
2556 string productPackSize = string.Empty;
2557 string productWithdrawalPeriod = string.Empty;
2558 string lyticsTopics = string.Empty;
2559 string productDatasheet = string.Empty;
2560 string productPackInsert = string.Empty;
2561 string productSPC = string.Empty;
2562 string productMSDS = string.Empty;
2563 bool hasDocuments = true;
2564 string productDisclaimer = string.Empty;
2565 string productDisclaimerJSON = string.Empty;
2566 string productShopInformation = string.Empty;
2567 string productShopInformationJSON = string.Empty;
2568 string productImage = string.Empty;
2569 string productRewardButtonLink = string.Empty;
2570 string productRewardButtonLinkProcessed = string.Empty;
2571 string productRewardButtonText = string.Empty;
2572 bool showRewardButton = false;
2573 string productRewardAdditionalLink = string.Empty;
2574 string productRewardAdditionalLinkProcessed = string.Empty;
2575 bool showRewardAdditionalLink = false;
2576 bool productShowFooterContent = false;
2577 string productFooterContent = string.Empty;
2578 string productFooterContentJSON = string.Empty;
2579 List<string> images = new List<string>();
2580 string productUrl = string.Empty;
2581 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
2582 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames");
2583 string signInPage = Espresso.Page.Area.Item.GetValue<string>("SignUpPage");
2584
2585 <div class="row">
2586 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight">
2587 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template">
2588 {{#if premiumPages.0.searchFriendlyImageBanner}}
2589 <div class="js-dvp-product-premium-content-animate fade mb-2">
2590 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link">
2591 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" />
2592 </a>
2593 </div>
2594 {{/if}}
2595 </script>
2596 </div>
2597 </div>
2598
2599 if(productsInRangeCount > 1)
2600 {
2601 <div class="row e-product">
2602 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
2603 <h1 class="mb-1 font-weight-bold">
2604 @rangeNameSuperscripted
2605 </h1>
2606 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
2607 {
2608
2609 groupId = product.GetString("Ecom:Group.ID");
2610
2611 productName = product.GetString("Ecom:Product.Name");
2612 productNameJSON = productName.Replace("\"",""");
2613 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
2614
2615 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
2616 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
2617
2618 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
2619 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON;
2620
2621 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
2622
2623 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
2624 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
2625
2626 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
2627
2628 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
2629
2630 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
2631
2632 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
2633 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"",""");
2634
2635 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
2636 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"",""");
2637
2638 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
2639 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
2640
2641 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
2642 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
2643 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
2644 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
2645 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
2646
2647 hasDocuments = true;
2648
2649 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
2650 {
2651 hasDocuments = false;
2652 }
2653
2654
2655 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value" );
2656 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
2657 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
2658 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty( productRewardButtonText );
2659
2660 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
2661 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
2662 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
2663
2664 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
2665 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
2666
2667 if ( !string.IsNullOrEmpty(productFooterContent) )
2668 {
2669 string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))";
2670
2671 Match regexMatch = Regex.Match(productFooterContent, hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled, TimeSpan.FromSeconds(1));
2672
2673 while (regexMatch.Success)
2674 {
2675 string href = regexMatch.Groups[ 1 ].ToString();
2676 if ( href.ToLower().Contains("default.aspx?id=") )
2677 {
2678 productFooterContent = productFooterContent.Replace(href, SearchEngineFriendlyURLs.GetFriendlyUrl(href.Replace("/","")));
2679 }
2680 regexMatch = regexMatch.NextMatch();
2681 }
2682
2683 productFooterContentJSON = WebUtility.HtmlDecode(Regex.Replace(productFooterContent, @"\t|\n|\r", " "));
2684 }
2685 else
2686 {
2687 productFooterContentJSON = "";
2688 }
2689
2690 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
2691 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"",""");
2692
2693 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value");
2694 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>");
2695
2696 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}";
2697
2698 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
2699
2700 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
2701
2702 dynamic JSON = new {
2703 Name = productDisplayName,
2704 ShortDescription = productShortDescriptionJSON,
2705 Image = productImage,
2706 Images = images,
2707 Actives = productActivesJSON,
2708 StorageCondition = productStorageConditionJSON,
2709 PackSize = productPackSize,
2710 WithdrawalPeriod = productWithdrawalPeriod,
2711 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "",
2712 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "",
2713 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "",
2714 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "",
2715 ShowDatasheet = showProductFileTypeDatasheet,
2716 ShowPackInsert = showProductFileTypePackInsert,
2717 ShowSPC = showProductFileTypeSPC,
2718 ShowMSDS = showProductFileTypeMSDS,
2719 HasDocuments = hasDocuments,
2720 Disclaimer = productDisclaimerJSON,
2721 ShopInformation = productShopInformationJSON,
2722 ShowRewardButton = showRewardButton,
2723 RewardButtonLink = showRewardButton ? productRewardButtonLinkProcessed : "",
2724 RewardButtonText = showRewardButton ? productRewardButtonText : "",
2725 RewardAdditionalLink = showRewardAdditionalLink ? productRewardAdditionalLinkProcessed : "",
2726 FooterContent = productFooterContentJSON
2727 };
2728
2729 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName">
2730 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
2731 <div class="row px-sm-1 my-2 my-sm-0">
2732 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
2733 <div class="row">
2734 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
2735 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
2736 </div>
2737 <div class="col-9 col-sm-8 px-sm-2 my-auto">
2738 <p class="mb-0">
2739 @if (applyRangeNameToProductNames)
2740 {
2741 <b>@productDisplayNameSuperscripted</b>
2742 }
2743 else
2744 {
2745 <b class="h3">@displayNameSuperscripted</b>
2746 <br>
2747 @productDisplayNameSuperscripted
2748 }
2749 </p>
2750 </div>
2751 <div class="col-2 d-none d-sm-block my-auto text-center">
2752 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
2753 </div>
2754 </div>
2755 <script type="application/json" class="@urlFriendlyProductName">
2756 @JsonService.Instance.ToJson(JSON)
2757 </script>
2758 </div>
2759 </div>
2760 </a>
2761 }
2762 </div>
2763 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details">
2764 <div class="js-dvp-product-details-animate fade">
2765 <div class="row">
2766 <div class="col-12">
2767 <div class="e-product-image-container dvp-product-details-image-container text-center">
2768 <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">
2769 </div>
2770 </div>
2771 </div>
2772 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
2773 {
2774 <div class="row">
2775 <div class="col-12">
2776 @productShortDescriptionJSON
2777 </div>
2778 </div>
2779 }
2780 <div class="row">
2781 <div class="col-12 mt-2 table-responsive">
2782 <table class="table">
2783 @if(!string.IsNullOrEmpty(productActives))
2784 {
2785 <tr>
2786 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
2787 <td>@productActives</td>
2788 </tr>
2789 }
2790 @if(!string.IsNullOrEmpty(productPackSize))
2791 {
2792 <tr>
2793 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
2794 <td>@productPackSize</td>
2795 </tr>
2796 }
2797 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
2798 {
2799 <tr>
2800 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
2801 <td>@productWithdrawalPeriod</td>
2802 </tr>
2803 }
2804 @if(!string.IsNullOrEmpty(productStorageCondition))
2805 {
2806 <tr>
2807 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
2808 <td>@productStorageCondition</td>
2809 </tr>
2810 }
2811 @if(hasDocuments)
2812 {
2813 <tr>
2814 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
2815 <td>
2816 @if(!string.IsNullOrEmpty(productDatasheet))
2817 {
2818 if ( showProductFileTypeDatasheet )
2819 {
2820 <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">
2821 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
2822 </a>
2823 }
2824 else
2825 {
2826 <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")">
2827 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
2828 </a>
2829 }
2830 }
2831 @if(!string.IsNullOrEmpty(productPackInsert))
2832 {
2833 if ( showProductFileTypePackInsert )
2834 {
2835 <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">
2836 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
2837 </a>
2838 }
2839 else
2840 {
2841 <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")">
2842 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
2843 </a>
2844 }
2845 }
2846 @if(!string.IsNullOrEmpty(productSPC))
2847 {
2848 if ( showProductFileTypeSPC )
2849 {
2850 <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">
2851 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
2852 </a>
2853 }
2854 else
2855 {
2856 <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")">
2857 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
2858 </a>
2859 }
2860 }
2861 @if(!string.IsNullOrEmpty(productMSDS))
2862 {
2863 if ( showProductFileTypeMSDS )
2864 {
2865 <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">
2866 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
2867 </a>
2868 }
2869 else
2870 {
2871 <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")">
2872 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
2873 </a>
2874 }
2875 }
2876 </td>
2877 </tr>
2878 }
2879 </table>
2880 </div>
2881 </div>
2882 @if(!string.IsNullOrEmpty(productShopInformationJSON))
2883 {
2884 <div class="row">
2885 <div class="col-12">
2886 <div class="table-responsive">
2887 @productShopInformationJSON
2888 </div>
2889 </div>
2890 </div>
2891 }
2892 @if(!string.IsNullOrEmpty(productDisclaimer))
2893 {
2894 <div class="row">
2895 <div class="col-12">
2896 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
2897 <small>
2898 @productDisclaimer
2899 </small>
2900 </div>
2901 </div>
2902 }
2903 @if ( showRewardButton )
2904 {
2905 <div class="row">
2906 <div class="col-12">
2907 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
2908 </div>
2909 <div class="col-12">
2910 <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">
2911 @productRewardButtonText
2912 </a>
2913 @if ( !hideRequestmoreinformation )
2914 {
2915 <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">
2916 @Translate("Talk with a Dechra member","Talk with a Dechra member")
2917 </button>
2918 }
2919 @if ( showRewardAdditionalLink )
2920 {
2921 <p class="mb-1 mt-1 small">
2922 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
2923 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
2924 </a>
2925 </p>
2926 }
2927 </div>
2928 </div>
2929 }
2930 else
2931 {
2932 if ( !hideRequestmoreinformation )
2933 {
2934 <div class="row">
2935 <div class="col-12">
2936 <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">
2937 @Translate( "Request more information", "Request more information" )
2938 </button>
2939 </div>
2940 </div>
2941 }
2942 }
2943 </div>
2944 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
2945 <div class="js-dvp-product-details-animate fade">
2946 <div class="e-product-image-container multi-range">
2947 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
2948 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}">
2949 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
2950 <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">
2951 </div>
2952 {{#each Images}}
2953 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
2954 <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}}">
2955 </div>
2956 {{/each}}
2957 </div>
2958 {{#if Images}}
2959 <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>
2960 <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>
2961 <ol class="carousel-indicators">
2962 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
2963 <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>
2964 </li>
2965 {{#each Images}}
2966 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}">
2967 <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>
2968 </li>
2969 {{/each}}
2970 </ol>
2971 {{/if}}
2972 </div>
2973 </div>
2974 {{#if ShortDescription}}
2975 <div class="dvp-short-description">
2976 {{{ShortDescription}}}
2977 </div>
2978 {{/if}}
2979 <div class="row">
2980 <div class="col-12 mt-2 table-responsive">
2981 <table class="table">
2982 {{#if Actives}}
2983 <tr>
2984 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
2985 <td>{{{Actives}}}</td>
2986 </tr>
2987 {{/if}}
2988 {{#if PackSize}}
2989 <tr>
2990 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
2991 <td>{{PackSize}}</td>
2992 </tr>
2993 {{/if}}
2994 {{#if WithdrawalPeriod}}
2995 <tr>
2996 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
2997 <td>{{{WithdrawalPeriod}}}</td>
2998 </tr>
2999 {{/if}}
3000 {{#if StorageCondition}}
3001 <tr>
3002 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
3003 <td>{{{StorageCondition}}}</td>
3004 </tr>
3005 {{/if}}
3006 {{#if HasDocuments}}
3007 <tr>
3008 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
3009 <td>
3010 {{#if Datasheet}}
3011 {{#if ShowDatasheet}}
3012 <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}}">
3013 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i>
3014 </a>
3015 {{else}}
3016 <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")">
3017 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
3018 </a>
3019 {{/if}}
3020 {{/if}}
3021 {{#if PackInsert}}
3022 {{#if ShowPackInsert}}
3023 <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}}">
3024 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i>
3025 </a>
3026 {{else}}
3027 <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")">
3028 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
3029 </a>
3030 {{/if}}
3031 {{/if}}
3032 {{#if SPC}}
3033 {{#if ShowSPC}}
3034 <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}}">
3035 @Translate("SPC","SPC") <i class="material-icons">get_app</i>
3036 </a>
3037 {{else}}
3038 <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")">
3039 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
3040 </a>
3041 {{/if}}
3042 {{/if}}
3043 {{#if MSDS}}
3044 {{#if ShowMSDS}}
3045 <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}}">
3046 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i>
3047 </a>
3048 {{else}}
3049 <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")">
3050 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
3051 </a>
3052 {{/if}}
3053 {{/if}}
3054 </td>
3055 </tr>
3056 {{/if}}
3057 </table>
3058 </div>
3059 </div>
3060 {{#if ShopInformation}}
3061 <div class="row mt-1">
3062 <div class="col-12">
3063 <div class="table-responsive">
3064 {{{ShopInformation}}}
3065 </div>
3066 </div>
3067 </div>
3068 {{/if}}
3069 {{#if Disclaimer}}
3070 <div class="row mt-1">
3071 <div class="col-12">
3072 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
3073 <small>
3074 {{{Disclaimer}}}
3075 </small>
3076 </div>
3077 </div>
3078 {{/if}}
3079 {{#if ShowRewardButton}}
3080 <div class="row">
3081 <div class="col-12">
3082 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
3083 </div>
3084 <div class="col-12">
3085 <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">
3086 {{RewardButtonText}}
3087 </a>
3088 @if ( !hideRequestmoreinformation )
3089 {
3090 <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">
3091 @Translate("Talk with a Dechra member","Talk with a Dechra member")
3092 </button>
3093 }
3094 {{#if RewardAdditionalLink}}
3095 <p class="mb-1 mt-1 small">
3096 <a href="{{RewardAdditionalLink}}" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
3097 @Translate("Not a Dechra Rewards Member? Click here","Not a Dechra Rewards Member? Click here")
3098 </a>
3099 </p>
3100 {{/if}}
3101 </div>
3102 </div>
3103 {{else}}
3104 @if ( !hideRequestmoreinformation )
3105 {
3106 <div class="row">
3107 <div class="col-12">
3108 <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">
3109 @Translate( "Request more information", "Request more information" )
3110 </button>
3111 </div>
3112 </div>
3113 }
3114 {{/if}}
3115 </div>
3116 {{#if FeedingGuideImage}}
3117 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
3118 <div class="row">
3119 <div class="col-12 col-md-4">
3120 <div class="e-product-section-header">
3121 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2>
3122 </div>
3123 </div>
3124 <div class="col-12 col-md-8">
3125 <img src="{{FeedingGuideImage}}" class="p-img"/>
3126 </div>
3127 </div>
3128 </div>
3129 {{/if}}
3130 {{#if NutrientTableImage}}
3131 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
3132 <div class="row">
3133 <div class="col-12 col-md-4">
3134 <div class="e-product-section-header">
3135 <h2 class="mb-1 mb-md-0">@Translate( "Nutrient table","Nutrient table")</h2>
3136 </div>
3137 </div>
3138 <div class="col-12 col-md-8">
3139 <img src="{{NutrientTableImage}}" class="p-img"/>
3140 </div>
3141 </div>
3142 </div>
3143 {{/if}}
3144 </script>
3145 </div>
3146 </div>
3147 }
3148 else
3149 {
3150 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
3151 {
3152
3153 groupId = product.GetString("Ecom:Group.ID");
3154
3155 productName = product.GetString("Ecom:Product.Name");
3156 productNameJSON = productName.Replace("\"",""");
3157
3158 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
3159
3160 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
3161
3162 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
3163 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
3164
3165 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
3166
3167 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
3168
3169 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
3170
3171 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
3172
3173 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
3174 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value");
3175 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");;
3176 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value");
3177
3178 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
3179
3180 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
3181 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value");
3182 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value");
3183 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value");
3184
3185 hasDocuments = true;
3186
3187 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
3188 {
3189 hasDocuments = false;
3190 }
3191
3192 productRewardButtonLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonLink.Value");
3193 productRewardButtonLinkProcessed = productRewardButtonLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardButtonLink) : productRewardButtonLink;
3194 productRewardButtonText = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.RewardButtonText.Value");
3195 showRewardButton = !string.IsNullOrEmpty( productRewardButtonLinkProcessed ) && !string.IsNullOrEmpty(productRewardButtonText);
3196
3197 productRewardAdditionalLink = product.GetString( "Ecom:Product.CategoryField.DechraPIMProducts.RewardAdditionalLink.Value" );
3198 productRewardAdditionalLinkProcessed = productRewardAdditionalLink.ToLower().Contains("default.aspx?id=") ? SearchEngineFriendlyURLs.GetFriendlyUrl(productRewardAdditionalLink) : productRewardAdditionalLink;
3199 showRewardAdditionalLink = !string.IsNullOrEmpty( productRewardAdditionalLinkProcessed );
3200
3201 productShowFooterContent = product.GetBoolean("Ecom:Product.CategoryField.DechraPIMProducts.ShowProductFooter.Value");
3202 productFooterContent = productShowFooterContent ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductFooterContent.Value") : "";
3203
3204 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value");
3205
3206 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>");
3207
3208 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
3209
3210 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
3211
3212 }
3213 <div class="row e-product dvp-product-details">
3214 <div class="col-12">
3215 <div class="row">
3216 <div class="col-12">
3217 <h1 class="mb-1 font-weight-bold">
3218 @rangeNameSuperscripted
3219 </h1>
3220 </div>
3221 </div>
3222 </div>
3223 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
3224 <div class="row">
3225 <div class="col-12">
3226 <div class="e-product-image-container single-range">
3227 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
3228 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")">
3229 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
3230 <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">
3231 </div>
3232
3233 @for(int i = 0; i < images.Count(); i++)
3234 {
3235 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
3236 <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)">
3237 </div>
3238 }
3239 </div>
3240 @if(images.Any())
3241 {
3242 <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>
3243 <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>
3244 <ol class="carousel-indicators">
3245 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
3246 <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>
3247 </li>
3248 @for(int i = 0; i < images.Count(); i++)
3249 {
3250 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)">
3251 <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>
3252 </li>
3253 }
3254 </ol>
3255 }
3256 </div>
3257 </div>
3258 </div>
3259 </div>
3260 </div>
3261 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3">
3262 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
3263 @if(!string.IsNullOrEmpty(optionalName))
3264 {
3265 <div class="row">
3266 <div class="col-12">
3267 <h2 class="mb-0">@displayNameSuperscripted</h2>
3268 </div>
3269 </div>
3270 }
3271 @if(!string.IsNullOrEmpty(productShortDescription))
3272 {
3273 <div class="row">
3274 <div class="col-12">
3275 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
3276 </div>
3277 </div>
3278 }
3279 <div class="row">
3280 <div class="col-12 mt-2 table-responsive">
3281 <table class="table">
3282 @if(!string.IsNullOrEmpty(productActives))
3283 {
3284 <tr>
3285 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
3286 <td>@productActives</td>
3287 </tr>
3288 }
3289 @if(!string.IsNullOrEmpty(productPackSize))
3290 {
3291 <tr>
3292 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
3293 <td>@productPackSize</td>
3294 </tr>
3295 }
3296 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
3297 {
3298 <tr>
3299 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
3300 <td>@productWithdrawalPeriod</td>
3301 </tr>
3302 }
3303 @if(!string.IsNullOrEmpty(productStorageCondition))
3304 {
3305 <tr>
3306 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td>
3307 <td>@productStorageCondition</td>
3308 </tr>
3309 }
3310 @if(hasDocuments)
3311 {
3312 <tr>
3313 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
3314 <td>
3315 @if(!string.IsNullOrEmpty(productDatasheet))
3316 {
3317 if ( showProductFileTypeDatasheet )
3318 {
3319 <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">
3320 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i>
3321 </a>
3322 }
3323 else
3324 {
3325 <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")">
3326 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i>
3327 </a>
3328 }
3329 }
3330 @if(!string.IsNullOrEmpty(productPackInsert))
3331 {
3332 if ( showProductFileTypePackInsert )
3333 {
3334 <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">
3335 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i>
3336 </a>
3337 }
3338 else
3339 {
3340 <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")">
3341 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i>
3342 </a>
3343 }
3344 }
3345 @if(!string.IsNullOrEmpty(productSPC))
3346 {
3347 if ( showProductFileTypeSPC )
3348 {
3349 <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">
3350 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i>
3351 </a>
3352 }
3353 else
3354 {
3355 <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")">
3356 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i>
3357 </a>
3358 }
3359 }
3360 @if(!string.IsNullOrEmpty(productMSDS))
3361 {
3362 if ( showProductFileTypeMSDS )
3363 {
3364 <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">
3365 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i>
3366 </a>
3367 }
3368 else
3369 {
3370 <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")">
3371 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i>
3372 </a>
3373 }
3374 }
3375 </td>
3376 </tr>
3377 }
3378 </table>
3379 </div>
3380 </div>
3381 @if(!string.IsNullOrEmpty(productShopInformation))
3382 {
3383 <div class="row mt-1">
3384 <div class="col-12">
3385 <div class="table-responsive">
3386 @productShopInformation
3387 </div>
3388 </div>
3389 </div>
3390 }
3391 @if(!string.IsNullOrEmpty(productDisclaimer))
3392 {
3393 <div class="row mt-1">
3394 <div class="col-12">
3395 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
3396 <small>
3397 @productDisclaimer
3398 </small>
3399 </div>
3400 </div>
3401 }
3402 @if ( showRewardButton )
3403 {
3404 <div class="row">
3405 <div class="col-12">
3406 <h3 class="mt-1 mb-1">@Translate("Shop for this Product with Dechra Rewards","Shop for this Product with Dechra Rewards")</h3>
3407 </div>
3408 <div class="col-12">
3409 <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">
3410 @productRewardButtonText
3411 </a>
3412 @if ( !hideRequestmoreinformation )
3413 {
3414 <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">
3415 @Translate("Talk with a Dechra member","Talk with a Dechra member")
3416 </button>
3417 }
3418 @if ( showRewardAdditionalLink )
3419 {
3420 <p class="mb-1 mt-1 small">
3421 <a href="@productRewardAdditionalLinkProcessed" target="_blank" class="text-black js-dvp-product-details-tracking-reward-additional-link" data-tracking-range-name="@rangeName">
3422 @Translate("Not a Dechra Rewards Member? Click here", "Not a Dechra Rewards Member? Click here")
3423 </a>
3424 </p>
3425 }
3426 </div>
3427 </div>
3428 }
3429 else
3430 {
3431 if ( !hideRequestmoreinformation )
3432 {
3433 <div class="row">
3434 <div class="col-12">
3435 <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">
3436 @Translate( "Request more information", "Request more information" )
3437 </button>
3438 </div>
3439 </div>
3440 }
3441 }
3442 </div>
3443 </div>
3444 }
3445
3446 int productPanelsItemId = 0;
3447
3448 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
3449 {
3450 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
3451
3452 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
3453 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
3454 {
3455 string productPanelNameValue = productPanel.GetValue<string>("Name");
3456
3457 if(productPanelNameValue == "Premium Content")
3458 {
3459 <div class="col-12" id="js-dvp-product-premium-content">
3460 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3461 <div class="row">
3462 <div class="col-12 is-loading">
3463 <div class="e-loading-spinner"></div>
3464 </div>
3465 </div>
3466 </div>
3467 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template">
3468 <div class="js-dvp-product-premium-content-animate fade">
3469 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3470 <div class="row">
3471 <div class="col-12 col-md-4">
3472 <div class="e-product-section-header">
3473 <h2 class="mb-1 mb-md-0">
3474 @Translate("Premium Content","Premium Content")
3475 </h2>
3476 </div>
3477 </div>
3478 <div class="col-12 col-md-8 mt-half">
3479 {{#each premiumPages}}
3480 <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}}">
3481 <div class="col-12 col-md-6">
3482 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
3483 </div>
3484 <div class="col-12 col-md-6">
3485 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
3486 <p>{{searchFriendlyDescription}}</p>
3487 <p>
3488 <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}}">
3489 {{searchFriendlyButtonText}}
3490 </a>
3491 </p>
3492 </div>
3493 </div>
3494 {{/each}}
3495 </div>
3496 </div>
3497 </div>
3498 </div>
3499 </script>
3500 </div>
3501 }
3502 else if(productPanelNameValue == "Supportmaterials for vets")
3503 {
3504 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
3505 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3506 <div class="row">
3507 <div class="col-12 is-loading">
3508 <div class="e-loading-spinner"></div>
3509 </div>
3510 </div>
3511 </div>
3512 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
3513 <div class="js-dvp-product-supportmaterials-vets-animate fade">
3514 {{#if vetSupportmaterials.items}}
3515 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3516 <div class="row">
3517 {{#if vetSupportmaterials.display}}
3518 <div class="col-12 col-md-4">
3519 <div class="e-product-section-header">
3520 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
3521 </div>
3522 </div>
3523 <div class="col-12 col-md-8 mt-half">
3524 {{#each vetSupportmaterials.items}}
3525
3526 <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}}">
3527 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
3528 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
3529 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
3530 </p>
3531
3532 <div class="row">
3533 <div class="col-12">
3534 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
3535 <div class="row">
3536 <div class="col-12 pl-md-3">
3537 <div class="row">
3538 {{#each materials}}
3539 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
3540 <div class="row">
3541 <div class="col-12 col-md-6 text-center">
3542 {{#if download}}
3543 {{#if loginToDownload}}
3544 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
3545 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3546 </a>
3547 {{else}}
3548 <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">
3549 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3550 </a>
3551 {{/if}}
3552 {{else}}
3553 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3554 {{/if}}
3555 </div>
3556 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
3557 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
3558
3559 {{#if loginToDownload}}
3560 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
3561 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
3562 </a>
3563 {{else}}
3564 <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">
3565 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
3566 </a>
3567 {{/if}}
3568
3569 @if(shopIsActive && hasAccess)
3570 {
3571 @:{{#if orderable}}
3572 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
3573 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
3574 <input type="hidden" name="CartCmd" value="Add">
3575 <input type="hidden" name="ProductID" value="{{id}}">
3576 <input type="hidden" name="VariantID" value="">
3577 <input type="hidden" name="UnitID" value="">
3578 <input type="hidden" name="Redirect" value="false">
3579 <input type="hidden" name="Quantity" value="1">
3580 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
3581 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
3582 </form>
3583 @:{{/if}}
3584 }
3585 </div>
3586 </div>
3587 </div>
3588 {{/each}}
3589 </div>
3590 </div>
3591 </div>
3592 </div>
3593 </div>
3594 </div>
3595 {{/each}}
3596 </div>
3597 {{else}}
3598 <div class="col-12 text-center">
3599 <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>
3600 <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>
3601 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
3602 <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>
3603 </div>
3604 {{/if}}
3605 </div>
3606 </div>
3607 {{/if}}
3608 </div>
3609 </script>
3610
3611 </div>
3612 }
3613 else if(productPanelNameValue == "Supportmaterials for pet owners")
3614 {
3615 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
3616 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3617 <div class="row">
3618 <div class="col-12 is-loading">
3619 <div class="e-loading-spinner"></div>
3620 </div>
3621 </div>
3622 </div>
3623 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
3624 <div class="js-dvp-product-supportmaterials-clients-animate fade">
3625 {{#if clientSupportmaterials.items}}
3626 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3627 <div class="row">
3628 {{#if clientSupportmaterials.display}}
3629 <div class="col-12 col-md-4">
3630 <div class="e-product-section-header">
3631 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
3632 </div>
3633 </div>
3634 <div class="col-12 col-md-8 mt-half">
3635 {{#each clientSupportmaterials.items}}
3636
3637 <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}}">
3638 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
3639 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
3640 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
3641 </p>
3642
3643 <div class="row">
3644 <div class="col-12">
3645 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
3646 <div class="row">
3647 <div class="col-12 pl-md-3">
3648 <div class="row">
3649 {{#each materials}}
3650 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
3651 <div class="row">
3652 <div class="col-12 col-md-6 text-center">
3653 {{#if download}}
3654 {{#if loginToDownload}}
3655 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
3656 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3657 </a>
3658 {{else}}
3659 <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">
3660 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3661 </a>
3662 {{/if}}
3663 {{else}}
3664 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
3665 {{/if}}
3666 </div>
3667 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
3668 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
3669 {{#if download}}
3670 <p class="mb-1">
3671 {{#if loginToDownload}}
3672 <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>
3673 {{else}}
3674 <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">
3675 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
3676 </a>
3677 {{/if}}
3678 </p>
3679 {{/if}}
3680
3681 @if(shopIsActive && hasAccess)
3682 {
3683 @:{{#if orderable}}
3684 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
3685 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
3686 <input type="hidden" name="CartCmd" value="Add">
3687 <input type="hidden" name="ProductID" value="{{id}}">
3688 <input type="hidden" name="VariantID" value="">
3689 <input type="hidden" name="UnitID" value="">
3690 <input type="hidden" name="Redirect" value="false">
3691 <input type="hidden" name="Quantity" value="1">
3692 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
3693 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
3694 </form>
3695 @:{{/if}}
3696 }
3697
3698 </div>
3699 </div>
3700 </div>
3701 {{/each}}
3702 </div>
3703 </div>
3704 </div>
3705 </div>
3706 </div>
3707 </div>
3708 {{/each}}
3709 </div>
3710 {{else}}
3711 <div class="col-12 text-center">
3712 <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>
3713 <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>
3714 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
3715 <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>
3716 </div>
3717 {{/if}}
3718 </div>
3719 </div>
3720 {{/if}}
3721 </div>
3722 </script>
3723
3724 </div>
3725 }
3726 else if(productPanelNameValue == "Videos")
3727 {
3728 <div class="col-12" id="js-dvp-product-videos">
3729 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3730 <div class="row">
3731 <div class="col-12 is-loading">
3732 <div class="e-loading-spinner"></div>
3733 </div>
3734 </div>
3735 </div>
3736 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
3737 <div class="js-dvp-product-videos-animate fade">
3738 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3739 <div class="row">
3740 {{#if display}}
3741 <div class="col-12 col-md-4">
3742 <div class="e-product-section-header">
3743 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
3744 </div>
3745 </div>
3746 <div class="col-12 col-md-8 mt-half">
3747 {{#compare totalVideoCount '>' 4}}
3748 <div class="collapse-peek">
3749 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
3750 {{/compare}}
3751 <div class="row">
3752 {{#each videos}}
3753 {{#each videos}}
3754 <div class="col-12 col-md-6">
3755 <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}}}">
3756 <div>
3757 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
3758 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
3759 </div>
3760 </a>
3761 <sc{{handlebarHack}}ript type="application/json">
3762 {
3763 "url":"{{../url}}",
3764 "header":"{{embedTitle}}",
3765 "embedUrl":"{{{embedUrl}}}"
3766 }
3767 </sc{{handlebarHack}}ript>
3768 </div>
3769 {{/each}}
3770 {{/each}}
3771 </div>
3772 {{#compare totalVideoCount '>' 4}}
3773 </div>
3774 <div class="collapse-peek-toggle">
3775 <div class="row">
3776 <div class="col-12 mx-auto text-center">
3777 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
3778 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
3779 </a>
3780 </div>
3781 </div>
3782 </div>
3783 {{/compare}}
3784 </div>
3785 </div>
3786 {{else}}
3787 <div class="col-12 text-center">
3788 <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>
3789 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
3790 <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>
3791 </div>
3792 {{/if}}
3793 </div>
3794 </div>
3795 </div>
3796 </script>
3797 </div>
3798 }
3799 else if(productPanelNameValue == "Related ranges")
3800 {
3801 <div class="col-12">
3802 @if( GetLoop("RelatedRanges").Count() > 0 )
3803 {
3804 string relatedProductsHeader = Translate("Other related products","Other related products");
3805
3806 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
3807 {
3808 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
3809 }
3810 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3811 <div class="row">
3812 <div class="col-12 col-md-4">
3813 <div class="e-product-section-header">
3814 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
3815 </div>
3816 </div>
3817 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
3818 <div class="row">
3819 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
3820 {
3821 string relatedRangeGroupId = "";
3822
3823 int relatedProductInt = 0;
3824 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
3825 string relatedRangeName = relatedRange.GetString("Range");
3826 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
3827 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
3828
3829 <div class="col-12 col-lg-6 mb-3">
3830 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
3831 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
3832 </div>
3833 <div class="col-12 px-1 pt-1 border dvp-range">
3834 <div>
3835 <div class="row">
3836 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
3837 {
3838 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
3839
3840 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
3841
3842 if(relatedProductInt == 2)
3843 {
3844 @:</div>
3845 @:</div>
3846 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
3847 @:<div class="row">
3848 }
3849
3850 string relatedUrl = string.Empty;
3851
3852 string relatedUrlFriendlyProduct = string.Empty;
3853
3854 string relatedProductName = product.GetString("Ecom:Product.Name");
3855
3856 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
3857
3858 string relatedProductDisplayName = relatedProductName;
3859 string relatedProductTitleName = relatedProductName;
3860
3861 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
3862 {
3863 if(hideRelatedProductName)
3864 {
3865 relatedProductDisplayName = relatedRangeNameSuperscripted;
3866 relatedProductTitleName = relatedRangeName;
3867 }
3868 else
3869 {
3870 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
3871 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
3872 }
3873 }
3874
3875 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
3876 {
3877 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
3878 }
3879 else
3880 {
3881 relatedUrl = relatedProductName;
3882 }
3883
3884 if(relatedProductsInRangeCount > 1)
3885 {
3886 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
3887 }
3888
3889 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
3890
3891 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
3892
3893 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
3894 <a href="@relatedProductUrl" title="@relatedProductTitleName">
3895 <div class="row">
3896 <div class="col-12 dvp-image-container">
3897 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
3898 </div>
3899 <div class="col-12">
3900 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
3901 </div>
3902 </div>
3903 </a>
3904 </div>
3905
3906 relatedProductInt++;
3907 }
3908 </div>
3909 </div>
3910 <div class="row mt-1 dvp-view-more-products">
3911 @if(relatedProductsInRangeCount > 2)
3912 {
3913 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
3914
3915 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
3916
3917 if(relatedProductsInRangeCount == 3 )
3918 {
3919 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
3920 }
3921
3922 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
3923
3924 <div class="col-12">
3925 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
3926 <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);">
3927 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
3928 <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>
3929 </a>
3930 </p>
3931 </div>
3932 }
3933 </div>
3934 </div>
3935 </div>
3936 }
3937 </div>
3938 </div>
3939 </div>
3940 </div>
3941 }
3942 </div>
3943 }
3944 else if(productPanelNameValue == "Newsletter")
3945 {
3946 <div class="col-12">
3947 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3948 <div class="row">
3949 <div class="col-12 col-md-4">
3950 <div class="e-product-section-header">
3951 <h2 class="mb-1 mb-md-0">Newsletter</h2>
3952 </div>
3953 </div>
3954 <div class="col-12 col-md-8">
3955 <div class="dvp-newsletter-signup-form">
3956 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
3957 <div class="form-group">
3958 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
3959 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
3960 </div>
3961 <div class="form-group">
3962 <button type="submit" class="btn btn-primary">Sign up</button>
3963 </div>
3964 </form>
3965 </div>
3966 </div>
3967 </div>
3968 </div>
3969 </div>
3970 }
3971 else if(productPanelNameValue == "eLearning")
3972 {
3973 <div class="col-12" id="js-dvp-product-elearning">
3974 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3975 <div class="row">
3976 <div class="col-12 is-loading">
3977 <div class="e-loading-spinner"></div>
3978 </div>
3979 </div>
3980 </div>
3981 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
3982 <div class="js-dvp-product-elearning-animate fade">
3983 {{#if elearning.items}}
3984 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
3985 <div class="row">
3986 <div class="col-12 col-md-4">
3987 <div class="e-product-section-header">
3988 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
3989 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
3990 </div>
3991 </div>
3992 <div class="col-12 col-md-8">
3993 <h3>
3994 {{elearning.items.0.courseAmountText}}
3995 </h3>
3996 <div class="row">
3997 <div class="col-12">
3998 <div class="list-group">
3999 {{#if elearning.display}}
4000 {{#each elearning.items.0.courses}}
4001 <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}}">
4002 <b>{{name}}</b>
4003 </a>
4004 {{/each}}
4005 {{else}}
4006 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
4007 <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>
4008 {{/if}}
4009 </div>
4010 </div>
4011 </div>
4012 {{#unless elearning.display}}
4013 <div class="row mt-2">
4014 <div class="col-12">
4015 <div class="bg-academy">
4016 <div class="row p-2">
4017 @{
4018 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
4019 }
4020 <div class="col-12">
4021 <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>
4022 </div>
4023 <div class="col-12 col-md-8 text-white">
4024 <ul class="mb-0">
4025 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
4026 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
4027 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
4028 </ul>
4029 </div>
4030 <div class="col-12 col-md-4 pt-2">
4031 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
4032 </div>
4033 </div>
4034 </div>
4035 </div>
4036 </div>
4037 {{/unless}}
4038 </div>
4039 </div>
4040 </div>
4041 {{/if}}
4042 </div>
4043 </script>
4044 </div>
4045 }
4046 else if(productPanelNameValue == "Product Websites")
4047 {
4048 <div class="col-12" id="js-dvp-product-websites">
4049 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4050 <div class="row">
4051 <div class="col-12 is-loading">
4052 <div class="e-loading-spinner"></div>
4053 </div>
4054 </div>
4055 </div>
4056 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
4057 <div class="js-dvp-product-websites-animate fade">
4058 {{#if websites.items}}
4059 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4060 <div class="row">
4061 {{#if websites.display}}
4062 <div class="col-12 col-md-4">
4063 <div class="e-product-section-header">
4064 <h2 class="mb-1 mb-md-0">
4065 {{#compare count '>' 1}}
4066 @Translate("Product Websites","Product Websites")
4067 {{else}}
4068 @Translate("Product Website","Product Website")
4069 {{/compare}}
4070 </h2>
4071 </div>
4072 </div>
4073 <div class="col-12 col-md-8 mt-half">
4074 {{#each websites.items.0.website}}
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 <p class="lead">
4078 {{name}}
4079 </p>
4080 <p>
4081 <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}}">
4082 @Translate("Go to website","Go to website")
4083 </a>
4084 </p>
4085 </div>
4086 <div class="col-12 col-md-6">
4087 <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}}">
4088 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
4089 </a>
4090 </div>
4091 </div>
4092 {{/each}}
4093 </div>
4094 {{else}}
4095 <div class="col-12 text-center">
4096 <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>
4097 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
4098 <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>
4099 </div>
4100 {{/if}}
4101 </div>
4102 </div>
4103 {{/if}}
4104 </div>
4105 </script>
4106 </div>
4107 }
4108 else if(productPanelNameValue == "Previous Premium Content")
4109 {
4110 <div class="col-12" id="js-dvp-product-previous-premium-content">
4111 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4112 <div class="row">
4113 <div class="col-12 is-loading">
4114 <div class="e-loading-spinner"></div>
4115 </div>
4116 </div>
4117 </div>
4118 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template">
4119 <div class="js-dvp-product-previous-premium-content-animate fade">
4120 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4121 <div class="row">
4122 <div class="col-12 col-md-4">
4123 <div class="e-product-section-header">
4124 <h2 class="mb-1 mb-md-0">
4125 @Translate("Previous Premium Content","Premium Content")
4126 </h2>
4127 </div>
4128 </div>
4129 <div class="col-12 col-md-8 mt-half">
4130 {{#each premiumPages}}
4131 <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}}">
4132 <div class="col-12 col-md-6">
4133 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
4134 </div>
4135 <div class="col-12 col-md-6">
4136 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
4137 <p>{{searchFriendlyDescription}}</p>
4138 <p>
4139 <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}}">
4140 {{searchFriendlyButtonText}}
4141 </a>
4142 </p>
4143 </div>
4144 </div>
4145 {{/each}}
4146 </div>
4147 </div>
4148 </div>
4149 </div>
4150 </script>
4151 </div>
4152 }
4153 else if(productPanelNameValue == "Frequent Treatment Questions")
4154 {
4155 <div class="col-12" id="js-dvp-product-faq">
4156 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4157 <div class="row">
4158 <div class="col-12 is-loading">
4159 <div class="e-loading-spinner"></div>
4160 </div>
4161 </div>
4162 </div>
4163 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
4164 <div class="js-dvp-product-faq-animate fade">
4165 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4166 <div class="row">
4167 {{#if display}}
4168 <div class="col-12 col-md-4">
4169 <div class="e-product-section-header">
4170 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
4171 </div>
4172 </div>
4173 <div class="col-12 col-md-8 mt-half dvp-faq">
4174 {{# faqs}}
4175 {{#each faq}}
4176 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
4177 <div class="row">
4178 <div class="col-12">
4179 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
4180 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
4181 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
4182 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
4183 </h3>
4184 </div>
4185 </div>
4186 <div class="row">
4187 <div class="col-12">
4188 <div class="collapse" id="collapse-{{paragraphId}}">
4189 <div class="row">
4190 <div class="col-12 pl-3">
4191 {{#each faqList}}
4192 <div class="row">
4193 <div class="col-12 mt-1">
4194 <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}}">
4195 {{listHeader}}
4196 </a>
4197 <sc{{handlebarHack}}ript type="application/json">
4198 {
4199 "url":"{{../../url}}",
4200 "categoryName": "{{../categoryName}}",
4201 "header":"{{listHeader}}",
4202 "content":"{{{listContent}}}"
4203 }
4204 </sc{{handlebarHack}}ript>
4205 </div>
4206 </div>
4207 {{/each}}
4208 </div>
4209 </div>
4210 </div>
4211 </div>
4212 </div>
4213 </div>
4214 {{/each}}
4215 {{/faqs}}
4216
4217 {{#each accordions}}
4218 <div class="p col-12 p-accordion" id="{{paragraphID}}">
4219 {{#if introText}}
4220 <div class="p-accordion-lead">
4221 {{{introText}}}
4222 </div>
4223 {{/if}}
4224 <div class="p-accordion-container ">
4225 {{#each accordionItems}}
4226 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
4227 <div class="p-accordion-toggle">
4228 <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">
4229 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
4230 {{heading}}
4231 </span>
4232 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
4233 </p>
4234 </div>
4235 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
4236 <div class="px-2 pb-1 p-accordion-content">
4237 <div class="p-txt-container dvp-rich-text-content pt-1">
4238 {{{text}}}
4239 </div>
4240 </div>
4241 </div>
4242 </div>
4243 {{/each}}
4244 </div>
4245 </div>
4246 {{/each}}
4247
4248
4249 </div>
4250 {{else}}
4251 <div class="col-12 text-center">
4252 <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>
4253 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
4254 <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>
4255 </div>
4256 {{/if}}
4257 </div>
4258 </div>
4259 </div>
4260 </script>
4261 </div>
4262 }
4263 else if(productPanelNameValue == "Got More Questions form")
4264 {
4265 <div class="col-12 js-dvp-product-details-more-info-section">
4266 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
4267 <div class="row">
4268 <div class="col-12 col-md-4">
4269 <div class="e-product-section-header">
4270 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
4271 </div>
4272 </div>
4273 <div class="p col-12 col-md-8 mt-half">
4274 @{
4275 int currentPageId;
4276
4277 int.TryParse(pageId, out currentPageId);
4278
4279 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
4280
4281 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
4282
4283 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
4284 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
4285
4286 int formPageId;
4287 int formParagraphId;
4288
4289 int.TryParse(formPageIdString, out formPageId);
4290 int.TryParse(formParagraphIdString, out formParagraphId);
4291
4292 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
4293 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
4294
4295 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
4296
4297 }
4298 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
4299 </div>
4300 </div>
4301 </div>
4302 </div>
4303 }
4304 }
4305 </div>
4306 }
4307
4308 @:</div></div></div></div></div></section></article>
4309
4310 <footer class="bg-light">
4311 <article>
4312 <section class="e-section">
4313 <div class="container-fluid">
4314 <div class="row" id="js-dvp-product-footer">
4315 @if ( !string.IsNullOrEmpty(productFooterContent) )
4316 {
4317 <div class="col-12 mt-2 small">
4318 @productFooterContent
4319 </div>
4320 }
4321 <script id="js-e-handlebars-tmpl-dvp-product-footer" type="text/x-handlebars-template">
4322 {{#if FooterContent}}
4323 <div class="col-12 mt-2 small">
4324 {{{FooterContent}}}
4325 </div>
4326 {{/if}}
4327 </script>
4328 </div>
4329 </div>
4330 </section>
4331 </article>
4332 </footer>
4333
4334 }
4335 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "diet")
4336 {
4337 string rangeName = range.GetString("Range");
4338 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
4339 string rangeId = string.Empty;
4340 string therapyAreaId = string.Empty;
4341 string therapyAreaName = string.Empty;
4342 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
4343 string optionalName = string.Empty;
4344 string displayName = string.Empty;
4345 string displayNameSuperscripted = string.Empty;
4346 string groupId = string.Empty;
4347 string productName = string.Empty;
4348 string productNameJSON = string.Empty;
4349 string productDisplayName = string.Empty;
4350 string productDisplayNameSuperscripted = string.Empty;
4351 string urlFriendlyProductName = string.Empty;
4352 string productShortDescription = string.Empty;
4353 string productShortDescriptionJSON = string.Empty;
4354 string productColorCode = string.Empty;
4355 string productPublicProductCode = string.Empty;
4356 string productIngredients = string.Empty;
4357 string productIngredientsJSON = string.Empty;
4358 string productPackSize = string.Empty;
4359 string lyticsTopics = string.Empty;
4360 string productDatasheet = string.Empty;
4361 string productRecommendation = string.Empty;
4362 string productNotRecommendedFor = string.Empty;
4363 string productIcon1 = string.Empty;
4364 string productIcon2 = string.Empty;
4365 string productIcon3 = string.Empty;
4366 string productIcon4 = string.Empty;
4367 string productIcon5 = string.Empty;
4368 string productIcon6 = string.Empty;
4369 string productTextArea1 = string.Empty;
4370 string productTextArea2 = string.Empty;
4371 string productTextArea3 = string.Empty;
4372 string productTextArea4 = string.Empty;
4373 string productTextArea5 = string.Empty;
4374 string productTextArea6 = string.Empty;
4375 string productFeedingGuideImage = string.Empty;
4376 string productNutrientTableImage = string.Empty;
4377 Dictionary<string, dynamic> dietDetails = new Dictionary<string, dynamic>();
4378 Dictionary<string, dynamic> dietFeedingGuides = new Dictionary<string, dynamic>();
4379 string productImage = string.Empty;
4380 List<string> images = new List<string>();
4381 string productUrl = string.Empty;
4382 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
4383 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames");
4384
4385 <div class="row">
4386 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight">
4387 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template">
4388 {{#if premiumPages.0.searchFriendlyImageBanner}}
4389 <div class="js-dvp-product-premium-content-animate fade mb-2">
4390 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link">
4391 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" />
4392 </a>
4393 </div>
4394 {{/if}}
4395 </script>
4396 </div>
4397 </div>
4398
4399 @functions
4400 {
4401
4402 public dynamic DietApi(string method, string productNumber, string cultureInfoName)
4403 {
4404 if ( !string.IsNullOrEmpty( method ) && !string.IsNullOrEmpty( productNumber ) && !string.IsNullOrEmpty( cultureInfoName ))
4405 {
4406 productNumber = Regex.Replace( productNumber, @".*_", "", RegexOptions.None, TimeSpan.FromMilliseconds( 100 ) );
4407
4408 if ( !string.IsNullOrEmpty( productNumber ) )
4409 {
4410 System.Net.WebRequest request = System.Net.WebRequest.Create($"https://dietspim.dechra.espresso4.dk/api/dechra-diets/v1/{method}/{productNumber}/{cultureInfoName}");
4411 request.Timeout = 1000;
4412 request.Method = "GET";
4413 request.ContentType = "application/json";
4414
4415 using (dynamic response = (System.Net.HttpWebResponse) request.GetResponse())
4416 {
4417 using (System.IO.Stream stream = response.GetResponseStream())
4418 {
4419 using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
4420 {
4421 return Newtonsoft.Json.JsonConvert.DeserializeObject(reader.ReadToEnd());
4422 }
4423 }
4424 }
4425 }
4426 }
4427 return null;
4428 }
4429
4430 }
4431
4432 if(productsInRangeCount > 1)
4433 {
4434 <div class="row e-product">
4435 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
4436 <h1 class="mb-1 font-weight-bold">
4437 @rangeNameSuperscripted
4438 </h1>
4439 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
4440 {
4441 groupId = product.GetString("Ecom:Group.ID");
4442
4443 productName = product.GetString("Ecom:Product.Name");
4444 productNameJSON = productName.Replace("\"",""");
4445 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
4446
4447 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
4448 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
4449
4450 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
4451 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON;
4452
4453 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
4454
4455 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
4456 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
4457
4458 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
4459
4460 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
4461
4462 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
4463
4464 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
4465 productIngredientsJSON = WebUtility.HtmlDecode(Regex.Replace(productIngredients, @"\t|\n|\r", " ")).Replace("\"",""");
4466
4467 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
4468 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
4469
4470 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
4471
4472 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value");
4473
4474 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value");
4475
4476 productRecommendation = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4477 productNotRecommendedFor = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4478
4479 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" : "";
4480 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" : "";
4481 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" : "";
4482 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" : "";
4483 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" : "";
4484 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" : "";
4485
4486 productTextArea1 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4487 productTextArea2 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4488 productTextArea3 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4489 productTextArea4 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4490 productTextArea5 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4491 productTextArea6 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"), @"\t|\n|\r", " ")).Replace("\"",""");
4492
4493 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value");
4494 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value");
4495
4496 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}";
4497
4498 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
4499
4500 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
4501
4502 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) )
4503 {
4504 dietDetails.Add(productDisplayNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4505 dietFeedingGuides.Add(productDisplayNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4506 }
4507
4508 dynamic JSON = new {
4509 Name = productDisplayName,
4510 ShortDescription = productShortDescriptionJSON,
4511 Image = productImage,
4512 Images = images,
4513 Ingredients = productIngredientsJSON,
4514 PackSize = productPackSize,
4515 Datasheet = productDatasheet,
4516 ColorCode = productColorCode,
4517 ProductCode = productPublicProductCode,
4518 Recommendation = productRecommendation,
4519 NotRecommendedFor = productNotRecommendedFor,
4520 Icon1 = productIcon1,
4521 Icon2 = productIcon2,
4522 Icon3 = productIcon3,
4523 Icon4 = productIcon4,
4524 Icon5 = productIcon5,
4525 Icon6 = productIcon6,
4526 TextArea1 = productTextArea1,
4527 TextArea2 = productTextArea2,
4528 TextArea3 = productTextArea3,
4529 TextArea4 = productTextArea4,
4530 TextArea5 = productTextArea5,
4531 TextArea6 = productTextArea6,
4532 FeedingGuideImage = productFeedingGuideImage,
4533 NutrientTableImage = productNutrientTableImage,
4534 Details = DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)
4535 };
4536
4537 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName">
4538 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
4539 <div class="row px-sm-1 my-2 my-sm-0">
4540 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
4541 <div class="row">
4542 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
4543 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
4544 </div>
4545 <div class="col-9 col-sm-8 px-sm-2 my-auto">
4546 <p class="mb-0">
4547 @if (applyRangeNameToProductNames)
4548 {
4549 <b>@productDisplayNameSuperscripted</b>
4550 }
4551 else
4552 {
4553 <b class="h3">@displayNameSuperscripted</b>
4554 <br>
4555 @productDisplayNameSuperscripted
4556 }
4557 </p>
4558 </div>
4559 <div class="col-2 d-none d-sm-block my-auto text-center">
4560 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
4561 </div>
4562 </div>
4563 <script type="application/json" class="@urlFriendlyProductName">
4564 @JsonService.Instance.ToJson(JSON)
4565 </script>
4566 </div>
4567 </div>
4568 </a>
4569 }
4570 </div>
4571 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details">
4572 <div class="js-dvp-product-details-animate fade">
4573 <div class="row">
4574 <div class="col-12">
4575 <div class="e-product-image-container dvp-product-details-image-container text-center">
4576 <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">
4577 </div>
4578 </div>
4579 </div>
4580 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
4581 {
4582 <div class="row">
4583 <div class="col-12">
4584 @productShortDescriptionJSON
4585 </div>
4586 </div>
4587 }
4588 <div class="row">
4589 <div class="col-12 mt-2 table-responsive">
4590 <table class="table">
4591 @if(!string.IsNullOrEmpty(productIngredientsJSON))
4592 {
4593 <tr>
4594 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
4595 <td>@productIngredientsJSON</td>
4596 </tr>
4597 }
4598 @if(!string.IsNullOrEmpty(productRecommendation))
4599 {
4600 <tr>
4601 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td>
4602 <td>@productRecommendation</td>
4603 </tr>
4604 }
4605 @if(!string.IsNullOrEmpty(productNotRecommendedFor))
4606 {
4607 <tr>
4608 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td>
4609 <td>@productNotRecommendedFor</td>
4610 </tr>
4611 }
4612 @if(!string.IsNullOrEmpty(productPackSize))
4613 {
4614 <tr>
4615 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
4616 <td>@productPackSize</td>
4617 </tr>
4618 }
4619 @if(!string.IsNullOrEmpty(productDatasheet))
4620 {
4621 <tr>
4622 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
4623 <td>
4624 <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">
4625 @Translate("Download","Download") <i class="material-icons">get_app</i>
4626 </a>
4627 </td>
4628 </tr>
4629 }
4630 </table>
4631 </div>
4632 </div>
4633 @if(!hideRequestmoreinformation)
4634 {
4635 <div class="row">
4636 <div class="col-12">
4637 <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">
4638 @Translate("Request more information","Request more information")
4639 </button>
4640 </div>
4641 </div>
4642 }
4643 </div>
4644 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
4645 <div class="js-dvp-product-details-animate fade">
4646 <div class="e-product-image-container multi-range">
4647 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
4648 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}">
4649 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
4650 <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">
4651 </div>
4652 {{#each Images}}
4653 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
4654 <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}}">
4655 </div>
4656 {{/each}}
4657 </div>
4658 {{#if Images}}
4659 <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>
4660 <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>
4661 <ol class="carousel-indicators">
4662 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
4663 <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>
4664 </li>
4665 {{#each Images}}
4666 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}">
4667 <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>
4668 </li>
4669 {{/each}}
4670 </ol>
4671 {{/if}}
4672 </div>
4673 </div>
4674 {{#if ShortDescription}}
4675 <div class="dvp-short-description">
4676 {{{ShortDescription}}}
4677 </div>
4678 {{/if}}
4679 <div class="row">
4680 <div class="col-12 mt-2 table-responsive">
4681 <table class="table">
4682 {{#if Ingredients}}
4683 <tr>
4684 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
4685 <td>{{{Ingredients}}}</td>
4686 </tr>
4687 {{/if}}
4688 {{#if Recommendation}}
4689 <tr>
4690 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td>
4691 <td>{{{Recommendation}}}</td>
4692 </tr>
4693 {{/if}}
4694 {{#if NotRecommendedFor}}
4695 <tr>
4696 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td>
4697 <td>{{{NotRecommendedFor}}}</td>
4698 </tr>
4699 {{/if}}
4700 {{#if PackSize}}
4701 <tr>
4702 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
4703 <td>{{PackSize}}</td>
4704 </tr>
4705 {{/if}}
4706 {{#if Datasheet}}
4707 <tr>
4708 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
4709 <td>
4710 <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}}">
4711 @Translate("Download","Download") <i class="material-icons">get_app</i>
4712 </a>
4713 </td>
4714 </tr>
4715 {{/if}}
4716 </table>
4717 </div>
4718 </div>
4719 <div class="row">
4720 {{#if Details}}
4721 {{#each Details}}
4722 <div class="col-12">
4723 <div class="row mb-2">
4724 <div class="col-6 col-md-2">
4725 <div style="background-color:{{../ColorCode}};" class="rounded text-center text-white">
4726 <i class="dechra-details-icon dechra-icon-{{IconCssClass}}"></i>
4727 </div>
4728 </div>
4729 <div class="col-12 col-md-10 d-flex align-items-center">
4730 <p class="mb-0">{{{Description}}}</p>
4731 </div>
4732 </div>
4733 </div>
4734 {{/each}}
4735 {{else}}
4736 {{#if Icon1}}
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="{{Icon1}}" />
4742 </div>
4743 </div>
4744 <div class="col-12 col-md-10 d-flex align-items-center">
4745 <p class="mb-0">{{{TextArea1}}}</p>
4746 </div>
4747 </div>
4748 </div>
4749 {{/if}}
4750 {{#if Icon2}}
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="{{Icon2}}" />
4756 </div>
4757 </div>
4758 <div class="col-12 col-md-10 d-flex align-items-center">
4759 <p class="mb-0">{{{TextArea2}}}</p>
4760 </div>
4761 </div>
4762 </div>
4763 {{/if}}
4764 {{#if Icon3}}
4765 <div class="col-12">
4766 <div class="row mb-2">
4767 <div class="col-6 col-md-2">
4768 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4769 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon3}}" />
4770 </div>
4771 </div>
4772 <div class="col-12 col-md-10 d-flex align-items-center">
4773 <p class="mb-0">{{{TextArea3}}}</p>
4774 </div>
4775 </div>
4776 </div>
4777 {{/if}}
4778 {{#if Icon4}}
4779 <div class="col-12">
4780 <div class="row mb-2">
4781 <div class="col-6 col-md-2">
4782 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4783 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon4}}" />
4784 </div>
4785 </div>
4786 <div class="col-12 col-md-10 d-flex align-items-center">
4787 <p class="mb-0">{{{TextArea4}}}</p>
4788 </div>
4789 </div>
4790 </div>
4791 {{/if}}
4792 {{#if Icon5}}
4793 <div class="col-12">
4794 <div class="row mb-2">
4795 <div class="col-6 col-md-2">
4796 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4797 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon5}}" />
4798 </div>
4799 </div>
4800 <div class="col-12 col-md-10 d-flex align-items-center">
4801 <p class="mb-0">{{{TextArea5}}}</p>
4802 </div>
4803 </div>
4804 </div>
4805 {{/if}}
4806 {{#if Icon6}}
4807 <div class="col-12">
4808 <div class="row mb-2">
4809 <div class="col-6 col-md-2">
4810 <div style="background-color:{{ColorCode}};" class="rounded p-1">
4811 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon6}}" />
4812 </div>
4813 </div>
4814 <div class="col-12 col-md-10 d-flex align-items-center">
4815 <p class="mb-0">{{{TextArea6}}}</p>
4816 </div>
4817 </div>
4818 </div>
4819 {{/if}}
4820 {{/if}}
4821 </div>
4822 @if(!hideRequestmoreinformation)
4823 {
4824 <div class="row">
4825 <div class="col-12">
4826 <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">
4827 @Translate("Request more information","Request more information")
4828 </button>
4829 </div>
4830 </div>
4831 }
4832 </div>
4833 {{#if FeedingGuideImage}}
4834 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
4835 <div class="row">
4836 <div class="col-12 col-md-4">
4837 <div class="e-product-section-header">
4838 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2>
4839 </div>
4840 </div>
4841 <div class="col-12 col-md-8">
4842 <img src="{{FeedingGuideImage}}" class="p-img"/>
4843 </div>
4844 </div>
4845 </div>
4846 {{/if}}
4847 {{#if NutrientTableImage}}
4848 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
4849 <div class="row">
4850 <div class="col-12 col-md-4">
4851 <div class="e-product-section-header">
4852 <h2 class="mb-1 mb-md-0">@Translate( "Nutrient table","Nutrient table")</h2>
4853 </div>
4854 </div>
4855 <div class="col-12 col-md-8">
4856 <img src="{{NutrientTableImage}}" class="p-img"/>
4857 </div>
4858 </div>
4859 </div>
4860 {{/if}}
4861 </script>
4862 </div>
4863 </div>
4864 }
4865 else
4866 {
4867 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
4868 {
4869 groupId = product.GetString("Ecom:Group.ID");
4870
4871 productName = product.GetString("Ecom:Product.Name");
4872 productNameJSON = productName.Replace("\"",""");
4873
4874 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
4875
4876 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value");
4877
4878 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName;
4879 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted;
4880
4881 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON;
4882
4883 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0";
4884
4885 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0";
4886
4887 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel");
4888
4889 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value");
4890
4891 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator"));
4892 lyticsTopics = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.LyticsTopics.Value");
4893 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value");
4894
4895 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value");
4896
4897 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value");
4898
4899 productRecommendation = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value");
4900 productNotRecommendedFor = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value");
4901
4902 productIcon1 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg";
4903 productIcon2 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg";
4904 productIcon3 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg";
4905 productIcon4 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg";
4906 productIcon5 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg";
4907 productIcon6 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg";
4908
4909 productTextArea1 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value");
4910 productTextArea2 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value");
4911 productTextArea3 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value");
4912 productTextArea4 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value");
4913 productTextArea5 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value");
4914 productTextArea6 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value");
4915
4916 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value");
4917 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value");
4918
4919 productImage = product.GetString("Ecom:Product.ImageDefault.Clean");
4920
4921 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList();
4922
4923 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) )
4924 {
4925 dietDetails.Add(rangeNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4926 dietFeedingGuides.Add(rangeNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name));
4927 }
4928 }
4929 <div class="row e-product dvp-product-details">
4930 <div class="col-12">
4931 <div class="row">
4932 <div class="col-12">
4933 <h1 class="mb-1 font-weight-bold">
4934 @rangeNameSuperscripted
4935 </h1>
4936 </div>
4937 </div>
4938 </div>
4939 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
4940 <div class="row">
4941 <div class="col-12">
4942 <div class="e-product-image-container single-range">
4943 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
4944 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")">
4945 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal">
4946 <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">
4947 </div>
4948
4949 @for(int i = 0; i < images.Count(); i++)
4950 {
4951 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal">
4952 <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)">
4953 </div>
4954 }
4955 </div>
4956 @if(images.Any())
4957 {
4958 <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>
4959 <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>
4960 <ol class="carousel-indicators">
4961 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active">
4962 <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>
4963 </li>
4964 @for(int i = 0; i < images.Count(); i++)
4965 {
4966 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)">
4967 <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>
4968 </li>
4969 }
4970 </ol>
4971 }
4972 </div>
4973 </div>
4974 </div>
4975 </div>
4976 </div>
4977 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3">
4978 <span id="lytics-element" data-lyticstopic="@lyticsTopics"></span>
4979 @if(!string.IsNullOrEmpty(optionalName))
4980 {
4981 <div class="row">
4982 <div class="col-12">
4983 <h2 class="mb-0">@displayNameSuperscripted</h2>
4984 </div>
4985 </div>
4986 }
4987 @if(!string.IsNullOrEmpty(productShortDescription))
4988 {
4989 <div class="row">
4990 <div class="col-12">
4991 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
4992 </div>
4993 </div>
4994 }
4995 <div class="row">
4996 <div class="col-12 mt-2 table-responsive">
4997 <table class="table">
4998 @if(!string.IsNullOrEmpty(productIngredients))
4999 {
5000 <tr>
5001 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
5002 <td>@productIngredients</td>
5003 </tr>
5004 }
5005 @if(!string.IsNullOrEmpty(productRecommendation))
5006 {
5007 <tr>
5008 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td>
5009 <td>@productRecommendation</td>
5010 </tr>
5011 }
5012 @if(!string.IsNullOrEmpty(productNotRecommendedFor))
5013 {
5014 <tr>
5015 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td>
5016 <td>@productNotRecommendedFor</td>
5017 </tr>
5018 }
5019 @if(!string.IsNullOrEmpty(productPackSize))
5020 {
5021 <tr>
5022 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
5023 <td>@productPackSize</td>
5024 </tr>
5025 }
5026 @if(!string.IsNullOrEmpty(productDatasheet))
5027 {
5028 <tr>
5029 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
5030 <td>
5031 <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">
5032 @Translate("Download","Download") <i class="material-icons">get_app</i>
5033 </a>
5034 </td>
5035 </tr>
5036 }
5037
5038 </table>
5039 </div>
5040 </div>
5041 @if(!hideRequestmoreinformation)
5042 {
5043 <div class="row">
5044 <div class="col-12">
5045 <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">
5046 @Translate("Request more information","Request more information")
5047 </button>
5048 </div>
5049 </div>
5050 }
5051 </div>
5052 @if ( dietDetails.Count == 0 )
5053 {
5054 if ( !string.IsNullOrEmpty( productIcon1 ) && !string.IsNullOrEmpty( productTextArea1 ) )
5055 {
5056 <div class="col-12 col-md-6">
5057 <div class="row mb-2">
5058 <div class="col-6 col-md-2">
5059 <div style="background-color:@productColorCode;" class="rounded p-1">
5060 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon1"/>
5061 </div>
5062 </div>
5063 <div class="col-12 col-md-10 d-flex align-items-center">
5064 <p class="mb-0">@productTextArea1</p>
5065 </div>
5066 </div>
5067 </div>
5068 }
5069 if ( !string.IsNullOrEmpty( productIcon2 ) && !string.IsNullOrEmpty( productTextArea2 ) )
5070 {
5071 <div class="col-12 col-md-6">
5072 <div class="row mb-2">
5073 <div class="col-6 col-md-2">
5074 <div style="background-color:@productColorCode;" class="rounded p-1">
5075 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon2"/>
5076 </div>
5077 </div>
5078 <div class="col-12 col-md-10 d-flex align-items-center">
5079 <p class="mb-0">@productTextArea2</p>
5080 </div>
5081 </div>
5082 </div>
5083 }
5084 if ( !string.IsNullOrEmpty( productIcon3 ) && !string.IsNullOrEmpty( productTextArea3 ) )
5085 {
5086 <div class="col-12 col-md-6">
5087 <div class="row mb-2">
5088 <div class="col-6 col-md-2">
5089 <div style="background-color:@productColorCode;" class="rounded p-1">
5090 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon3"/>
5091 </div>
5092 </div>
5093 <div class="col-12 col-md-10 d-flex align-items-center">
5094 <p class="mb-0">@productTextArea3</p>
5095 </div>
5096 </div>
5097 </div>
5098 }
5099 if ( !string.IsNullOrEmpty( productIcon4 ) && !string.IsNullOrEmpty( productTextArea4 ) )
5100 {
5101 <div class="col-12 col-md-6">
5102 <div class="row mb-2">
5103 <div class="col-6 col-md-2">
5104 <div style="background-color:@productColorCode;" class="rounded p-1">
5105 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon4"/>
5106 </div>
5107 </div>
5108 <div class="col-12 col-md-10 d-flex align-items-center">
5109 <p class="mb-0">@productTextArea4</p>
5110 </div>
5111 </div>
5112 </div>
5113 }
5114 if ( !string.IsNullOrEmpty( productIcon5 ) && !string.IsNullOrEmpty( productTextArea5 ) )
5115 {
5116 <div class="col-12 col-md-6">
5117 <div class="row mb-2">
5118 <div class="col-6 col-md-2">
5119 <div style="background-color:@productColorCode;" class="rounded p-1">
5120 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon5"/>
5121 </div>
5122 </div>
5123 <div class="col-12 col-md-10 d-flex align-items-center">
5124 <p class="mb-0">@productTextArea5</p>
5125 </div>
5126 </div>
5127 </div>
5128 }
5129 if ( !string.IsNullOrEmpty( productIcon6 ) && !string.IsNullOrEmpty( productTextArea6 ) )
5130 {
5131 <div class="col-12 col-md-6">
5132 <div class="row mb-2">
5133 <div class="col-6 col-md-2">
5134 <div style="background-color:@productColorCode;" class="rounded p-1">
5135 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon6"/>
5136 </div>
5137 </div>
5138 <div class="col-12 col-md-10 d-flex align-items-center">
5139 <p class="mb-0">@productTextArea6</p>
5140 </div>
5141 </div>
5142 </div>
5143 }
5144 }
5145 </div>
5146
5147 if ( !string.IsNullOrEmpty( productFeedingGuideImage ) && string.IsNullOrEmpty(HttpContext.Current.Request["test"]))
5148 {
5149 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
5150 <div class="row">
5151 <div class="col-12 col-md-4">
5152 <div class="e-product-section-header">
5153 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2>
5154 </div>
5155 </div>
5156 <div class="col-12 col-md-8">
5157 <img src="@productFeedingGuideImage" class="p-img"/>
5158 </div>
5159 </div>
5160 </div>
5161 }
5162 if(!string.IsNullOrEmpty(productNutrientTableImage))
5163 {
5164 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5165 <div class="row">
5166 <div class="col-12 col-md-4">
5167 <div class="e-product-section-header">
5168 <h2 class="mb-1 mb-md-0">@Translate("Nutrient table","Nutrient table")</h2>
5169 </div>
5170 </div>
5171 <div class="col-12 col-md-8">
5172 <img src="@productNutrientTableImage" class="p-img" />
5173 </div>
5174 </div>
5175 </div>
5176 }
5177 }
5178
5179 if ( dietDetails.Count > 0 )
5180 {
5181 int tabCounter = 0;
5182
5183 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 pt-2 pt-md-4 mt-2">
5184 @if ( dietDetails.Count > 1 )
5185 {
5186 int tabLinkCounter = 0;
5187
5188 <div class="row mb-3">
5189 <div class="col-12">
5190 <div class="list-group flex-column flex-md-row" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist">
5191 @foreach ( KeyValuePair< string, dynamic > dietDetail in dietDetails )
5192 {
5193 <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">
5194 @dietDetail.Key
5195 <i class="material-icons d-block d-md-none">keyboard_arrow_right</i>
5196 <i class="material-icons d-none d-md-block">keyboard_arrow_down</i>
5197 </a>
5198
5199 tabLinkCounter++;
5200 }
5201 </div>
5202 </div>
5203 </div>
5204 }
5205 @foreach ( KeyValuePair<string, dynamic> dietDetail in dietDetails )
5206 {
5207 if ( dietDetails.Count > 1 )
5208 {
5209 if ( tabCounter == 0 )
5210 {
5211 @:<div class="tab-content">
5212 }
5213 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-details-@dietDetail.Key.Replace(" ","-")" role="tabpanel">
5214 @:<div class="row">
5215 }
5216 else
5217 {
5218 @:<div class="row">
5219 }
5220 foreach ( dynamic detail in dietDetail.Value )
5221 {
5222 if ( detail.IconCssClass != null && detail.Description != null )
5223 {
5224 <div class="col-12 col-md-6">
5225 <div class="row mb-2">
5226 <div class="col-6 col-md-2">
5227 <div style="background-color:@productColorCode;" class="rounded text-center text-white">
5228 <i class="dechra-details-icon dechra-icon-@detail.IconCssClass"></i>
5229 </div>
5230 </div>
5231 <div class="col-12 col-md-10 d-flex align-items-center">
5232 <p class="mb-0">@detail.Description</p>
5233 </div>
5234 </div>
5235 </div>
5236 }
5237 }
5238 if ( dietDetails.Count > 1 )
5239 {
5240 @:</div>
5241 @:</div>
5242
5243 tabCounter++;
5244
5245 if(tabCounter == dietDetails.Count)
5246 {
5247 @:</div>
5248 }
5249 }
5250 else
5251 {
5252 @:</div>
5253 }
5254 }
5255 </div>
5256 }
5257
5258 if ( dietFeedingGuides.Count > 0 )
5259 {
5260 int tabCounter = 0;
5261
5262 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2">
5263 <div class="row">
5264 <div class="col-12 col-md-4">
5265 @if ( dietFeedingGuides.Count > 1 )
5266 {
5267 int tabLinkCounter = 0;
5268
5269 <div class="list-group mb-3" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist">
5270 @foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides )
5271 {
5272 <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">
5273 @dietFeedingGuide.Key
5274 <i class="material-icons">keyboard_arrow_right</i>
5275 </a>
5276
5277 tabLinkCounter++;
5278 }
5279 </div>
5280 }
5281 else
5282 {
5283 foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides )
5284 {
5285 foreach ( dynamic guide in dietFeedingGuide.Value )
5286 {
5287 <div class="e-product-section-header">
5288 <h2 class="mb-1 mb-md-0">@guide.Name</h2>
5289 </div>
5290 }
5291 }
5292 }
5293 </div>
5294 <div class="col-12 col-md-8">
5295 @foreach ( KeyValuePair<string, dynamic> dietFeedingGuide in dietFeedingGuides )
5296 {
5297 foreach ( dynamic guide in dietFeedingGuide.Value )
5298 {
5299 if ( dietFeedingGuides.Count > 1 )
5300 {
5301 if ( tabCounter == 0 )
5302 {
5303 @:<div class="tab-content">
5304 }
5305 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-feeding-@dietFeedingGuide.Key.Replace(" ","-")" role="tabpanel">
5306 <p class="mb-0 h3 text-center">@guide.Name</p>
5307 <p class="mb-1 mt-0 h4 text-center">@dietFeedingGuide.Key</p>
5308 }
5309 <table class="table table-condensed border">
5310 <thead>
5311 <tr>
5312 @foreach ( dynamic th in guide.Headers )
5313 {
5314 <th style="background: @productColorCode" class="text-center text-white">
5315 <img class="p-img" src="@th.Icon" alt="@th.Header">
5316 <br>
5317 @th.Header
5318 </th>
5319 }
5320 </tr>
5321 </thead>
5322 <tbody>
5323 @foreach ( dynamic tr in guide.Rows )
5324 {
5325 <tr>
5326 @foreach ( dynamic td in tr.Row )
5327 {
5328 <td class="text-center">
5329 @td.Value
5330 </td>
5331 }
5332 </tr>
5333 }
5334 </tbody>
5335 </table>
5336
5337 if ( dietFeedingGuides.Count > 1 )
5338 {
5339 @:</div>
5340
5341 tabCounter++;
5342
5343 if(tabCounter == dietFeedingGuides.Count)
5344 {
5345 @:</div>
5346 }
5347 }
5348 }
5349 }
5350 </div>
5351 </div>
5352 </div>
5353 }
5354
5355 int productPanelsItemId = 0;
5356
5357 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
5358 {
5359 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
5360
5361 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
5362 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
5363 {
5364 string productPanelNameValue = productPanel.GetValue<string>("Name");
5365
5366 if(productPanelNameValue == "Premium Content")
5367 {
5368 <div class="col-12" id="js-dvp-product-premium-content">
5369 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5370 <div class="row">
5371 <div class="col-12 is-loading">
5372 <div class="e-loading-spinner"></div>
5373 </div>
5374 </div>
5375 </div>
5376 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template">
5377 <div class="js-dvp-product-premium-content-animate fade">
5378 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5379 <div class="row">
5380 <div class="col-12 col-md-4">
5381 <div class="e-product-section-header">
5382 <h2 class="mb-1 mb-md-0">
5383 @Translate("Premium Content","Premium Content")
5384 </h2>
5385 </div>
5386 </div>
5387 <div class="col-12 col-md-8 mt-half">
5388 {{#each premiumPages}}
5389 <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}}">
5390 <div class="col-12 col-md-6">
5391 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
5392 </div>
5393 <div class="col-12 col-md-6">
5394 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
5395 <p>{{searchFriendlyDescription}}</p>
5396 <p>
5397 <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}}">
5398 {{searchFriendlyButtonText}}
5399 </a>
5400 </p>
5401 </div>
5402 </div>
5403 {{/each}}
5404 </div>
5405 </div>
5406 </div>
5407 </div>
5408 </script>
5409 </div>
5410 }
5411 else if(productPanelNameValue == "Supportmaterials for vets")
5412 {
5413 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
5414 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5415 <div class="row">
5416 <div class="col-12 is-loading">
5417 <div class="e-loading-spinner"></div>
5418 </div>
5419 </div>
5420 </div>
5421 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
5422 <div class="js-dvp-product-supportmaterials-vets-animate fade">
5423 {{#if vetSupportmaterials.items}}
5424 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5425 <div class="row">
5426 {{#if vetSupportmaterials.display}}
5427 <div class="col-12 col-md-4">
5428 <div class="e-product-section-header">
5429 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
5430 </div>
5431 </div>
5432 <div class="col-12 col-md-8 mt-half">
5433 {{#each vetSupportmaterials.items}}
5434
5435 <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}}">
5436 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
5437 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
5438 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
5439 </p>
5440
5441 <div class="row">
5442 <div class="col-12">
5443 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
5444 <div class="row">
5445 <div class="col-12 pl-md-3">
5446 <div class="row">
5447 {{#each materials}}
5448 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
5449 <div class="row">
5450 <div class="col-12 col-md-6 text-center">
5451 {{#if download}}
5452 {{#if loginToDownload}}
5453 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
5454 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5455 </a>
5456 {{else}}
5457 <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">
5458 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5459 </a>
5460 {{/if}}
5461 {{else}}
5462 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5463 {{/if}}
5464 </div>
5465 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
5466 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
5467
5468 {{#if loginToDownload}}
5469 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
5470 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
5471 </a>
5472 {{else}}
5473 <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">
5474 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
5475 </a>
5476 {{/if}}
5477
5478 @if(shopIsActive && hasAccess)
5479 {
5480 @:{{#if orderable}}
5481 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
5482 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
5483 <input type="hidden" name="CartCmd" value="Add">
5484 <input type="hidden" name="ProductID" value="{{id}}">
5485 <input type="hidden" name="VariantID" value="">
5486 <input type="hidden" name="UnitID" value="">
5487 <input type="hidden" name="Redirect" value="false">
5488 <input type="hidden" name="Quantity" value="1">
5489 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
5490 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
5491 </form>
5492 @:{{/if}}
5493 }
5494 </div>
5495 </div>
5496 </div>
5497 {{/each}}
5498 </div>
5499 </div>
5500 </div>
5501 </div>
5502 </div>
5503 </div>
5504 {{/each}}
5505 </div>
5506 {{else}}
5507 <div class="col-12 text-center">
5508 <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>
5509 <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>
5510 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
5511 <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>
5512 </div>
5513 {{/if}}
5514 </div>
5515 </div>
5516 {{/if}}
5517 </div>
5518 </script>
5519
5520 </div>
5521 }
5522 else if(productPanelNameValue == "Supportmaterials for pet owners")
5523 {
5524 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
5525 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5526 <div class="row">
5527 <div class="col-12 is-loading">
5528 <div class="e-loading-spinner"></div>
5529 </div>
5530 </div>
5531 </div>
5532 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
5533 <div class="js-dvp-product-supportmaterials-clients-animate fade">
5534 {{#if clientSupportmaterials.items}}
5535 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5536 <div class="row">
5537 {{#if clientSupportmaterials.display}}
5538 <div class="col-12 col-md-4">
5539 <div class="e-product-section-header">
5540 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
5541 </div>
5542 </div>
5543 <div class="col-12 col-md-8 mt-half">
5544 {{#each clientSupportmaterials.items}}
5545
5546 <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}}">
5547 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
5548 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
5549 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
5550 </p>
5551
5552 <div class="row">
5553 <div class="col-12">
5554 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
5555 <div class="row">
5556 <div class="col-12 pl-md-3">
5557 <div class="row">
5558 {{#each materials}}
5559 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
5560 <div class="row">
5561 <div class="col-12 col-md-6 text-center">
5562 {{#if download}}
5563 {{#if loginToDownload}}
5564 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
5565 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5566 </a>
5567 {{else}}
5568 <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">
5569 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5570 </a>
5571 {{/if}}
5572 {{else}}
5573 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
5574 {{/if}}
5575 </div>
5576 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
5577 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
5578 {{#if download}}
5579 <p class="mb-1">
5580 {{#if loginToDownload}}
5581 <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>
5582 {{else}}
5583 <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">
5584 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
5585 </a>
5586 {{/if}}
5587 </p>
5588 {{/if}}
5589
5590 @if(shopIsActive && hasAccess)
5591 {
5592 @:{{#if orderable}}
5593 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
5594 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
5595 <input type="hidden" name="CartCmd" value="Add">
5596 <input type="hidden" name="ProductID" value="{{id}}">
5597 <input type="hidden" name="VariantID" value="">
5598 <input type="hidden" name="UnitID" value="">
5599 <input type="hidden" name="Redirect" value="false">
5600 <input type="hidden" name="Quantity" value="1">
5601 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
5602 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
5603 </form>
5604 @:{{/if}}
5605 }
5606
5607 </div>
5608 </div>
5609 </div>
5610 {{/each}}
5611 </div>
5612 </div>
5613 </div>
5614 </div>
5615 </div>
5616 </div>
5617 {{/each}}
5618 </div>
5619 {{else}}
5620 <div class="col-12 text-center">
5621 <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>
5622 <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>
5623 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
5624 <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>
5625 </div>
5626 {{/if}}
5627 </div>
5628 </div>
5629 {{/if}}
5630 </div>
5631 </script>
5632
5633 </div>
5634 }
5635 else if(productPanelNameValue == "Videos")
5636 {
5637 <div class="col-12" id="js-dvp-product-videos">
5638 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5639 <div class="row">
5640 <div class="col-12 is-loading">
5641 <div class="e-loading-spinner"></div>
5642 </div>
5643 </div>
5644 </div>
5645 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
5646 <div class="js-dvp-product-videos-animate fade">
5647 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5648 <div class="row">
5649 {{#if display}}
5650 <div class="col-12 col-md-4">
5651 <div class="e-product-section-header">
5652 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
5653 </div>
5654 </div>
5655 <div class="col-12 col-md-8 mt-half">
5656 {{#compare totalVideoCount '>' 4}}
5657 <div class="collapse-peek">
5658 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
5659 {{/compare}}
5660 <div class="row">
5661 {{#each videos}}
5662 {{#each videos}}
5663 <div class="col-12 col-md-6">
5664 <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}}}">
5665 <div>
5666 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
5667 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
5668 </div>
5669 </a>
5670 <sc{{handlebarHack}}ript type="application/json">
5671 {
5672 "url":"{{../url}}",
5673 "header":"{{embedTitle}}",
5674 "embedUrl":"{{{embedUrl}}}"
5675 }
5676 </sc{{handlebarHack}}ript>
5677 </div>
5678 {{/each}}
5679 {{/each}}
5680 </div>
5681 {{#compare totalVideoCount '>' 4}}
5682 </div>
5683 <div class="collapse-peek-toggle">
5684 <div class="row">
5685 <div class="col-12 mx-auto text-center">
5686 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
5687 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
5688 </a>
5689 </div>
5690 </div>
5691 </div>
5692 {{/compare}}
5693 </div>
5694 </div>
5695 {{else}}
5696 <div class="col-12 text-center">
5697 <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>
5698 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
5699 <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>
5700 </div>
5701 {{/if}}
5702 </div>
5703 </div>
5704 </div>
5705 </script>
5706 </div>
5707 }
5708 else if(productPanelNameValue == "Related ranges")
5709 {
5710 <div class="col-12">
5711 @if( GetLoop("RelatedRanges").Count() > 0 )
5712 {
5713 string relatedProductsHeader = Translate("Other related products","Other related products");
5714
5715 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
5716 {
5717 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
5718 }
5719 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5720 <div class="row">
5721 <div class="col-12 col-md-4">
5722 <div class="e-product-section-header">
5723 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
5724 </div>
5725 </div>
5726 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
5727 <div class="row">
5728 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
5729 {
5730 string relatedRangeGroupId = "";
5731
5732 int relatedProductInt = 0;
5733 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
5734 string relatedRangeName = relatedRange.GetString("Range");
5735 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
5736 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
5737
5738 <div class="col-12 col-lg-6 mb-3">
5739 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
5740 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
5741 </div>
5742 <div class="col-12 px-1 pt-1 border dvp-range">
5743 <div>
5744 <div class="row">
5745 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
5746 {
5747 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
5748
5749 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
5750
5751 if(relatedProductInt == 2)
5752 {
5753 @:</div>
5754 @:</div>
5755 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
5756 @:<div class="row">
5757 }
5758
5759 string relatedUrl = string.Empty;
5760
5761 string relatedUrlFriendlyProduct = string.Empty;
5762
5763 string relatedProductName = product.GetString("Ecom:Product.Name");
5764
5765 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
5766
5767 string relatedProductDisplayName = relatedProductName;
5768 string relatedProductTitleName = relatedProductName;
5769
5770 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
5771 {
5772 if(hideRelatedProductName)
5773 {
5774 relatedProductDisplayName = relatedRangeNameSuperscripted;
5775 relatedProductTitleName = relatedRangeName;
5776 }
5777 else
5778 {
5779 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
5780 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
5781 }
5782 }
5783
5784 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
5785 {
5786 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
5787 }
5788 else
5789 {
5790 relatedUrl = relatedProductName;
5791 }
5792
5793 if(relatedProductsInRangeCount > 1)
5794 {
5795 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
5796 }
5797
5798 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
5799
5800 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
5801
5802 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
5803 <a href="@relatedProductUrl" title="@relatedProductTitleName">
5804 <div class="row">
5805 <div class="col-12 dvp-image-container">
5806 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
5807 </div>
5808 <div class="col-12">
5809 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
5810 </div>
5811 </div>
5812 </a>
5813 </div>
5814
5815 relatedProductInt++;
5816 }
5817 </div>
5818 </div>
5819 <div class="row mt-1 dvp-view-more-products">
5820 @if(relatedProductsInRangeCount > 2)
5821 {
5822 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
5823
5824 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
5825
5826 if(relatedProductsInRangeCount == 3 )
5827 {
5828 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
5829 }
5830
5831 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
5832
5833 <div class="col-12">
5834 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
5835 <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);">
5836 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
5837 <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>
5838 </a>
5839 </p>
5840 </div>
5841 }
5842 </div>
5843 </div>
5844 </div>
5845 }
5846 </div>
5847 </div>
5848 </div>
5849 </div>
5850 }
5851 </div>
5852 }
5853 else if(productPanelNameValue == "Newsletter")
5854 {
5855 <div class="col-12">
5856 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5857 <div class="row">
5858 <div class="col-12 col-md-4">
5859 <div class="e-product-section-header">
5860 <h2 class="mb-1 mb-md-0">Newsletter</h2>
5861 </div>
5862 </div>
5863 <div class="col-12 col-md-8">
5864 <div class="dvp-newsletter-signup-form">
5865 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
5866 <div class="form-group">
5867 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
5868 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
5869 </div>
5870 <div class="form-group">
5871 <button type="submit" class="btn btn-primary">Sign up</button>
5872 </div>
5873 </form>
5874 </div>
5875 </div>
5876 </div>
5877 </div>
5878 </div>
5879 }
5880 else if(productPanelNameValue == "eLearning")
5881 {
5882 <div class="col-12" id="js-dvp-product-elearning">
5883 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5884 <div class="row">
5885 <div class="col-12 is-loading">
5886 <div class="e-loading-spinner"></div>
5887 </div>
5888 </div>
5889 </div>
5890 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
5891 <div class="js-dvp-product-elearning-animate fade">
5892 {{#if elearning.items}}
5893 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5894 <div class="row">
5895 <div class="col-12 col-md-4">
5896 <div class="e-product-section-header">
5897 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
5898 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
5899 </div>
5900 </div>
5901 <div class="col-12 col-md-8">
5902 <h3>
5903 {{elearning.items.0.courseAmountText}}
5904 </h3>
5905 <div class="row">
5906 <div class="col-12">
5907 <div class="list-group">
5908 {{#if elearning.display}}
5909 {{#each elearning.items.0.courses}}
5910 <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}}">
5911 <b>{{name}}</b>
5912 </a>
5913 {{/each}}
5914 {{else}}
5915 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
5916 <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>
5917 {{/if}}
5918 </div>
5919 </div>
5920 </div>
5921 {{#unless elearning.display}}
5922 <div class="row mt-2">
5923 <div class="col-12">
5924 <div class="bg-academy">
5925 <div class="row p-2">
5926 @{
5927 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
5928 }
5929 <div class="col-12">
5930 <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>
5931 </div>
5932 <div class="col-12 col-md-8 text-white">
5933 <ul class="mb-0">
5934 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
5935 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
5936 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
5937 </ul>
5938 </div>
5939 <div class="col-12 col-md-4 pt-2">
5940 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
5941 </div>
5942 </div>
5943 </div>
5944 </div>
5945 </div>
5946 {{/unless}}
5947 </div>
5948 </div>
5949 </div>
5950 {{/if}}
5951 </div>
5952 </script>
5953 </div>
5954 }
5955 else if(productPanelNameValue == "Product Websites")
5956 {
5957 <div class="col-12" id="js-dvp-product-websites">
5958 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5959 <div class="row">
5960 <div class="col-12 is-loading">
5961 <div class="e-loading-spinner"></div>
5962 </div>
5963 </div>
5964 </div>
5965 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
5966 <div class="js-dvp-product-websites-animate fade">
5967 {{#if websites.items}}
5968 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
5969 <div class="row">
5970 {{#if websites.display}}
5971 <div class="col-12 col-md-4">
5972 <div class="e-product-section-header">
5973 <h2 class="mb-1 mb-md-0">
5974 {{#compare count '>' 1}}
5975 @Translate("Product Websites","Product Websites")
5976 {{else}}
5977 @Translate("Product Website","Product Website")
5978 {{/compare}}
5979 </h2>
5980 </div>
5981 </div>
5982 <div class="col-12 col-md-8 mt-half">
5983 {{#each websites.items.0.website}}
5984 <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}}">
5985 <div class="col-12 col-md-6">
5986 <p class="lead">
5987 {{name}}
5988 </p>
5989 <p>
5990 <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}}">
5991 @Translate("Go to website","Go to website")
5992 </a>
5993 </p>
5994 </div>
5995 <div class="col-12 col-md-6">
5996 <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}}">
5997 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
5998 </a>
5999 </div>
6000 </div>
6001 {{/each}}
6002 </div>
6003 {{else}}
6004 <div class="col-12 text-center">
6005 <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>
6006 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
6007 <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>
6008 </div>
6009 {{/if}}
6010 </div>
6011 </div>
6012 {{/if}}
6013 </div>
6014 </script>
6015 </div>
6016 }
6017 else if(productPanelNameValue == "Previous Premium Content")
6018 {
6019 <div class="col-12" id="js-dvp-product-previous-premium-content">
6020 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6021 <div class="row">
6022 <div class="col-12 is-loading">
6023 <div class="e-loading-spinner"></div>
6024 </div>
6025 </div>
6026 </div>
6027 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template">
6028 <div class="js-dvp-product-previous-premium-content-animate fade">
6029 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6030 <div class="row">
6031 <div class="col-12 col-md-4">
6032 <div class="e-product-section-header">
6033 <h2 class="mb-1 mb-md-0">
6034 @Translate("Previous Premium Content","Premium Content")
6035 </h2>
6036 </div>
6037 </div>
6038 <div class="col-12 col-md-8 mt-half">
6039 {{#each premiumPages}}
6040 <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}}">
6041 <div class="col-12 col-md-6">
6042 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" />
6043 </div>
6044 <div class="col-12 col-md-6">
6045 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3>
6046 <p>{{searchFriendlyDescription}}</p>
6047 <p>
6048 <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}}">
6049 {{searchFriendlyButtonText}}
6050 </a>
6051 </p>
6052 </div>
6053 </div>
6054 {{/each}}
6055 </div>
6056 </div>
6057 </div>
6058 </div>
6059 </script>
6060 </div>
6061 }
6062 else if(productPanelNameValue == "Frequent Treatment Questions")
6063 {
6064 <div class="col-12" id="js-dvp-product-faq">
6065 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6066 <div class="row">
6067 <div class="col-12 is-loading">
6068 <div class="e-loading-spinner"></div>
6069 </div>
6070 </div>
6071 </div>
6072 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
6073 <div class="js-dvp-product-faq-animate fade">
6074 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6075 <div class="row">
6076 {{#if display}}
6077 <div class="col-12 col-md-4">
6078 <div class="e-product-section-header">
6079 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
6080 </div>
6081 </div>
6082 <div class="col-12 col-md-8 mt-half dvp-faq">
6083 {{# faqs}}
6084 {{#each faq}}
6085 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
6086 <div class="row">
6087 <div class="col-12">
6088 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
6089 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
6090 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
6091 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
6092 </h3>
6093 </div>
6094 </div>
6095 <div class="row">
6096 <div class="col-12">
6097 <div class="collapse" id="collapse-{{paragraphId}}">
6098 <div class="row">
6099 <div class="col-12 pl-3">
6100 {{#each faqList}}
6101 <div class="row">
6102 <div class="col-12 mt-1">
6103 <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}}">
6104 {{listHeader}}
6105 </a>
6106 <sc{{handlebarHack}}ript type="application/json">
6107 {
6108 "url":"{{../../url}}",
6109 "categoryName": "{{../categoryName}}",
6110 "header":"{{listHeader}}",
6111 "content":"{{{listContent}}}"
6112 }
6113 </sc{{handlebarHack}}ript>
6114 </div>
6115 </div>
6116 {{/each}}
6117 </div>
6118 </div>
6119 </div>
6120 </div>
6121 </div>
6122 </div>
6123 {{/each}}
6124 {{/faqs}}
6125
6126 {{#each accordions}}
6127 <div class="p col-12 p-accordion" id="{{paragraphID}}">
6128 {{#if introText}}
6129 <div class="p-accordion-lead">
6130 {{{introText}}}
6131 </div>
6132 {{/if}}
6133 <div class="p-accordion-container ">
6134 {{#each accordionItems}}
6135 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
6136 <div class="p-accordion-toggle">
6137 <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">
6138 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
6139 {{heading}}
6140 </span>
6141 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
6142 </p>
6143 </div>
6144 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
6145 <div class="px-2 pb-1 p-accordion-content">
6146 <div class="p-txt-container dvp-rich-text-content pt-1">
6147 {{{text}}}
6148 </div>
6149 </div>
6150 </div>
6151 </div>
6152 {{/each}}
6153 </div>
6154 </div>
6155 {{/each}}
6156
6157
6158 </div>
6159 {{else}}
6160 <div class="col-12 text-center">
6161 <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>
6162 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
6163 <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>
6164 </div>
6165 {{/if}}
6166 </div>
6167 </div>
6168 </div>
6169 </script>
6170 </div>
6171 }
6172 else if(productPanelNameValue == "Got More Questions form")
6173 {
6174 <div class="col-12 js-dvp-product-details-more-info-section">
6175 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6176 <div class="row">
6177 <div class="col-12 col-md-4">
6178 <div class="e-product-section-header">
6179 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
6180 </div>
6181 </div>
6182 <div class="p col-12 col-md-8 mt-half">
6183 @{
6184 int currentPageId;
6185
6186 int.TryParse(pageId, out currentPageId);
6187
6188 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
6189
6190 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
6191
6192 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
6193 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
6194
6195 int formPageId;
6196 int formParagraphId;
6197
6198 int.TryParse(formPageIdString, out formPageId);
6199 int.TryParse(formParagraphIdString, out formParagraphId);
6200
6201 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
6202 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
6203
6204 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
6205
6206 }
6207 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
6208 </div>
6209 </div>
6210 </div>
6211 </div>
6212 }
6213 }
6214 </div>
6215 }
6216
6217 }
6218 else if(productType.GetBoolean("Ecom:Product:Field.IsPharma"))
6219 {
6220 string rangeName = range.GetString("Range");
6221 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>");
6222 string rangeId = string.Empty;
6223 string therapyAreaId = string.Empty;
6224 string therapyAreaName = string.Empty;
6225 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
6226 string optionalName = string.Empty;
6227 string displayName = string.Empty;
6228 string displayNameSuperscripted = string.Empty;
6229 string groupId = string.Empty;
6230 string productName = string.Empty;
6231 string productDisplayName = string.Empty;
6232 string urlFriendlyProductName = string.Empty;
6233 string productShortDescription = string.Empty;
6234 string productShortDescriptionJSON = string.Empty;
6235 string productActives = string.Empty;
6236 string productActivesJSON = string.Empty;
6237 string productPackSize = string.Empty;
6238 string productWithdrawalPeriod = string.Empty;
6239 string productDatasheet = string.Empty;
6240 string productPackInsert = string.Empty;
6241 string productSPC = string.Empty;
6242 string productMSDS = string.Empty;
6243 bool hasDocuments = true;
6244 string productDisclaimer = string.Empty;
6245 string productDisclaimerJSON = string.Empty;
6246 string productImage = string.Empty;
6247 string productUrl = string.Empty;
6248 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts");
6249
6250 if(productsInRangeCount > 1)
6251 {
6252 <div class="row">
6253 <div class="col-12 col-md-6 mb-md-3 pr-sm-3">
6254 <h1 class="mb-1 font-weight-bold">
6255 @rangeNameSuperscripted
6256 </h1>
6257 @foreach(LoopItem product in range.GetLoop("ProductsInRange"))
6258 {
6259
6260 groupId = product.GetString("Ecom:Group.ID");
6261
6262 productName = product.GetString("Ecom:Product.Name");
6263 productDisplayName = productName;
6264 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-");
6265
6266 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
6267 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
6268
6269 optionalName = product.GetString("Ecom:Product:Field.OptionalName");
6270
6271 if(!string.IsNullOrEmpty(optionalName))
6272 {
6273 displayName = optionalName;
6274 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>");
6275 }
6276 else
6277 {
6278 displayName = rangeName;
6279 displayNameSuperscripted = rangeNameSuperscripted;
6280 }
6281
6282 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
6283 {
6284 productDisplayName = displayNameSuperscripted + " " + productName;
6285 }
6286
6287 rangeId = "0";
6288 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value")))
6289 {
6290 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value");
6291 }
6292
6293 therapyAreaId = "0";
6294 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value")))
6295 {
6296 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value");
6297 }
6298
6299 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel");
6300
6301 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value");
6302 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"",""");
6303
6304 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");
6305 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value");
6306
6307 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value");
6308 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value");
6309 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value");
6310 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value");
6311
6312 hasDocuments = true;
6313
6314 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
6315 {
6316 hasDocuments = false;
6317 }
6318
6319 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value");
6320 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"",""");
6321
6322 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
6323 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName;
6324
6325 <a class="js-dvp-product-list-details" href="@productUrl" title="@displayName - @productName" data-productname="@urlFriendlyProductName">
6326 <div class="row px-sm-1 my-2 my-sm-0">
6327 <div class="dvp-product-list-details col-12 p-sm-1 py-1">
6328 <div class="row">
6329 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container">
6330 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=200&Quality=75" alt="@productDisplayName">
6331 </div>
6332 <div class="col-9 col-sm-8 px-sm-2 my-auto">
6333 <p class="mb-0">
6334 @if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
6335 {
6336 <b>@productDisplayName</b>
6337 }
6338 else
6339 {
6340 <b class="h3">@displayNameSuperscripted</b>
6341 <br> @productDisplayName
6342 }
6343 </p>
6344 </div>
6345 <div class="col-2 d-none d-sm-block my-auto text-center">
6346 <i class="material-icons material-icons-4x">keyboard_arrow_right</i>
6347 </div>
6348 </div>
6349 <script type="application/json" class="@urlFriendlyProductName">
6350 {
6351 "Name":"@productDisplayName",
6352 "ShortDescription":"@productShortDescriptionJSON",
6353 "Image":"@productImage",
6354 "Actives":"@productActivesJSON",
6355 "PackSize":"@productPackSize",
6356 "WithdrawalPeriod":"@productWithdrawalPeriod",
6357 "Datasheet":"@productDatasheet",
6358 "PackInsert":"@productPackInsert",
6359 "SPC":"@productSPC",
6360 "MSDS":"@productMSDS",
6361 "HasDocuments":"@hasDocuments",
6362 "Disclaimer":"@productDisclaimerJSON"
6363 }
6364 </script>
6365 </div>
6366 </div>
6367 </a>
6368 }
6369 </div>
6370 <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">
6371 <div class="js-dvp-product-details-animate fade">
6372 <div class="row">
6373 <div class="col-12">
6374 <div class="e-product-image-container dvp-product-details-image-container text-center">
6375 <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">
6376 </div>
6377 </div>
6378 </div>
6379 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
6380 {
6381 <div class="row">
6382 <div class="col-12">
6383 @productShortDescriptionJSON
6384 </div>
6385 </div>
6386 }
6387 <div class="row">
6388 <div class="col-12 mt-2 table-responsive">
6389 <table class="table">
6390 @if(!string.IsNullOrEmpty(productActives))
6391 {
6392 <tr>
6393 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
6394 <td>@productActives</td>
6395 </tr>
6396 }
6397 @if(!string.IsNullOrEmpty(productPackSize))
6398 {
6399 <tr>
6400 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
6401 <td>@productPackSize</td>
6402 </tr>
6403 }
6404 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
6405 {
6406 <tr>
6407 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
6408 <td>@productWithdrawalPeriod</td>
6409 </tr>
6410 }
6411 @if(hasDocuments)
6412 {
6413 <tr>
6414 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
6415 <td>
6416 @if(!string.IsNullOrEmpty(productDatasheet))
6417 {
6418 <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>
6419 }
6420 @if(!string.IsNullOrEmpty(productPackInsert))
6421 {
6422 <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>
6423 }
6424 @if(!string.IsNullOrEmpty(productSPC))
6425 {
6426 <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>
6427 }
6428 @if(!string.IsNullOrEmpty(productMSDS))
6429 {
6430 <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>
6431 }
6432 </td>
6433 </tr>
6434 }
6435 </table>
6436 </div>
6437 </div>
6438 @if(!string.IsNullOrEmpty(productDisclaimer))
6439 {
6440 <div class="row">
6441 <div class="col-12">
6442 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
6443 <small>
6444 @productDisclaimer
6445 </small>
6446 </div>
6447 </div>
6448 }
6449 @if(!hideRequestmoreinformation)
6450 {
6451 <div class="row">
6452 <div class="col-12">
6453 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button>
6454 </div>
6455 </div>
6456 }
6457 </div>
6458 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
6459 <div class="js-dvp-product-details-animate fade">
6460
6461 <div class="e-product-image-container dvp-product-details-image-container text-center">
6462 <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}}">
6463 </div>
6464 {{#if ShortDescription}}
6465 <div class="dvp-short-description">
6466 {{{ShortDescription}}}
6467 </div>
6468 {{/if}}
6469 <div class="row">
6470 <div class="col-12 mt-2 table-responsive">
6471 <table class="table">
6472 {{#if Actives}}
6473 <tr>
6474 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
6475 <td>{{{Actives}}}</td>
6476 </tr>
6477 {{/if}}
6478 {{#if PackSize}}
6479 <tr>
6480 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
6481 <td>{{PackSize}}</td>
6482 </tr>
6483 {{/if}}
6484 {{#if WithdrawalPeriod}}
6485 <tr>
6486 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
6487 <td>{{{WithdrawalPeriod}}}</td>
6488 </tr>
6489 {{/if}}
6490 {{#compare HasDocuments '===' 'True'}}
6491 <tr>
6492 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
6493 <td>
6494 {{#if Datasheet}}
6495 <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>
6496 {{/if}}
6497 {{#if PackInsert}}
6498 <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>
6499 {{/if}}
6500 {{#if SPC}}
6501 <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>
6502 {{/if}}
6503 {{#if MSDS}}
6504 <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>
6505 {{/if}}
6506 </td>
6507 </tr>
6508 {{/compare}}
6509 </table>
6510 </div>
6511 </div>
6512 {{#if Disclaimer}}
6513 <div class="row mt-1">
6514 <div class="col-12">
6515 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
6516 <small>
6517 {{{Disclaimer}}}
6518 </small>
6519 </div>
6520 </div>
6521 {{/if}}
6522 @if(!hideRequestmoreinformation)
6523 {
6524 <div class="row">
6525 <div class="col-12">
6526 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button>
6527 </div>
6528 </div>
6529 }
6530 </div>
6531 </script>
6532 </div>
6533 </div>
6534 }
6535 else
6536 {
6537 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
6538 {
6539
6540 groupId = product.GetString("Ecom:Group.ID");
6541
6542 productName = product.GetString("Ecom:Product.Name");
6543
6544 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
6545
6546 optionalName = product.GetString("Ecom:Product:Field.OptionalName");
6547
6548 if(!string.IsNullOrEmpty(optionalName))
6549 {
6550 displayName = optionalName;
6551 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>");
6552 }
6553
6554 rangeId = "0";
6555 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value")))
6556 {
6557 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value");
6558 }
6559
6560 therapyAreaId = "0";
6561 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value")))
6562 {
6563 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value");
6564 }
6565
6566 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel");
6567
6568 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value");
6569 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");;
6570 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value");
6571
6572 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value");
6573 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value");
6574 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value");
6575 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value");
6576
6577 hasDocuments = true;
6578
6579 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS))
6580 {
6581 hasDocuments = false;
6582 }
6583
6584 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value");
6585
6586 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
6587 }
6588 <div class="row dvp-product-details">
6589 <div class="col-12">
6590 <div class="row">
6591 <div class="col-12">
6592 <h1 class="mb-1 font-weight-bold">
6593 @rangeNameSuperscripted
6594 </h1>
6595 </div>
6596 </div>
6597 </div>
6598 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4">
6599 <div class="row">
6600 <div class="col-12">
6601 <div class="e-product-image-container dvp-product-details-image-container text-center">
6602 <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">
6603 </div>
6604 </div>
6605 </div>
6606 </div>
6607 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 pb-4 mt-sm-0 pl-sm-3">
6608 @if(!string.IsNullOrEmpty(optionalName))
6609 {
6610 <div class="row">
6611 <div class="col-12">
6612 <h2 class="mb-0">@displayNameSuperscripted</h2>
6613 </div>
6614 </div>
6615 }
6616 @if(!string.IsNullOrEmpty(productShortDescription))
6617 {
6618 <div class="row">
6619 <div class="col-12">
6620 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " "))
6621 </div>
6622 </div>
6623 }
6624 <div class="row">
6625 <div class="col-12 mt-2 table-responsive">
6626 <table class="table">
6627 @if(!string.IsNullOrEmpty(productActives))
6628 {
6629 <tr>
6630 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td>
6631 <td>@productActives</td>
6632 </tr>
6633 }
6634 @if(!string.IsNullOrEmpty(productPackSize))
6635 {
6636 <tr>
6637 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
6638 <td>@productPackSize</td>
6639 </tr>
6640 }
6641 @if(!string.IsNullOrEmpty(productWithdrawalPeriod))
6642 {
6643 <tr>
6644 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td>
6645 <td>@productWithdrawalPeriod</td>
6646 </tr>
6647 }
6648 @if(hasDocuments)
6649 {
6650 <tr>
6651 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td>
6652 <td>
6653 @if(!string.IsNullOrEmpty(productDatasheet))
6654 {
6655 <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>
6656 }
6657 @if(!string.IsNullOrEmpty(productPackInsert))
6658 {
6659 <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>
6660 }
6661 @if(!string.IsNullOrEmpty(productSPC))
6662 {
6663 <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>
6664 }
6665 @if(!string.IsNullOrEmpty(productMSDS))
6666 {
6667 <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>
6668 }
6669 </td>
6670 </tr>
6671 }
6672 </table>
6673 </div>
6674 </div>
6675 @if(!string.IsNullOrEmpty(productDisclaimer))
6676 {
6677 <div class="row mt-1">
6678 <div class="col-12">
6679 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4>
6680 <small>
6681 @productDisclaimer
6682 </small>
6683 </div>
6684 </div>
6685 }
6686 @if(!hideRequestmoreinformation)
6687 {
6688 <div class="row">
6689 <div class="col-12">
6690 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button>
6691 </div>
6692 </div>
6693 }
6694 </div>
6695 </div>
6696 }
6697
6698 int productPanelsItemId = 0;
6699
6700 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId))
6701 {
6702 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId);
6703
6704 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId">
6705 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations)
6706 {
6707 string productPanelNameValue = productPanel.GetValue<string>("Name");
6708
6709 if(productPanelNameValue == "Supportmaterials for vets")
6710 {
6711 <div class="col-12" id="js-dvp-product-supportmaterials-vets">
6712 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6713 <div class="row">
6714 <div class="col-12 is-loading">
6715 <div class="e-loading-spinner"></div>
6716 </div>
6717 </div>
6718 </div>
6719 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template">
6720 <div class="js-dvp-product-supportmaterials-vets-animate fade">
6721 {{#if vetSupportmaterials.items}}
6722 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6723 <div class="row">
6724 {{#if vetSupportmaterials.display}}
6725 <div class="col-12 col-md-4">
6726 <div class="e-product-section-header">
6727 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2>
6728 </div>
6729 </div>
6730 <div class="col-12 col-md-8 mt-half">
6731 {{#each vetSupportmaterials.items}}
6732
6733 <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}}">
6734 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
6735 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
6736 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
6737 </p>
6738
6739 <div class="row">
6740 <div class="col-12">
6741 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}">
6742 <div class="row">
6743 <div class="col-12 pl-md-3">
6744 <div class="row">
6745 {{#each materials}}
6746 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
6747 <div class="row">
6748 <div class="col-12 col-md-6 text-center">
6749 {{#if download}}
6750 {{#if loginToDownload}}
6751 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
6752 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6753 </a>
6754 {{else}}
6755 <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">
6756 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6757 </a>
6758 {{/if}}
6759 {{else}}
6760 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6761 {{/if}}
6762 </div>
6763 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
6764 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
6765
6766 {{#if loginToDownload}}
6767 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
6768 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")
6769 </a>
6770 {{else}}
6771 <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">
6772 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
6773 </a>
6774 {{/if}}
6775
6776 @if(shopIsActive && hasAccess)
6777 {
6778 @:{{#if orderable}}
6779 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
6780 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
6781 <input type="hidden" name="CartCmd" value="Add">
6782 <input type="hidden" name="ProductID" value="{{id}}">
6783 <input type="hidden" name="VariantID" value="">
6784 <input type="hidden" name="UnitID" value="">
6785 <input type="hidden" name="Redirect" value="false">
6786 <input type="hidden" name="Quantity" value="1">
6787 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
6788 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
6789 </form>
6790 @:{{/if}}
6791 }
6792 </div>
6793 </div>
6794 </div>
6795 {{/each}}
6796 </div>
6797 </div>
6798 </div>
6799 </div>
6800 </div>
6801 </div>
6802 {{/each}}
6803 </div>
6804 {{else}}
6805 <div class="col-12 text-center">
6806 <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>
6807 <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>
6808 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
6809 <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>
6810 </div>
6811 {{/if}}
6812 </div>
6813 </div>
6814 {{/if}}
6815 </div>
6816 </script>
6817
6818 </div>
6819 }
6820 else if(productPanelNameValue == "Supportmaterials for pet owners")
6821 {
6822 <div class="col-12" id="js-dvp-product-supportmaterials-clients">
6823 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6824 <div class="row">
6825 <div class="col-12 is-loading">
6826 <div class="e-loading-spinner"></div>
6827 </div>
6828 </div>
6829 </div>
6830 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template">
6831 <div class="js-dvp-product-supportmaterials-clients-animate fade">
6832 {{#if clientSupportmaterials.items}}
6833 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6834 <div class="row">
6835 {{#if clientSupportmaterials.display}}
6836 <div class="col-12 col-md-4">
6837 <div class="e-product-section-header">
6838 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2>
6839 </div>
6840 </div>
6841 <div class="col-12 col-md-8 mt-half">
6842 {{#each clientSupportmaterials.items}}
6843
6844 <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}}">
6845 <span class="dvp-collapsed"><i class="material-icons">add</i></span>
6846 <span class="dvp-expanded"><i class="material-icons">clear</i></span>
6847 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
6848 </p>
6849
6850 <div class="row">
6851 <div class="col-12">
6852 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}">
6853 <div class="row">
6854 <div class="col-12 pl-md-3">
6855 <div class="row">
6856 {{#each materials}}
6857 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0">
6858 <div class="row">
6859 <div class="col-12 col-md-6 text-center">
6860 {{#if download}}
6861 {{#if loginToDownload}}
6862 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);">
6863 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6864 </a>
6865 {{else}}
6866 <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">
6867 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6868 </a>
6869 {{/if}}
6870 {{else}}
6871 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}">
6872 {{/if}}
6873 </div>
6874 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left">
6875 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p>
6876 {{#if download}}
6877 <p class="mb-1">
6878 {{#if loginToDownload}}
6879 <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>
6880 {{else}}
6881 <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">
6882 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u>
6883 </a>
6884 {{/if}}
6885 </p>
6886 {{/if}}
6887
6888 @if(shopIsActive && hasAccess)
6889 {
6890 @:{{#if orderable}}
6891 <p class="mb-0">@Translate("Get as free print","Get as free print")</p>
6892 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post">
6893 <input type="hidden" name="CartCmd" value="Add">
6894 <input type="hidden" name="ProductID" value="{{id}}">
6895 <input type="hidden" name="VariantID" value="">
6896 <input type="hidden" name="UnitID" value="">
6897 <input type="hidden" name="Redirect" value="false">
6898 <input type="hidden" name="Quantity" value="1">
6899 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button>
6900 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div>
6901 </form>
6902 @:{{/if}}
6903 }
6904
6905 </div>
6906 </div>
6907 </div>
6908 {{/each}}
6909 </div>
6910 </div>
6911 </div>
6912 </div>
6913 </div>
6914 </div>
6915 {{/each}}
6916 </div>
6917 {{else}}
6918 <div class="col-12 text-center">
6919 <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>
6920 <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>
6921 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p>
6922 <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>
6923 </div>
6924 {{/if}}
6925 </div>
6926 </div>
6927 {{/if}}
6928 </div>
6929 </script>
6930
6931 </div>
6932 }
6933 else if(productPanelNameValue == "Videos")
6934 {
6935 <div class="col-12" id="js-dvp-product-videos">
6936 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6937 <div class="row">
6938 <div class="col-12 is-loading">
6939 <div class="e-loading-spinner"></div>
6940 </div>
6941 </div>
6942 </div>
6943 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template">
6944 <div class="js-dvp-product-videos-animate fade">
6945 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
6946 <div class="row">
6947 {{#if display}}
6948 <div class="col-12 col-md-4">
6949 <div class="e-product-section-header">
6950 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2>
6951 </div>
6952 </div>
6953 <div class="col-12 col-md-8 mt-half">
6954 {{#compare totalVideoCount '>' 4}}
6955 <div class="collapse-peek">
6956 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos">
6957 {{/compare}}
6958 <div class="row">
6959 {{#each videos}}
6960 {{#each videos}}
6961 <div class="col-12 col-md-6">
6962 <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}}}">
6963 <div>
6964 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" />
6965 <p class="text-center mt-1 mb-3">{{embedTitle}}</p>
6966 </div>
6967 </a>
6968 <sc{{handlebarHack}}ript type="application/json">
6969 {
6970 "url":"{{../url}}",
6971 "header":"{{embedTitle}}",
6972 "embedUrl":"{{{embedUrl}}}"
6973 }
6974 </sc{{handlebarHack}}ript>
6975 </div>
6976 {{/each}}
6977 {{/each}}
6978 </div>
6979 {{#compare totalVideoCount '>' 4}}
6980 </div>
6981 <div class="collapse-peek-toggle">
6982 <div class="row">
6983 <div class="col-12 mx-auto text-center">
6984 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos">
6985 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span>
6986 </a>
6987 </div>
6988 </div>
6989 </div>
6990 {{/compare}}
6991 </div>
6992 </div>
6993 {{else}}
6994 <div class="col-12 text-center">
6995 <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>
6996 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p>
6997 <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>
6998 </div>
6999 {{/if}}
7000 </div>
7001 </div>
7002 </div>
7003 </script>
7004 </div>
7005 }
7006 else if(productPanelNameValue == "Related ranges")
7007 {
7008 <div class="col-12">
7009 @if( GetLoop("RelatedRanges").Count() > 0 )
7010 {
7011 string relatedProductsHeader = Translate("Other related products","Other related products");
7012
7013 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value")))
7014 {
7015 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value");
7016 }
7017 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7018 <div class="row">
7019 <div class="col-12 col-md-4">
7020 <div class="e-product-section-header">
7021 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2>
7022 </div>
7023 </div>
7024 <div class="col-12 col-md-8 mt-half dvp-ranges-list">
7025 <div class="row">
7026 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges"))
7027 {
7028 string relatedRangeGroupId = "";
7029
7030 int relatedProductInt = 0;
7031 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count();
7032 string relatedRangeName = relatedRange.GetString("Range");
7033 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>");
7034 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-");
7035
7036 <div class="col-12 col-lg-6 mb-3">
7037 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")">
7038 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3>
7039 </div>
7040 <div class="col-12 px-1 pt-1 border dvp-range">
7041 <div>
7042 <div class="row">
7043 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange"))
7044 {
7045 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId;
7046
7047 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage");
7048
7049 if(relatedProductInt == 2)
7050 {
7051 @:</div>
7052 @:</div>
7053 @:<div class="collapse" id="range-@relatedRangeNameCleaned">
7054 @:<div class="row">
7055 }
7056
7057 string relatedUrl = string.Empty;
7058
7059 string relatedUrlFriendlyProduct = string.Empty;
7060
7061 string relatedProductName = product.GetString("Ecom:Product.Name");
7062
7063 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName");
7064
7065 string relatedProductDisplayName = relatedProductName;
7066 string relatedProductTitleName = relatedProductName;
7067
7068 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"))
7069 {
7070 if(hideRelatedProductName)
7071 {
7072 relatedProductDisplayName = relatedRangeNameSuperscripted;
7073 relatedProductTitleName = relatedRangeName;
7074 }
7075 else
7076 {
7077 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName;
7078 relatedProductTitleName = relatedRangeName + " " + relatedProductName;
7079 }
7080 }
7081
7082 if(product.GetBoolean("Ecom:Product:Field.IsDiets"))
7083 {
7084 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
7085 }
7086 else
7087 {
7088 relatedUrl = relatedProductName;
7089 }
7090
7091 if(relatedProductsInRangeCount > 1)
7092 {
7093 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-");
7094 }
7095
7096 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
7097
7098 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct;
7099
7100 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center">
7101 <a href="@relatedProductUrl" title="@relatedProductTitleName">
7102 <div class="row">
7103 <div class="col-12 dvp-image-container">
7104 <img src="/admin/public/getimage.ashx?Crop=0&Image=@relatedProductImage&Format=jpg&AlternativeImage=/files/Images/placeholder-image.png&Width=600&Quality=75" alt="@relatedProductTitleName">
7105 </div>
7106 <div class="col-12">
7107 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p>
7108 </div>
7109 </div>
7110 </a>
7111 </div>
7112
7113 relatedProductInt++;
7114 }
7115 </div>
7116 </div>
7117 <div class="row mt-1 dvp-view-more-products">
7118 @if(relatedProductsInRangeCount > 2)
7119 {
7120 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2;
7121
7122 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products");
7123
7124 if(relatedProductsInRangeCount == 3 )
7125 {
7126 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product");
7127 }
7128
7129 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString());
7130
7131 <div class="col-12">
7132 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more">
7133 <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);">
7134 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span>
7135 <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>
7136 </a>
7137 </p>
7138 </div>
7139 }
7140 </div>
7141 </div>
7142 </div>
7143 }
7144 </div>
7145 </div>
7146 </div>
7147 </div>
7148 }
7149 </div>
7150 }
7151 else if(productPanelNameValue == "Newsletter")
7152 {
7153 <div class="col-12">
7154 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7155 <div class="row">
7156 <div class="col-12 col-md-4">
7157 <div class="e-product-section-header">
7158 <h2 class="mb-1 mb-md-0">Newsletter</h2>
7159 </div>
7160 </div>
7161 <div class="col-12 col-md-8">
7162 <div class="dvp-newsletter-signup-form">
7163 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide">
7164 <div class="form-group">
7165 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label>
7166 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter">
7167 </div>
7168 <div class="form-group">
7169 <button type="submit" class="btn btn-primary">Sign up</button>
7170 </div>
7171 </form>
7172 </div>
7173 </div>
7174 </div>
7175 </div>
7176 </div>
7177 }
7178 else if(productPanelNameValue == "eLearning")
7179 {
7180 <div class="col-12" id="js-dvp-product-elearning">
7181 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7182 <div class="row">
7183 <div class="col-12 is-loading">
7184 <div class="e-loading-spinner"></div>
7185 </div>
7186 </div>
7187 </div>
7188 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template">
7189 <div class="js-dvp-product-elearning-animate fade">
7190 {{#if elearning.items}}
7191 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7192 <div class="row">
7193 <div class="col-12 col-md-4">
7194 <div class="e-product-section-header">
7195 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2>
7196 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" />
7197 </div>
7198 </div>
7199 <div class="col-12 col-md-8">
7200 <h3>
7201 {{elearning.items.0.courseAmountText}}
7202 </h3>
7203 <div class="row">
7204 <div class="col-12">
7205 <div class="list-group">
7206 {{#if elearning.display}}
7207 {{#each elearning.items.0.courses}}
7208 <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}}">
7209 <b>{{name}}</b>
7210 </a>
7211 {{/each}}
7212 {{else}}
7213 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p>
7214 <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>
7215 {{/if}}
7216 </div>
7217 </div>
7218 </div>
7219 {{#unless elearning.display}}
7220 <div class="row mt-2">
7221 <div class="col-12">
7222 <div class="bg-academy">
7223 <div class="row p-2">
7224 @{
7225 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString();
7226 }
7227 <div class="col-12">
7228 <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>
7229 </div>
7230 <div class="col-12 col-md-8 text-white">
7231 <ul class="mb-0">
7232 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li>
7233 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li>
7234 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li>
7235 </ul>
7236 </div>
7237 <div class="col-12 col-md-4 pt-2">
7238 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p>
7239 </div>
7240 </div>
7241 </div>
7242 </div>
7243 </div>
7244 {{/unless}}
7245 </div>
7246 </div>
7247 </div>
7248 {{/if}}
7249 </div>
7250 </script>
7251 </div>
7252 }
7253 else if(productPanelNameValue == "Product Websites")
7254 {
7255 <div class="col-12" id="js-dvp-product-websites">
7256 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7257 <div class="row">
7258 <div class="col-12 is-loading">
7259 <div class="e-loading-spinner"></div>
7260 </div>
7261 </div>
7262 </div>
7263 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template">
7264 <div class="js-dvp-product-websites-animate fade">
7265 {{#if websites.items}}
7266 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7267 <div class="row">
7268 {{#if websites.display}}
7269 <div class="col-12 col-md-4">
7270 <div class="e-product-section-header">
7271 <h2 class="mb-1 mb-md-0">
7272 {{#compare count '>' 1}}
7273 @Translate("Product Websites","Product Websites")
7274 {{else}}
7275 @Translate("Product Website","Product Website")
7276 {{/compare}}
7277 </h2>
7278 </div>
7279 </div>
7280 <div class="col-12 col-md-8 mt-half">
7281 {{#each websites.items.0.website}}
7282 <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}}">
7283 <div class="col-12 col-md-6">
7284 <p class="lead">
7285 {{name}}
7286 </p>
7287 <p>
7288 <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}}">
7289 @Translate("Go to website","Go to website")
7290 </a>
7291 </p>
7292 </div>
7293 <div class="col-12 col-md-6">
7294 <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}}">
7295 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" />
7296 </a>
7297 </div>
7298 </div>
7299 {{/each}}
7300 </div>
7301 {{else}}
7302 <div class="col-12 text-center">
7303 <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>
7304 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p>
7305 <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>
7306 </div>
7307 {{/if}}
7308 </div>
7309 </div>
7310 {{/if}}
7311 </div>
7312 </script>
7313 </div>
7314 }
7315 else if(productPanelNameValue == "Frequent Treatment Questions")
7316 {
7317 <div class="col-12" id="js-dvp-product-faq">
7318 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7319 <div class="row">
7320 <div class="col-12 is-loading">
7321 <div class="e-loading-spinner"></div>
7322 </div>
7323 </div>
7324 </div>
7325 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template">
7326 <div class="js-dvp-product-faq-animate fade">
7327 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7328 <div class="row">
7329 {{#if display}}
7330 <div class="col-12 col-md-4">
7331 <div class="e-product-section-header">
7332 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2>
7333 </div>
7334 </div>
7335 <div class="col-12 col-md-8 mt-half dvp-faq">
7336 {{# faqs}}
7337 {{#each faq}}
7338 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}">
7339 <div class="row">
7340 <div class="col-12">
7341 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}">
7342 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
7343 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
7344 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small>
7345 </h3>
7346 </div>
7347 </div>
7348 <div class="row">
7349 <div class="col-12">
7350 <div class="collapse" id="collapse-{{paragraphId}}">
7351 <div class="row">
7352 <div class="col-12 pl-3">
7353 {{#each faqList}}
7354 <div class="row">
7355 <div class="col-12 mt-1">
7356 <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}}">
7357 {{listHeader}}
7358 </a>
7359 <sc{{handlebarHack}}ript type="application/json">
7360 {
7361 "url":"{{../../url}}",
7362 "categoryName": "{{../categoryName}}",
7363 "header":"{{listHeader}}",
7364 "content":"{{{listContent}}}"
7365 }
7366 </sc{{handlebarHack}}ript>
7367 </div>
7368 </div>
7369 {{/each}}
7370 </div>
7371 </div>
7372 </div>
7373 </div>
7374 </div>
7375 </div>
7376 {{/each}}
7377 {{/faqs}}
7378
7379 {{#each accordions}}
7380 <div class="p col-12 p-accordion" id="{{paragraphID}}">
7381 {{#if introText}}
7382 <div class="p-accordion-lead">
7383 {{{introText}}}
7384 </div>
7385 {{/if}}
7386 <div class="p-accordion-container ">
7387 {{#each accordionItems}}
7388 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 ">
7389 <div class="p-accordion-toggle">
7390 <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">
7391 <span class="p-accordion-toggle-text mb-0 line-height-sm none">
7392 {{heading}}
7393 </span>
7394 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i>
7395 </p>
7396 </div>
7397 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse">
7398 <div class="px-2 pb-1 p-accordion-content">
7399 <div class="p-txt-container dvp-rich-text-content pt-1">
7400 {{{text}}}
7401 </div>
7402 </div>
7403 </div>
7404 </div>
7405 {{/each}}
7406 </div>
7407 </div>
7408 {{/each}}
7409
7410
7411 </div>
7412 {{else}}
7413 <div class="col-12 text-center">
7414 <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>
7415 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p>
7416 <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>
7417 </div>
7418 {{/if}}
7419 </div>
7420 </div>
7421 </div>
7422 </script>
7423 </div>
7424 }
7425 else if(productPanelNameValue == "Got More Questions form")
7426 {
7427 <div class="col-12 js-dvp-product-details-more-info-section">
7428 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4">
7429 <div class="row">
7430 <div class="col-12 col-md-4">
7431 <div class="e-product-section-header">
7432 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2>
7433 </div>
7434 </div>
7435 <div class="p col-12 col-md-8 mt-half">
7436 @{
7437 int currentPageId;
7438
7439 int.TryParse(pageId, out currentPageId);
7440
7441 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph;
7442
7443 int currentParagraphId = currentParagraph.GlobalRecordParagraphID;
7444
7445 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString();
7446 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString();
7447
7448 int formPageId;
7449 int formParagraphId;
7450
7451 int.TryParse(formPageIdString, out formPageId);
7452 int.TryParse(formParagraphIdString, out formParagraphId);
7453
7454 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId);
7455 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId);
7456
7457 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView);
7458
7459 }
7460 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString)
7461 </div>
7462 </div>
7463 </div>
7464 </div>
7465 }
7466 }
7467 </div>
7468 }
7469 }
7470 else if(productType.GetBoolean("Ecom:Product:Field.IsDiets"))
7471 {
7472 string rangeName = range.GetString("Range");
7473 int productsInRangeCount = range.GetLoop("ProductsInRange").Count();
7474 string groupId = string.Empty;
7475 string productName = string.Empty;
7476 string publicProductCode = string.Empty;
7477 string urlFriendlyProductName = string.Empty;
7478 string productShortDescription = string.Empty;
7479 string productShortDescriptionJSON = string.Empty;
7480 string productIngredients = string.Empty;
7481 string productIngredientsJSON = string.Empty;
7482 string productPackSize = string.Empty;
7483 string productDatasheet = string.Empty;
7484 string productImage = string.Empty;
7485 string productUrl = string.Empty;
7486
7487 if(productsInRangeCount > 1)
7488 {
7489 <div class="col-12 col-sm-6 pr-sm-3">
7490 <h1 class="mb-1 font-weight-bold">
7491 @rangeName
7492 </h1>
7493 @foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
7494 {
7495
7496 groupId = product.GetString("Ecom:Group.ID");
7497
7498 productName = product.GetString("Ecom:Product.Name");
7499
7500 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
7501
7502 urlFriendlyProductName = Regex.Replace(publicProductCode, @"[^A-Za-z0-9_\~]+", "-");
7503
7504 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
7505 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"",""");
7506
7507 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value");
7508 productIngredientsJSON = Regex.Replace(productIngredients, @"\t|\n|\r", " ");
7509
7510 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value");
7511 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value");
7512
7513 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
7514 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName;
7515
7516 <a class="js-dvp-product-list-details" href="@productUrl" title="@rangeName - @productName" data-productname="@urlFriendlyProductName">
7517 <div class="row px-sm-1">
7518 <div class="dvp-product-list-details col-12 p-sm-1">
7519 <div class="row">
7520 <div class="col-3 col-sm-2 my-auto text-center">
7521 <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">
7522 </div>
7523 <div class="col-9 col-sm-8 px-sm-2 my-auto">
7524 <p class="mb-0"><b class="h3">@rangeName</b><br> @productName</p>
7525 </div>
7526 <div class="col-2 d-none d-sm-block my-auto text-center">
7527 <i class="material-icons material-icons-5x">keyboard_arrow_right</i>
7528 </div>
7529 </div>
7530 <script type="application/json" class="@urlFriendlyProductName">
7531 {
7532 "Name":"@productName",
7533 "ShortDescription":"@productShortDescriptionJSON",
7534 "Image":"@productImage",
7535 "Ingredients":"@productIngredientsJSON",
7536 "PackSize":"@productPackSize",
7537 "Datasheet":"@productDatasheet"
7538 }
7539 </script>
7540 </div>
7541 </div>
7542 </a>
7543 }
7544 </div>
7545 <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">
7546 <div class="js-dvp-product-details-animate fade">
7547 <div class="row">
7548 <div class="col-12">
7549 <div class="e-product-image-container">
7550 <div class="e-product-image-wrapper text-center">
7551 <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">
7552 </div>
7553 </div>
7554 </div>
7555 </div>
7556 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
7557 {
7558 <div class="row">
7559 <div class="col-12">
7560 @productShortDescriptionJSON
7561 </div>
7562 </div>
7563 }
7564 <div class="row">
7565 <div class="col-12 mt-2 table-responsive">
7566 <table class="table">
7567 @if(!string.IsNullOrEmpty(productIngredientsJSON))
7568 {
7569 <tr>
7570 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
7571 <td>@productIngredientsJSON</td>
7572 </tr>
7573 }
7574 @if(!string.IsNullOrEmpty(productPackSize))
7575 {
7576 <tr>
7577 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
7578 <td>@productPackSize</td>
7579 </tr>
7580 }
7581 @if(!string.IsNullOrEmpty(productDatasheet))
7582 {
7583 <tr>
7584 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
7585 <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>
7586 </tr>
7587 }
7588 </table>
7589 </div>
7590 </div>
7591 </div>
7592 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template">
7593 <div class="js-dvp-product-details-animate fade dvp-details">
7594 <div class="row">
7595 <div class="col-12">
7596 <div class="e-product-image-container">
7597 <div class="e-product-image-wrapper text-center">
7598 <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}}">
7599 </div>
7600 </div>
7601 </div>
7602 </div>
7603 @if(!string.IsNullOrEmpty(productShortDescriptionJSON))
7604 {
7605 <div class="row">
7606 <div class="col-12">
7607 {{{ShortDescription}}}
7608 </div>
7609 </div>
7610 }
7611 <div class="row">
7612 <div class="col-12 mt-2 table-responsive">
7613 <table class="table">
7614 @if(!string.IsNullOrEmpty(productIngredientsJSON))
7615 {
7616 <tr>
7617 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
7618 <td>{{Ingredients}}</td>
7619 </tr>
7620 }
7621 @if(!string.IsNullOrEmpty(productPackSize))
7622 {
7623 <tr>
7624 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
7625 <td>{{PackSize}}</td>
7626 </tr>
7627 }
7628 @if(!string.IsNullOrEmpty(productDatasheet))
7629 {
7630 <tr>
7631 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
7632 <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>
7633 </tr>
7634 }
7635 </table>
7636 </div>
7637 </div>
7638 </div>
7639 </script>
7640 </div>
7641 }
7642 else
7643 {
7644 foreach(LoopItem product in @range.GetLoop("ProductsInRange"))
7645 {
7646 groupId = product.GetString("Ecom:Group.ID");
7647
7648 productName = product.GetString("Ecom:Product.Name");
7649
7650 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value");
7651
7652 productShortDescription = product.GetString("Ecom:Product.ShortDescription");
7653
7654 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value");
7655 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value");
7656 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value");
7657
7658 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID"));
7659 }
7660 <div class="col-12">
7661 <div class="row">
7662 <div class="col-12">
7663 <h1 class="mb-1 font-weight-bold">
7664 @rangeName
7665 </h1>
7666 </div>
7667 </div>
7668 </div>
7669 <div class="col-12 col-sm-6 pr-sm-3">
7670 <div class="row">
7671 <div class="col-12">
7672 <div class="e-product-image-container">
7673 <div class="e-product-image-wrapper text-center">
7674 <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">
7675 </div>
7676 </div>
7677 </div>
7678 </div>
7679 </div>
7680 <div class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3">
7681 @if(!string.IsNullOrEmpty(productShortDescription))
7682 {
7683 <div class="row">
7684 <div class="col-12">
7685 @productShortDescription
7686 </div>
7687 </div>
7688 }
7689 <div class="row">
7690 <div class="col-12 mt-2 table-responsive">
7691 <table class="table">
7692 @if(!string.IsNullOrEmpty(productIngredients))
7693 {
7694 <tr>
7695 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td>
7696 <td>@productIngredients</td>
7697 </tr>
7698 }
7699 @if(!string.IsNullOrEmpty(productPackSize))
7700 {
7701 <tr>
7702 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td>
7703 <td>@productPackSize</td>
7704 </tr>
7705 }
7706 @if(!string.IsNullOrEmpty(productDatasheet))
7707 {
7708 <tr>
7709 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td>
7710 <td><a target="_blank" class="btn btn-sm btn-secondary" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td>
7711 </tr>
7712 }
7713 </table>
7714 </div>
7715 </div>
7716 </div>
7717 }
7718
7719 <div class="col-12" id="js-dvp-product-supportmaterials">
7720 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0">
7721 <div class="row">
7722 <div class="col-12 is-loading">
7723 <div class="e-loading-spinner"></div>
7724 </div>
7725 </div>
7726 </div>
7727 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials" type="text/x-handlebars-template">
7728 <div class="js-dvp-product-supportmaterials-animate fade">
7729 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0 border-bottom-0">
7730 <div class="row">
7731 <div class="col-12 col-md-4">
7732 <div class="e-product-section-header">
7733 <h2 class="m-a-0">@Translate("Supplementary Materials","Supplementary Materials")</h2>
7734 </div>
7735 </div>
7736 <div class="col-12 col-md-8 mt-half">
7737 {{#each supportmaterials}}
7738 <div class="row pb-1">
7739 <div class="col-12">
7740 <p class="collapsed mb-1 font-weight-bold dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-supportmaterials-{{categoryId}}">
7741 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span>
7742 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span>
7743 {{categoryName}} <small class="font-weight-normal">({{count}})</small>
7744 </p>
7745 </div>
7746 </div>
7747 <div class="row">
7748 <div class="col-12">
7749 <div class="collapse" id="collapse-details-supportmaterials-{{categoryId}}">
7750 <div class="row">
7751 <div class="col-12 pl-3 pb-2">
7752 <div class="row border border-top-0 border-right-0 border-left-0">
7753 {{#each materials}}
7754 <div class="col-12 col-md-6 py-2">
7755 <div class="row">
7756 <div class="col-12 col-md-6 text-center">
7757 <img class="p-img" src="{{imageLarge}}" alt="{{name}}">
7758 </div>
7759 <div class="col-12 col-md-6 pr-1 mt-1">
7760 <p class="font-weight-bold">{{name}}</p>
7761 {{#if download}}
7762 <a target="_blank" href="{{url}}"><i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u></a>
7763 {{/if}}
7764 </div>
7765 </div>
7766 </div>
7767 {{/each}}
7768 </div>
7769 </div>
7770 </div>
7771 </div>
7772 </div>
7773 </div>
7774 {{/each}}
7775 </div>
7776 </div>
7777 </div>
7778 </div>
7779 </script>
7780 </div>
7781 }
7782 else
7783 {
7784 <div class="card text-white bg-danger mt-3 mx-auto" style="width: 850px;">
7785 <div class="card-header py-2">
7786 <h2 class="m-0 text-center text-white">ERROR!</h2>
7787 </div>
7788 <div class="card-body py-2">
7789 <h1 class="card-text m-0 text-center text-white">This product range group is <br>missing a ProductCategory</h1>
7790 </div>
7791 <div class="card-footer py-2">
7792 <h3 class="m-0 text-center text-white">Fix this to show products</h3>
7793 </div>
7794 </div>
7795 }
7796 <code class="d-none js-e-breadcrumb-item-go-back-link">
7797 <li class="breadcrumb-go-back-link breadcrumb-item m-0 p-0">
7798 <a href="javascript:history.back();">
7799 <span>@Translate("Go back","Go back")</span>
7800 </a>
7801 </li>
7802 </code>
7803 }
7804 }
7805 else
7806 {
7807 <div class="row mt-2">
7808 @signIn()
7809 </div>
7810 }
7811 }
7812 }
7813