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