Error executing template "Designs/Rapido/_parsed/Page.parsed.cshtml"
System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at Dynamicweb.Ecommerce.Products.GroupRelation.get_GroupRelationsByChildId(String childId)
   at Dynamicweb.Ecommerce.Products.Group.get_IsTopGroup()
   at Dynamicweb.Ecommerce.Shops.Shop.get_TopLevelGroups(String languageId)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(Page page, NavigationItem parentNode)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.ProcessTree(RootNavigationItem rootNode, NavigationType navigationType)
   at Dynamicweb.Frontend.XmlNavigation.MakeXml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, Int32 selectedAreaId)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, String name, String xsltPath, Int32 selectedAreaId, Boolean sitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)
   at Dynamicweb.Rendering.TemplateBase`1.RenderNavigation(Object settings)
   at CompiledRazorTemplates.Dynamic.RazorEngine_0752496113634d759ae6e2563b599a04.b__20_0(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.RazorEngine_0752496113634d759ae6e2563b599a04.Execute()
   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 Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 3 @* Rapido version 2.1 *@ 4 5 6 7 @using Dynamicweb.Frontend 8 @using Dynamicweb.Frontend.Devices 9 @using Dynamicweb.Extensibility 10 @using Dynamicweb.Content 11 @using Dynamicweb.Security 12 @using Dynamicweb.Core 13 @using System 14 @using System.Linq 15 @using System.Web 16 @using System.IO 17 @using Dynamicweb.Ecommerce 18 19 @functions { 20 string productsPageId; 21 string mobileProductsPageId; 22 string contentSearchPageId; 23 string resultPageId; 24 string searchFeedId; 25 string mobileSearchFeedId; 26 string searchSecondFeedId; 27 string groupsFeedId; 28 string searchPlaceholder; 29 string searchType = "product-search"; 30 string searchTemplate; 31 string searchContentTemplate; 32 string searchValue = HttpContext.Current.Request.QueryString.Get("Search") != null ? HttpContext.Current.Request.QueryString.Get("Search") : ""; 33 string searchIcon; 34 bool showGroups = true; 35 36 37 } 38 @{ 39 string GoogleTagManagerID = Model.Area.Item.GetString("GoogleTagManagerID"); 40 string GoogleTrackingID = Model.Area.Item.GetString("Google_Tracking_Id"); 41 //General settings 42 string favicon = Model.Area.Item.GetFile("LogoFavicon") != null ? Model.Area.Item.GetFile("LogoFavicon").PathUrlEncoded : "/Files/Images/favicon.png"; 43 string logo = Model.Area.Item.GetFile("LogoImage") != null ? Model.Area.Item.GetFile("LogoImage").PathUrlEncoded : "/Files/Images/logo-dynamicweb.png"; 44 string logoHeight = !String.IsNullOrEmpty(Model.Area.Item.GetString("LogoHeight")) ? Model.Area.Item.GetString("LogoHeight") : "40"; 45 logoHeight = logoHeight != "0" ? logoHeight : "100"; 46 var signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 47 var homeProfilePageId = GetPageIdByNavigationTag("Frontpage"); 48 bool exceedflag = false; 49 50 51 52 if (Path.GetExtension(logo).ToLower() != ".svg") 53 { 54 @*logo = "/Admin/Public/GetImage.ashx?height=" + logoHeight + "&amp;crop=10&amp;Compression=75&amp;image=" + logo;*@ 55 logo = "/Admin/Public/GetImage.ashx?height=100&amp;crop=10&amp;Compression=75&amp;image=" + logo; 56 57 if (Pageview.Device.ToString() == "Mobile") { 58 logoHeight = "40"; 59 } 60 } 61 string mobileLogo = Model.Area.Item.GetItem("MobileTopLayout").GetFile("MobileLayoutLogo") != null ? Model.Area.Item.GetItem("MobileTopLayout").GetFile("MobileLayoutLogo").PathUrlEncoded : "/Files/Images/logo-dynamicweb.png"; 62 if (Path.GetExtension(mobileLogo).ToLower() != ".svg") 63 { 64 mobileLogo = "/Admin/Public/GetImage.ashx?height=100&amp;crop=10&amp;Compression=75&amp;image=" + mobileLogo; 65 } 66 67 var UOMFeedPageId = GetPageIdByNavigationTag("ProductUOMInfo"); 68 69 string wireframeMode = Model.Area.Item.GetBoolean("WireframeMode").ToString(); 70 var rightMenuLink = Model.Area.Item.GetItem("RightMenuLink"); 71 string rightMenuText = ""; 72 string rightMenuTarget = ""; 73 string rightMenuLinkURL = ""; 74 75 if (rightMenuLink != null) 76 { 77 rightMenuText = rightMenuLink.GetString("Link_Text"); 78 rightMenuLinkURL = rightMenuLink.GetString("Link_URL"); 79 rightMenuTarget = rightMenuLink.GetList("Target").SelectedValue; 80 } 81 82 83 //Font settings 84 string navigationFont = Model.Area.Item.GetItem("NavigationFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 85 string mobileNavigationFont = Model.Area.Item.GetItem("MobileNavigationFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 86 string headerFont = Model.Area.Item.GetItem("ContentLayoutHeaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 87 string subHeaderFont = Model.Area.Item.GetItem("ContentLayoutSubheaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 88 string contentFont = Model.Area.Item.GetItem("ContentLayoutBodyText").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 89 string newStickersFont = Model.Area.Item.GetItem("NewStickersFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 90 string customStickersFont = Model.Area.Item.GetItem("CustomStickersFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 91 string toolsMenuFont = Model.Area.Item.GetItem("ToolsMenuFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 92 string productListPriceFont = Model.Area.Item.GetItem("ProductListGeneral").GetItem("PriceFontDesign").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 93 string productPagePriceFont = Model.Area.Item.GetItem("ProductDetails").GetItem("ProductDetailsPriceFontDesign").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 94 string facetsHeaderFont = Model.Area.Item.GetItem("ProductCatalogFacets").GetItem("FacetsHeaderFont").GetGoogleFont("FontFamily").Family.Replace(" ", "+"); 95 96 //Icons 97 string cartIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("CartIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("CartIcon").SelectedValue.ToLower() : "fas fa-shopping-cart"; 98 searchIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("SearchIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("SearchIcon").SelectedValue.ToLower() : "fas fa-search"; 99 100 101 //Page IDs for use in the template 102 int pageId = Model.TopPage.ID; 103 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 104 int cartPageId = GetPageIdByNavigationTag("CartPage"); 105 int showCartPageId = GetPageIdByNavigationTag("ShowCartPage"); 106 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 107 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 108 string currentUrl = HttpContext.Current.Request.Url.AbsoluteUri; 109 110 int impersonationPageId = GetPageIdByNavigationTag("Impersonation"); 111 112 //bool stickyMenu = Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet" ? false : Model.Area.Item.GetBoolean("NavigationStickyMenu"); 113 bool stickyMenu = Model.Area.Item.GetBoolean("NavigationStickyMenu"); 114 string stickyTop = stickyMenu ? "top-container--sticky" : ""; 115 string pagePos = stickyMenu ? "js-page-pos" : ""; 116 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue; 117 string mobileTopLayout = !String.IsNullOrEmpty(Model.Area.Item.GetItem("MobileTopLayout").GetList("MobileLayoutTop").SelectedValue) ? Model.Area.Item.GetItem("MobileTopLayout").GetList("MobileLayoutTop").SelectedValue : "nav-left"; 118 string mobileNavigationPosition = mobileTopLayout == "nav-left" || mobileTopLayout == "nav-search-left" ? "left" : "right"; 119 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 120 string toolbarText = Model.Area.Item.GetString("ToolbarText"); 121 bool onlyPreview = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 122 123 string headerButtonText = Model.Area.Item.GetString("HeaderButtonText"); 124 string headerButtonLink = Model.Area.Item.GetString("HeaderButtonLink"); 125 string headerButtonType = "btn--" + Model.Area.Item.GetList("HeaderButtonType").SelectedName.ToLower(); 126 127 string autoCssLink = "/Files/Templates/Designs/Rapido/css/rapido/rapido_" + Model.Area.ID.ToString() + ".min.css?ticks=" + Model.Area.UpdatedDate.Ticks; 128 bool useFontAwesomePro = Model.Area.Item.GetItem("Icons").GetString("UseFontAwesomePro") != null ? Model.Area.Item.GetItem("Icons").GetBoolean("UseFontAwesomePro") : false; 129 130 string multiSearchPageId = GetPageIdByNavigationTag("MultiSearch").ToString(); 131 132 133 134 135 string userInitials = ""; 136 var b2b=false; 137 var onHold = false; 138 var byPass=false; 139 var manualHold=false; 140 if (Model.CurrentUser.ID != 0) 141 { 142 var user=Dynamicweb.Security.UserManagement.User.GetUserByID(Model.CurrentUser.ID); 143 var groups = user.Groups; 144 foreach(var ug in groups) 145 { 146 if(ug.Name=="B2B Customers") 147 { 148 b2b=true; 149 150 int userid = Model.CurrentUser.ID; 151 152 153 Dynamicweb.Security.UserManagement.User userById = Dynamicweb.Security.UserManagement.User.GetUserByID(Convert.ToInt32(userid)); 154 foreach (var userfield in userById.CustomFieldValues) 155 { 156 157 if (userfield.CustomField.SystemName == "AccessUser_Bypass_Sale") 158 { 159 byPass = (userfield.Value != null) ? Convert.ToBoolean(userfield.Value) : false; 160 } 161 if(userfield.CustomField.SystemName == "AccessUser_Manual_Hold") 162 { 163 manualHold = (userfield.Value != null) ? Convert.ToBoolean(userfield.Value) : false; 164 } 165 if(userfield.CustomField.SystemName == "AccessUser_Hold_Status" ) 166 { 167 onHold = (userfield.Value != null) ? Convert.ToBoolean(userfield.Value) : false; 168 } 169 170 } 171 if (byPass == true) 172 { 173 <text><script></script></text> 174 } 175 else if (manualHold == false && onHold == false && byPass==false) 176 { 177 <text><script></script></text> 178 } 179 else if (manualHold == true || onHold == true) 180 { 181 182 <text> 183 <script> 184 window.addEventListener('load', function hold() 185 { 186 document.getElementById('StandardP_bg').style.display="block"; 187 document.getElementById('StandardP').style.display="block"; 188 document.getElementById('StandardP_crossbtn').style.display="block"; 189 document.getElementById('StandardP_header').append('@Translate("sorry!!")'); 190 document.getElementById('StandardP_message').append('@Translate("sorry you are account is currently onhold!")'); 191 document.getElementById('StandardP_message').style.color="red"; 192 var div1 = document.createElement('Div'); 193 div1.innerHTML='@Translate("You may continue to browse but will not able to check out your order.")'; 194 document.getElementById('StandardP_message').append(div1); 195 div1.style.color="black"; 196 div1.style.marginTop ="25px" 197 var div2 = document.createElement('Div'); 198 div2.innerHTML='@Translate("Please contact your sale or customer service represantative of assistance.")'; 199 document.getElementById('StandardP_message').append(div2); 200 div2.style.color="black"; 201 div2.style.marginTop ="25px" 202 var div3 = document.createElement('Div'); 203 div3.innerHTML='@Translate("We apologize for any inconvience of caused.")' 204 document.getElementById('StandardP_message').append(div3); 205 div3.style.color="black"; 206 div3.style.marginTop ="25px"; 207 } , false ) 208 </script> 209 </text> 210 211 212 } 213 else { 214 <text><script></script></text> 215 } 216 217 218 219 } 220 } 221 if (!String.IsNullOrEmpty(Model.CurrentUser.Name)) 222 { 223 string[] names = Model.CurrentUser.Name.Split(' '); 224 userInitials += Model.CurrentUser.Name.Substring(0, 1); 225 226 if (names.Length > 1) 227 { 228 // userInitials += names[names.Length - 1].Substring(0, 1); 229 } 230 231 232 } 233 else 234 { 235 userInitials += Model.CurrentUser.FirstName != null && Model.CurrentUser.FirstName != "" ? Model.CurrentUser.FirstName.Substring(0, 1) : ""; 236 userInitials += Model.CurrentUser.LastName != null && Model.CurrentUser.LastName != "" ? Model.CurrentUser.LastName.Substring(0, 1) : ""; 237 userInitials += userInitials.Length == 1 && Model.CurrentUser.FirstName != null && Model.CurrentUser.FirstName.Length > 1 ? Model.CurrentUser.FirstName.Substring(1, 2) : ""; 238 userInitials += userInitials == "" && Model.CurrentUser.Email != null && Model.CurrentUser.Email.Length > 1 ? Model.CurrentUser.Email.Substring(0, 2) : ""; 239 userInitials += userInitials == "" ? Model.CurrentUser.UserName.Substring(0, 2) : ""; 240 } 241 } 242 243 string siteURL = Dynamicweb.Context.Current.Request.Url.Scheme + "://" + Dynamicweb.Context.Current.Request.Url.Host; 244 string businessPhotoPath = Model.Area.Item.GetFile("BusinessPhoto") != null ? Model.Area.Item.GetFile("BusinessPhoto").PathUrlEncoded : ""; 245 string businessName = Model.Area.Item.GetString("BusinessName"); 246 string businessLogo = Model.Area.Item.GetFile("BusinessLogo") != null ? Model.Area.Item.GetFile("BusinessPhoto").Path : ""; 247 string openingHours = Model.Area.Item.GetString("OpeningHours"); 248 var address = Model.Area.Item.GetItem("Address"); 249 string streetAddress = ""; 250 string addressLocality = ""; 251 string addressRegion = ""; 252 string postalCode = ""; 253 string addressCountry = ""; 254 if (address != null) 255 { 256 streetAddress = address.GetString("StreetAddress"); 257 addressLocality = address.GetString("City"); 258 addressRegion = address.GetString("Region"); 259 postalCode = address.GetString("PostalCode"); 260 addressCountry = address.GetString("Country"); 261 } 262 string contactEmail = Model.Area.Item.GetString("ContactEmail"); 263 string contactNumber = Model.Area.Item.GetString("ContactNumber"); 264 265 productsPageId = Converter.ToString(GetPageIdByNavigationTag("ProductsPage")); 266 mobileProductsPageId = Converter.ToString(GetPageIdByNavigationTag("MobileProductsPage")); 267 contentSearchPageId = Converter.ToString(GetPageIdByNavigationTag("ContentSearchResults")) + "&Areaid=" + Model.Area.ID; 268 269 if (Model.Area.Item.GetList("TopSearch").SelectedValue == "contentSearch") 270 { 271 searchFeedId = Converter.ToString(GetPageIdByNavigationTag("ContentSearchFeed")) + "&Areaid=" + Model.Area.ID + "&pagesOnly=true"; 272 mobileSearchFeedId = Converter.ToString(GetPageIdByNavigationTag("ContentSearchFeed")) + "&Areaid=" + Model.Area.ID + "&pagesOnly=true"; 273 resultPageId = contentSearchPageId; 274 searchPlaceholder = Translate("Search page"); 275 groupsFeedId = "0"; 276 searchType = "content-search"; 277 searchTemplate = "SearchPagesTemplate"; 278 showGroups = false; 279 } 280 else if (Model.Area.Item.GetList("TopSearch").SelectedValue == "combinedSearch") 281 { 282 //data-search-second-feed-id 283 searchFeedId = productsPageId + "&feed=true"; 284 mobileSearchFeedId = mobileProductsPageId + "&feed=true"; 285 searchSecondFeedId = Converter.ToString(GetPageIdByNavigationTag("ContentSearchFeed")) + "&Areaid=" + Model.Area.ID + "&pagesOnly=true"; 286 resultPageId = productsPageId; 287 searchPlaceholder = Translate("Search products or pages"); 288 groupsFeedId = Converter.ToString(GetPageIdByNavigationTag("ProductGroupsFeed")); 289 searchType = "combined-search"; 290 searchTemplate = "SearchProductsTemplateWrap"; 291 searchContentTemplate = "SearchPagesTemplateWrap"; 292 showGroups = Model.Area.Item.GetBoolean("ShowGroupsSelector"); 293 } 294 else 295 { 296 resultPageId = productsPageId; 297 searchFeedId = productsPageId + "&feed=true"; 298 mobileSearchFeedId = mobileProductsPageId + "&feed=true"; 299 groupsFeedId = Converter.ToString(GetPageIdByNavigationTag("ProductGroupsFeed")); 300 searchPlaceholder = Translate("Search Products"); 301 searchTemplate = "SearchProductsTemplate"; 302 searchType = "product-search"; 303 showGroups = Model.Area.Item.GetBoolean("ShowGroupsSelector"); 304 } 305 306 307 308 309 } 310 <!DOCTYPE html> 311 312 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName"> 313 <head> 314 315 <meta charset="utf-8" /> 316 <title>@Model.Title</title> 317 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"> 318 <meta name="robots" content="index, follow"> 319 @Model.MetaTags 320 @if (!string.IsNullOrWhiteSpace(GoogleTagManagerID)) 321 { 322 <!-- Google Tag Manager --> 323 <script> 324 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 325 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 326 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 327 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 328 })(window,document,'script','dataLayer','@GoogleTagManagerID'); 329 </script> 330 <!-- End Google Tag Manager --> 331 } 332 333 <!-- Global site tag (gtag.js) - Google Analytics --> 334 <script async src="https://www.googletagmanager.com/gtag/js?id=UA-135211122-1"></script> 335 <script> 336 window.dataLayer = window.dataLayer || []; 337 function gtag(){dataLayer.push(arguments);} 338 gtag('js', new Date()); 339 340 gtag('config', '@GoogleTrackingID'); 341 </script> 342 <!--End Global site tag (gtag.js) - Google Analytics --> 343 344 @{ 345 String googleTrackingId = Model.Area.Item.GetString("Google_Tracking_Id"); 346 int userID = Model.CurrentUser.ID; 347 String OrderTime= Model.Area.Item.GetString("CustomOrderCloseTime"); 348 349 350 } 351 352 @if (!string.IsNullOrWhiteSpace(googleTrackingId)) 353 { 354 <text> 355 <script> 356 var googleTrackingId = '@googleTrackingId'; 357 </script> 358 </text> 359 } 360 361 @if (!string.IsNullOrWhiteSpace(OrderTime)) 362 { 363 <text> 364 <script> 365 var OrderTime = '@OrderTime'; 366 var OrderHour=parseInt(OrderTime.split(":")[0]); 367 var OrderMinute=parseInt(OrderTime.split(":")[1]); 368 369 </script> 370 </text> 371 } 372 373 @if (!string.IsNullOrWhiteSpace(googleTrackingId)) 374 { 375 <script type="text/javascript"> 376 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 377 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 378 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 379 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 380 381 ga('create', '@googleTrackingId', 'auto'); 382 ga('set', 'userId', '@userID'); // Set the user ID using signed-in user_id. 383 ga('require','ecommerce','ecommerce.js'); 384 ga('send', 'pageview'); 385 </script> 386 } 387 388 <!-- Favicon --> 389 <link href="@favicon" rel="icon" type="image/png"> 390 391 392 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/fonts/FontAwesomePro/css/fontawesome-all.min.css" > 393 394 395 396 <!-- <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/fonts/font-awesome.min.css" type="text/css"> --> 397 <!-- Flag icon --> 398 399 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css" > 400 401 <!-- Base (Default, wireframe) styles --> 402 403 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/base/base.min.css" > 404 405 <!-- Rapido Css from Website Settings --> 406 407 <link rel="stylesheet" href="@autoCssLink" > 408 409 <!-- Ignite Css (Custom site specific styles) --> 410 411 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/slider/owl.carousel.min.css" > 412 413 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/slider/owl.theme.default.min.css" > 414 415 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/styles.css?ver=1.2" > 416 417 <link rel="stylesheet" href="/Files/Templates/Designs/Rapido/css/ignite/ignite.min.css?v=2.0" > 418 419 @{ 420 var UserAgent = System.Web.HttpContext.Current.Request.UserAgent.ToLower(); 421 422 if( UserAgent.Contains("mac_powerpc") || UserAgent.Contains("macintosh") ){ 423 <link type="text/css" href="/Files/Templates/Designs/Rapido/css/macStyles.css" rel="stylesheet"> 424 } 425 426 var shareURL = HttpContext.Current.Request.Url; 427 } 428 429 <!-- jQuery library --> 430 431 432 <!-- AddToAny BEGIN --> 433 <div id="socialShares" class="a2a_kit a2a_kit_size_32 a2a_default_style" data-a2a-url="" data-a2a-title=""> 434 <span>@Translate("Share via") :</span> 435 <a class="a2a_button_facebook"></a> 436 <a class="a2a_button_linkedin"></a> 437 <!--<a class="a2a_button_twitter"></a> 438 <a class="a2a_button_pinterest"></a> 439 <a class="a2a_button_google_plus"></a> 440 <a class="a2a_button_tumblr"></a>--> 441 </div> 442 <script> 443 var dataURL = window.location.href; 444 document.getElementById('socialShares').setAttribute('data-a2a-url', dataURL ); 445 var a2a_config = a2a_config || {}; 446 a2a_config.onclick = 1; 447 a2a_config.num_services = 6; 448 </script> 449 <script async src="https://static.addtoany.com/menu/page.js"></script> 450 <!-- AddToAny END --> 451 452 453 <!-- Google fonts --> 454 @{ 455 var fonts = new string[11] { navigationFont, mobileNavigationFont, headerFont, subHeaderFont, contentFont, newStickersFont, customStickersFont, toolsMenuFont, productListPriceFont, productPagePriceFont, facetsHeaderFont }; 456 var family = string.Join("%7C", fonts.Distinct().Select(x => string.Format("{0}:100,200,300,400,500,600,700,800,900", x))); 457 } 458 <link href="https://fonts.googleapis.com/css?family=@family&display=swap" rel="stylesheet"> 459 460 <script src="/Files/Templates/Designs/Rapido/js/jquery.min.js"></script> 461 <script async src="/Files/Templates/Designs/Rapido/js/UnderConstruction/UnderConstruction.js"></script> 462 <link rel="preload" href="/Files/Templates/Designs/Rapido/js/UnderConstruction/css/style.css" as="style"></link> 463 464 @if (!string.IsNullOrEmpty(businessPhotoPath) && 465 !string.IsNullOrEmpty(businessName) && 466 !string.IsNullOrEmpty(streetAddress) && 467 !string.IsNullOrEmpty(addressLocality) && 468 !string.IsNullOrEmpty(addressRegion) && 469 !string.IsNullOrEmpty(postalCode) && 470 !string.IsNullOrEmpty(addressCountry)) 471 { 472 <script type="application/ld+json"> 473 { 474 "@@context": "http://schema.org", 475 "@@type": "Organization", 476 "name" : "@businessName", 477 "url": "@siteURL" 478 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0) 479 { 480 <text>,"sameAs" : [</text> 481 @(string.Join(",", Model.Area.Item.GetItems("FooterSocialLinks").Select(x => '"' + x.GetString("Link") + '"'))) 482 <text>]</text> 483 } 484 }, 485 { 486 "@@context": "http://schema.org", 487 "@@type": "LocalBusiness", 488 "image": [ 489 "@siteURL/Admin/Public/GetImage.ashx?width=400&height=400&crop=0&Compression=75&DoNotUpscale=true&image=@businessPhotoPath", 490 "@siteURL/Admin/Public/GetImage.ashx?width=400&height=300&crop=0&Compression=75&DoNotUpscale=true&image=@businessPhotoPath", 491 "@siteURL/Admin/Public/GetImage.ashx?width=448&height=225&crop=0&Compression=75&DoNotUpscale=true&image=@businessPhotoPath" 492 ], 493 "@@id": "@siteURL", 494 "url": "@siteURL" 495 @if (!string.IsNullOrEmpty(openingHours)) 496 { 497 <text>,"openingHours": "@openingHours"</text> 498 } 499 @if (!string.IsNullOrEmpty(businessLogo)) 500 { 501 <text>,"logo": "@siteURL@businessLogo"</text> 502 } 503 ,"name": "@businessName", 504 "address": { 505 "@@type": "PostalAddress", 506 "streetAddress": "@streetAddress", 507 "addressLocality": "@addressLocality", 508 "addressRegion": "@addressRegion", 509 "postalCode": "@postalCode", 510 "addressCountry": "@addressCountry" 511 } 512 @if (!string.IsNullOrEmpty(contactEmail)) 513 { 514 <text>,"email": "@Model.Area.Item.GetString("ContactEmail")"</text> 515 } 516 @if (!string.IsNullOrEmpty(contactNumber)) 517 { 518 <text>,"telephone": "@Model.Area.Item.GetString("ContactNumber")"</text> 519 } 520 } 521 </script> 522 } 523 524 <script> 525 $(document).ready(function() { 526 527 //var urlParams = new URLSearchParams(location.search); 528 //var errMsgs = urlParams.getAll('paramArray'); 529 //if (errMsgs.length > 0) 530 // { 531 // $('#SignUpModalTrigger').click(); 532 533 //} 534 535 }); 536 </script> 537 <style> 538 input[type=number]::-webkit-inner-spin-button, 539 input[type=number]::-webkit-outer-spin-button { 540 -webkit-appearance: none; 541 margin: 0; 542 } 543 input[type=number] { 544 -moz-appearance:textfield; 545 } 546 </style> 547 548 549 550 551 <script> 552 553 function validateLoginForm(formId) 554 { 555 var username = document.forms[formId]["username"].value; 556 var password = document.forms[formId]["password"].value; 557 558 if (username == "" || password == "") 559 { 560 $('#loginErrorMsg').text('@Translate("Please enter both email and password")'); 561 return false; 562 } 563 //document.getElementById("LoginForm").setAttribute('action', '/Default.aspx?ID=12'); 564 //document.getElementById("LoginForm").setAttribute('action', '/<!--@Global:Area.Lang-->/'); 565 //document.getElementById("LoginForm").action = "/en/home"; 566 567 $( "#loginSubmitBtn" ).trigger( "click" ); 568 569 return true; 570 } 571 572 </script> 573 574 <script> 575 function showPopup() 576 { 577 578 //var answer = confirm("Please login to place an order"); 579 580 $('#loginTitle').addClass('head'); 581 $('#loginTitle').html("please log in"); 582 $('#loginText').addClass('body'); 583 $('#loginText').html("Please LOGIN to place an order."); 584 $('#homeButton a').addClass('homebutton'); 585 $('#homeButton a').html("Home Page"); 586 $('#loginButton a').addClass('button'); 587 $('#loginButton a').html("Go To Login Page"); 588 $('.button').attr('href', "/default.aspx?id=@signInProfilePageId"); 589 $('.homebutton').attr('href', "/default.aspx?id=@homeProfilePageId"); 590 591 $('#closeFun').show(); 592 593 return false; 594 } 595 596 function closeBurn(){ 597 598 jQuery("#closeFun").hide(); 599 600 } 601 </script> 602 <script> 603 /*function showOnHold() 604 { 605 606 $('#onHoldTitle').addClass('head'); 607 $('#onHoldTitle').html("Sorry!!"); 608 $('#onHoldText').addClass('body'); 609 $('#onHoldText').html("Your Account is currently onhold!"); 610 $('#onHoldText').addClass('body'); 611 $('#onHoldText').html("Your may continue to browse our websites but don't access"); 612 $('#onHoldText').addClass('body'); 613 $('#onHoldText').html("Your Account is currently onhold!"); 614 $('#homeButton a').addClass('homebutton'); 615 $('#homeButton a').html("OK"); 616 617 618 $('#closeHold').show(); 619 620 return false; 621 } 622 623 function closeOnHold(){ 624 625 jQuery("#closeHold").hide(); 626 627 }*/ 628 </script> 629 <script> 630 function disable(){ 631 document.getElementById("btnDis").disabled = true; 632 alert("Button has been disabled."); 633 } 634 </script> 635 <style> 636 .nameMini{ 637 font-size: 11px; 638 color: #db0008; 639 font-family: Muli-SemiBOld; 640 } 641 .saveMini 642 { 643 float: right; 644 margin-top: -16px; 645 min-width: 45%; 646 color: #db0008; 647 font-size: 11px; 648 font-family: Muli-SemiBOld; 649 } 650 .saveMinifree { 651 float: right; 652 margin-top: -16px; 653 margin-right: 274px; 654 color: #db0008; 655 font-size: 11px; 656 font-family: Muli-SemiBOld; 657 } 658 </style> 659 </head> 660 661 <body> 662 @if (!string.IsNullOrWhiteSpace(GoogleTagManagerID)) 663 { 664 <!-- Google Tag Manager (noscript) --> 665 <noscript> 666 <iframe src="https://www.googletagmanager.com/ns.html?id=@GoogleTagManagerID" 667 height="0" width="0" style="display:none;visibility:hidden"></iframe> 668 </noscript> 669 <!-- End Google Tag Manager (noscript) --> 670 } 671 @MobileNavigation(userInitials, mobileNavigationPosition) 672 673 @LoginModal() 674 675 <input type="hidden" id="UOMFeedPageId" value="@UOMFeedPageId" /> 676 677 <!--Popup Start--> 678 <div id="closeFun" onclick="closeBurn()" class="box" style="display: none;"> 679 <div id="alertPopup" class="alert"> 680 <div id="loginBody"> 681 <div id="loginTitle" class="head"> 682 683 </div> 684 <div id="loginText" class="bod"> 685 </div> 686 <div id="loginButton"> 687 688 <label for="SignInModalTrigger" class="button">@Translate("LOGIN","LOGIN")</label> 689 </div> 690 <div id="homeButton"> 691 <a class="homebutton" href="@homeProfilePageId">@Translate("Home Page")</a> 692 </div> 693 </div> 694 </div> 695 </div> 696 <!--End Popup--> 697 698 <!--OnHold Start--> 699 <div id="closeHold" onclick="hold()" class="box" style="display: none;"> 700 <div id="alertPopup" class="alert"> 701 <div id="loginBody"> 702 <div id="onHoldTitle" class="head"> 703 704 </div> 705 <div id="onHoldText" class="bod"> 706 </div> 707 <div id="homeButton"> 708 <button class="homebutton" onclick="disable();">@Translate("OK")</a> 709 </div> 710 </div> 711 </div> 712 </div> 713 <!--OnHold End--> 714 715 <!-- You must Login or go to home page --> 716 <div id="YouMustLogin_bg" onclick="hideYouMustLogin()"></div> 717 <div id="YouMustLogin"> 718 <div id="YouMustLogin_header">@Translate("Please log in")</div> 719 <diV id="YouMustLogin_message">@Translate("Please Login to place an order.")</div> 720 <div id="YouMustLogin_btns"> 721 <a class="YouMustLogin_btn" href="/Default.aspx?ID=@homeProfilePageId">@Translate("Home Page")</a> 722 <label class="YouMustLogin_btn" for="SignInModalTrigger" onclick="hideYouMustLogin()">@Translate("Login")</label> 723 </div> 724 </div> 725 <!-- You must Login or go to home page end --> 726 <div id="StandardP_bg" onclick="showOnHold()" style="display: none"></div> 727 728 <div id="StandardP" style="display: none;"> 729 <span id ="StandardP_crossbtn" onclick="closebtn()" style="display: none;">X</span> 730 <span id ="StandardP_crossremovebtn" onclick="closeremove()" style="display: none;">X</span> 731 <div id="StandardP_header"></div> 732 <div id="StandardP_message"></div> 733 <div id="StandardP_btns"> 734 735 </div> 736 </div> 737 </div> 738 <!-- Standard popup --> 739 740 741 742 <!-- Standard popup end --> 743 744 745 <main class="site dw-mod"> 746 <header class="top-container @stickyTop dw-mod" id="Top"> 747 @if (renderPagesInToolBar && Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 748 { 749 <div class="tools-navigation dw-mod"> 750 <div class="center-container grid top-container__center-container dw-mod"> 751 <div class="grid__cell"> 752 <div class="u-pull--left u-margin-top">@toolbarText</div> 753 <div class="u-pull--right"> 754 @RenderNavigation(new 755 { 756 id = "topToolsNavigation", 757 cssclass = "menu menu-tools dw-mod dwnavigation", 758 template = "TopMenu.xslt" 759 }) 760 </div> 761 </div> 762 </div> 763 </div> 764 } 765 766 @if (Pageview.Device.ToString() != "Mobile" && Pageview.Device.ToString() != "Tablet") 767 { 768 switch (topLayout) 769 { 770 case "condensed": //2 771 <!-- Main navigation --> 772 <nav class="main-navigation dw-mod"> 773 <div class="center-container top-container__center-container grid grid--align-center dw-mod" style="height:70px:"> 774 @RenderLogo(firstPageId, logo, businessName) 775 776 @* Navigation *@ 777 <div class="grid__col-auto grid__col--bleed u-reset-position main_navdesign"> 778 @RenderHeaderNavigation() 779 </div> 780 781 <ul class="menu dw-mod"> 782 @RenderSignIn("inNavigation", userInitials) 783 @RenderLanguageSelector() 784 @RenderFavorites() 785 @RenderMiniCart() 786 </ul> 787 @if (!string.IsNullOrWhiteSpace(headerButtonLink)) 788 { 789 <div class="u-margin-left u-inline-block"> 790 <a class="btn @headerButtonType dw-mod u-no-margin" href="@headerButtonLink">@headerButtonText</a> 791 </div> 792 } 793 </div> 794 </nav> 795 796 <!-- Searchbar --> 797 if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 798 { 799 <div class="u-box-shadow u-color-light-gray--bg u-inline-block u-full-width"> 800 <div class="center-container top-container__center-container dw-mod"> 801 @RenderSearch() 802 </div> 803 </div> 804 } 805 806 break; 807 case "minimal": //4 808 case "minimal-right": //5 809 string alignClass = topLayout == "minimal-right" ? "grid--align-end" : ""; 810 811 <!-- Main navigation --> 812 <nav class="main-navigation dw-mod"> 813 <div class="center-container top-container__center-container grid grid--align-center dw-mod"> 814 @RenderLogo(firstPageId, logo, businessName) 815 816 @* Navigation *@ 817 <div class="grid__col-auto grid__col--bleed u-reset-position @alignClass"> 818 @RenderHeaderNavigation() 819 </div> 820 821 <ul class="menu dw-mod"> 822 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 823 { 824 @RenderMiniSearch() 825 } 826 @RenderSignIn("inNavigation", userInitials) 827 @RenderLanguageSelector() 828 @RenderFavorites() 829 @RenderMiniCart() 830 </ul> 831 @if (!string.IsNullOrWhiteSpace(headerButtonLink)) 832 { 833 <div class="u-margin-left u-inline-block"> 834 <a class="btn @headerButtonType dw-mod u-no-margin" href="@headerButtonLink">@headerButtonText</a> 835 </div> 836 } 837 </div> 838 </nav> 839 break; 840 case "two-lines": //6 841 case "two-lines-centered": //7 842 string justifyClass = topLayout == "two-lines-centered" ? "grid--justify-center" : "grid--justify-space-between"; 843 844 <!-- Main navigation --> 845 <nav class="main-navigation dw-mod"> 846 <div class="center-container top-container__center-container grid @justifyClass dw-mod"> 847 <div class="grid__col--bleed grid--align-center"> 848 @RenderLogo(firstPageId, logo, businessName) 849 </div> 850 @* Navigation *@ 851 <div> 852 <div class="grid__cell u-reset-position"> 853 @RenderHeaderNavigation() 854 </div> 855 </div> 856 <div> 857 <div class="grid grid--align-center"> 858 <div class="grid__cell"> 859 <ul class="menu dw-mod"> 860 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 861 { 862 @RenderMiniSearch() 863 } 864 @RenderSignIn("inNavigation", userInitials) 865 @RenderLanguageSelector() 866 @RenderFavorites() 867 @RenderMiniCart() 868 </ul> 869 </div> 870 @if (!string.IsNullOrWhiteSpace(headerButtonLink)) 871 { 872 <div class="u-margin-left u-inline-block grid__cell"> 873 <a class="btn @headerButtonType dw-mod u-no-margin" href="@headerButtonLink">@headerButtonText</a> 874 </div> 875 } 876 </div> 877 </div> 878 </div> 879 </nav> 880 break; 881 case "splitted": //3 882 <!-- Header --> 883 <div class="header header-top dw-mod"> 884 <div class="center-container top-container__center-container grid grid--align-center dw-mod"> 885 886 @* Logo *@ 887 @RenderLogo(firstPageId, logo, businessName) 888 889 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 890 { 891 @* Search *@ 892 <div class="grid--align-end grid__col-auto grid__col--bleed"> 893 <div class="typeahead u-no-margin u-margin-top u-margin-bottom u-color-inherit js-typeahead" data-page-size="7" id="TopProductSearch" data-search-feed-id="@searchFeedId" data-search-second-feed-id="@searchSecondFeedId" data-result-page-id="@resultPageId" data-groups-page-id="@groupsFeedId" data-search-type="@searchType"> 894 @RenderSearch("right") 895 </div> 896 </div> 897 } 898 </div> 899 </div> 900 <!-- Main navigation --> 901 902 <nav class="main-navigation dw-mod"> 903 <div class="center-container top-container__center-container grid grid--align-center dw-mod"> 904 <div class="grid__col-auto grid__col--bleed u-reset-position"> 905 @RenderHeaderNavigation() 906 </div> 907 <ul class="menu dw-mod"> 908 @RenderSignIn("inNavigation", userInitials) 909 @RenderLanguageSelector() 910 @RenderFavorites() 911 @if (!onlyPreview) 912 { 913 @RenderMiniCart() 914 } 915 </ul> 916 @if (!string.IsNullOrWhiteSpace(headerButtonLink)) 917 { 918 <div class="u-margin-left u-inline-block"> 919 <a class="btn @headerButtonType dw-mod u-no-margin" href="@headerButtonLink">@headerButtonText</a> 920 </div> 921 } 922 </div> 923 </nav> 924 925 break; 926 case "normal": //1 927 default: 928 <!-- Header --> 929 <div class="header header-top dw-mod"> 930 <div id="main_nav_lang"> 931 <div class="container"> 932 <div class="lang_block"> 933 <!--<div class="lang"> 934 <a href="en/">EN</a> 935 </div> 936 <div class="lang"> 937 <a href="ch">中文</a> 938 </div>--> 939 940 @{ 941 string RawUrl=""; 942 string url = HttpContext.Current.Request.Url.PathAndQuery; 943 int index = url.IndexOf("?"); 944 if (index>0){ 945 RawUrl = url.Substring(index); 946 int index2=RawUrl.IndexOf("&"); 947 if (index2>0){ 948 RawUrl = RawUrl.Substring(index2); 949 } 950 } 951 } 952 953 954 @foreach (var lang in Model.Languages) 955 { 956 if( @lang.Name == "EN") 957 { 958 <div class="lang" > 959 <a href="/Default.aspx?ID=@lang.Page.ID@RawUrl" id="langChangeEn">@lang.Name</a> 960 </div> 961 }else{ 962 <div class="lang" > 963 <a href="/Default.aspx?ID=@lang.Page.ID@RawUrl" id="langChange">@lang.Name</a> 964 </div> 965 } 966 } 967 </div> 968 <text> 969 <script> 970 $(document).ready(function(){ 971 var langName = $('html').attr('lang'); 972 if(langName == 'zh') 973 { 974 $('#langChange').attr('style', 'font-weight: 700 !important;'); 975 } 976 if(langName == 'en') 977 { 978 $('#langChangeEn').attr('style', 'font-family: Raleway-bold !important;') 979 } 980 }) 981 </script> 982 </text> 983 <div class="welcome_top_txt">@toolbarText</div> 984 <div class="multi_search_menu"> 985 <a href="/Default.aspx?id=@multiSearchPageId">@Translate("Multi-Product Search")</a> 986 </div> 987 988 </div> 989 </div> 990 <div class="center-container top-container__center-container grid grid--align-center dw-mod desktop"> 991 @* Logo *@ 992 @RenderLogo(firstPageId, logo, businessName) 993 994 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 995 { 996 @* Search *@ 997 <div class="grid__col-auto grid__col--bleed"> 998 @RenderSearch() 999 </div> 1000 } 1001 1002 @if (Model.CurrentUser.ID > 0) 1003 { 1004 <ul class="menu dw-mod right_menu_nav"> 1005 @if (!onlyPreview) 1006 { 1007 @RenderMiniCart("outsideNavigation") 1008 } 1009 @RenderFavorites("outsideNavigation") 1010 @RenderSignIn("outsideNavigation", userInitials) 1011 @RenderLanguageSelector("outsideNavigation") 1012 </ul> 1013 } 1014 else 1015 { 1016 <ul class="menu dw-mod right_menu_nav_noLogin"> 1017 @if (!onlyPreview) 1018 { 1019 @RenderMiniCart("outsideNavigation") 1020 } 1021 @RenderFavorites("outsideNavigation") 1022 @RenderSignIn("outsideNavigation", userInitials) 1023 @RenderLanguageSelector("outsideNavigation") 1024 </ul> 1025 1026 } 1027 1028 @if (!string.IsNullOrWhiteSpace(headerButtonLink)) 1029 { 1030 <div class="u-margin-left u-inline-block"> 1031 <a class="btn @headerButtonType dw-mod u-no-margin" href="@headerButtonLink">@headerButtonText</a> 1032 </div> 1033 } 1034 </div> 1035 </div> 1036 1037 <!-- Main navigation --> 1038 1039 <nav class="main-navigation dw-mod"> 1040 <div class="center-container top-container__center-container grid dw-mod"> 1041 <div style="/*margin-left:0px;*/ margin-top: -6px;" class="left_menu"> 1042 @RenderHeaderNavigation() 1043 </div> 1044 1045 <div class="middle_txt"> 1046 <a href="@rightMenuLinkURL" target="@rightMenuTarget">@rightMenuText</a> 1047 </div> 1048 </div> 1049 </nav> 1050 1051 break; 1052 } 1053 } 1054 else 1055 { 1056 string style = (topLayout == "normal" || topLayout == "splitted" ? "main-navigation--top-style" : "main-navigation--nav-style"); 1057 1058 switch (mobileTopLayout) 1059 { 1060 case "nav-left": 1061 <div id="mobile_with_desktopSize"> 1062 <!-- Header --> 1063 <div class="header header-top dw-mod"> 1064 <div id="main_nav_lang"> 1065 <div class="container"> 1066 <div class="lang_block"> 1067 <!--<div class="lang"> 1068 <a href="en/">EN</a> 1069 </div> 1070 <div class="lang"> 1071 <a href="ch">中文</a> 1072 </div>--> 1073 1074 @foreach (var lang in Model.Languages) 1075 { 1076 <div class="lang"> 1077 <a href="/Default.aspx?ID=@lang.Page.ID">@lang.Name</a> 1078 </div> 1079 } 1080 </div> 1081 <div class="welcome_top_txt"><div style="color:white;"> @toolbarText 1082 <div class="multi_fortablet"> 1083 <a href="/Default.aspx?id=@multiSearchPageId">@Translate("Multi-Product Search")</a> 1084 </div> 1085 </div> 1086 </div> 1087 </div> 1088 </div> 1089 <div class="center-container top-container__center-container grid grid--align-center dw-mod desktop"> 1090 @* Logo *@ 1091 @RenderLogo(firstPageId, logo, businessName) 1092 1093 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 1094 { 1095 @* Search *@ 1096 <div class="grid__col-auto grid__col--bleed"> 1097 @RenderSearch() 1098 </div> 1099 } 1100 1101 @if (Model.CurrentUser.ID > 0) 1102 { 1103 <ul class="menu dw-mod right_menu_nav"> 1104 @if (!onlyPreview) 1105 { 1106 @RenderMiniCart("outsideNavigation") 1107 } 1108 @RenderFavorites("outsideNavigation") 1109 @RenderSignIn("outsideNavigation", userInitials) 1110 @RenderLanguageSelector("outsideNavigation") 1111 </ul> 1112 } 1113 else 1114 { 1115 <ul class="menu dw-mod right_menu_nav_noLogin"> 1116 @if (!onlyPreview) 1117 { 1118 @RenderMiniCart("outsideNavigation") 1119 } 1120 @RenderFavorites("outsideNavigation") 1121 @RenderSignIn("outsideNavigation", userInitials) 1122 @RenderLanguageSelector("outsideNavigation") 1123 </ul> 1124 1125 } 1126 1127 @if (!string.IsNullOrWhiteSpace(headerButtonLink)) 1128 { 1129 <div class="u-margin-left u-inline-block"> 1130 <a class="btn @headerButtonType dw-mod u-no-margin" href="@headerButtonLink">@headerButtonText</a> 1131 </div> 1132 } 1133 </div> 1134 </div> 1135 1136 <!-- Main navigation --> 1137 1138 <nav class="main-navigation dw-mod"> 1139 <div class="center-container top-container__center-container grid dw-mod"> 1140 <div style="margin-top: -6px;" class="left_menu"> 1141 @RenderHeaderNavigation() 1142 </div> 1143 1144 <div class="middle_txt"> 1145 <a href="@rightMenuLinkURL" target="@rightMenuTarget">@rightMenuText</a> 1146 </div> 1147 </div> 1148 </nav> 1149 </div> 1150 1151 <nav class="main-navigation-mobile dw-mod"> 1152 <div class="center-container top-container__center-container dw-mod"> 1153 <div class="grid"> 1154 @MobileNavigationTrigger() 1155 1156 <div class="logo u-middle dw-mod"> 1157 <a href="/Default.aspx?ID=@firstPageId"> 1158 <img class="grid__cell-img logo__img dw-mod" src="@mobileLogo" alt="@businessName" /> 1159 </a> 1160 </div> 1161 1162 <ul class="menu dw-mod u-pull--right"> 1163 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 1164 { 1165 <li id="search__mobile" class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1166 <label for="MobileSearchTrigger" class="menu__link dw-mod"> 1167 <svg aria-hidden="true" data-prefix="fas" data-icon="search" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-search fa-w-16 fa-3x"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" class=""></path></svg> 1168 1169 </label> 1170 </li> 1171 } 1172 1173 @if (!onlyPreview) 1174 { 1175 @RenderMiniCart() 1176 } 1177 </ul> 1178 </div> 1179 </div> 1180 </nav> 1181 break; 1182 case "nav-right": 1183 <nav class="main-navigation-mobile dw-mod"> 1184 <div class="center-container top-container__center-container dw-mod"> 1185 <div class="grid"> 1186 <div class="logo u-middle dw-mod"> 1187 <a href="/Default.aspx?ID=@firstPageId"> 1188 <img class="grid__cell-img logo__img dw-mod" src="@mobileLogo" alt="@businessName" /> 1189 </a> 1190 </div> 1191 1192 <ul class="menu dw-mod u-pull--right"> 1193 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 1194 { 1195 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1196 <label for="MobileSearchTrigger" class="menu__link dw-mod"> 1197 <i class="@searchIcon fa-1_5x"></i> 1198 </label> 1199 </li> 1200 } 1201 1202 @if (!onlyPreview) 1203 { 1204 @RenderMiniCart() 1205 } 1206 </ul> 1207 1208 @MobileNavigationTrigger() 1209 </div> 1210 </div> 1211 </nav> 1212 break; 1213 case "nav-search-left": 1214 <nav class="main-navigation-mobile dw-mod"> 1215 <div class="center-container top-container__center-container dw-mod"> 1216 <div class="grid"> 1217 @MobileNavigationTrigger() 1218 1219 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 1220 { 1221 <ul class="menu dw-mod u-pull--right"> 1222 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1223 <label for="MobileSearchTrigger" class="menu__link dw-mod"> 1224 <i class="@searchIcon fa-1_5x"></i> 1225 </label> 1226 </li> 1227 </ul> 1228 } 1229 1230 <div class="logo u-middle dw-mod"> 1231 <a href="/Default.aspx?ID=@firstPageId"> 1232 <img class="grid__cell-img logo__img dw-mod" src="@mobileLogo" alt="@businessName" /> 1233 </a> 1234 </div> 1235 1236 @if (!onlyPreview) 1237 { 1238 <ul class="menu dw-mod u-pull--right"> 1239 @RenderMiniCart() 1240 </ul> 1241 } 1242 </div> 1243 </div> 1244 </nav> 1245 break; 1246 case "search-left": 1247 <nav class="main-navigation-mobile dw-mod"> 1248 <div class="center-container top-container__center-container dw-mod"> 1249 <div class="grid"> 1250 1251 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 1252 { 1253 <ul class="menu dw-mod u-pull--right"> 1254 <li class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1255 <label for="MobileSearchTrigger" class="menu__link dw-mod"> 1256 <i class="@searchIcon fa-1_5x"></i> 1257 </label> 1258 </li> 1259 </ul> 1260 } 1261 1262 <div class="logo u-middle dw-mod"> 1263 <a href="/Default.aspx?ID=@firstPageId"> 1264 <img class="grid__cell-img logo__img dw-mod" src="@mobileLogo" alt="@businessName" /> 1265 </a> 1266 </div> 1267 1268 @if (!onlyPreview) 1269 { 1270 <ul class="menu dw-mod u-pull--right"> 1271 @RenderMiniCart() 1272 </ul> 1273 } 1274 1275 @MobileNavigationTrigger() 1276 </div> 1277 </div> 1278 </nav> 1279 break; 1280 } 1281 1282 @* Mobile search *@ 1283 if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 1284 { 1285 <input type="checkbox" id="MobileSearchTrigger" class="mobile-search-trigger" /> 1286 1287 <div class="main-navigation-mobile typeahead-mobile dw-mod"> 1288 1289 1290 <div> 1291 <div class="typeahead-mobile__search-field u-full-width dw-mod js-typeahead" data-page-size="@(searchType == "combined-search" ? 4 : 8)" id="MobileProductSearch" data-search-feed-id="@searchFeedId" data-search-second-feed-id="@searchSecondFeedId" data-result-page-id="@resultPageId" data-search-type="@searchType"> 1292 <input type="text" class="mobile__searchField js-typeahead-search-field u-no-margin" placeholder="@searchPlaceholder" value="@searchValue"> 1293 @if (string.IsNullOrEmpty(searchSecondFeedId)) 1294 { 1295 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="MobileProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@mobileSearchFeedId&feedType=productsOnly" data-init-onload="false"></ul> 1296 } 1297 else 1298 { 1299 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--combined-mobile grid"> 1300 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="MobileProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></div> 1301 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="MobileContentSearchBarContent" data-template="@searchContentTemplate" data-json-feed="/Default.aspx?ID=@searchSecondFeedId" data-init-onload="false"></div> 1302 </div> 1303 } 1304 <button type="button" class="mobile__searchEnter u-no-margin dw-mod js-typeahead-enter-btn"><i class="@searchIcon"></i></button> 1305 @if (mobileNavigationPosition == "right") 1306 { 1307 <div class="menu dw-mod u-pull--right mobile_searchClose"> 1308 <div class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1309 <label for="MobileNavTrigger" class="mobile-nav-trigger-button menu__link dw-mod"> 1310 </label> 1311 </div> 1312 </div> 1313 } 1314 else 1315 { 1316 <ul class="menu dw-mod u-pull--right mobile_searchClose"> 1317 <li class="mobile__searchClose menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1318 <label for="MobileSearchTrigger" class="menu__link dw-mod"> 1319 <i class="fas fa-times fa-1_5x"></i> 1320 </label> 1321 </li> 1322 </ul> 1323 } 1324 </div> 1325 1326 </div> 1327 1328 1329 </div> 1330 } 1331 } 1332 1333 @* Impersonation bar *@ 1334 @if (Model.CurrentUser.ID > 0 && Model.SecondaryUsers.Count > 0) 1335 { 1336 <div class="u-color-warning--bg"> 1337 <div class="center-container top-container__center-container dw-mod"> 1338 @*Impersonation*@ 1339 <div class="grid"> 1340 <div class="grid--align-self-center grid__col-x"> 1341 @if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0) 1342 { 1343 string stopImpersonateTranslation = Translate("Stop impersonation"); 1344 string username = ""; 1345 if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.FirstName) && !string.IsNullOrEmpty(Model.CurrentSecondaryUser.LastName)) 1346 { 1347 username = Model.CurrentSecondaryUser.FirstName + " " + Model.CurrentSecondaryUser.LastName; 1348 } 1349 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Name)) 1350 { 1351 username = Model.CurrentSecondaryUser.Name; 1352 } 1353 else if (!string.IsNullOrEmpty(Model.CurrentSecondaryUser.Email)) 1354 { 1355 username = Model.CurrentSecondaryUser.Email; 1356 } 1357 else 1358 { 1359 username = Model.CurrentSecondaryUser.UserName; 1360 } 1361 <div class="grid-cell"> 1362 <div class="u-pull--left u-bold u-margin-top"> 1363 <i class="fas fa-user-secret"></i> 1364 @username<text>&nbsp;</text>@Translate("is impersonating")<text>&nbsp;</text>@Pageview.User.UserName 1365 </div> 1366 <form method="post" class="u-pull--right u-no-margin"> 1367 <input type="submit" class="btn btn--secondary dw-mod u-no-margin" name="DwExtranetRemoveSecondaryUser" value="@stopImpersonateTranslation"> 1368 </form> 1369 </div> 1370 } 1371 else 1372 { 1373 string viewListTranslation = Translate("View the list of users you can impersonate"); 1374 <div class="grid-cell u-bold"> 1375 <i class="fas fa-user-secret"></i> 1376 <a href="/Default.aspx?ID=@impersonationPageId" title="@viewListTranslation" class="u-color-font-black">@viewListTranslation</a> 1377 </div> 1378 } 1379 </div> 1380 </div> 1381 </div> 1382 </div> 1383 } 1384 </header> 1385 1386 <!-- Floating mini cart --> 1387 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideCart")) 1388 { 1389 if (!onlyPreview && !stickyMenu && Converter.ToString(pageId) == productsPageId) 1390 { 1391 <div class="floating-mini-cart u-hidden dw-mod" id="FloatingMiniCart"> 1392 <div class="mini-cart dw-mod"> 1393 <a href="/Default.aspx?ID=@showCartPageId&Purge=True" class="menu-tools__link menu__link--condensed dw-mod js-mini-cart-button" onmouseover="Cart.UpdateMiniCart(event, 'SecondaryMiniCart', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart')"> 1394 <i class="@cartIcon fa-4x"></i> 1395 <div class="mini-cart__counter mini-cart__counter--lg dw-mod"> 1396 <div class="js-handlebars-root js-mini-cart-counter" id="FloatingCartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-preloader="false" data-init-onload="false"> 1397 <!-- <div class="js-mini-cart-counter-content"> 1398 @Model.Cart.TotalProductsCount 1399 </div> --> 1400 </div> 1401 </div> 1402 </a> 1403 1404 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart dw-mod" id="SecondaryMiniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 1405 </div> 1406 </div> 1407 } 1408 } 1409 1410 <div id="shareBg"></div> 1411 <!-- Render the content --> 1412 <div id="Page" class="page @pagePos"> 1413 <section class="center-container content-container dw-mod" id="content"> 1414 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 1415 1416 1417 @{ 1418 string columnClass = "12"; 1419 bool isProductPage = HttpContext.Current.Request.QueryString.Get("ProductID") != null ? true : false; 1420 string backgroundColorClass = Model.PropertyItem.GetString("BackgroundColor") != null && !isProductPage ? "u-" + Model.PropertyItem.GetList("BackgroundColor").SelectedValue + "--bg" : ""; 1421 } 1422 1423 @if (Model.PropertyItem.GetList("ShowBreadcrumb").SelectedValue == "True") 1424 { 1425 <div class="grid__col-12 grid__col--bleed-y"> 1426 @RenderNavigation(new 1427 { 1428 id = "breadcrumb", 1429 template = "Breadcrumb.xslt" 1430 }) 1431 </div> 1432 } 1433 1434 <div class="grid"> 1435 @if (Model.PropertyItem.GetList("LeftMenu") != null && Model.PropertyItem.GetList("LeftMenu").SelectedValue == "True" && (Pageview.Page.NavigationSettings == null || !Pageview.Page.NavigationSettings.UseEcomGroups)) 1436 { 1437 var navigationMarkup = RenderNavigation(new 1438 { 1439 id = "leftnav", 1440 cssclass = "dwnavigation", 1441 startLevel = 2, 1442 expandmode = "all", 1443 endlevel = 5, 1444 template = "LeftNavigation.xslt" 1445 }); 1446 1447 if (!string.IsNullOrEmpty(navigationMarkup)) 1448 { 1449 <nav class="grid__col-md-3"> 1450 <div class="grid__cell"> 1451 @navigationMarkup 1452 </div> 1453 </nav> 1454 columnClass = "9"; 1455 } 1456 } 1457 <div class="grid__col-md-@columnClass grid__col--bleed" > 1458 <div class="grid"> 1459 @Model.Placeholder("dwcontent", "content", "default:true;sort:1") 1460 </div> 1461 </div> 1462 </div> 1463 1464 1465 @* Very small hack to make it cleanly, and easily possible to change the background color on a single page *@ 1466 @if (backgroundColorClass != "") 1467 { 1468 <script> 1469 document.getElementById("Page").classList.add("@backgroundColorClass"); 1470 </script> 1471 } 1472 </section> 1473 </div> 1474 1475 1476 <div id="FavList_Popup"> 1477 <div id="FavList_close"></div> 1478 <div id="FavList_header"></div> 1479 <form id="multiForm" name="multiForm" method="post"> 1480 <input id="CartCmd" type="hidden" name="CartCmd" value="addMulti"> 1481 <div id="FavList_ProductList" class="grid product-list dw-mod"> 1482 1483 1484 </div> 1485 <div class="u-full-width"> 1486 <button id="AddAllToCart" class="btnconfirm" type="submit">@Translate("Add all to cart")</button> 1487 <!-- <button class="btnconfirm FavList_cancle" onclick="$('#FavList_close').click();" type="button">@Translate("Close")</button> --> 1488 </div> 1489 </form> 1490 </div> 1491 1492 1493 </main> 1494 1495 @{ 1496 bool showRapidoFooter = Model.Area.Item.GetBoolean("ShowRapidoFooter"); 1497 1498 if (showRapidoFooter) 1499 { 1500 @RenderFooter() 1501 } 1502 else 1503 { 1504 @RenderCustomFooter() 1505 } 1506 } 1507 1508 @helper RenderLogo(string pageId, string src, string alt) { 1509 <div class="logo dw-mod"> 1510 <a href="/Default.aspx?ID=@pageId" class="logo__img dw-mod u-block"> 1511 <img class="grid__cell-img logo__img dw-mod" src="@src" alt="@alt" /> 1512 </a> 1513 </div> 1514 } 1515 1516 @helper RenderSearch(string alignment = "left") { 1517 <div class="typeahead typeahead--centered u-color-inherit js-typeahead dw-mod" data-page-size="7" id="ProductSearchBar" data-search-feed-id="@searchFeedId" data-search-second-feed-id="@searchSecondFeedId" data-result-page-id="@resultPageId" data-groups-page-id="@groupsFeedId" data-search-type="@searchType"> 1518 @if (showGroups) 1519 { 1520 <button type="button" class="btn btn--condensed u-color-light-gray--bg typeahead-group-btn dw-mod js-typeahead-groups-btn" data-group-id="all">@Translate("All")</button> 1521 <ul class="dropdown dropdown--absolute-position u-min-w220px js-handlebars-root js-typeahead-groups-content dw-mod" id="ProductSearchBarGroupsContent" data-template="SearchGroupsTemplate" data-json-feed="/Default.aspx?ID=@groupsFeedId&feedType=productGroups" data-init-onload="false" data-preloader="minimal"></ul> 1522 } 1523 <div class="typeahead-search-field"> 1524 <input type="text" class="u-no-margin u-full-width u-full-height js-typeahead-search-field" placeholder="@searchPlaceholder" value="@searchValue" style="position: relative;right: 7%;padding: 0px;left: -5px;"> 1525 @if (string.IsNullOrEmpty(searchSecondFeedId)) 1526 { 1527 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod search_container tmm" id="ProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></ul> 1528 1529 } 1530 else 1531 { 1532 <div class="dropdown dropdown--absolute-position dropdown--combined grid @(alignment == "right" ? "dropdown--right-aligned" : "")"> 1533 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="ProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></div> 1534 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="ContentSearchBarContent" data-template="@searchContentTemplate" data-json-feed="/Default.aspx?ID=@searchSecondFeedId" data-init-onload="false"></div> 1535 </div> 1536 } 1537 </div> 1538 <button type="button" class="btn u-no-margin dw-mod js-typeahead-enter-btn"><i class="@searchIcon"></i></button> 1539 </div> 1540 } 1541 1542 @helper RenderMiniSearch() { 1543 <li class="menu__item menu__item--horizontal menu__item--top-level u-hidden-xxs is-dropdown is-dropdown--no-icon dw-mod" onmouseover="document.getElementById('headerSearch').focus()"> 1544 <div class="menu__link u-w50px dw-mod"> 1545 <i class="@searchIcon fa-1_5x"></i> 1546 </div> 1547 <div class="menu menu--dropdown u-w380px top-micro-search dw-mod"> 1548 <div class="typeahead js-typeahead" data-page-size="7" id="ProductSearchBar" data-search-feed-id="@searchFeedId" data-search-second-feed-id="@searchSecondFeedId" data-result-page-id="@resultPageId" data-search-type="@searchType"> 1549 <div class="typeahead-search-field"> 1550 <input type="text" class="u-no-margin u-full-width js-typeahead-search-field" id="headerSearch" placeholder="@searchPlaceholder" value="@searchValue"> 1551 @if (string.IsNullOrEmpty(searchSecondFeedId)) 1552 { 1553 <ul class="dropdown dropdown--absolute-position u-min-w220px u-full-width js-handlebars-root js-typeahead-search-content dw-mod" id="ProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></ul> 1554 } 1555 else 1556 { 1557 <div class="dropdown dropdown--absolute-position dropdown--combined grid dropdown--right-aligned"> 1558 <div class="js-handlebars-root js-typeahead-search-content grid__col-sm-7 grid__col--bleed-y" id="ProductSearchBarContent" data-template="@searchTemplate" data-json-feed="/Default.aspx?ID=@searchFeedId&feedType=productsOnly" data-init-onload="false"></div> 1559 <div class="js-handlebars-root js-typeahead-additional-search-content grid__col-sm-5 grid__col--bleed-y" id="ContentSearchBarContent" data-template="@searchContentTemplate" data-json-feed="/Default.aspx?ID=@searchSecondFeedId" data-init-onload="false"></div> 1560 </div> 1561 } 1562 </div> 1563 </div> 1564 </div> 1565 </li> 1566 } 1567 1568 1569 <!-- Content rendering helpers --> 1570 1571 @helper MobileNavigation(string userInitials, string position) { 1572 int pageId = Model.TopPage.ID; 1573 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 1574 string mobileNavigationLevels = Model.Area.Item.GetBoolean("MobileNavigationLevels") ? Model.Area.Item.GetString("MobileNavigationLevels") : "3"; 1575 1576 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink"); 1577 1578 string userIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("SignInProfileIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("SignInProfileIcon").SelectedValue.ToLower() : "fas fa-user"; 1579 string favoriteIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("FavoriteIcon").SelectedValue) ? "fas fa-" + Model.Area.Item.GetItem("Icons").GetList("FavoriteIcon").SelectedValue.ToLower() : "fas fa-star"; 1580 string languageIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("LanguageIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("LanguageIcon").SelectedValue.ToLower() : "fas fa-globe"; 1581 1582 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 1583 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 1584 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 1585 1586 string myAccountPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("Frontpage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("MyAccount").ToString() : GetPageIdByNavigationTag("MyAccount").ToString(); 1587 bool showMyAccountLink = Model.Area.Item.GetBoolean("ShowMyAccountLink"); 1588 //B2C 1589 string B2COrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("Frontpage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders_B2C").ToString() : GetPageIdByNavigationTag("CustomerOrders_B2C").ToString(); 1590 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 1591 //B2B 1592 string B2BOrdersPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("Frontpage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders_B2B1").ToString() : GetPageIdByNavigationTag("CustomerOrders_B2B1").ToString(); 1593 //bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 1594 string myListsPageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("Frontpage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerLists").ToString() : GetPageIdByNavigationTag("CustomerLists").ToString(); 1595 bool showMyListsLink = Model.Area.Item.GetBoolean("ShowMyListsLink"); 1596 string customerServicePageId = (Model.CurrentUser.ID <= 0) ? GetPageIdByNavigationTag("Frontpage").ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerService").ToString() : GetPageIdByNavigationTag("CustomerService").ToString(); 1597 bool showCustomerServiceLink = Model.Area.Item.GetBoolean("showCustomerServiceLink"); 1598 1599 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 1600 bool isSlidesDesign = Model.Area.Item.GetList("MobileNavigationDesign").SelectedValue == "Slides"; 1601 string menuTemplate = isSlidesDesign ? "BaseMenuForMobileSlides.xslt" : "BaseMenuForMobileExpandable.xslt"; 1602 int startLevel = renderPagesInToolBar ? 1 : 0; 1603 1604 bool onlyPreview = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 1605 1606 string multiSearchPageId = GetPageIdByNavigationTag("MultiSearch").ToString(); 1607 1608 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 1609 { 1610 <!-- Trigger for mobile navigation --> 1611 <input type="checkbox" id="MobileNavTrigger" class="mobile-nav-trigger mobile-nav-trigger--@position" autocomplete="off" /> 1612 1613 <!-- Mobile navigation --> 1614 <nav class="mobile-navigation mobile-navigation--@position dw-mod"> 1615 1616 1617 @if (Model.Languages.Count > 0) 1618 { 1619 string selectedLanguage = ""; 1620 foreach (var lang in Model.Languages) 1621 { 1622 if (lang.IsCurrent) 1623 { 1624 selectedLanguage = lang.Name; 1625 } 1626 } 1627 1628 <ul class="menu menu-mobile menu-mobile-userManagement"> 1629 <li class="menu-mobile__item menu-mobile__link--highlighted dw-mod lang_list"> 1630 @foreach (var lang in Model.Languages) 1631 { 1632 <a class=" dw-mod " href="/Default.aspx?ID=@lang.Page.ID">@lang.Name</a> 1633 } 1634 </li> 1635 </ul> 1636 } 1637 1638 <ul class="menu menu-mobile menu-mobile-userManagement"> 1639 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSignIn")) 1640 { 1641 int showCartPageId = GetPageIdByNavigationTag("ShowCartPage"); 1642 if (Model.CurrentUser.ID <= 0 ) 1643 { 1644 <li class="menu-mobile__item"> 1645 <label for="SignInModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false;mobileTrigger();" class="menu-mobile__link dw-mod menu-mobile__link--highlighted">@Translate("Log in")</label> 1646 </li> 1647 1648 <li class="menu-mobile__item"> 1649 <!-- <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" onclick="ShowSignUp()">@Translate("Sign Up")</a> --> 1650 <label for="SignUpModalTrigger" onclick="document.getElementById('MobileNavTrigger').checked = false; mobileTrigger();"> 1651 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod">@Translate("Sign Up")</a> 1652 </label> 1653 </li> 1654 <li class="menu-mobile__item"> 1655 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Default.aspx?id=@multiSearchPageId">@Translate("Multi-Product Search")</a> 1656 </li> 1657 1658 } 1659 else 1660 { 1661 <li class="menu-mobile__item"> 1662 <a href="/Default.aspx?ID=@showCartPageId&Purge=True" class="menu-mobile__link menu-mobile__link--highlighted dw-mod">@Translate("My Cart")</a> 1663 </li> 1664 1665 if (showMyListsLink) 1666 { 1667 <li class="menu-mobile__item"> 1668 <a href="/default.aspx?ID=@myListsPageId" class="menu-mobile__link menu-mobile__link--highlighted dw-mod">@Translate("My Lists")</a> 1669 </li> 1670 } 1671 if (showMyAccountLink) 1672 { 1673 <li class="menu-mobile__item"> 1674 <a href="/default.aspx?ID=@myAccountPageId" class="menu-mobile__link menu-mobile__link--highlighted dw-mod">@Translate("Profile")</a> 1675 </li> 1676 } 1677 <li class="menu-mobile__item"> 1678 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Default.aspx?id=@multiSearchPageId">@Translate("Multi-Product Search")</a> 1679 </li> 1680 <li class="menu-mobile__item"> 1681 <a class="menu-mobile__link menu-mobile__link--highlighted dw-mod" href="/Admin/Public/ExtranetLogoff.aspx?ID=@firstPageId">@Translate("Log out")</a> 1682 </li> 1683 } 1684 } 1685 </ul> 1686 1687 @RenderNavigation(new 1688 { 1689 id = "mobilenavigation", 1690 cssclass = "menu menu-mobile dwnavigation", 1691 startLevel = @startLevel, 1692 ecomStartLevel = @startLevel+1, 1693 endlevel = @mobileNavigationLevels, 1694 expandmode = "all", 1695 template = @menuTemplate 1696 }) 1697 1698 @if (renderPagesInToolBar) 1699 { 1700 @RenderNavigation(new 1701 { 1702 id = "topToolsMobileNavigation", 1703 cssclass = "menu menu-mobile dwnavigation", 1704 template = "ToolsMenuForMobile.xslt" 1705 }) 1706 } 1707 1708 1709 </nav> 1710 <label class="mobile-nav-trigger-off" for="MobileNavTrigger"></label> 1711 1712 if (!onlyPreview) 1713 { 1714 <div class="u-visually-hidden js-handlebars-root js-mini-cart" id="miniCart" data-template="MiniCartContent" data-cart-id="@cartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 1715 } 1716 } 1717 } 1718 1719 @helper LoginModal() { 1720 int pageId = Model.TopPage.ID; 1721 string topLayout = Model.Area.Item.GetList("LayoutTop").SelectedValue; 1722 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 1723 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 1724 var HomePage=GetPageIdByNavigationTag("Frontpage"); 1725 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery"; 1726 string userSignedInError = !Model.LogOnFailed ? "" : "checked"; 1727 string userSignedInErrorText = ""; 1728 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 1729 1730 if (Model.LogOnFailed) { 1731 switch (Model.LogOnFailedReason) 1732 { 1733 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordLengthInvalid: 1734 userSignedInErrorText = Translate("Password length is invalid"); 1735 break; 1736 case Dynamicweb.Security.UserManagement.LogOnFailedReason.IncorrectLogin: 1737 userSignedInErrorText = Translate("Invalid email or password"); 1738 break; 1739 case Dynamicweb.Security.UserManagement.LogOnFailedReason.ExceededFailedLogOnLimit: 1740 userSignedInErrorText = Translate("You have exceeded the limit of allowed login attempts. The user account is temporarily locked"); 1741 break; 1742 case Dynamicweb.Security.UserManagement.LogOnFailedReason.LoginLocked: 1743 userSignedInErrorText = Translate("The user account is temporarily locked"); 1744 break; 1745 case Dynamicweb.Security.UserManagement.LogOnFailedReason.PasswordExpired: 1746 userSignedInErrorText = Translate("The password has expired and needs to be renewed"); 1747 break; 1748 default: 1749 userSignedInErrorText = Translate("An unknown error occured"); 1750 break; 1751 } 1752 } 1753 1754 if (Model.CurrentUser.ID > 0) 1755 { 1756 //check if page is recovery or password page, redirect to home page 1757 if (Pageview.ID == 587) 1758 { 1759 <script>window.location.href = "/Default.aspx?ID=@firstPageId";</script> 1760 } 1761 } 1762 1763 1764 <!-- Trigger for the login modal --> 1765 <input type="checkbox" id="SignInModalTrigger" class="modal-trigger @topLayout" @userSignedInError /> 1766 1767 <!-- Login modal --> 1768 1769 <div class="modal-container"> 1770 <label for="SignInModalTrigger" id="SignInModalOverlay" class="modal-overlay"></label> 1771 <div class="modal modal--xs login_div" id="SignInModal"> 1772 <div id="action_close" onclick="CloseLoginPopup()">X</div> 1773 <div class="modal__header"> 1774 <span class="txt">@Translate("LOGIN")</span> 1775 </div> 1776 <div class="modal__body"> 1777 <div class="loginFormDiv"> 1778 <form onsubmit="return validateLoginForm(this.id)" method="POST" id="LoginForm" class="u-no-margin"> 1779 <input type="hidden" name="ID" value="@pageId" /> 1780 <input type="hidden" name="DWExtranetUsernameRemember" value="True" /> 1781 <input type="hidden" name="DWExtranetPasswordRemember" value="True" /> 1782 <div class="login_fields"> 1783 <label>@Translate("Email")</label> 1784 </div> 1785 <input type="text" class="u-full-width txt-box " id="LoginUsername" name="username" value="" /> 1786 <div class="login_fields"> 1787 @Translate("Password") 1788 <a onclick="CloseLoginPopup()" href="javascript:void(0);" class="forgot_pass"> 1789 <label for="ForgetPasswordModalTrigger">@Translate("Forgot your password?", "Forgot your password?")</label> 1790 </a> 1791 </div> 1792 <input type="password" class="u-full-width txt-box" id="LoginPassword" name="password" value="" /> 1793 <div class="error_msg dw-mod" id="loginErrorMsg">@userSignedInErrorText</div> 1794 <!-- <div class="rmb_me"> 1795 <input type="checkbox" id="RememberMe" class="rem-check" name="Autologin" value="True" /> 1796 <span class="remember_txt">@Translate("Remember me", "Remember me")</span></div> 1797 <button type="submit" id="loginSubmitBtn" class="desloginbtn" name="LoginAction" value="Login">@Translate("LOGIN")</button> --> 1798 <div class="login_fields"> 1799 <div class="remember_blk"> 1800 <input type="checkbox" name="remember" /> <span class="remember_txt">@Translate("Remember me")</span> 1801 </div> 1802 <!--<a id="loginSubmitBtn" name="login_submit">@Translate("LOGIN")</a>--> 1803 <input type="submit" id="loginSubmitBtn" name="login_submit" value='@Translate("LOGIN")'/> 1804 </div> 1805 </form> 1806 </div> 1807 </div> 1808 </div> 1809 </div> 1810 1811 1812 1813 } 1814 1815 @helper RenderHeaderNavigation() { 1816 bool megaMenu = Model.Area.Item.GetList("NavigationMegaMenu").SelectedValue.ToLower() == "true" ? true : false; 1817 string megamenuPromotionImage = Model.Area.Item.GetFile("NavigationMegamenuPromotionImage") != null ? Model.Area.Item.GetFile("NavigationMegamenuPromotionImage").PathUrlEncoded : ""; 1818 bool renderPagesInToolBar = Model.Area.Item.GetBoolean("RenderPagesInToolBar"); 1819 int startLevel = renderPagesInToolBar ? 1 : 0; 1820 1821 1822 if (!megaMenu) 1823 { 1824 @RenderNavigation(new 1825 { 1826 id = "topnavigation", 1827 cssclass = "menu dw-mod dwnavigation u-full-max-width menu_holder", 1828 startLevel = @startLevel, 1829 ecomStartLevel = @startLevel+1, 1830 endlevel = 5, 1831 expandmode="all", 1832 template = "BaseMenuWithDropdown.xslt" 1833 }); 1834 } 1835 else 1836 { 1837 @RenderNavigation(new 1838 { 1839 id = "topnavigation", 1840 cssclass = "menu dw-mod dwnavigation u-full-max-width menu_holder", 1841 startLevel = @startLevel, 1842 ecomStartLevel = @startLevel+1, 1843 endlevel = 5, 1844 promotionImage = megamenuPromotionImage, 1845 promotionLink = Model.Area.Item.GetString("NavigationMegamenuPromotionLink"), 1846 expandmode = "all", 1847 template = "BaseMegaMenu.xslt" 1848 }); 1849 } 1850 } 1851 1852 @helper MobileNavigationTrigger() { 1853 @* Mobile navigation trigger *@ 1854 1855 if (Pageview.Device.ToString() == "Mobile" || Pageview.Device.ToString() == "Tablet") 1856 { 1857 1858 <div class="menu dw-mod u-pull--left"> 1859 <div class="menu__item menu__item--horizontal menu__item--top-level dw-mod"> 1860 <label for="MobileNavTrigger" class="mobile-nav-trigger-custom dw-mod"> 1861 <svg class="svg-inline--fa fa-bars fa-w-14 fa-3x mobile_bars" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.34 14.4"><title>hamburger_menu100</title><g id="2daa2c56-52f1-49b3-af63-9b978f5bd58b" data-name="Layer 2"><g id="b428768d-bf62-4827-aeec-b683407a8fac" data-name="HOME"><line x1="1" y1="1" x2="18.34" y2="1" style="fill:none;stroke:#999;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px"></line><line x1="1" y1="7.2" x2="18.34" y2="7.2" style="fill:none;stroke:#999;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px"></line><line x1="1" y1="13.4" x2="18.34" y2="13.4" style="fill:none;stroke:#999;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px"></line></g></g></svg> 1862 <svg class="svg-inline--fa fa-times fa-w-11 fa-3x mobile_close" style="display: none;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.26 14.26"><title>close_menu100</title><g id="a3a4d7d1-f921-4541-acbe-0127bf636c28" data-name="Layer 2"><g id="49fdb3f9-f727-4100-8059-cd809d448ec4" data-name="NEW:HAMBURGER-EXPAND-beforelogin"><line x1="1" y1="13.26" x2="13.26" y2="1" style="fill:none;stroke:#999;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px"></line><line x1="1" y1="1" x2="13.26" y2="13.26" style="fill:none;stroke:#999;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px;"></line></g></g></svg> 1863 </label> 1864 </div> 1865 </div> 1866 } 1867 } 1868 1869 @helper RenderLanguageSelector(string type = "inNavigation") { 1870 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu--clean dw-mod"; 1871 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1872 string languageIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("LanguageIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("LanguageIcon").SelectedValue.ToLower() : "fas fa-globe"; 1873 string languageViewType = !String.IsNullOrEmpty(Model.Area.Item.GetList("LanguageSelectorViewType").SelectedValue) ? Model.Area.Item.GetList("LanguageSelectorViewType").SelectedValue.ToLower() : ""; 1874 1875 1876 @* Language selector *@ 1877 if (Model.Languages.Count > 1) 1878 { 1879 <!--<li class="@liClasses is-dropdown is-dropdown--no-icon"> 1880 <div class="@menuLinkClass u-w50px dw-mod"> 1881 <i class="@languageIcon fa-1_5x"></i> 1882 </div> 1883 <div class="menu menu--dropdown dw-mod"> 1884 @foreach (var lang in Model.Languages) 1885 { 1886 string langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + " u-margin-right\"></span>" + lang.Name; 1887 1888 if (languageViewType == "flag") 1889 { 1890 langInfo = "<span class=\"flag-icon flag-icon-" + Dynamicweb.Services.Areas.GetArea(lang.ID).EcomCountryCode.ToLower() + "\"></span>"; 1891 } 1892 1893 if (languageViewType == "name") 1894 { 1895 langInfo = lang.Name; 1896 } 1897 1898 <a href="/Default.aspx?ID=@lang.Page.ID" class="menu-dropdown__item menu-dropdown__item--link dw-mod">@langInfo</a> 1899 } 1900 </div> 1901 </li>--> 1902 } 1903 } 1904 1905 @helper RenderMiniCart(string type = "inNavigation") { 1906 1907 bool onlyPreview = Model.Area.Item.GetBoolean("OnlyPreviewForAnonymous") && Model.CurrentUser.ID == 0; 1908 string cartIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("CartIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("CartIcon").SelectedValue.ToLower() : "fas fa-shopping-cart"; 1909 1910 if (!onlyPreview && !Model.Area.Item.GetBoolean("NavigationItemsHideCart")) 1911 { 1912 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod" : "menu__item menu__item--horizontal menu--clean dw-mod"; 1913 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1914 1915 int miniCartFeedPageId = GetPageIdByNavigationTag("MiniCartFeed"); 1916 int cartFeedPageId = GetPageIdByNavigationTag("CartOrderlinesFeed"); 1917 int cartPageId = GetPageIdByNavigationTag("CartPage"); 1918 int showCartPageId = GetPageIdByNavigationTag("ShowCartPage"); 1919 double cartProductsCount = Model.Cart.TotalProductsCount; 1920 double subtotalprice = 0.00; 1921 if (cartProductsCount > 0) 1922 { 1923 //subtotalprice = Model.Cart.TotalPrice.Price.Formatted.Replace("$",""); 1924 subtotalprice= Model.Cart.TotalPrice.PriceWithoutVat.Value - Model.Cart.ShippingFee.PriceWithoutVat.Value; 1925 } 1926 @* Mini cart *@ 1927 <li class="@liClasses cart_menu_item" onmouseenter="Cart2.UpdateMiniCart(event, 'miniCart', '/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart')" > 1928 <div class="mini-cart"> 1929 <a href="/Default.aspx?ID=@showCartPageId" id="miniCartCounterWrap" class="@menuLinkClass dw-mod js-mini-cart-button u-w50px"> 1930 <svg aria-hidden="true" data-prefix="fal" data-icon="shopping-cart" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-shopping-cart fa-w-18 fa-3x u-hidden-lg"><path fill="currentColor" d="M551.991 64H129.28l-8.329-44.423C118.822 8.226 108.911 0 97.362 0H12C5.373 0 0 5.373 0 12v8c0 6.627 5.373 12 12 12h78.72l69.927 372.946C150.305 416.314 144 431.42 144 448c0 35.346 28.654 64 64 64s64-28.654 64-64a63.681 63.681 0 0 0-8.583-32h145.167a63.681 63.681 0 0 0-8.583 32c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-17.993-7.435-34.24-19.388-45.868C506.022 391.891 496.76 384 485.328 384H189.28l-12-64h331.381c11.368 0 21.177-7.976 23.496-19.105l43.331-208C578.592 77.991 567.215 64 551.991 64zM240 448c0 17.645-14.355 32-32 32s-32-14.355-32-32 14.355-32 32-32 32 14.355 32 32zm224 32c-17.645 0-32-14.355-32-32s14.355-32 32-32 32 14.355 32 32-14.355 32-32 32zm38.156-192H171.28l-36-192h406.876l-40 192z" class=""></path></svg> 1931 <span class="cart-icon u-hidden-sm">@Translate("Cart")</span> 1932 <div class="mini-cart__counter mini-cart__counter--inline dw-mod"> 1933 <!--<div class="js-handlebars-root cart_list_container" id="cartSubtotalPrice" data-template="MiniCartSubTotalPrice" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=orderlines" data-init-onload="false" data-preloader="false"> 1934 <div class=""> 1935 (@subtotalprice) 1936 </div> 1937 </div>--> 1938 <div class="js-handlebars-root js-mini-cart-counter cart_list_container u-hidden-sm" id="cartCounter" data-template="MiniCartCounterContent" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=Counter" data-init-onload="false" data-preloader="false"> 1939 <!--<div class="js-mini-cart-counter-content" show-price="@subtotalprice.ToString("C2")" > 1940 ($@subtotalprice.ToString("F")) 1941 </div>--> 1942 <div class="js-mini-cart-counter-content"> 1943 (@Model.Cart.TotalProductsCount) 1944 </div> 1945 </div> 1946 <div id="mobilecartcounter" class="mini-cart_Counter_mobile"> 1947 @Model.Cart.TotalProductsCount 1948 </div> 1949 </div> 1950 </a> 1951 <div class="mini-cart-dropdown js-handlebars-root js-mini-cart" id="miniCart" data-template="MiniCartContent" data-cart-id="@miniCartFeedPageId" data-json-feed="/Default.aspx?ID=@miniCartFeedPageId&feedType=MiniCart" data-init-onload="false"></div> 1952 </div> 1953 </li> 1954 1955 } 1956 } 1957 1958 @helper RenderSignIn (string type = "inNavigation", string userInitials = "") { 1959 if (!Model.Area.Item.GetBoolean("NavigationItemsHideSignIn")) { 1960 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu__item--clean dw-mod"; 1961 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 1962 1963 string userIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("SignInProfileIcon").SelectedValue) ? Model.Area.Item.GetItem("Icons").GetList("SignInProfileIcon").SelectedValue.ToLower() : "fas fa-user"; 1964 string favoriteIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("FavoriteIcon").SelectedValue) ? "fas fa-" + Model.Area.Item.GetItem("Icons").GetList("FavoriteIcon").SelectedValue.ToLower() : "fas fa-star"; 1965 1966 int pageId = Model.TopPage.ID; 1967 1968 string myAccountPageId = (Model.CurrentUser.ID <= 0) ? pageId.ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("MyAccount").ToString() : GetPageIdByNavigationTag("MyAccount").ToString(); 1969 bool showMyAccountLink = Model.Area.Item.GetBoolean("ShowMyAccountLink"); 1970 1971 //B2C 1972 string B2COrdersPageId = (Model.CurrentUser.ID <= 0) ? pageId.ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders_B2C").ToString() : GetPageIdByNavigationTag("CustomerOrders_B2C").ToString(); 1973 1974 //B2B 1975 string B2BOrdersPageId = (Model.CurrentUser.ID <= 0) ? pageId.ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerOrders_B2B1").ToString() : GetPageIdByNavigationTag("CustomerOrders_B2B1").ToString(); 1976 1977 string myListsPageId = (Model.CurrentUser.ID <= 0) ? pageId.ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerLists").ToString() : GetPageIdByNavigationTag("CustomerLists").ToString(); 1978 string customerServicePageId = (Model.CurrentUser.ID <= 0) ? pageId.ToString() + "&RedirectPageId=" + GetPageIdByNavigationTag("CustomerService").ToString() : GetPageIdByNavigationTag("CustomerService").ToString(); 1979 1980 int myDashboardPageId = GetPageIdByNavigationTag("CustomerDashboard"); 1981 1982 int createAccountPageId = GetPageIdByNavigationTag("CreateAccount"); 1983 int signInProfilePageId = GetPageIdByNavigationTag("SignInPage"); 1984 string forgotPasswordPageId = signInProfilePageId.ToString() + "&LoginAction=Recovery"; 1985 1986 bool showCreateAccountLink = Model.Area.Item.GetBoolean("ShowCreateAccountLink"); 1987 bool showMyOrdersLink = Model.Area.Item.GetBoolean("ShowMyOrdersLink"); 1988 bool showMyListsLink = Model.Area.Item.GetBoolean("ShowMyListsLink"); 1989 bool showCustomerServiceLink = Model.Area.Item.GetBoolean("showCustomerServiceLink"); 1990 string firstPageId = Model.Area.FirstActivePage.ID.ToString(); 1991 1992 string customerFirstName = Model.CurrentUser.FirstName; 1993 string alterTest = ""; 1994 if (string.IsNullOrEmpty(customerFirstName)) 1995 { 1996 //customerFirstName = Model.CurrentUser.Email; 1997 customerFirstName = "User"; 1998 alterTest = Model.CurrentUser.Email; 1999 } 2000 2001 @* Sign in + Customer center links *@ 2002 2003 2004 if (Model.CurrentUser.ID <= 0) 2005 { 2006 <!-- <i class="@userIcon fa-1_5x aa"></i> --> 2007 2008 2009 <li class="@liClasses is-dropdown is-dropdown--no-icon" style="font-family: Raleway-Regular;"> 2010 <div class="@menuLinkClass dw-mod"> 2011 <label for="SignInModalTrigger" class="u-no-margin sign-in-modal-trigger-button dw-mod log-in">@Translate("LOG IN")</label> 2012 </div> 2013 </li> 2014 <li class="@liClasses is-dropdown is-dropdown--no-icon" style="font-family: Raleway-Regular;"> 2015 <div class="@menuLinkClass dw-mod"> 2016 <!--<label><a onclick="ShowSignUp()" class="sign-txt" style="color: white;">@Translate("SIGN UP")</a> </label>--> 2017 <label for="SignUpModalTrigger"><a class="sign-txt" style="color: white;">@Translate("SIGN UP")</a> </label> 2018 </div> 2019 </li> 2020 2021 2022 } 2023 else 2024 { 2025 <li class="@liClasses is-dropdown is-dropdown--no-icon hover_li"> 2026 <div class="@menuLinkClass dw-mod"> 2027 <a href="/default.aspx?ID=@myDashboardPageId" class="u-color-inherit user_menu" alt="@alterTest">@Translate("Hi") @customerFirstName!</a> 2028 </div> 2029 <div class="menu menu--dropdown sign-in-dropdown dw-mod usermenu_dropdown"> 2030 <!--<div class="triangleDrop_usermenu"></div>--> 2031 <ul class="list list--clean dw-mod"> 2032 <li> 2033 <a href="/default.aspx?ID=@myDashboardPageId" class="list__link dw-mod liststyle">@Translate("Dashboard")</a> 2034 </li> 2035 @if (showMyAccountLink) 2036 { 2037 <li> 2038 <a href="/default.aspx?ID=@myAccountPageId" class="list__link dw-mod liststyle">@Translate("My Account")</a> 2039 </li> 2040 } 2041 2042 @if (showMyOrdersLink) 2043 { 2044 var user=Dynamicweb.Security.UserManagement.User.GetUserByID(Model.CurrentUser.ID); 2045 var groups = user.Groups; 2046 foreach(var ug in groups) 2047 { 2048 if(ug.Name=="B2B Customers") 2049 { 2050 <li> 2051 <a href="/default.aspx?ID=@B2BOrdersPageId&search=false" class="list__link dw-mod liststyle">@Translate("My Orders")</a> 2052 </li> 2053 } 2054 if(ug.Name=="B2C Customers") 2055 { 2056 <li> 2057 <a href="/default.aspx?ID=@B2COrdersPageId" class="list__link dw-mod liststyle">@Translate("My Orders")</a> 2058 </li> 2059 } 2060 } 2061 2062 } 2063 2064 @if (showMyListsLink) 2065 { 2066 <li> 2067 <a href="/default.aspx?ID=@myListsPageId" class="list__link dw-mod liststyle">@Translate("My Lists")</a> 2068 </li> 2069 } 2070 @if (showCustomerServiceLink) 2071 { 2072 <li> 2073 <a href="/default.aspx?ID=@customerServicePageId" class="list__link dw-mod liststyle" style="border-bottom: 1px solid #ccc;">@Translate("Customer Service")</a> 2074 </li> 2075 } 2076 @if (Model.CurrentUser.ID > 0) 2077 { 2078 2079 int currentPageId = Dynamicweb.Frontend.PageView.Current().ID; 2080 2081 <li> 2082 <!--<a href="/Admin/Public/ExtranetLogoff.aspx?ID=@firstPageId" class="list__link dw-mod liststyle">@Translate("Log out")</a>--> 2083 <a href="/Admin/Public/ExtranetLogoff.aspx?ID=@firstPageId" class="list__link dw-mod liststyle">@Translate("Log out")</a> 2084 </li> 2085 } 2086 </ul> 2087 </div> 2088 </li> 2089 } 2090 } 2091 } 2092 2093 @helper RenderFavorites(string type = "inNavigation") { 2094 if (!Model.Area.Item.GetBoolean("NavigationItemsHideFavorites")) 2095 { 2096 string liClasses = type == "inNavigation" ? "menu__item menu__item--horizontal menu__item--top-level dw-mod u-hidden-xxs" : "menu__item menu__item--horizontal menu--clean dw-mod"; 2097 string menuLinkClass = type == "inNavigation" ? "menu__link" : "header-menu__link"; 2098 string favoriteIcon = !String.IsNullOrEmpty(Model.Area.Item.GetItem("Icons").GetList("FavoriteIcon").SelectedValue) ? "fas fa-" + Model.Area.Item.GetItem("Icons").GetList("FavoriteIcon").SelectedValue.ToLower() : "fas fa-star"; 2099 string myFavoritesPageId = GetPageIdByNavigationTag("CustomerLists").ToString(); 2100 var mylist = Dynamicweb.Ecommerce.CustomerCenter.CustomerProductList.GetAllProductLists(Model.CurrentUser.ID); 2101 string mylistClassName = ""; 2102 if (mylist.Count() > 0){ mylistClassName = "mylistLink"; } 2103 2104 @* Favorites *@ 2105 if (Model.CurrentUser.ID > 0) 2106 { 2107 <li class="@liClasses for_mylist" style="background:unset;"> 2108 2109 <a href="/Default.aspx?ID=@myFavoritesPageId" class="@menuLinkClass u-w50px dw-mod @mylistClassName" style="text-transform: uppercase; font-size: 14px; margin-right: 29px;word-spacing: 2px;"> 2110 <!-- <i class="@favoriteIcon fa-1_5x"></i> --> 2111 @Translate("My Lists", "My Lists") 2112 </a> 2113 @if (mylist.Count() > 0) 2114 { 2115 <div class="menu menu--dropdown sign-in-dropdown dw-mod usermenu_dropdown_mylists"> 2116 <!--<div class="triangleDrop_usermenu"></div>--> 2117 <ul class="list list--clean dw-mod"> 2118 @{ 2119 foreach (var list in mylist) 2120 { 2121 string detailsPageID = GetPageIdByNavigationTag("ProductsPage").ToString(); 2122 //string listLink = "/Default.aspx?ID=" + detailsPageID + "&ListID=" + list.ListId + "&ListName=" + list.Name; 2123 string listLink = "/Default.aspx?ID=" + myFavoritesPageId; 2124 2125 string nameAndDate = list.Name; 2126 string TrueName = ""; 2127 2128 int len = nameAndDate.Length - 1; 2129 2130 if( nameAndDate.Contains("|DATE_") ){ 2131 string TrueNameAndDate = nameAndDate.Replace("|DATE_", "^"); 2132 TrueName = TrueNameAndDate.Split('^')[0]; 2133 } 2134 else{ 2135 TrueName = nameAndDate; 2136 } 2137 2138 <li> 2139 <a href="@listLink" class="list__link dw-mod liststyle mylistname">@TrueName</a> 2140 </li> 2141 } 2142 } 2143 </ul> 2144 </div> 2145 } 2146 </li> 2147 } 2148 } 2149 } 2150 2151 2152 @helper RenderFooter() { 2153 string footerColumnOneContent = !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterColumnOne")) ? Model.Area.Item.GetString("FooterColumnOne") : ""; 2154 string footerColumnTwoContent = !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterColumnTwo")) ? Model.Area.Item.GetString("FooterColumnTwo") : ""; 2155 string footerColumnThreeContent = !string.IsNullOrEmpty(Model.Area.Item.GetString("FooterColumnThree")) ? Model.Area.Item.GetString("FooterColumnThree") : ""; 2156 string footerColumnOneHeader = Model.Area.Item.GetString("FooterColumnOneHeader"); 2157 string footerColumnTwoHeader = Model.Area.Item.GetString("FooterColumnTwoHeader"); 2158 string footerColumnThreeHeader = Model.Area.Item.GetString("FooterColumnThreeHeader"); 2159 int newsletterSignUpPageId = GetPageIdByNavigationTag("NewsletterSignUp"); 2160 bool useCardTypeAsImage = Model.Area.Item.GetBoolean("UseCardTypesAsImage"); 2161 2162 <!-- Footer section --> 2163 <footer class="footer dw-mod"> 2164 <div class="center-container top-container__center-container dw-mod"> 2165 <div class="grid grid--external-bleed-x"> 2166 @if (!string.IsNullOrEmpty(footerColumnOneContent) || !string.IsNullOrEmpty(footerColumnOneHeader)) 2167 { 2168 <div class="grid__col-md-auto"> 2169 <h3 class="footer__heading dw-mod">@footerColumnOneHeader</h3> 2170 <div class="footer__content dw-mod"> 2171 @footerColumnOneContent 2172 </div> 2173 </div> 2174 } 2175 @if (!string.IsNullOrEmpty(footerColumnTwoContent) || !string.IsNullOrEmpty(footerColumnTwoHeader)) 2176 { 2177 <div class="grid__col-md-auto"> 2178 <h3 class="footer__heading dw-mod">@footerColumnTwoHeader</h3> 2179 <div class="footer__content dw-mod"> 2180 @footerColumnTwoContent 2181 </div> 2182 </div> 2183 } 2184 @if (!string.IsNullOrEmpty(footerColumnThreeContent) || !string.IsNullOrEmpty(footerColumnThreeHeader)) 2185 { 2186 <div class="grid__col-md-auto"> 2187 <h3 class="footer__heading dw-mod">@footerColumnThreeHeader</h3> 2188 <div class="footer__content dw-mod"> 2189 @footerColumnThreeContent 2190 </div> 2191 </div> 2192 } 2193 @if (Model.Area.Item.GetBoolean("FooterNewsletterSignUp")) 2194 { 2195 <div class="grid__col-md-auto"> 2196 <h3 class="footer__heading dw-mod">@Translate("Mailing list")</h3> 2197 <div class="footer__content dw-mod"> 2198 <p>@Translate("Sign up if you would like to receive occasional treats from us", "Sign up if you would like to receive occasional treats from us").</p> 2199 <form class="form dw-mod" name="NewsletterRedirect" action='/Default.aspx' method="get" enctype="multipart/form-data"> 2200 <input name="ID" id="ID" value="@newsletterSignUpPageId" type="hidden" /> 2201 <div class="form__field-combi"> 2202 <input name="NewsletterEmail" id="NewsletterEmail" type="text" placeholder='@Translate("Your email address", "Your email address")' /> 2203 <input class="btn btn--primary btn--condensed dw-mod" type="submit" id="Submitter" value='@Translate("Go", "Go")' /> 2204 </div> 2205 </form> 2206 </div> 2207 </div> 2208 } 2209 @if (Model.Area.Item.GetItems("FooterSocialLinks").Count > 0) 2210 { 2211 <div class="grid__col-md-auto"> 2212 <h3 class="footer__heading dw-mod">@Translate("Social links")</h3> 2213 <div class="footer__content dw-mod"> 2214 <div class="collection dw-mod"> 2215 @foreach (var socialitem in Model.Area.Item.GetItems("FooterSocialLinks")) 2216 { 2217 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel; 2218 string socialIconClass = socialIcon.SelectedValue; 2219 string socialIconTitle = socialIcon.SelectedName; 2220 string socialLink = socialitem.GetString("Link"); 2221 2222 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px"><i class="@socialIconClass fa-2x"></i></a> 2223 } 2224 </div> 2225 </div> 2226 </div> 2227 } 2228 @if (Model.Area.Item.GetItems("FooterPayments").Count > 0) 2229 { 2230 <div class="grid__col-12"> 2231 <div class="footer__content dw-mod"> 2232 <div class="collection dw-mod"> 2233 @foreach (var payment in Model.Area.Item.GetItems("FooterPayments")) 2234 { 2235 var paymentItem = payment.GetValue("CardTypeOrVerifiedPayment") as Dynamicweb.Frontend.ListViewModel; 2236 string paymentImage = null; 2237 string paymentTitle = paymentItem.SelectedName; 2238 ListOptionViewModel selected = paymentItem.SelectedOptions.FirstOrDefault(); 2239 if(selected != null) { 2240 paymentImage = selected.Icon; 2241 } 2242 2243 <div class="footer__card-type"> 2244 <img src="/Admin/Public/GetImage.ashx?width=60&Compression=75&image=@paymentImage" alt="@paymentTitle" title="@paymentTitle" /> 2245 </div> 2246 } 2247 </div> 2248 </div> 2249 </div> 2250 } 2251 <div class="grid__col-12 footer__copyright dw-mod"> 2252 <p>@Model.Area.Item.GetString("FooterCopyrightText")</p> 2253 </div> 2254 </div> 2255 2256 </div> 2257 2258 </footer> 2259 } 2260 2261 @helper RenderCustomFooter() { 2262 2263 //footer banner settings 2264 string footerBannerBackgroundColor = Model.Area.Item.GetString("FooterBannerBackgroundColor"); 2265 string footerBannerStyle = string.Empty; 2266 2267 if (footerBannerBackgroundColor != "") 2268 { 2269 footerBannerStyle += "background-color: " + footerBannerBackgroundColor + ";"; 2270 } 2271 2272 string footerBannerMobileText = Model.Area.Item.GetString("Mobile_App_Text"); 2273 string socialMediaText = Model.Area.Item.GetString("SocialMediaText"); 2274 2275 //footer settings 2276 bool showBanner = Model.Area.Item.GetBoolean("ShowFooterBanner"); 2277 string footerBackgroundColor = Model.Area.Item.GetString("CustomFooterBackgroundColor"); 2278 string footerStyle = string.Empty; 2279 2280 if (footerBackgroundColor != "") 2281 { 2282 footerStyle += "background-color: " + footerBackgroundColor + ";"; 2283 } 2284 2285 string footerHeaderColumnOne = Model.Area.Item.GetString("CustomFooterColumnOneHeader"); 2286 string footerHeaderColumnTwo = Model.Area.Item.GetString("CustomFooterColumnTwoHeader"); 2287 string footerHeaderColumnThree = Model.Area.Item.GetString("CustomFooterColumnThreeHeader"); 2288 string footerHeaderColumnFour = Model.Area.Item.GetString("CustomFooterColumnFourHeader"); 2289 string company_address = Model.Area.Item.GetString("Company_address"); 2290 string copy_right = Model.Area.Item.GetString("Copy_right"); 2291 bool useCardTypeAsImage = Model.Area.Item.GetBoolean("UseCardTypesAsImage"); 2292 2293 var files = Model.Area.Item.GetFiles("FooterImagePayment"); 2294 var footerImagePayment = files[0].Path; 2295 <div class="Footer_custom_banner dw-mod" style="@footerBannerStyle"> 2296 <div class="center-container top-container__center-container dw-mod"> 2297 <div class="grid grid--external-bleed-x"> 2298 @if (showBanner){ 2299 <div class="grid__col-12 grid__col-sm-8 grid__col-md-8"> 2300 <ul class="mobileApps"> 2301 <li> 2302 <h3 class="footer__heading dw-mod">@footerBannerMobileText</h3> 2303 </li> 2304 <li> 2305 @foreach (var item in Model.Area.Item.GetItems("Mobile_App_Download_Links")) 2306 { 2307 var image = item.GetFiles("Image"); 2308 var imageurl = image[0].Path; 2309 string imageALT = item.GetString("ImageALT"); 2310 string link = item.GetString("Link"); 2311 2312 <a class="appLinks" href="@link" target="_blank"><img src="@imageurl" alt="@imageALT"/></a> 2313 2314 } 2315 </li> 2316 </ul> 2317 </div> 2318 <div class="grid__col-12 grid__col-sm-4 grid__col-md-4 "> 2319 <div class="socialLinks"> 2320 <b class="socialLinksHeader">@socialMediaText</b> 2321 @foreach (var socialitem in Model.Area.Item.GetItems("SocialMediaProfiles")) 2322 { 2323 var socialIcon = socialitem.GetValue("Icon") as Dynamicweb.Frontend.ListViewModel; 2324 string socialIconClass = socialIcon.SelectedValue; 2325 string socialIconTitle = socialIcon.SelectedName; 2326 string socialLink = socialitem.GetString("Link"); 2327 <a href="@socialLink" target="_blank" title="@socialIconTitle" class="u-margin-bottom-5px socialLink"><i class="@socialIconClass fa-2x"></i></a> 2328 } 2329 </div> 2330 </div> 2331 } 2332 2333 </div> 2334 </div> 2335 </div> 2336 <footer class="footer dw-mod FGX__footer-custom"> 2337 <div class="center-container top-container__center-container dw-mod"> 2338 <div class="grid grid--external-bleed-x footer_bg"> 2339 <div class="grid__col-12 grid__col-sm-auto grid__col-md-auto mobileLinks"> 2340 <h3 class="footer__heading dw-mod mobileHeader collapsed">@footerHeaderColumnOne</h3> 2341 <div class="footer__content dw-mod"> 2342 <ul class="list-unstyled"> 2343 @foreach (var linkItem in Model.Area.Item.GetItems("CustomFooterColumnOneLinks")) 2344 { 2345 string linkText = linkItem.GetString("Link_Text"); 2346 string linkURL = linkItem.GetString("Link_URL"); 2347 string target = linkItem.GetList("Target").SelectedValue; 2348 2349 <li><a href="@linkURL" target="@target">@linkText</a></li> 2350 } 2351 </ul> 2352 </div> 2353 </div> 2354 <div class="grid__col-12 grid__col-sm-auto grid__col-md-auto mobileLinks"> 2355 <h3 class="footer__heading dw-mod mobileHeader collapsed">@footerHeaderColumnTwo</h3> 2356 <div class="footer__content dw-mod"> 2357 <ul class="list-unstyled"> 2358 @foreach (var linkItem in Model.Area.Item.GetItems("CustomFooterColumnTwoLinks")) 2359 { 2360 string linkText = linkItem.GetString("Link_Text"); 2361 string linkURL = linkItem.GetString("Link_URL"); 2362 string target = linkItem.GetList("Target").SelectedValue; 2363 2364 <li><a href="@linkURL" target="@target">@linkText</a></li> 2365 } 2366 </ul> 2367 </div> 2368 </div> 2369 <div class="grid__col-12 grid__col-sm-auto grid__col-md-auto mobileLinks"> 2370 <h3 class="footer__heading dw-mod mobileHeader collapsed">@footerHeaderColumnThree</h3> 2371 <div class="footer__content dw-mod"> 2372 <ul class="list-unstyled"> 2373 @foreach (var linkItem in Model.Area.Item.GetItems("CustomFooterColumnThreeLinks")) 2374 { 2375 string linkText = linkItem.GetString("Link_Text"); 2376 string linkURL = linkItem.GetString("Link_URL"); 2377 string target = linkItem.GetList("Target").SelectedValue; 2378 2379 <li><a href="@linkURL" target="@target">@linkText</a></li> 2380 } 2381 @if (company_address != ""){ 2382 <li class="company_add">@company_address</li> 2383 } 2384 </ul> 2385 </div> 2386 </div> 2387 @if (Model.Area.Item.GetItems("FooterPayments").Count > 0) 2388 { 2389 <div class="grid__col-12 grid__col-sm-5 grid__col-md-auto mobileLinks Footer__paymentGroup"> 2390 <h3 class="footer__heading dw-mod">@footerHeaderColumnFour</h3> 2391 <div class="footer__content dw-mod"> 2392 @if (useCardTypeAsImage) 2393 { 2394 <img src="@footerImagePayment" alt="Card Types"/> 2395 } 2396 else 2397 { 2398 foreach (var payment in Model.Area.Item.GetItems("FooterPayments")) 2399 { 2400 var paymentItem = payment.GetValue("CardTypeOrVerifiedPayment") as Dynamicweb.Frontend.ListViewModel; 2401 string paymentImage = null; 2402 string paymentTitle = paymentItem.SelectedName; 2403 ListOptionViewModel selected = paymentItem.SelectedOptions.FirstOrDefault(); 2404 2405 if(selected != null) { 2406 paymentImage = selected.Icon; 2407 } 2408 2409 <img src="@paymentImage" alt="@paymentTitle" title="@paymentTitle" style="width:58px; display:initial" /> 2410 } 2411 } 2412 </div> 2413 </div> 2414 } 2415 </div> 2416 <div class="copyright"><span>@copy_right</span> 2417 2418 <div class="policy"> @foreach (var linkItem in Model.Area.Item.GetItems("Privacy_policy")) 2419 { 2420 string linkText = linkItem.GetString("Link_Text"); 2421 string linkURL = linkItem.GetString("Link_URL"); 2422 string target = linkItem.GetList("Target").SelectedValue; 2423 2424 <span><a href="@linkURL" target="@target" style="color:#404040">@linkText |</a></span> 2425 } 2426 @foreach (var linkItem in Model.Area.Item.GetItems("TermsOf_Uses")) 2427 { 2428 string linkText = linkItem.GetString("Link_Text"); 2429 string linkURL = linkItem.GetString("Link_URL"); 2430 string target = linkItem.GetList("Target").SelectedValue; 2431 2432 <span><a href="@linkURL" target="@target" style="color:#404040">@linkText</a></span> 2433 } 2434 </div> 2435 </div> 2436 </div> 2437 </footer> 2438 } 2439 2440 <script> 2441 @{ 2442 int cartPageIdForSearch = GetPageIdByNavigationTag("CartPage"); 2443 } 2444 function addToCartSearch(productId) 2445 { 2446 var urlStr = "Default.aspx?ID="+@cartPageIdForSearch+"&ProductID="+productId+"&cartcmd=add"; 2447 <!--$(obj).css("background-image", "url('/Admin/Public/GetImage.ashx?width=45&height=40&crop=5&FillCanvas=True&Compression=75&image=loader.gif')");--> 2448 $.ajax({ 2449 type: "POST", 2450 url: urlStr, 2451 success: function(data){ 2452 <!--$(obj).css("background", "initial");--> 2453 Cart.UpdateMiniCart(event, 'miniCart', '/Default.aspx?ID=530&feedType=MiniCart'); 2454 2455 }}); 2456 } 2457 2458 </script> 2459 2460 @* Templates for Typeahead *@ 2461 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideSearch")) 2462 { 2463 <script id="SearchGroupsTemplate" type="text/x-template"> 2464 {{#.}} 2465 <li class="dropdown__item dw-mod" onclick="Search.UpdateGroupSelection(this)" data-group-id="{{id}}">{{name}}</li> 2466 {{/.}} 2467 </script> 2468 2469 <script id="SearchProductsTemplate" type="text/x-template"> 2470 {{#each .}} 2471 {{#Product}} 2472 {{#ifCond template "!==" "SearchMore"}} 2473 <li class="dropdown__item dropdown__item--seperator dw-mod search_list_row"> 2474 <input id="SearchUnit_{{productId}}" type="hidden" name="SearchUnit_{{id}}" value="{{unitId}}" /> 2475 <a href="{{link}}" class="js-typeahead-link u-color-inherit"> 2476 2477 <div class="search_list_img"> 2478 <img src="/Admin/Public/GetImage.ashx?width=45&height=40&crop=5&FillCanvas=True&Compression=75&image={{image}}" alt="{{name}}"> 2479 </div> 2480 <div class="search_list_desc"> 2481 <div class="search_list_title">{{name}}</div> 2482 <div class="search_list_price">{{price}}</div> 2483 </div> 2484 </a> 2485 <div class="search_list_btn"> 2486 <!--<div class="search_cartbtn" onclick="addToCartSearch('{{productId}}')"></div> --> 2487 <button class="searchAddToCartButton {{notOutOfStockText}}" onclick="Cart2.SearchAddToCart(event, '{{productId}}', '1', 'SearchUnit_{{productId}}' )"><i class="@cartIcon js-ignore-click-outside"></i></button> 2488 </div> 2489 </li> 2490 {{/ifCond}} 2491 {{#ifCond template "===" "SearchMore"}} 2492 {{>SearchMoreProducts}} 2493 {{/ifCond}} 2494 {{/Product}} 2495 {{else}} 2496 <li class="dropdown__item dropdown__item--seperator dw-mod"> 2497 @Translate("No products found matching the search criteria") 2498 </li> 2499 {{/each}} 2500 </script> 2501 2502 <script id="SearchMoreProducts" type="text/x-template"> 2503 <li class="dropdown__item {{stickToBottom}} dw-mod"> 2504 <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}" class="view_all_btn search_view_all_link tmm">@Translate("View all")</a> 2505 <!-- <a href="/Default.aspx?ID=@productsPageId&Search={{searchParameter}}&GroupID={{groupId}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link"> 2506 @Translate("View all") 2507 </a>--> 2508 </li> 2509 </script> 2510 2511 <script id="SearchMorePages" type="text/x-template"> 2512 <li class="dropdown__item dropdown__item--not-selectable {{stickToBottom}} dw-mod"> 2513 <a href="/Default.aspx?ID=@contentSearchPageId&Search={{searchParameter}}" class="btn btn--primary btn--full u-no-margin dw-mod js-typeahead-link"> 2514 @Translate("View all") 2515 </a> 2516 </li> 2517 </script> 2518 2519 <script id="SearchPagesTemplate" type="text/x-template"> 2520 {{#each .}} 2521 {{#ifCond template "!==" "SearchMore"}} 2522 <li class="dropdown__item dropdown__item--seperator dw-mod"> 2523 <div> 2524 <a href="/Default.aspx?ID={{id}}" class="js-typeahead-link u-pull--left u-color-inherit"> 2525 <div class="u-margin-right u-pull--left"><i class="fa {{icon}} u-w20px u-ta-center"></i></div> 2526 <div class="u-pull--left"> 2527 <div class="u-bold u-truncate-text u-max-w220px js-typeahead-name">{{name}}</div> 2528 </div> 2529 </a> 2530 </div> 2531 </li> 2532 {{/ifCond}} 2533 {{#ifCond template "===" "SearchMore"}} 2534 {{>SearchMorePages}} 2535 {{/ifCond}} 2536 {{else}} 2537 <li class="dropdown__item dropdown__item--seperator dw-mod"> 2538 @Translate("Your search gave 0 results") 2539 </li> 2540 {{/each}} 2541 </script> 2542 2543 <script id="SearchPagesTemplateWrap" type="text/x-template"> 2544 <div class="dropdown__column-header">@Translate("Pages")</div> 2545 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom dw-mod"> 2546 {{>SearchPagesTemplate}} 2547 </ul> 2548 </script> 2549 2550 <script id="SearchProductsTemplateWrap" type="text/x-template"> 2551 <div class="dropdown__column-header">@Translate("Products")</div> 2552 <ul class="dropdown__list u-min-w220px u-full-width u-margin-bottom dw-mod"> 2553 {{>SearchProductsTemplate}} 2554 </ul> 2555 </script> 2556 } 2557 2558 @* Templates for the mini cart *@ 2559 @if (!Model.Area.Item.GetBoolean("NavigationItemsHideCart")) 2560 { 2561 <script id="MiniCartCounterContent" type="text/x-template"> 2562 {{#.}} 2563 <!--<div class="js-mini-cart-counter-content dw-mod " show-price="{{totalwithoutdiscount}}"> 2564 <span>({{subtotalprice}})</span> 2565 </div>--> 2566 {{#ifCond numberofproducts "===" ""}} 2567 <div class="js-mini-cart-counter-content dw-mod mtt" show-price="{{numberofproducts}}"> 2568 (0) 2569 </div> 2570 {{else}} 2571 <div class="js-mini-cart-counter-content dw-mod" > 2572 ({{numberofproducts}}) 2573 </div> 2574 {{/ifCond}} 2575 {{/.}} 2576 </script> 2577 2578 <!--<script id="MiniCartSubTotalPrice" type="text/x-template"> 2579 {{#.}} 2580 <div style="display:none" class="js-mini-cart-counter-content dw-mod sub_total_price"> 2581 {{numberofproducts}} 2582 </div> 2583 <div class="dw-mod"> 2584 ({{subtotalprice}}) 2585 </div> 2586 2587 {{/.}} 2588 </script>--> 2589 2590 <script id="MiniCartContent" type="text/x-template"> 2591 {{#.}} 2592 {{#if numberofproducts}} 2593 <div class="triangleDrop"></div> 2594 <div class="mini-cart-dropdown__inner {{isempty}} dw-mod"> 2595 2596 <div class="cart_row cart_list_heading"> 2597 <div class="cart_review_ttl cart_list_ttl"> 2598 @Translate("ITEMS") 2599 </div> 2600 <div class="cart_price_ttl cart_list_ttl"> 2601 @Translate("PRICE") 2602 </div> 2603 <div class="cart_qty_ttl cart_list_ttl"> 2604 @Translate("QUANTITY") 2605 </div> 2606 2607 </div> 2608 2609 <div class="minicart_list"> 2610 {{#OrderLines}} 2611 {{#ifCond template "===" "CartOrderline"}} 2612 2613 {{>MiniCartOrderline}} 2614 2615 {{/ifCond}} 2616 {{#ifCond template "===" "CartOrderlineMobile"}} 2617 {{>MiniCartOrderline}} 2618 {{/ifCond}} 2619 {{#ifCond template "===" "CartOrderlineDiscount"}} 2620 {{>MiniCartOrderlineDiscount}} 2621 {{/ifCond}} 2622 {{/OrderLines}} 2623 </div> 2624 2625 2626 <div class="cart_row cart_buttons"> 2627 <div class="cart_list_btn view_cart"> 2628 <!-- <a href="/Default.aspx?ID=@cartPageId"> @Translate("VIEW CART")</a>--> 2629 <a href="/Default.aspx?ID=@showCartPageId"> @Translate("VIEW CART")</a> 2630 </div> 2631 2632 @if (Model.CurrentUser.ID > 0) 2633 { 2634 if(b2b == true) 2635 { 2636 if (byPass==true) 2637 { 2638 <div> 2639 <div class="cart_list_btn chkout_btn"> 2640 <span id="check_out" onclick="CheckPreorderItem()" > @Translate("CHECKOUT")</span> 2641 </div> 2642 2643 </div> 2644 } 2645 else if(byPass == false && onHold ==false && manualHold==false) 2646 { 2647 <div> 2648 {{#if exceedflag}} 2649 <div class="cart_list_btn chkout_btn" style="display:none;" > 2650 <span id="check_out" onclick="CheckPreorderItem()" > @Translate("CHECKOUT")</span> 2651 </div> 2652 {{else}} 2653 <div class="cart_list_btn chkout_btn" > 2654 <span id="check_out" onclick="CheckPreorderItem()" > @Translate("CHECKOUT")</span> 2655 </div> 2656 {{/if}} 2657 </div> 2658 } 2659 else 2660 { 2661 <div id="check_out" onclick="CheckPreorderItem()" style="margin-bottom: -2px;cursor: not-allowed;width: 157px;border: 1px solid #000;margin-left: 182px;line-height: 34px;margin-top: 0px;text-align: center;color: black;background: gray;"> @Translate("CHECKOUT")</div> 2662 } 2663 } 2664 2665 else { 2666 <div> 2667 {{#if exceedflag}} 2668 <div class="cart_list_btn chkout_btn" style="display:none;" > 2669 <span id="check_out" onclick="CheckPreorderItem()" > @Translate("CHECKOUT")</span> 2670 </div> 2671 {{else}} 2672 <div class="cart_list_btn chkout_btn" > 2673 <span id="check_out" onclick="CheckPreorderItem()" > @Translate("CHECKOUT")</span> 2674 </div> 2675 {{/if}} 2676 </div> 2677 2678 } 2679 } 2680 else{ 2681 <div class="cart_list_btn chkout_btn" > 2682 <a href="javascript:void(0)" onclick="document.getElementById('SignInModalTrigger').click()" id="check_out"> @Translate("CHECKOUT")</a> 2683 </div> 2684 } 2685 2686 2687 </div> 2688 2689 </div> 2690 {{/if}} 2691 {{/.}} 2692 </script> 2693 2694 <script> 2695 function addminusCart(obj,orderline,unitprice){ 2696 2697 var buttonminis = document.getElementsByClassName("buttonmini"); 2698 for(var i = 0; i < buttonminis.length ; i++ ){ 2699 buttonminis[i].classList.add("disabled"); 2700 } 2701 var unitPriceFormatted = Number(unitprice.replace(/[^0-9\.]+/g,"")); 2702 var unitPriceId = '#total_unit_price_' + orderline; 2703 var cartRow = '#cart_row_' + orderline; 2704 2705 var qty = $(obj).closest("div.cart_qty").find("input[type=number]").val(); 2706 2707 var action = $(obj).attr("class"); 2708 2709 2710 2711 2712 if (action.includes("qty_plus")){ 2713 qty++; 2714 } 2715 if (action.includes("qty_minus") && qty > 0){ 2716 qty--; 2717 if (qty == 0){ 2718 $(obj).closest("div.cart_qty").find("input[type=number]").val(qty).change(); 2719 } 2720 } 2721 2722 2723 var productId = $('#cart_row_'+orderline).find('.orderline_ProductId').val(); 2724 2725 $(obj).closest("div.cart_qty").find("input[type=number]").val(qty); 2726 2727 2728 setTimeout(function(){ 2729 2730 //Cart2.UpdateQuantity('Cart', '/Default.aspx?ID=1287', '&CartCmd=UpdateOrderlines&QuantityOrderLine'+orderline+'=' + document.getElementById('Quantity_'+orderline).value + '&redirect=false', true,function(){ 2731 Cart2.UpdateQuantity('Cart', '/Default.aspx?ID=@GetPageIdByNavigationTag("CartOrderlinesTestFeed")', '&CartCmd=UpdateOrderlines&QuantityOrderLine'+orderline+'=' + document.getElementById('Quantity_'+orderline).value + '&redirect=false', true,function(){ 2732 for(var i = 0; i < buttonminis.length ; i++ ){ 2733 buttonminis[i].classList.remove("disabled"); 2734 } 2735 HandlebarsBolt.UpdateContent('miniCart', document.getElementById('miniCart').getAttribute('data-json-feed') ); 2736 updateProductDetail(productId, qty, orderline ); 2737 }); 2738 2739 }, 100); 2740 2741 2742 } 2743 </script> 2744 <script id="MiniCartOrderline" type="text/x-template"> 2745 2746 2747 @{ int productDetailsPageId = GetPageIdByNavigationTag("ProductDetails"); } 2748 <div id="cart_row_{{orderLineId}}" class="cart_row orderline_row"> 2749 <div class="cart_item_col"> 2750 <input type="hidden" class="orderline_ProductId" value="{{productnumber}}" /> 2751 <div class="cart_list_img"> 2752 <a href="{{link}}" class="{{hideimage}}"><img src="/Admin/Public/GetImage.ashx?width=50&image={{image}}" alt="{{name}}"></a> 2753 </div> 2754 <div class="cart_list_desc"> 2755 <div class="cart_list_prod_title"><a href="{{link}}" class="mini-cart-orderlines__name" title="{{name}}">{{name}}</a></div> 2756 <div class="cart_list_prod_pack">{{packSize}}</div> 2757 <div class="cart_list_productDiscount">{{discountprice}}</div> 2758 </div> 2759 </div> 2760 2761 <div class="cart_price_col"> 2762 <div class="cart_list_price" id="total_unit_price_{{orderLineId}}"> 2763 {{unitprice}} 2764 </div> 2765 </div> 2766 2767 <div class="cart_qty_col"> 2768 <div class="cart_list_qty"> 2769 <div class="cart_qty" style="display:block;"> 2770 <button class="qty_minus buttonmini" onclick="addminusCart(this, '{{orderLineId}}', '{{unitprice}}'); "> - </button> 2771 <input class="u-w80px u-no-margin" id="Quantity_{{orderLineId}}" type="number" min="0" name='QuantityOrderLine{{orderLineId}}' value="{{quantity}}" onkeypress="return restrictAlphabets(event)" onchange="Cart2.UpdateQuantity('Cart', '/Default.aspx?ID=@cartFeedPageId', '&CartCmd=UpdateOrderlines&QuantityOrderLine{{orderLineId}}=' + this.value + '&redirect=false', true, function(){HandlebarsBolt.UpdateContent('miniCart', document.getElementById('miniCart').getAttribute('data-json-feed') );HandlebarsBolt.UpdateContent('cartCounter', document.getElementById('cartCounter').getAttribute('data-json-feed') );updateProductDetail('{{id}}', document.getElementById('Quantity_{{orderLineId}}').value , '{{orderLineId}}' );});"/> 2772 <button class="qty_plus buttonmini" onclick="addminusCart(this, '{{orderLineId}}', '{{unitprice}}'); "> + </button> 2773 </div> 2774 <div class="mini_uom">{{unitname}}</div> 2775 2776 </div> 2777 </div> 2778 </div> 2779 2780 </script> 2781 2782 <script id="MiniCartOrderlineMobile" type="text/x-template"> 2783 <tr class="{{isempty}}"> 2784 <td><a href="{{link}}" class="{{hideimage}}"><img src="/Admin/Public/GetImage.ashx?width=50&height=50&crop=5&Compression=75&image={{image}}" alt="{{name}}"></a></td> 2785 <td> 2786 <a href="{{link}}" class="mini-cart-orderlines__name">{{name}}</a> 2787 {{#if variantname}} 2788 <a href="{{link}}" class="mini-cart-orderlines__name mini-cart-orderlines__name--small">{{variantname}}</a> 2789 {{/if}} 2790 {{#if unitname}} 2791 <div class="mini-cart-orderlines__name mini-cart-orderlines__name--small">{{unitname}}</div> 2792 {{/if}} 2793 </td> 2794 <td class="u-ta-right">{{quantity}}</td> 2795 <td class="u-ta-right">{{totalprice}}</td> 2796 2797 </tr> 2798 </script> 2799 2800 <script id="MiniCartOrderlineDiscount" type="text/x-template"> 2801 {{#ifCond isvoucher "===" null}} 2802 <div class="nameMini">{{name}}</div> 2803 {{#ifCond totalprice "===" "$0.00"}} 2804 <div class="minicart_discount_price saveMinifree">Free</div> 2805 {{/ifCond}} 2806 2807 {{#ifCond totalprice "!==" "$0.00"}} 2808 <div class="minicart_discount_price saveMini">SAVE {{totalprice}}</div> 2809 {{/ifCond}} 2810 {{/ifCond}} 2811 </script> 2812 } 2813 2814 <!-- Javascript --> 2815 2816 2817 <script src="/Files/Templates/Designs/Rapido/js/addtocart.js?var?1.01"></script> 2818 2819 <script src="/Files/Templates/Designs/Rapido/js/handlebars-v4.0.11.js"></script> 2820 <script src="/Files/Templates/Designs/Rapido/js/master.js"></script> 2821 <script src='https://www.google.com/recaptcha/api.js'></script> 2822 <script src="/Files/Templates/Designs/Rapido/js/owl.carousel.min.js"></script> 2823 <!--<script src="/Files/Templates/Designs/Rapido/js/scripts.js" type="text/javascript"></script>--> 2824 2825 2826 2827 @if (Model.Area.Item.GetBoolean("UseCustomJavascript")) 2828 { 2829 2830 2831 <script src="/Files/Templates/Designs/Rapido/js/custom.min.js?ver=1.3"></script> 2832 } 2833 <script> 2834 Wireframe.Init(@wireframeMode.ToLower()); 2835 </script> 2836 <!--@Javascripts--> 2837 2838 <script> 2839 2840 var globalLastPickupDate='@Model.Area.Item.GetString("LastPickupDate")'; 2841 2842 2843 var x, i, j, selElmnt, a, b, c; 2844 /*look for any elements with the class "time_avlb":*/ 2845 x = document.getElementsByClassName("time_avlb"); 2846 for (i = 0; i < x.length; i++) { 2847 selElmnt = x[i].getElementsByTagName("select")[0]; 2848 /*for each element, create a new DIV that will act as the selected item:*/ 2849 a = document.createElement("DIV"); 2850 a.setAttribute("class", "select-selected"); 2851 a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML; 2852 x[i].appendChild(a); 2853 /*for each element, create a new DIV that will contain the option list:*/ 2854 b = document.createElement("DIV"); 2855 b.setAttribute("class", "select-items select-hide"); 2856 for (j = 0; j < selElmnt.length; j++) { 2857 /*for each option in the original select element, 2858 create a new DIV that will act as an option item:*/ 2859 c = document.createElement("DIV"); 2860 c.innerHTML = selElmnt.options[j].innerHTML; 2861 c.addEventListener("click", function(e) { 2862 /*when an item is clicked, update the original select box, 2863 and the selected item:*/ 2864 var y, i, k, s, h; 2865 s = this.parentNode.parentNode.getElementsByTagName("select")[0]; 2866 h = this.parentNode.previousSibling; 2867 for (i = 0; i < s.length; i++) { 2868 if (s.options[i].innerHTML == this.innerHTML) { 2869 s.selectedIndex = i; 2870 h.innerHTML = this.innerHTML; 2871 y = this.parentNode.getElementsByClassName("same-as-selected"); 2872 for (k = 0; k < y.length; k++) { 2873 y[k].removeAttribute("class"); 2874 } 2875 this.setAttribute("class", "same-as-selected"); 2876 break; 2877 } 2878 } 2879 h.click(); 2880 }); 2881 b.appendChild(c); 2882 } 2883 x[i].appendChild(b); 2884 a.addEventListener("click", function(e) { 2885 /*when the select box is clicked, close any other select boxes, 2886 and open/close the current select box:*/ 2887 e.stopPropagation(); 2888 closeAllSelect(this); 2889 this.nextSibling.classList.toggle("select-hide"); 2890 this.classList.toggle("select-arrow-active"); 2891 }); 2892 } 2893 function closeAllSelect(elmnt) { 2894 /*a function that will close all select boxes in the document, 2895 except the current select box:*/ 2896 var x, y, i, arrNo = []; 2897 x = document.getElementsByClassName("select-items"); 2898 y = document.getElementsByClassName("select-selected"); 2899 for (i = 0; i < y.length; i++) { 2900 if (elmnt == y[i]) { 2901 arrNo.push(i) 2902 } else { 2903 y[i].classList.remove("select-arrow-active"); 2904 } 2905 } 2906 for (i = 0; i < x.length; i++) { 2907 if (arrNo.indexOf(i)) { 2908 x[i].classList.add("select-hide"); 2909 } 2910 } 2911 } 2912 /*if the user clicks anywhere outside the select box, 2913 then close all select boxes:*/ 2914 document.addEventListener("click", closeAllSelect); 2915 </script> 2916 2917 <style> 2918 .b2bcheckbox 2919 { 2920 padding-left: unset !important; 2921 } 2922 2923 .b2bradio 2924 { 2925 margin-left: -5px; 2926 } 2927 2928 </style> 2929 @{ 2930 int b2cCreateAccount = GetPageIdByNavigationTag("CreateAccount"); 2931 int b2bCreateAccount = GetPageIdByNavigationTag("CreateAccountB2B"); 2932 int termsandcodition = GetPageIdByNavigationTag("termsandpurchase"); 2933 int privacy = GetPageIdByNavigationTag("privacypolicy"); 2934 2935 var recaptchakey =""; 2936 var sqlstring = "SELECT ReCaptcha_Key FROM ItemType_WebsiteSettings where ReCaptcha_Key != ''"; 2937 using( System.Data.IDataReader myrecaptchakey = Dynamicweb.Data.Database.CreateDataReader( sqlstring ) ){ 2938 while( myrecaptchakey.Read() ){ 2939 recaptchakey = myrecaptchakey["ReCaptcha_Key"].ToString(); 2940 } 2941 2942 } 2943 2944 } 2945 <!-- <script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit"></script> --> 2946 2947 <script> 2948 var widgetId1; 2949 var widgetId2; 2950 var CaptchaCallback = function() { 2951 if ( $('#b2c_RecaptchaField').length ) { 2952 widgetId1 = grecaptcha.render('b2c_RecaptchaField', {'sitekey' : '@recaptchakey', 'callback' : correctCaptcha_b2c 2953 2954 }); 2955 } 2956 if ( $('#b2b_RecaptchaField').length ) { 2957 widgetId2 = grecaptcha.render('b2b_RecaptchaField', {'sitekey' : '@recaptchakey', 'callback' : correctCaptcha_b2b 2958 }); 2959 } 2960 }; 2961 2962 2963 2964 var correctCaptcha_b2c = function(response) { 2965 $('#lblMessage').text(''); 2966 //$('.signup_individual_blk').find("input[type=submit]").css("margin-top", "19%"); 2967 // $("#b2c_hiddenRecaptcha").val(response); 2968 }; 2969 var correctCaptcha_b2b = function(response) { 2970 $('#lblMessage2').text(''); 2971 //$('.signup_business_blk').find("input[type=submit]").css("margin-top", "19%"); 2972 // $("#b2b_hiddenRecaptcha").val(response); 2973 }; 2974 2975 function resetSignUpForm() 2976 { 2977 document.getElementById("B2CForm").reset(); 2978 document.getElementById("B2BForm").reset(); 2979 $('.formErrorMsg').html(""); 2980 grecaptcha.reset(widgetId1); 2981 grecaptcha.reset(widgetId2); 2982 $("#b2b_hiddenRecaptcha").val(""); 2983 $("#b2c_hiddenRecaptcha").val(""); 2984 } 2985 2986 </script> 2987 2988 <script src="https://www.google.com/recaptcha/api.js?render=@recaptchakey"></script> 2989 <script> 2990 grecaptcha.ready(function () { 2991 grecaptcha.execute('@recaptchakey', { action: 'B2CLogin' }).then(function (token) { 2992 document.getElementById("b2c_hiddenRecaptcha").value = token; 2993 document.getElementById("b2b_hiddenRecaptcha").value = token; 2994 }); 2995 }); 2996 </script> 2997 2998 <script> 2999 3000 3001 3002 $(document).ready(function() { 3003 3004 $("#b2c_firstName").keyup(function(event) { 3005 $('#b2c_firstNameErrMsg').html(""); 3006 }); 3007 $("#b2c_lastName").keyup(function(event) { 3008 $('#b2c_lastNameErrMsg').html(""); 3009 }); 3010 $("#b2c_email").keyup(function(event) { 3011 $('#b2c_emailErrMsg').html(""); 3012 }); 3013 $("#b2c_password").keyup(function(event) { 3014 $('#b2c_newPasswordErrMsg').html(""); 3015 }); 3016 $("#b2c_confirmPassword").keyup(function(event) { 3017 $('#b2c_passwordErrMsg').html(""); 3018 }); 3019 3020 $("#b2b_email").keyup(function(event) { 3021 $('#b2b_emailErrMsg').html(""); 3022 }); 3023 $("#b2b_password").keyup(function(event) { 3024 $('#b2b_newPasswordErrMsg').html(""); 3025 }); 3026 $("#b2b_confirmPassword").keyup(function(event) { 3027 $('#b2b_passwordErrMsg').html(""); 3028 }); 3029 $("#b2b_company").keyup(function(event) { 3030 $('#b2b_companyErrMsg').html(""); 3031 }); 3032 $("#b2b_regNo").keyup(function(event) { 3033 $('#b2b_regNoErrMsg').html(""); 3034 }); 3035 $("#b2b_address").keyup(function(event) { 3036 $('#b2b_addressErrMsg').html(""); 3037 }); 3038 $("#b2b_zip").keyup(function(event) { 3039 $('#b2b_zipErrMsg').html(""); 3040 }); 3041 $("#b2b_firstName").keyup(function(event) { 3042 $('#b2b_firstNameErrMsg').html(""); 3043 }); 3044 $("#b2b_lastName").keyup(function(event) { 3045 $('#b2b_lastNameErrMsg').html(""); 3046 }); 3047 3048 3049 3050 //$("#b2c_confirmPassword").keyup(checkB2CPasswordsMatch); 3051 // $("#b2b_confirmPassword").keyup(checkB2BPasswordsMatch); 3052 3053 $('input[type=radio]').on('mousedown', function(e){ 3054 var wasChecked = $(this).prop('checked'); 3055 this.turnOff = wasChecked; 3056 $(this).prop('checked', !wasChecked); 3057 }); 3058 3059 $('input[type=radio]').on('click', function(e){ 3060 $(this).prop('checked', !this.turnOff); 3061 this['turning-off'] = !this.turnOff; 3062 }); 3063 3064 var urlParams = new URLSearchParams(location.search); 3065 var errMsgs = urlParams.getAll('paramArray'); 3066 var emailEntered = urlParams.get('emailEntered'); 3067 var tabType = urlParams.get('tabType'); 3068 3069 if (errMsgs.length > 0) 3070 { 3071 if (tabType == '1') //error coming from B2C Form 3072 { 3073 var obj = document.getElementById("B2CMenu"); 3074 toggleTab(obj, 'signup_individual_blk'); 3075 3076 if (emailEntered != null) 3077 { 3078 document.getElementById("b2c_email").value = emailEntered; 3079 } 3080 for (i = 0; i < errMsgs.length; i++) 3081 { 3082 $("#b2c_emailErrMsg").html('@Translate("User with specified email exist.")'); 3083 } 3084 } 3085 else //error coming from B2B Form 3086 { 3087 var obj = document.getElementById("B2BMenu"); 3088 toggleTab(obj, 'signup_business_blk'); 3089 3090 if (emailEntered != null) 3091 { 3092 document.getElementById("b2b_email").value = emailEntered; 3093 } 3094 3095 for (i = 0; i < errMsgs.length; i++) 3096 { 3097 3098 $("#b2b_emailErrMsg").html('@Translate("User with specified email exist.")'); 3099 3100 } 3101 } 3102 window.history.replaceState("", "",window.location.href.split('?')[0]); 3103 } 3104 }); 3105 </script> 3106 3107 <script> 3108 3109 3110 3111 function validateEmail(email) { 3112 var re = /^[a-z0-9\.\_%+-]+@@[a-z0-9\.\-]+\.[a-z]{2,5}$/i; 3113 return re.test(email); 3114 } 3115 3116 function checkB2CPasswordsMatch() { 3117 var password = $("#b2c_password").val(); 3118 var confirmPassword = $("#b2c_confirmPassword").val(); 3119 3120 if (password != confirmPassword) 3121 { 3122 $("#b2c_passwordErrMsg").html('@Translate("Passwords do not match!")'); 3123 return false; 3124 } 3125 else 3126 { 3127 $("#b2c_passwordErrMsg").html(""); 3128 } 3129 3130 return true; 3131 } 3132 3133 function checkB2BPasswordsMatch() { 3134 var password = $("#b2b_password").val(); 3135 var confirmPassword = $("#b2b_confirmPassword").val(); 3136 3137 if (password != confirmPassword) 3138 { 3139 $("#b2b_passwordErrMsg").html('@Translate("Passwords do not match!")'); 3140 return false; 3141 } 3142 else 3143 { 3144 $("#b2b_passwordErrMsg").html(""); 3145 } 3146 3147 return true; 3148 } 3149 3150 function validateB2CForm(obj) { 3151 3152 const XHR = new XMLHttpRequest(); 3153 3154 var b2c_hiddenRecaptcha = $("#b2c_hiddenRecaptcha").val(); 3155 3156 XHR.addEventListener("load", function (data) { 3157 var result = JSON.parse(XHR.responseText); 3158 3159 if(result.Status===0){ 3160 $('#lblMessage').html('@Translate("Captcha verification failed.")'); 3161 $(obj).find("input[type=submit]").css("margin-top", "5%"); 3162 return false; 3163 }else{ 3164 $('#lblMessage').html(''); 3165 3166 var b2c_firstName = $("#b2c_firstName").val(); 3167 var b2c_lastName = $("#b2c_lastName").val(); 3168 var b2c_email = $("#b2c_email").val(); 3169 var b2c_password = $("#b2c_password").val(); 3170 var b2c_confirmPassword = $("#b2c_confirmPassword").val(); 3171 var message = ''; 3172 3173 if (b2c_firstName == '' || b2c_lastName == '' || b2c_email == '' || b2c_password == '' || b2c_confirmPassword == '') 3174 { 3175 if (b2c_firstName == '') 3176 { 3177 $('#b2c_firstNameErrMsg').html('@Translate("First Name cannot be empty")'); 3178 } 3179 else {$('#b2c_firstNameErrMsg').html("")} 3180 if (b2c_lastName == '') 3181 { 3182 $('#b2c_lastNameErrMsg').html('@Translate("Last Name cannot be empty")'); 3183 } 3184 else {$('#b2c_lastNameErrMsg').html("")} 3185 if (b2c_email == '') 3186 { 3187 $('#b2c_emailErrMsg').html('@Translate("Email cannot be empty")'); 3188 } 3189 else 3190 { 3191 $('#b2c_emailErrMsg').html(""); 3192 if (!validateEmail(b2c_email)) 3193 { 3194 $('#b2c_emailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3195 } 3196 } 3197 3198 if (b2c_password == ''){$('#b2c_newPasswordErrMsg').html('@Translate("Password cannot be empty")');} 3199 else{$('#b2c_newPasswordErrMsg').html("");} 3200 3201 if (b2c_confirmPassword == '') 3202 { 3203 $('#b2c_passwordErrMsg').html('@Translate("Password cannot be empty")'); 3204 } 3205 else 3206 { 3207 $('#b2c_passwordErrMsg').html(""); 3208 checkB2CPasswordsMatch(); 3209 } 3210 3211 grecaptcha.ready(function () { 3212 grecaptcha.execute('@recaptchakey', { action: 'B2CLogin' }).then(function (token) { 3213 document.getElementById("b2c_hiddenRecaptcha").value = token; 3214 document.getElementById("b2b_hiddenRecaptcha").value = token; 3215 }); 3216 }); 3217 return false; 3218 } 3219 else 3220 { 3221 var validBool = true; 3222 if (!validateEmail(b2c_email)) 3223 { 3224 $('#b2c_emailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3225 validBool = false; 3226 } 3227 3228 var checkValidPwd = checkB2CPasswordsMatch(); 3229 if (!checkValidPwd) 3230 { 3231 validBool = false; 3232 } 3233 if (!validBool) 3234 { 3235 3236 return false; 3237 } 3238 3239 if(validBool){ 3240 document.getElementById('B2CForm').submit(); 3241 $(":input[type=submit]").attr("disabled", true); 3242 } 3243 } 3244 } 3245 3246 }); 3247 3248 XHR.addEventListener("error", function (event) { 3249 3250 }); 3251 3252 XHR.open("GET", "/en/recapchavalidate?RecaptchaResponse=" + b2c_hiddenRecaptcha + ""); 3253 XHR.send(); 3254 3255 } 3256 3257 3258 3259 function validateB2BForm(obj) { 3260 3261 const XHR = new XMLHttpRequest(); 3262 3263 var b2c_hiddenRecaptcha = $("#b2c_hiddenRecaptcha").val(); 3264 3265 XHR.addEventListener("load", function (data) { 3266 var result = JSON.parse(XHR.responseText); 3267 3268 if(result.Status===0){ 3269 $('#lblMessage').html('@Translate("Captcha verification failed.")'); 3270 $(obj).find("input[type=submit]").css("margin-top", "5%"); 3271 return false; 3272 }else{ 3273 $('#lblMessage').html(''); 3274 3275 var b2b_email = $("#b2b_email").val(); 3276 var b2b_password = $("#b2b_password").val(); 3277 var b2b_confirmPassword = $("#b2b_confirmPassword").val(); 3278 var b2b_company = $("#b2b_company").val(); 3279 var b2b_regNo = $("#b2b_regNo").val(); 3280 var b2b_address = $("#b2b_address").val(); 3281 var b2b_zip = $("#b2b_zip").val(); 3282 var b2b_firstName = $("#b2b_firstName").val(); 3283 var b2b_lastName = $("#b2b_lastName").val(); 3284 var b2b_phone = $("#b2b_phone").val(); 3285 var b2b_captcha = $("#b2b_hiddenRecaptcha").val(); 3286 var message =''; 3287 var validB2Bsuccess = true; 3288 3289 if (b2b_email == '' || b2b_password == '' || b2b_confirmPassword == '' || b2b_company == '' || b2b_regNo == '' || b2b_address == '' || 3290 b2b_zip == '' || b2b_firstName == '' || b2b_lastName == '' || b2b_phone == '' || isValidMobileNum(b2b_phone) ==false || b2b_captcha == '' ) 3291 { 3292 if (b2b_email == ''){$('#b2b_emailErrMsg').html('@Translate("Email cannot be empty")');} 3293 else{$('#b2b_emailErrMsg').html("")}; 3294 3295 if (b2b_password == ''){$('#b2b_newPasswordErrMsg').html('@Translate("Password cannot be empty")');} 3296 else{$('#b2b_newPasswordErrMsg').html("")}; 3297 3298 if (b2b_confirmPassword == ''){$('#b2b_passwordErrMsg').html('@Translate("Password cannot be empty")');} 3299 else{$('#b2b_passwordErrMsg').html("")}; 3300 3301 if (b2b_company == ''){$('#b2b_companyErrMsg').html('@Translate("Company name cannot be empty")');} 3302 else{$('#b2b_companyErrMsg').html("")}; 3303 3304 if (b2b_regNo == ''){$('#b2b_regNoErrMsg').html('@Translate("Registration no. cannot be empty")');} 3305 else{$('#b2b_regNoErrMsg').html("")}; 3306 3307 if (b2b_address == ''){$('#b2b_addressErrMsg').html('@Translate("Address cannot be empty")');} 3308 else{$('#b2b_addressErrMsg').html("")}; 3309 3310 if (b2b_zip == ''){$('#b2b_zipErrMsg').html('@Translate("Postal code cannot be empty")');} 3311 else{$('#b2b_zipErrMsg').html("")}; 3312 3313 if (b2b_firstName == ''){$('#b2b_firstNameErrMsg').html('@Translate("First name cannot be empty")');} 3314 else{$('#b2b_firstNameErrMsg').html("")}; 3315 3316 if (b2b_lastName == ''){$('#b2b_lastNameErrMsg').html('@Translate("Last name cannot be empty")');} 3317 else{$('#b2b_lastNameErrMsg').html("")}; 3318 3319 if (b2b_phone == ''){$('#b2b_phoneErrMsg').html('@Translate("Contact number cannot be empty")');} 3320 else{ 3321 if(isValidMobileNum(b2b_phone) != true){ $("#b2b_phoneErrMsg").html('@Translate("Invalid Contact Number")');} 3322 } 3323 if (b2b_captcha == '') 3324 { 3325 $('#lblMessage2').text('@Translate("Captcha verification failed.")'); 3326 $(obj).find("input[type=submit]").css("margin-top", "5%"); 3327 } 3328 else 3329 { 3330 $('#lblMessage2').text(''); 3331 3332 } 3333 3334 validB2Bsuccess = false; 3335 } 3336 3337 var b2b_email = $("#b2b_email").val(); 3338 if (!validateEmail(b2b_email)) 3339 { 3340 $('#b2b_emailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3341 validB2Bsuccess = false; 3342 } 3343 3344 var checkPwdMatch = checkB2BPasswordsMatch(); 3345 if (checkPwdMatch == false) 3346 { 3347 $("#b2b_passwordErrMsg").html('@Translate("Passwords do not match!")'); 3348 validB2Bsuccess = false; 3349 } 3350 3351 if(validB2Bsuccess){ 3352 document.getElementById('B2BForm').submit(); 3353 $(":input[type=submit]").attr("disabled", true); 3354 }else{ 3355 grecaptcha.ready(function () { 3356 grecaptcha.execute('@recaptchakey', { action: 'B2CLogin' }).then(function (token) { 3357 document.getElementById("b2c_hiddenRecaptcha").value = token; 3358 document.getElementById("b2b_hiddenRecaptcha").value = token; 3359 }); 3360 }); 3361 } 3362 } 3363 3364 }); 3365 3366 XHR.addEventListener("error", function (event) { 3367 3368 }); 3369 3370 XHR.open("GET", "/en/recapchavalidate?RecaptchaResponse=" + b2c_hiddenRecaptcha + ""); 3371 XHR.send(); 3372 3373 } 3374 3375 3376 3377 3378 function validateB2BForm1(obj) 3379 { 3380 //mandatory input validation 3381 var b2b_email = $("#b2b_email").val(); 3382 var b2b_password = $("#b2b_password").val(); 3383 var b2b_confirmPassword = $("#b2b_confirmPassword").val(); 3384 var b2b_company = $("#b2b_company").val(); 3385 var b2b_regNo = $("#b2b_regNo").val(); 3386 var b2b_address = $("#b2b_address").val(); 3387 var b2b_zip = $("#b2b_zip").val(); 3388 var b2b_firstName = $("#b2b_firstName").val(); 3389 var b2b_lastName = $("#b2b_lastName").val(); 3390 var b2b_phone = $("#b2b_phone").val(); 3391 var b2b_captcha = $("#b2b_hiddenRecaptcha").val(); 3392 var message =''; 3393 var validB2Bsuccess = true; 3394 3395 if (b2b_email == '' || b2b_password == '' || b2b_confirmPassword == '' || b2b_company == '' || b2b_regNo == '' || b2b_address == '' || 3396 b2b_zip == '' || b2b_firstName == '' || b2b_lastName == '' || b2b_phone == '' || isValidMobileNum(b2b_phone) ==false || b2b_captcha == '' ) 3397 { 3398 if (b2b_email == ''){$('#b2b_emailErrMsg').html('@Translate("Email cannot be empty")');} 3399 else{$('#b2b_emailErrMsg').html("")}; 3400 3401 if (b2b_password == ''){$('#b2b_newPasswordErrMsg').html('@Translate("Password cannot be empty")');} 3402 else{$('#b2b_newPasswordErrMsg').html("")}; 3403 3404 if (b2b_confirmPassword == ''){$('#b2b_passwordErrMsg').html('@Translate("Password cannot be empty")');} 3405 else{$('#b2b_passwordErrMsg').html("")}; 3406 3407 if (b2b_company == ''){$('#b2b_companyErrMsg').html('@Translate("Company name cannot be empty")');} 3408 else{$('#b2b_companyErrMsg').html("")}; 3409 3410 if (b2b_regNo == ''){$('#b2b_regNoErrMsg').html('@Translate("Registration no. cannot be empty")');} 3411 else{$('#b2b_regNoErrMsg').html("")}; 3412 3413 if (b2b_address == ''){$('#b2b_addressErrMsg').html('@Translate("Address cannot be empty")');} 3414 else{$('#b2b_addressErrMsg').html("")}; 3415 3416 if (b2b_zip == ''){$('#b2b_zipErrMsg').html('@Translate("Postal code cannot be empty")');} 3417 else{$('#b2b_zipErrMsg').html("")}; 3418 3419 if (b2b_firstName == ''){$('#b2b_firstNameErrMsg').html('@Translate("First name cannot be empty")');} 3420 else{$('#b2b_firstNameErrMsg').html("")}; 3421 3422 if (b2b_lastName == ''){$('#b2b_lastNameErrMsg').html('@Translate("Last name cannot be empty")');} 3423 else{$('#b2b_lastNameErrMsg').html("")}; 3424 3425 if (b2b_phone == ''){$('#b2b_phoneErrMsg').html('@Translate("Contact number cannot be empty")');} 3426 else{ 3427 if(isValidMobileNum(b2b_phone) != true){ $("#b2b_phoneErrMsg").html('@Translate("Invalid Contact Number")');} 3428 } 3429 if (b2b_captcha == '') 3430 { 3431 $('#lblMessage2').text('@Translate("Captcha verification failed.")'); 3432 $(obj).find("input[type=submit]").css("margin-top", "5%"); 3433 } 3434 else 3435 { 3436 $('#lblMessage2').text(''); 3437 3438 } 3439 3440 validB2Bsuccess = false; 3441 } 3442 3443 var b2b_email = $("#b2b_email").val(); 3444 if (!validateEmail(b2b_email)) 3445 { 3446 $('#b2b_emailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3447 validB2Bsuccess = false; 3448 } 3449 3450 var checkPwdMatch = checkB2BPasswordsMatch(); 3451 if (checkPwdMatch == false) 3452 { 3453 $("#b2b_passwordErrMsg").html('@Translate("Passwords do not match!")'); 3454 validB2Bsuccess = false; 3455 } 3456 3457 if (validB2Bsuccess){$(":input[type=submit]").attr("disabled", true);} 3458 return validB2Bsuccess; 3459 } 3460 3461 </script> 3462 3463 3464 <script type="text/javascript"> 3465 $('input').on('keypress', function(e){ 3466 var key; 3467 3468 //if the users browser is internet explorer 3469 if(window.event){ 3470 //store the key code (Key number) of the pressed key 3471 key = window.event.keyCode; 3472 3473 //otherwise, it is firefox 3474 } else { 3475 3476 //store the key code (Key number) of the pressed key 3477 key = e.which; 3478 } 3479 3480 //if key 13 is pressed (the enter key) 3481 if(key == 13){ 3482 3483 //do nothing 3484 return false; 3485 3486 //otherwise 3487 } else { 3488 3489 //continue as normal (allow the key press for keys other than "enter") 3490 return true; 3491 } 3492 }); 3493 3494 function checkB2CEmailOnFocusOut() { 3495 3496 setTimeout(function() { 3497 var b2c_email = $("#b2c_email").val(); 3498 if (!validateEmail(b2c_email)) 3499 { 3500 $('#b2c_emailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3501 } 3502 }, 100); 3503 3504 3505 } 3506 3507 function checkB2BEmailOnFocusOut() { 3508 setTimeout(function() { 3509 var b2b_email = $("#b2b_email").val(); 3510 if (!validateEmail(b2b_email)) 3511 { 3512 $('#b2b_emailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3513 } 3514 }, 100); 3515 } 3516 3517 3518 $(document).ready(function(){ 3519 3520 }); 3521 3522 3523 </script> 3524 <script> 3525 function isValidMobileNum(mobile) { 3526 var validPhone = true; 3527 3528 var phoneno = /^(3|6|8|9)\d{7}$/; 3529 if (mobile.match(phoneno)) { 3530 document.getElementById("b2b_phoneErrMsg").style.display = 'none'; 3531 document.getElementById("b2b_phoneErrMsg").innerHTML='@Translate("Phone Number cannot be empty.")'; 3532 validPhone = true; 3533 } 3534 3535 else { 3536 3537 document.getElementById("b2b_phoneErrMsg").style.display = 'block'; 3538 document.getElementById("b2b_phoneErrMsg").innerHTML='@Translate("Invalid Phone Number")'; 3539 3540 validPhone = false; 3541 } 3542 3543 return validPhone; 3544 } 3545 </script> 3546 3547 3548 <!-- Trigger for the modal --> 3549 <input type="checkbox" id="SignUpModalTrigger" class="modal-trigger" /> 3550 3551 <!-- signup modal --> 3552 <div class="modal-container"> 3553 3554 <label for="SignUpModalTrigger" class="modal-overlay" onclick="resetSignUpForm()"></label> 3555 <div class="modal"> 3556 3557 <div> 3558 3559 <div class="signup__modal"> 3560 3561 <div class="row signup_acc_row"> 3562 3563 <div class="signup_container width"> 3564 <div id="action_close"><label for="SignUpModalTrigger" onclick="resetSignUpForm()">X</label></div> 3565 3566 3567 <div class="top_title_section title"> 3568 <div class="signup_pg_ttl" style="padding-top: 13px;"> 3569 @Translate("Sign up for an Account") 3570 </div> 3571 3572 </div> 3573 3574 <div style="clear:both;"> 3575 <p style="margin-bottom:0px;font-size:14px;">Please select:</p> 3576 <div class="tab_links"> 3577 <a href="javascript:void(0);" onclick="toggleTab(this,'signup_individual_blk');" id="B2CMenu">@Translate("Individual")</a> 3578 <a href="javascript:void(0);" onclick="toggleTab(this,'signup_business_blk');" id="B2BMenu" class="active_menu">@Translate("Business")</a> 3579 </div> 3580 </div> 3581 3582 3583 <div class="signup_individual_blk signup_tab" style="display:none"> 3584 3585 3586 <form name="UserManagementEditForm" id="B2CForm" method="post" action="/Default.aspx?ID=@b2cCreateAccount"> 3587 3588 <input type="hidden" name="UserManagementForm" value="1"> 3589 <p style="Float:left;border-bottom: 1px solid #ccc;">Please note that this is for <b>home consumer registration</b>. For business, please click the "Business" tab above to register.</p> 3590 <div class="signup_user_acc_blk"> 3591 3592 <div class="signup_user_acc_ttl"> 3593 @Translate("Account information") 3594 </div> 3595 <div class="signup_fields"> 3596 <div> @Translate("First Name")<span class="form_asterickes">*</span></div> 3597 <input name="UserManagement_Form_FirstName" id="b2c_firstName" /> 3598 <div id="b2c_firstNameErrMsg" class="formErrorMsg"></div> 3599 </div> 3600 <div class="signup_fields"> 3601 <div> @Translate("Last Name")<span class="form_asterickes">*</span></div> 3602 <input name="UserManagement_Form_LastName" id="b2c_lastName" /> 3603 <div id="b2c_lastNameErrMsg" class="formErrorMsg"></div> 3604 </div> 3605 <input type="hidden" name="UserManagement_Form_Name" id="UserManagement_Form_Name"/> 3606 <!-- <div class="signup_fields" style="display:none"> 3607 <input name="UserManagement_Form_Name" id="b2c_Name" value="GetString("UserManagement:User.FirstName") GetString("UserManagement:User.LastName")" /> 3608 </div>--> 3609 <div class="signup_fields"> 3610 <div>@Translate("Email")<span class="form_asterickes">*</span></div> 3611 <input name="UserManagement_Form_Email" id="b2c_email" onfocusout="checkB2CEmailOnFocusOut()" /> 3612 <div id="b2c_emailErrMsg" class="formErrorMsg"></div> 3613 </div> 3614 <div class="signup_fields"> 3615 <div>@Translate("Password")<span class="form_asterickes">*</span></div> 3616 <input name="UserManagement_Form_NewPassword" type="password" id="b2c_password" autocomplete="off" /> 3617 <div id="b2c_newPasswordErrMsg" class="formErrorMsg"></div> 3618 </div> 3619 <div class="signup_fields"> 3620 <div>@Translate("Confirm Password")<span class="form_asterickes">*</span></div> 3621 <input name="UserManagement_Form_NewPasswordConfirm" type="password" id="b2c_confirmPassword" autocomplete="off" /> 3622 <div id="b2c_passwordErrMsg" class="formErrorMsg"></div> 3623 </div> 3624 3625 </div> 3626 3627 3628 <div class="terms_desc_blk"> 3629 <div class="terms_txt">@Translate("By registering for an account on our website, you hereby agree to our ")<a href="/Default.aspx?ID=@termsandcodition" target="_blank">@Translate("terms","terms") & @Translate("conditions","conditions")</a> @Translate("on the use of our website and") <a href="/Default.aspx?ID=@privacy" target="_blank">@Translate("privacy policy").</a></div> 3630 3631 <div class="extra_options"> 3632 <div class="signup_radio"> 3633 <!-- <input type="radio" name="CustomField.AccessUser_AccessUser_Email_Subscribe" value="True" /> 3634 <span>@Translate("I would like to be on the mailing list for Xhapters")</span> --> 3635 </div> 3636 <ul class="checkbox_signup"> 3637 <li> 3638 <input type="checkbox" name="CustomField.AccessUser_AccessUser_Newsletter_Subscribe" value="True" /> 3639 <span>@Translate("I would like to receive emails on marketing news and promotions.")</span> 3640 </li> 3641 <!-- <li> 3642 <input type="checkbox" name="CustomField.AccessUser_AccessUser_Printed_Newsletter_Subscribe" value="True" /> 3643 <span>@Translate("Send me the printed newsletter (quarterly)")</span> --> 3644 </li> 3645 </ul> 3646 3647 </div> 3648 </div> 3649 3650 <div style="clear:both;"> 3651 <div id="lblMessage" class="formErrorMsg"></div> 3652 <!--<div class="g-recaptcha" data-sitekey="@recaptchakey"></div>--> 3653 <div class="g-recaptcha-b2c" data-sitekey="@recaptchakey" id="b2c_RecaptchaField"></div> 3654 <input type="hidden" class="hiddenRecaptcha" name="b2c_hiddenRecaptcha" id="b2c_hiddenRecaptcha"> 3655 </div> 3656 3657 <div class="signup_fields"> 3658 <input type="button" name="account_individual_submit" OnClick="validateB2CForm(this)" value="@Translate("Create Account")" /> 3659 </div> 3660 3661 </form> 3662 3663 3664 3665 </div> 3666 3667 3668 <div class="signup_business_blk signup_tab"> 3669 <form id ="B2BForm" name="signup_business" method="post" action="/Default.aspx?ID=@b2bCreateAccount"> 3670 3671 <input type="hidden" name="UserManagementForm" value="1"> 3672 <p style="Float:left;border-bottom: 1px solid #ccc;">Please note that this is for <b>business registration</b>. For home consumers, please click the "Individual" tab above to register.</p> 3673 <div class="signup_user_acc_blk"> 3674 3675 <div class="signup_user_acc_ttl"> 3676 @Translate("Account information") 3677 </div> 3678 3679 <div class="signup_fields"> 3680 <div> @Translate("Company Email")<span class="form_asterickes">*</span></div> 3681 <input name="UserManagement_Form_Email" id="b2b_email" onfocusout="checkB2BEmailOnFocusOut()" /> 3682 <div id="b2b_emailErrMsg" class="formErrorMsg"></div> 3683 </div> 3684 <div class="signup_fields"> 3685 <div> @Translate("Password")<span class="form_asterickes">*</span></div> 3686 <input name="UserManagement_Form_NewPassword" id="b2b_password" type="password" autocomplete="off" /> 3687 <div id="b2b_newPasswordErrMsg" class="formErrorMsg"></div> 3688 3689 </div> 3690 <div class="signup_fields"> 3691 <div> @Translate("Confirm Password")<span class="form_asterickes">*</span></div> 3692 <input name="UserManagement_Form_NewPasswordConfirm" id="b2b_confirmPassword" type="password" autocomplete="off" /> 3693 <div id="b2b_passwordErrMsg" class="formErrorMsg"></div> 3694 </div> 3695 3696 </div> 3697 3698 3699 <div class="signup_comp_info_blk"> 3700 3701 <div class="signup_user_acc_ttl"> 3702 @Translate("Company information") 3703 </div> 3704 3705 <div class="signup_fields"> 3706 <div> @Translate("Company Name")<span class="form_asterickes">*</span></div> 3707 <input type="text" name="UserManagement_Form_Company" id="b2b_company" /> 3708 <div id="b2b_companyErrMsg" class="formErrorMsg"></div> 3709 </div> 3710 <div class="signup_fields"> 3711 <div> @Translate("Registration No.")<span class="form_asterickes">*</span></div> 3712 <input type="text" name="UserManagement_Form_VatRegNumber" id="b2b_regNo" /> 3713 <div id="b2b_regNoErrMsg" class="formErrorMsg"></div> 3714 </div> 3715 <div class="signup_fields"> 3716 <div> @Translate("Billing Address")<span class="form_asterickes">*</span></div> 3717 <input type="text" name="UserManagement_Form_Address" id="b2b_address" /> 3718 <input type="text" name="UserManagement_Form_Address2" id="b2b_address2" /> 3719 <div id="b2b_addressErrMsg" class="formErrorMsg"></div> 3720 </div> 3721 <div class="signup_fields"> 3722 <div> @Translate("Postal Code")<span class="form_asterickes">*</span></div> 3723 <input type="text" name="UserManagement_Form_Zip" id="b2b_zip"/> 3724 <div id="b2b_zipErrMsg" class="formErrorMsg"></div> 3725 </div> 3726 <div class="signup_fields" hidden> 3727 <div> @Translate("Country")</div> 3728 <input type="text" name="UserManagement_Form_Country" id="b2b_country" value="SG"/> 3729 3730 </div> 3731 3732 </div> 3733 3734 <div class="signup_cont_info_blk"> 3735 3736 <div class="signup_user_acc_ttl"> 3737 @Translate("Contact information") 3738 </div> 3739 3740 <div class="signup_fields"> 3741 <div> @Translate("First Name")<span class="form_asterickes">*</span></div> 3742 <input type="text" name="UserManagement_Form_FirstName" id="b2b_firstName" /> 3743 <div id="b2b_firstNameErrMsg" class="formErrorMsg"></div> 3744 </div> 3745 <div class="signup_fields"> 3746 <div> @Translate("Last Name")<span class="form_asterickes">*</span></div> 3747 <input type="text" name="UserManagement_Form_LastName" id="b2b_lastName" /> 3748 <div id="b2b_lastNameErrMsg" class="formErrorMsg"></div> 3749 </div> 3750 <div class="signup_fields"> 3751 <div> @Translate("Contact")<span class="form_asterickes">*</span></div> 3752 <input type="number" name="UserManagement_Form_Phone" id="b2b_phone" onkeyup="isValidMobileNum($(this).val())"/> 3753 <div id="b2b_phoneErrMsg" class="formErrorMsg"></div> 3754 </div> 3755 </div> 3756 3757 <div class="terms_desc_blk"> 3758 <div class="terms_txt"> @Translate("By registering for an account on our website, you hereby agree to our","By registering for an account on our website, you hereby agree to our") <a href="/Default.aspx?ID=@termsandcodition" target="_blank"> @Translate("terms","terms") & @Translate("conditions","conditions")</a> @Translate("on the use of our website and") <a href="/Default.aspx?ID=@privacy" target="_blank">@Translate("privacy policy").</a></div> 3759 3760 <div class="extra_options"> 3761 <div class="signup_radio b2bradio"> 3762 <!--<input type="radio" name="CustomField.AccessUser_AccessUser_Email_Subscribe" value="True" /> 3763 <span> @Translate("I would like to be on the mailing list for Xhapters")</span>--> 3764 </div> 3765 <ul class="checkbox_signup b2bcheckbox"> 3766 <li> 3767 <input type="checkbox" name="CustomField.AccessUser_AccessUser_Newsletter_Subscribe" value="True" /> 3768 <span> @Translate("I would like to receive emails on marketing news and promotions.")</span> 3769 </li> 3770 <li> 3771 <!-- <input type="checkbox" name="CustomField.AccessUser_AccessUser_Printed_Newsletter_Subscribe" value="True" /> 3772 <span> @Translate("Send me the printed newsletter (quarterly)")</span> --> 3773 </li> 3774 </ul> 3775 3776 <!--<div class="signup_radio"> 3777 <input type="radio" name="CustomField.AccessUser_AccessUser_Printed_Catalogue_Subscribe" value="True" /> 3778 <span> @Translate("I would like to receive the latest copy of OUR XTORY BOOK")<br/> (@Translate("product catalogue"))</span> 3779 </div>--> 3780 <div style="display:none"> 3781 <input type="input" name="CustomField.AccessUser_AccessUser_HasCreditTerms" value="COD" /> 3782 <!--<input type="checkbox" name="CustomField.AccessUser_AccessUser_Bypass_Sale" checked/>--> 3783 </div> 3784 3785 <div > 3786 <p><span style="text-decoration: underline;">@Translate("Important notice for business registrations")</span></br> 3787 <span>@Translate("Business registrations will take 2-3 days to verify. Thank you for your patience. To check on your status, please drop us an email at <a href='mailto:ecommerce@@foodxervices.com'>ecommerce@foodxervices.com</a> .")</span></p> 3788 </div> 3789 3790 </div> 3791 </div> 3792 3793 <div id="lblMessage2" class="formErrorMsg"></div> 3794 <!--<div class="g-recaptcha" data-sitekey="@recaptchakey"></div>--> 3795 <div class="g-recaptcha-b2b" data-sitekey="@recaptchakey" id="b2b_RecaptchaField"></div> 3796 <input type="hidden" class="hiddenRecaptcha" name="b2b_hiddenRecaptcha" id="b2b_hiddenRecaptcha"> 3797 3798 3799 <div class="signup_fields"> 3800 <input type="button" name="account_business_submit" OnClick="validateB2BForm(this)" value="@Translate("Create Account")" /> 3801 </div> 3802 3803 </form> 3804 </div> 3805 </div> 3806 </div> 3807 </div> 3808 </div> 3809 </div> 3810 </div> 3811 3812 <script> 3813 function full() { 3814 3815 var firstname = document.getElementById('b2c_firstName').value; 3816 var lastname= document.getElementById('b2c_lastName').value; 3817 document.getElementById("UserManagement_Form_Name").value=firstname+" "+lastname; 3818 form.submit(); 3819 } 3820 3821 </script> 3822 @{ 3823 int signInPageId = GetPageIdByNavigationTag("SignInPage"); 3824 } 3825 <script> 3826 3827 function resetTemplateDesign() 3828 { 3829 $("#formInputSection").show(); 3830 document.getElementById("ForgetPwdForm").reset(); 3831 $("#forgetPwdLabelId").html('@Translate("Fill in your email below and we will send you an email with instructions on how to reset your password.")'); 3832 $('#accessUserEmailErrMsg').html(""); 3833 } 3834 </script> 3835 3836 <script> 3837 function submitForgetPassword(obj) 3838 { 3839 $("#sendEmail").on( "click", function(event) { 3840 Buttons.LockButton(event); 3841 }); 3842 3843 var emailField = $("#AccessUserEmail").val(); 3844 if (emailField == "") 3845 { 3846 $('#accessUserEmailErrMsg').html('@Translate("Email cannot be empty.")'); 3847 $("#sendEmail").off("click"); 3848 return false; 3849 } 3850 else 3851 { 3852 if (!validateEmail(emailField)) 3853 { 3854 $('#accessUserEmailErrMsg').html('@Translate("Email must be in correct format. e.g. example@mail.com")'); 3855 $("#sendEmail").off("click"); 3856 return false; 3857 } 3858 } 3859 $("#sendEmail").trigger("click"); 3860 return true; 3861 } 3862 3863 function validateEmail(email) { 3864 var re = /^[a-z0-9\.\_%+-]+@@[a-z0-9\.\-]+\.[a-z]{2,5}$/i; 3865 return re.test(email); 3866 } 3867 3868 $(document).ready(function() { 3869 3870 var urlParams = new URLSearchParams(location.search); 3871 var errMsgs = urlParams.get('forgetPwdError'); 3872 3873 if (errMsgs != null) 3874 { 3875 $('#ForgetPasswordModalTrigger').click(); 3876 if (errMsgs == "0") 3877 { 3878 $('#accessUserEmailErrMsg').html('@Translate("User not found")'); 3879 } 3880 else if (errMsgs == "1") 3881 { 3882 3883 $("#formInputSection").hide(); 3884 $('#forgetPwdLabelId').html('<label>@Translate("Check your email - we sent you an email with a link. Click it to continue to reset your password.")</label>'); 3885 } 3886 else if (errMsgs == "2") 3887 { 3888 $("#formInputSection").hide(); 3889 $('#forgetPwdLabelId').html('<label>@Translate("Check your email - we sent you an email with the password.")</label>'); 3890 } 3891 3892 window.history.replaceState("", "", window.location.href.split('?')[0]); 3893 } 3894 3895 }); 3896 </script> 3897 3898 <!-- Trigger for the modal --> 3899 <input type="checkbox" id="ForgetPasswordModalTrigger" class="modal-trigger" /> 3900 3901 <!-- modal --> 3902 <div class="modal-container"> 3903 3904 <label for="ForgetPasswordModalTrigger" class="modal-overlay" onclick="resetTemplateDesign()"></label> 3905 <div class="modal" id="reset"> 3906 3907 <div> 3908 <div class="row signup_acc_row"> 3909 <div> 3910 <div class="forget_pwd_div" id="ForgetPasswordModal"> 3911 <div id="forget_pwd_action_close"><label for="ForgetPasswordModalTrigger" onclick="resetTemplateDesign()">X</label></div> 3912 <div class="forget_pwd_modal__header"> 3913 <span>@Translate("RESET YOUR PASSWORD")</span> 3914 </div> 3915 <div class="modal__body"> 3916 <div class="forgetPwdFormDiv"> 3917 <form onsubmit="return submitForgetPassword(this)" method="post" id="ForgetPwdForm" class="u-no-margin" action="/Default.aspx?id=@signInPageId"> 3918 <input type="hidden" name="ForgotPasswordMailTemplate" value="Login/RecoveryEmail.cshtml"> 3919 <input type="hidden" name="ForgotPasswordSenderEmail" value='@Translate("forgotpasswordFromName")'> 3920 <input type="hidden" name="ForgotPasswordMailSubject" value='@Translate("forgotpasswordSubjectName")'> 3921 <div class="forgetPwdLabel" id="forgetPwdLabelId"> 3922 <label>@Translate("Fill in your email below and we will send you an email with instructions on how to reset your password.")</label> 3923 </div> 3924 <br /> 3925 <div id="formInputSection"> 3926 <div class="login_fields"> 3927 <label>@Translate("Email")</label> 3928 </div> 3929 <input type="text" class="u-full-width txt-box" id="AccessUserEmail" name="AccessUserEmail" /> 3930 <div class="error_msg dw-mod" id="accessUserEmailErrMsg"></div> 3931 <label> 3932 <button type="submit" name="LoginAction" value="Recovery" class="forgetPwdBtn" id="sendEmail">@Translate("Send")</button> 3933 </label> 3934 </div> 3935 </form> 3936 </div> 3937 </div> 3938 </div> 3939 </div> 3940 </div> 3941 </div> 3942 </div> 3943 </div> 3944 3945 3946 @* 3947 @{ 3948 var ViewPortFormPageId = GetPageIdByNavigationTag("ViewportPage"); 3949 } 3950 3951 <script> 3952 window.addEventListener('load', function(){ 3953 var viewportXhr = new XMLHttpRequest(); 3954 var viewportUrl = '/Default.aspx?Id=@ViewPortFormPageId' + '&ViewportWidth=' + window.innerWidth + '&ViewportHeight=' + window.innerHeight; 3955 viewportXhr.onreadystatechange = function(){ 3956 if (this.readyState == 4 && this.status == 200) { 3957 var viewportData = JSON.parse(this.responseText); 3958 } 3959 }; 3960 viewportXhr.open('GET', viewportUrl, true); 3961 viewportXhr.send(); 3962 } ,false); 3963 </script>*@ 3964 3965 3966 <script> 3967 function closebtn () 3968 { 3969 document.getElementById('StandardP_bg').style.display="none"; 3970 document.getElementById('StandardP').style.display="none"; 3971 3972 } 3973 function closeremove () 3974 { 3975 document.getElementById('StandardP_bg').style.display="none"; 3976 document.getElementById('StandardP').style.display="none"; 3977 window.location.reload(true); 3978 } 3979 function CheckPreorderItem(){ 3980 var isPreorder = false; 3981 $.ajax({ 3982 url:"/Default.aspx?ID=427", 3983 async: false, 3984 success: function(item){ 3985 console.log(item); 3986 var temp = item; 3987 for(var i =0; i< temp[0].OrderLines.length; i++) 3988 { 3989 if(temp[0].OrderLines[i].preOrderDays != "" && temp[0].OrderLines[i].template != "CartOrderlineDiscount"){ 3990 isPreorder = true; 3991 break; 3992 } 3993 } 3994 } 3995 }).done(function() { 3996 if(isPreorder == true){ 3997 var popupInfo = ({ 3998 header : "IMPORTANT", 3999 message : "All pre-order items cannot be cancelled, refunded or exchanged.", 4000 okText : "Agree", 4001 okButton: true 4002 }); 4003 StandardPopup.ShowPopup(popupInfo); 4004 } 4005 else{ 4006 var cartpage = '@GetPageIdByNavigationTag("ShowCartPage")'; 4007 location.href = "/Default.aspx?ID="+ cartpage +"&posted=true"; 4008 } 4009 $(".StandardP_btn").addClass("extra_standard_btn"); 4010 $(".StandardP_btn").removeAttr("onClick"); 4011 $(".StandardP_btn").attr("onClick","GotoCart()"); 4012 }); 4013 4014 } 4015 function GotoCart(){ 4016 var cartpage = '@GetPageIdByNavigationTag("ShowCartPage")'; 4017 location.href = "/Default.aspx?ID="+ cartpage +"&posted=true"; 4018 } 4019 </script> 4020 4021 4022 </body> 4023 </html> 4024 4025