UDL LUBE FOR RADIAL BRGS TO 25MM ID

Exception in template (Designs\BocaBearings\eCom/Product/product.cshtml): System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
   at Dynamicweb.Modules.Searching.Rules.Parser.UnescapeStrings(String s)
   at Dynamicweb.Modules.Searching.Rules.Parser.ParseSimpleExpression(String expression)
   at Dynamicweb.Modules.Searching.Rules.Parser.Parse(String input)
   at Dynamicweb.Modules.ItemPublisher.FilterHelper.ToXml(String filter)
   at Dynamicweb.Modules.ItemPublisher.Frontend.GetContentBySettings(String settings)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Dynamicweb.Extensibility.AddInManager.InvokeFunction(Object instance, String FunctionName, Object[] Params)
   at Dynamicweb.Rendering.RazorTemplateBase`1.RenderItemList(Object settings)
   at CompiledRazorTemplates.Dynamic.dcddacbaacbbaf.<>c__DisplayClass6.b__3(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.dcddacbaacbbaf.Execute()
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
   at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
   at Dynamicweb.Rendering.Template.Output()
@inherits RazorTemplateBase<RazorTemplateModel<Template>> @using System; @using System.IO; @using System.Web; @using System.Text; @using Dynamicweb.Rendering; @using System.Collections.Generic; @using System.Linq @using System.Text.RegularExpressions; @using System; @using System.Collections.Generic; @using System.Web.Script.Serialization; @{ List<LoopItem> obj_loopVariantCombinations = GetLoop("VariantCombinations"); Dictionary<string, Dictionary<string, Dictionary<string, string>>> dic_product = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>(); Dictionary<string, Dictionary<string, string>> dic_variants = new Dictionary<string, Dictionary<string, string>>(); string str_productJSON = ""; if(obj_loopVariantCombinations.Any()){ foreach (LoopItem variant in obj_loopVariantCombinations){ string str_variantHref = "/"+ variant.GetValue("Ecom:VariantCombination.Link.Clean") + "?PID=" + Dynamicweb.Frontend.PageView.Current().CurrentParagraph.ID.ToString(); string str_articleNumVar = variant.GetString("Ecom:Product.Number"); string str_price = variant.GetString("Ecom:Product.Price"); string str_stock = variant.GetString("Ecom:Product.AvailableAmount"); string str_smallImage = variant.GetString("Ecom:Product.ImageSmall.Clean"); string str_id = variant.GetString("Ecom:VariantCombination.VariantID"); string str_variantName = variant.GetString("Ecom:VariantCombination.VariantText"); string str_variantShortDescription = variant.GetString("Ecom:VariantCombination.VariantText"); Dictionary<string, string> dic_variant = new Dictionary<string, string>(); dic_variant.Add("name", str_variantName); dic_variant.Add("id", str_id); dic_variant.Add("number", str_articleNumVar); dic_variant.Add("price", str_price); dic_variant.Add("stock", str_stock); dic_variant.Add("smallImage", str_smallImage); dic_variant.Add("productIsFavorite", variant.GetString("Ecom:Product.IsProductInFavoriteList")); dic_variant.Add("addToList", variant.GetString("Ecom:Product.AddToList")); dic_variant.Add("removeFromList", variant.GetString("Ecom:Product.RemoveFromList")); dic_variants.Add(str_id, dic_variant); } dic_product.Add("product", dic_variants); } str_productJSON = new JavaScriptSerializer().Serialize(dic_product); } @functions{ public static string GetImage(string str_source, int num_width, int num_height, int num_widthTablet, int num_heightTablet, int num_widthMobile, int num_heightMobile, string str_format = "", int num_compression = 0, int num_crop = 5) { Dynamicweb.Frontend.PageView obj_currentPageview = Dynamicweb.Frontend.PageView.Current(); string str_currDevice = obj_currentPageview.Device.ToString(); string str_alternativeImage = obj_currentPageview.Area.Item["NoImage"] != null ? obj_currentPageview.Area.Item["NoImage"].ToString() : "/Files/Templates/Designs/BocaBearings/images/alternativeImage.jpg"; string str_width = ""; string str_height = ""; int num_getImageWidth = num_width != 0 ? num_width : 0; int num_getImageHeight = num_height != 0 ? num_height : 0; string str_getImageFormat = str_format != "" ? "&amp;Format=" + str_format : ""; string str_getImageCompression = num_compression != 0 ? "&amp;Compression=" + num_compression : ""; if (str_currDevice == Dynamicweb.Frontend.PageView.DeviceType.Tablet.ToString()) { num_getImageWidth = num_widthTablet != 0 ? num_widthTablet : num_getImageWidth; num_getImageHeight = num_heightTablet != 0 ? num_heightTablet : num_getImageHeight; } else if (str_currDevice == Dynamicweb.Frontend.PageView.DeviceType.Mobile.ToString()) { num_getImageWidth = num_widthMobile != 0 ? num_widthMobile : num_getImageWidth; num_getImageHeight = num_heightMobile != 0 ? num_heightMobile : num_getImageHeight; } if (num_getImageWidth != 0) { str_width = "&amp;Width=" + num_getImageWidth; } if (num_getImageHeight != 0) { str_height = "&amp;Height=" + num_getImageHeight; } string str_output = "/Admin/Public/GetImage.ashx?Image=" + str_source + str_width + str_height + "&amp;altFmImage_path=" + str_alternativeImage + str_getImageFormat + str_getImageCompression + "&amp;Crop=" + num_crop; return str_output; } } @functions{ public string GetIcon(string path) { string icon = ""; switch(Path.GetExtension(path)) { case ".pdf": icon = "fa-file-pdf-o"; break; case ".jpg": icon = "fa-picture-o"; break; case ".png": icon = "fa-picture-o"; break; case ".gif": icon = "fa-picture-o"; break; default: icon = "fa-envelope-o"; break; } return icon; } } @{ Pageview.Meta.Add("customCan", "<link rel=\"canonical\" href=\""+HttpContext.Current.Request.RawUrl+"\""); var itemArea = Pageview.Area.Item; string str_currentPageId = Pageview.Page.ID.ToString(); string str_pageInfo = itemArea["PageInformation"].ToString(); string str_variantDefaultId = GetString("Ecom:Product.DefaultVariantComboID"); string str_variantCurrentId = GetString("Ecom:Product.VariantID"); string str_variantId = (!String.IsNullOrEmpty(str_variantCurrentId)) ? str_variantCurrentId : str_variantDefaultId; bool bol_productIsFavorite = GetBoolean("Ecom:Product.IsProductInFavoriteList"); int inquireForm = Convert.ToInt32((Pageview.Area.Item["InquireAvailability"] ?? "0").ToString()); string str_productId = GetString("Ecom:Product.ID"); string str_productLanguage = GetString("Ecom:Product.LanguageID"); string str_productName = GetString("Ecom:Product.Name"); string str_articleNum = GetString("Ecom:Product.Number"); string str_patternImage = "/Files/Files/BocaBearing/Products/Images/" + str_articleNum + ".jpg"; string str_pattern = str_articleNum + "_*"; string str_productImage = !string.IsNullOrEmpty(GetString("Ecom:Product.ImageSmall.Default.Clean")) ? GetString("Ecom:Product.ImageSmall.Default.Clean") : !string.IsNullOrEmpty(GetString("Ecom:Product.ImageMedium.Default.Clean")) ? GetString("Ecom:Product.ImageMedium.Default.Clean") : !string.IsNullOrEmpty(GetString("Ecom:Product.ImageLarge.Default.Clean")) ? GetString("Ecom:Product.ImageLarge.Default.Clean") : str_patternImage; str_productImage = str_productImage.ToLower().Replace("/files/files/files/", "/files/files/"); string str_metaDescription = GetString("Ecom:Product.MetaDescription"); str_metaDescription = String.IsNullOrWhiteSpace(str_metaDescription) ? GetString("Ecom:Product.LongDescription") :str_metaDescription; if (!String.IsNullOrWhiteSpace(str_metaDescription) && String.IsNullOrWhiteSpace(GetString("Ecom:Product.MetaDescription"))) { Pageview.Meta.Add("description", Dynamicweb.Base.TeaserString(StripHtml(str_metaDescription), 155, "...")); } string str_productGetImage = GetImage(str_productImage, 0, 400, 0, 200, 0, 200, "jpg", 90, 5); string str_productIntro = GetString("Ecom:Product:Field.Dimensions"); //GetString("Ecom:Product.ShortDescription"); string str_productDescription = GetString("Ecom:Product.LongDescription"); string str_productRemoveFromList = "/Default.aspx?Id=" + str_currentPageId + "&amp;CCRemoveFromMyLists=" + str_productId + "&amp;CCRemoveFromListVariantID=" + str_variantId + "&amp;CCRemoveFromListLanguageID=" + str_productLanguage; string str_productAddToList = "/Default.aspx?Id=" + str_currentPageId + "&amp;CCAddToMyLists=" + str_productId + "&amp;CCAddToListVariantID=" + str_variantId + "&amp;CCAddToListLanguageID=" + str_productLanguage; string str_favoriteUrl = bol_productIsFavorite ? str_productRemoveFromList : str_productAddToList; string str_downloadsAndVideosFilter = "Products contains 'p_" + str_productId + ",' or Products contains 'p_" + str_productId + ":' or Products ends with 'p_" + str_productId + "'"; string str_fitmentsFilter = "Product_ID contains 'p_" + str_productId + ",' or Product_ID contains 'p_" + str_productId + ":' or Product_ID ends with 'p_" + str_productId + "'"; str_fitmentsFilter = "Product_ID='" + str_productId + "'"; bool countImages = true; string str_titleKey = "title"; string str_title = ""; string str_imageKey = "image"; string str_image = ""; string str_prodNameWithFits = str_productName; str_prodNameWithFits += System.Web.HttpContext.Current.Request.Params["make"] != null ? " | " + System.Web.HttpContext.Current.Request.Params["make"] + ", " + System.Web.HttpContext.Current.Request.Params["model"] + " - " + System.Web.HttpContext.Current.Request.Params["feature"] : ""; List<Dictionary<string, string>> lst_images = new List<Dictionary<string, string>>(); string str_folderPath = Path.GetDirectoryName(HttpContext.Current.Server.MapPath("/Files/Files/BocaBearing/Products/Images/" + str_articleNum + ".jpg")); string str_urlInquire = "/Default.aspx?ID=" + itemArea["InquireAboutAvailability"].ToString() + "&prodID=" + GetString("Ecom:Product.ID"); bool bol_userLogged = Pageview.User.LoggedIn; string schematic = GetString("Ecom:Product:Field.SchematicUrl.Value.FullPath"); string techImage = GetString("Ecom:Product:Field.TechnicalImage.Value.Clean"); bool inquireProduct = GetBoolean("Ecom:Product:Field.InquiryProduct.Value"); string mmfURL = ""; mmfURL += !String.IsNullOrWhiteSpace((System.Web.HttpContext.Current.Request.Params["make"] ?? "").ToString()) ? "make=" + System.Web.HttpUtility.UrlEncode((System.Web.HttpContext.Current.Request.Params["make"] ?? "").ToString()).Replace("+", "%20") : ""; mmfURL += !String.IsNullOrWhiteSpace((System.Web.HttpContext.Current.Request.Params["model"] ?? "").ToString()) ? "&model=" + System.Web.HttpUtility.UrlEncode((System.Web.HttpContext.Current.Request.Params["model"] ?? "").ToString()).Replace("+", "%20") : ""; mmfURL += !String.IsNullOrWhiteSpace((System.Web.HttpContext.Current.Request.Params["feature"] ?? "").ToString()) ? "&feature=" + System.Web.HttpUtility.UrlEncode((System.Web.HttpContext.Current.Request.Params["feature"] ?? "").ToString()).Replace("+", "%20") : ""; string sideCartInfo = str_productId; //sideCartInfo += !String.IsNullOrWhiteSpace(mmfURL) ? "?" + mmfURL : ""; // TODO do ajax call to get this values List<LoopItem> productPrices = GetLoop("Product.Prices"); List<LoopItem> bomLoop = new List<LoopItem>(); if (GetString("Ecom:Product.Type") == "2" || bomLoop != null) { bomLoop = GetLoop("BOMProducts"); } string groupId = (!bol_userLogged) ? string.Empty : GetFirstUserGroupID(Pageview.User.Groups.ToArray(), productPrices.Select(p => p.GetString("Ecom:Product.Prices.GroupID")).Distinct().ToList()); if (Directory.Exists(str_folderPath)) { string str_temp = @"\"; foreach (string file in Directory.GetFiles(str_folderPath, str_pattern)) { Dictionary<string, string> dct_image = new Dictionary<string, string>(); str_image = "/Files/Files/BocaBearing/Products/Images/" + file.Substring((file.LastIndexOf(@str_temp) + 1), (file.Length - file.LastIndexOf(@str_temp) - 1)); string str_metafield = "title"; var metadata = Dynamicweb.Content.Files.Metadata.EditorFactory.GetMetadataForFile(str_image); str_title = metadata != null ? metadata.GetValue(str_metafield).ToString() : str_productName; dct_image.Add(str_titleKey, str_title); dct_image.Add(str_imageKey, str_image); lst_images.Add(dct_image); } } string productSpecificationColumn = "col-sm-12"; <div id="product-container" data-inquire="@inquireProduct" data-hasCad="@GetString("Ecom:Product:Field.HasCad")" data-pageId="@str_currentPageId" data-productId="@str_productId" data-variantId="@str_variantId" data-errorCombination1='@Translate("Combination not available")' data-pageInfo='@str_pageInfo'> <article id="product-description" class="col-xs-12"> <div id="product-images" class="col-sm-4 col-xs-12"> <figure class="text-center"> <img itemprop="image" class="img-responsive" src="@str_productGetImage" alt="@str_productName" title="@str_productName" /> </figure> <div id="imgThumbs" class="col-xs-12 noPadding"> <ul> @foreach (var image in lst_images) { string str_getimageImg = GetImage(image["image"].ToString(), 0, 105, 0, 105, 0, 105, "jpg", 90, 5); string liClass = countImages ? "active" : ""; <li class="col-sm-4 col-xs-4 @liClass"> <img class="img-responsive" src="@str_getimageImg" title="@image["title"]" alt="@image["title"]" /> </li> countImages = false; } </ul> </div> </div> <div id="product-info-wrapper" class="col-sm-8 col-xs-12 noPaddingRight"> <div data-prodname="@str_productName" itemprop="name" class="product-title padding-bottom h2">@str_prodNameWithFits</div> @if (!String.IsNullOrEmpty(str_productIntro)) { <h2>@str_productIntro</h2> } @RenderRatingReview() <div class="col-xs-12 noPadding description" itemprop="description"> @if (!String.IsNullOrEmpty(str_productDescription)) { <p class="lead">@Translate("Description", "Description")</p> if (!String.IsNullOrEmpty(str_productDescription)) { @str_productDescription } } </div> @if(!inquireProduct) { <!-- Interface related with Add to cart --> @OrderNow(str_currentPageId,str_productId,str_variantId,productPrices,groupId,str_urlInquire) <!-- Interface Add to Wish List --> @AddWishList(itemArea["Retail"].ToString(),bol_productIsFavorite,techImage,groupId,str_favoriteUrl, bol_userLogged) } else { if(!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Video.Value"))) { <div class="col-xs-12 noPadding productVideo"> <iframe width="78%" height="315" src="@GetString("Ecom:Product:Field.Video.Value")"> </iframe> </div> } } </div> @if(!inquireProduct) { if(!GetString("Ecom:Product.PrimaryGroupID").Equals("L3CATALOGS-Catalogs")) { decimal customValueInt; bool valParsed = false; <!-- Tabs --> <div id="tabsContainer" class="col-xs-12 blueBottomBar"> @CreateTabs(bomLoop,schematic,techImage,GetBoolean("Ecom:Product:Field.HasCad.Value")) <!-- Product Specifications --> <div class="hide" id="productSpecifications"> <div class="@productSpecificationColumn noPadding"> <dl class="col-xs-6 specificationsList noPadding"> @*<dt class="col-xs-6 blue">@Translate("productType", "Product Type")</dt> <dd class="col-xs-6"><a target="_blank" class="blue" href="/Default.aspx?ID=@Pageview.Page.ID&amp;GroupID=@GetString("Ecom:Product.PrimaryOrFirstGroupID")">@GetString("PRODUCT_TYPE.Clean")</a></dd>*@ @foreach (KeyValuePair<string, string> entry in GetProductSpecifications()) { valParsed = Decimal.TryParse(entry.Value, out customValueInt); if(!String.IsNullOrEmpty(entry.Value)) { if(!(valParsed && customValueInt == 0)) { <dt class="col-xs-6">@entry.Key</dt> <dd class="col-xs-6">@entry.Value</dd> } } } </dl> </div> </div> @if (bomLoop.Any()) { @RenderKitComponents() } @RenderTabsInfo(schematic,techImage,bol_userLogged,itemArea["RequestDrawing"].ToString(),itemArea["Request3DCAD"].ToString(),itemArea["ProductDownloads"].ToString(),itemArea["ProductVideos"].ToString(),str_downloadsAndVideosFilter,str_fitmentsFilter,str_productName) </div> <div class="toAppend"> </div> @RenderReviews(itemArea,str_articleNum,str_productName,str_productIntro) } } else { @RenderParagraphContent(inquireForm) } </article> </div> @SnippetStart("jsOnLoad") @:onLoadProductDetail({obj_product:@str_productJSON}, @GetGroupsStructure()); @SnippetEnd("jsOnLoad") } @helper RenderReviews(Dynamicweb.Content.Items.Item itemArea,string str_articleNum, string str_productName, string str_productIntro) { List<LoopItem> comments = GetLoop("Comments"); string str_starClass = ""; string str_halfStar = ""; <div id="reviewsContainer" class="col-xs-12 noPadding"> <h3 class="productTitles"> @Translate("reviews", "Reviews") <a id="reviewThisProdButton" href="#" class="btn-blue generalButton pull-right underline hidden-xs">@Translate("reviewThisProduct", "Review this product")</a> </h3> <div class="col-xs-12 noPadding reviewsHead"> <ul class="rating"> @for (int s = 5; s > 0; s--) { if (s == Math.Ceiling(GetDouble("Comments.Rating"))) { str_starClass = "class='star'"; str_halfStar = !(GetDouble("Comments.Rating") - Math.Round(GetDouble("Comments.Rating")) == 0) ? "fa-star-half-o" : "fa-star"; } else { str_starClass = ""; str_halfStar = "fa-star"; } <li data-star="@s" @str_starClass><i class="fa @str_halfStar"></i></li> } </ul> <span id="totalReviews">@GetDouble("Comments.TotalCount") @Translate("reviews", "Reviews")</span> </div> @if (comments.Any()) { <div class="col-xs-12 noPadding"> <ul id="productReviews" class="col-xs-12 noPadding"> @foreach (LoopItem comment in comments) { DateTime dat_date = comment.GetDate("CreatedDate"); string str_date = dat_date.Month.ToString() + "/" + dat_date.Day.ToString() + "/" + dat_date.Year.ToString(); <li class="col-xs-12 noPadding"> <div class="col-xs-12 col-sm-4 noPadding"> <div class="col-xs-12 noPaddingLeft titleGray"> <ul class="rating"> @for (int s = 5; s > 0; s--) { if (s == Math.Ceiling(comment.GetDouble("Rating"))) { str_starClass = "class='star'"; str_halfStar = !(comment.GetDouble("Rating") - Math.Round(comment.GetDouble("Rating")) == 0) ? "fa-star-half-o" : "fa-star"; } else { str_starClass = ""; str_halfStar = "fa-star"; } <li data-star="@s" @str_starClass><i class="fa @str_halfStar"></i></li> } </ul> </div> <div class="col-xs-12 fivePxMarginLeft">@Translate("reviewer", "Reviewer") : @comment.GetString("Name")</div> <div class="col-xs-12 fivePxMarginLeft">@Translate("date", "Date") : @str_date</div> </div> <div class="col-xs-12 col-sm-8 noPadding"> <div class="titleGray">@comment.GetString("Website").Replace("http://", "") &nbsp;</div> @comment.GetString("Text") </div> </li> } </ul> </div> } <div id="reviewsFormContainer" data-alert='@Translate("success", "Your review has been submitted for approval.")' class="col-xs-12 noPadding"> <h2 class="titleGray">@Translate("reviewThisProduct", "Review this product")</h2> <div id="reviewsForm" class="col-xs-12"> <h3>@Translate("rating", "Rating")</h3> <form method="post" action="/Default.aspx?ID=@Pageview.Page.ID"> <input type="hidden" name="Comment.ItemType" value="ecomProduct"> <input type="hidden" name="Comment.Active" value="False"> <input type="hidden" name="Comment.ItemID" value="@GetValue("Ecom:Product.ID")"> <input type="hidden" name="Comment.LangID" value="@GetValue("Ecom:Product.LanguageID")"> <input type="hidden" name="Comment.Command" id="Comment.Command" value="create"> <input type="hidden" name="_sys_to_email" value="bot@dynamicweb.com"> <input disabled="disabled" type="hidden" name="ProductName" value="@GetString("Ecom:Product.Name")"> <input disabled="disabled" type="hidden" name="FM_Charset" value="iso-8859-1"> <input disabled="disabled" type="hidden" name="FM_html" value="true"> <input disabled="disabled" type="hidden" name="FM_Subject" value="BocaBearings - New Review"> <input disabled="disabled" type="hidden" name="FM_FromEmail" value="@Translate("noreply@bocabearings.com")"> <input disabled="disabled" type="hidden" name="FM_FromName" value="BocaBearings"> <input disabled="disabled" type="hidden" name="FM_Template" value="sendReviewToAdmin.cshtml"> @*<input disabled="disabled" type="hidden" name="FM_ToEmail" value="@itemArea["Email"]">*@ <input disabled="disabled" type="hidden" name="FM_ToEmail" value="@itemArea["ReviewEmailReceiver"]"> <input disabled="disabled" type="hidden" name="FM_Redirect" value="/Default.aspx?ID=@itemArea["Review_Approve"]"> <input disabled="disabled" type="hidden" name="ApprovalURL" value="/Default.aspx?ID=@itemArea["ApproveReview"]"> <fieldset class="ratingContainer"> <ul id="commentRating"> <li class="star"><input type="radio" name="Comment.Rating" value="5" checked="checked" /><i class="fa fa-star"></i></li> <li><input type="radio" name="Comment.Rating" value="4" /><i class="fa fa-star"></i></li> <li><input type="radio" name="Comment.Rating" value="3" /><i class="fa fa-star"></i></li> <li><input type="radio" name="Comment.Rating" value="2" /><i class="fa fa-star"></i></li> <li><input type="radio" name="Comment.Rating" value="1" /><i class="fa fa-star"></i></li> </ul> </fieldset> <fieldset class="mandatory name"> <label for="Comment.Name">@Translate("name", "Name"):</label> <input type="text" name="Comment.Name" id="Comment.Name" value="" /> </fieldset> <fieldset class="mandatory email checkEmail"> <label for="Comment.Email">@Translate("email", "Email"):</label> <input type="text" name="Comment.Email" id="CommentEmail" value="" /> </fieldset> <fieldset class="mandatory title"> <label for="Comment.Website">@Translate("title", "Title"):</label> <input type="text" name="Comment.Website" id="Comment.Website" value="" /> </fieldset> <fieldset class="last mandatory"> <label for="Comment.Text">@Translate("comments", "Comments"):</label> <textarea maxlength="800" name="Comment.Text" id="Comment.Text" rows="10" cols="50"></textarea> </fieldset> <input class="generalButton" type="submit" value="@Translate("submit", "Submit")" /> </form> </div> </div> <div id="shareContainer" class="col-xs-12 noPadding"> <div class="shareIcons"> <span>@Translate("share", "Share")</span> <ul> <li> <a class="fa-facebook fa" target="_blank" href='///www.facebook.com/sharer/sharer.php?u=@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@GetGlobalValue("Global:Pageview.Url")'><span>@Translate("shareFacebook", "Share facebook")</span></a> </li> <li> <a class="fa-twitter fa" target="_blank" href='///twitter.com/home?status=@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@GetGlobalValue("Global:Pageview.Url")'><span>@Translate("shareTwitter", "Share twitter")</span></a> </li> <li> <a class="fa-linkedin fa" target="_blank" href='///www.linkedin.com/shareArticle?mini=true&url=@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@GetGlobalValue("Global:Pageview.Url")&title=@str_productName&summary=@str_productIntro&source='><span>@Translate("shareLinkedin", "Share linkedin")</span></a> </li> </ul> </div> </div> </div> } @helper RenderTabsInfo(string schematic, string techImage,bool bol_userLogged,string requestDrawing,string request3DCAD, string productDownloads, string productVideos,string str_downloadsAndVideosFilter,string str_fitmentsFilter,string prodName) { var primaryGroup = Dynamicweb.eCommerce.Products.Group.GetGroupByID(GetString("Ecom:Product.PrimaryGroupID")); var requestDrawingLabel = primaryGroup != null ? primaryGroup.ProductGroupFieldValues.FirstOrDefault(gf => gf.ProductGroupField.SystemName.Equals("DrawingLabel")).Value.ToString() : string.Empty; var technicalImageLabel = primaryGroup != null ? primaryGroup.ProductGroupFieldValues.FirstOrDefault(gf => gf.ProductGroupField.SystemName.Equals("TechnicalImageLabel")).Value.ToString() : string.Empty; requestDrawingLabel = string.IsNullOrEmpty(requestDrawingLabel) ? Translate("requestDrawing", "Request Drawing") : requestDrawingLabel; technicalImageLabel = string.IsNullOrEmpty(technicalImageLabel) ? Translate("techImage", "Technical Image") : technicalImageLabel; string log3DCADDownload = (Pageview.Area.Item["Log3DCADDownload"] ?? "").ToString(); log3DCADDownload = !String.IsNullOrWhiteSpace(log3DCADDownload) ? Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(log3DCADDownload) : "/"; <div id="tabDownloads"> @if(!string.IsNullOrEmpty(schematic)) { var icon = GetIcon(schematic); <ul> <li> <a class="downloadFile" href="@schematic" target="_blank"> <i class="fa @icon"></i> @Translate("schematic","Schematic URL") </a> <li> </ul> } @if(!string.IsNullOrEmpty(techImage)) { var icon = GetIcon(techImage); string techImageURL = techImage.Contains('/') ? String.Format("{0}/{1}", techImage.Substring(0, techImage.LastIndexOf('/')), HttpContext.Current.Server.UrlEncode(techImage.Substring(techImage.LastIndexOf('/') + 1, (techImage.Length - techImage.LastIndexOf('/') - 1)))) : HttpContext.Current.Server.UrlEncode(techImage); techImageURL = techImageURL.Replace("+", "%20"); <ul> <li> <a class="downloadFile" href="@techImageURL" target="_blank"> <i class="fa @icon"></i> @technicalImageLabel </a> <li> </ul> } @if (string.IsNullOrEmpty(techImage) || GetBoolean("Ecom:Product:Field.HasCad.Value")) { <ul> @if (string.IsNullOrEmpty(techImage)) { <li> <a class="downloadFile" href="@requestDrawing?prodID=@GetString("Ecom:Product.ID")"><i class="fa fa-envelope-o"></i> @requestDrawingLabel</a> </li> } @if (GetBoolean("Ecom:Product:Field.HasCad.Value")) { <li> @if (!bol_userLogged) { <a class="downloadFile" href="javascript:void(0)" data-toggle="modal" data-target="#myModal"><i class="fa fa-download"></i> @Translate("downloadCAD", "Download CAD")</a> <div id="myModal" class="modal fade" role="dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">@Translate("login", "Login")</h4> </div> <div class="modal-body"> @{ bool bol_userLogged2 = Pageview.User.LoggedIn; var areaItem = Pageview.Area.Item; string friendlyURL = "Default.aspx?ID=" + Pageview.Page.ID.ToString(); string recoverPasswordPageID = (areaItem["RecoverPassword"] ?? Pageview.Page.ID).ToString(); if(System.Web.HttpContext.Current.Request["productid"] != null) { friendlyURL += "&productid=" + System.Web.HttpContext.Current.Request["productid"].ToString(); } friendlyURL = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(friendlyURL); } @if(!bol_userLogged2) { <form id="ExtUserForm" class="col-xs-12 DMForms userRelatedForms" action="/" method="post"> <input type="hidden" name="redirect" value="@friendlyURL"> <input type="hidden" name="ID" value="@(GetGlobalValue("Global:Page.ID"))"> <fieldset class="mandatory TextInput"> <label for="Username">@Translate("usernameEmail","Username / Email")</label> <input type="email" id="Username" name="username" value="" tabindex="1"> </fieldset> <fieldset class="mandatory TextInput"> <label for="Password">@Translate("password","Password")</label> <input type="password" id="Password" name="password" value="" tabindex="2"> </fieldset> <div class="col-xs-12 noPadding"> <input class="generalButton" name="LoginAction" type="submit" value='@Translate("Login", "Login")'> </div> <div class="forgotButtons col-xs-12 noPadding"> <a id="forgotPassword" href="/Default.aspx?id=@(recoverPasswordPageID)&amp;LoginAction=Recovery">@Translate("forgotYourPassword","Forgot your password?")</a> </div> <div id="dontHaveAnAccount" class="col-xs-12 noPadding"> <div> @Translate("dontHaveAnAccount","Don't have an account?") <a class="underline" href="@areaItem["CreateAccount"]">@Translate("createAccount", "Create account")</a> </div> </div> </form> } @SnippetStart("jsOnLoad") onLoadLoginForm(); @SnippetEnd("jsOnLoad") </div> <div class="modal-footer footerModalLogin"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div> } else { @* string partNumber = prodName.Replace(" ", ":").Replace("/", "_").Replace("#", "_").Replace(".", "_"); <div id="cds-cad-container" class="cadDownload" data-partNumber="@partNumber" data-logPage="@log3DCADDownload"> <button id="cds-cad-view-button">@Translate("ViewCad", "View 3D CAD")</button> <button id="cds-cad-download-button">@Translate("downloadCad", "Download 3D CAD")</button> <select id="cds-cad-download-formats"></select><br> </div>*@ <div id="cds-cad-container"> <button id="cds-cad-view-button">View 3D CAD</button> <button id="cds-cad-download-button">Download 3D CAD</button> <select id="cds-cad-download-formats"></select><br> </div> } </li> } </ul> } <ul> @if (!GetBoolean("Ecom:Product:Field.HasCad.Value")) { <li> <a class="downloadFile" href="@request3DCAD?prodID=@GetString("Ecom:Product.ID")"><i class="fa fa-envelope-o"></i> @Translate("request3Dcad", "Request 3D CAD")</a> </li> } </ul> @RenderItemList(new { ItemType = "ProductVideosAndDownloads", ListSourceType = "Page", ListSourcePage = productDownloads, ItemFieldsList = "*", ListTemplate = "ItemPublisher/List/ProductDownloadsAndVideos.cshtml", ListPageSize = 10, IncludeParagraphItems = true, Filter = str_downloadsAndVideosFilter }) </div> <div class="hide" id="tabVideos"> @RenderItemList(new { ItemType = "ProductVideosAndDownloads", ListSourceType = "Page", ListSourcePage = productVideos, ItemFieldsList = "*", ListTemplate = "ItemPublisher/List/ProductDownloadsAndVideos.cshtml", ListPageSize = 10, IncludeParagraphItems = true, Filter = str_downloadsAndVideosFilter }) </div> if (GetString("Ecom:Product.Type") == "2") { <div class="hide" id="tabAlsoFits"> @RenderItemList(new { ItemType = "Fitments", ListSourceType = "Area", ListSourceArea = 2, ItemFields = "*", ItemFieldsList = "Fits", ListTemplate = "ItemPublisher/List/Fitments.cshtml", ListPageSize = 25, Filter = str_fitmentsFilter }) </div> } } @helper RenderKitComponents() { <div class="hide" id="tabKitComponents"> <h2 class="hide">@Translate("kitComponents", "Kit Components")</h2> <ul class="col-xs-12 noPadding"> @foreach (LoopItem comp in GetLoop("BOMProductItems")) { string str_bomPatternImage = "/Files/Files/BocaBearing/Products/Images/" + comp.GetString("Ecom:Product.Number") + ".jpg"; string str_bomImage = !string.IsNullOrEmpty(comp.GetString("Ecom:Product.ImageSmall.Default.Clean")) ? comp.GetString("Ecom:Product.ImageSmall.Default.Clean") : !string.IsNullOrEmpty(comp.GetString("Ecom:Product.ImageMedium.Default.Clean")) ? comp.GetString("Ecom:Product.ImageMedium.Default.Clean") : !string.IsNullOrEmpty(comp.GetString("Ecom:Product.ImageLarge.Default.Clean")) ? comp.GetString("Ecom:Product.ImageLarge.Default.Clean") : str_bomPatternImage; str_bomImage = str_bomImage.Replace("/Files/files/files/", "/Files/files/"); string str_bomImg = GetImage(str_bomImage, 0, 180, 0, 0, 0, 0, "jpg", 90, 5); string str_prodName = comp.GetString("Ecom:Product.Name"); string str_dimensionsType = comp.GetString("Ecom:Product:Field.DimensionType.Value"); string str_dimensionsID = comp.GetString("Ecom:Product:Field.ID.Value.Raw"); string str_dimensionsOD = comp.GetString("Ecom:Product:Field.OD.Value.Raw"); string str_dimensionsWidth = comp.GetString("Ecom:Product:Field.Width.Value.Raw"); string str_quantity = comp.GetString("Ecom:Product.Item.Quantity"); string str_link = String.Format("/Default.aspx?ID={0}&amp;productid={1}", (Pageview.Area.Item["ProductDetail"] ?? Pageview.Page.ID).ToString(), comp.GetString("Ecom:Product.ID")); <li class="col-xs-12 noPadding"> <figure class="col-sm-1 col-xs-12 noPadding"> <a href="@str_link"> <img class="img-responsive" src="@str_bomImg" alt="@str_prodName" title="@str_prodName"/> </a> </figure> <dl class="col-sm-9 col-xs-12"> <dt class="col-xs-3">@Translate("bearingAndBall", "Bearing & Ball Type")</dt> <dd class="col-xs-9"> <h3> <a class="underline" href="@str_link"> @str_prodName </a> </h3> </dd> <dt class="col-xs-3">@Translate("dimensions", "Dimensions")</dt> <dd class="col-xs-9 bold"> @if (str_dimensionsType != "" && str_dimensionsID != "" && str_dimensionsOD != "" && str_dimensionsWidth != "") { @(str_dimensionsID + " x " + @str_dimensionsOD + " x " + @str_dimensionsWidth + " " + @str_dimensionsType) } else { @:--- } </dd> <dt class="col-xs-3">@Translate("quantity", "Quantity")</dt> <dd class="col-xs-9 bold"> @(str_quantity != "" ? str_quantity : "---") </dd> </dl> <div class="col-sm-2 col-xs-12"> <a href="@str_link" class="btn-softBlue pull-right"> @Translate("more", "More") <i class="fa fa-angle-double-right"></i> </a> </div> </li> } </ul> </div> } @helper CreateTabs(List<LoopItem> bomLoop,string schematic,string techImage,bool isCad) { <ul id="productTabs" class="col-xs-12 noPadding hide"> @if (!bomLoop.Any()) { <li data-id="productSpecifications" class="productSpecifications">@Translate("productSpecifications", "Product Specifications")</li> } else { <li data-id="tabKitComponents" class="tabKitComponents">@Translate("kitComponents", "Kit Components")</li> } @if (GetString("Ecom:Product.Type") == "2") { <li data-id="tabAlsoFits" class="tabAlsoFits">@Translate("alsoFits", "Also Fits")</li> } @if(!string.IsNullOrEmpty(schematic) || !string.IsNullOrEmpty(techImage) || isCad || !GetString("Ecom:Product.PrimaryGroupID").Equals("L3CATALOGS-Catalogs")) { <li data-id="tabDownloads" class="tabDownloads">@Translate("downloads", "Downloads")</li> } <li data-id="tabVideos" class="tabVideos">@Translate("videos", "Videos")</li> </ul> } @helper AddWishList(string retail, bool isFavorite,string techImage,string groupID,string favoriteUrl, bool bol_userLogged) { string wishListClass = (!bol_userLogged) ? "wishlistContainer hide" : "wishlistContainer"; <div class="col-xs-12 noPadding @wishListClass"> <a rel="nofollow" class="btn-red pull-left" id="favorite" data-favorite="@isFavorite" data-user="@Pageview.User.LoggedIn" data-addText='@Translate("addToFavorites", "Add to Wishlist")' data-removeText='@Translate("removeFromWishlist", "Remove from Wishlist")' href="@favoriteUrl">@Translate(isFavorite ? "Remove from wish list" : "Add to wish list")<i class="fa fa-heart"></i></a> @* @if (groupID.ToString() != retail) { <a rel="nofollow" class="btn-red pull-left" id="favorite" data-favorite="@isFavorite" data-user="@Pageview.User.LoggedIn" data-addText='@Translate("addToFavorites", "Add to Wishlist")' data-removeText='@Translate("removeFromWishlist", "Remove from Wishlist")' href="@favoriteUrl">@Translate(isFavorite ? "Remove from wish list" : "Add to wish list")<i class="fa fa-heart"></i></a> } else { <a rel="nofollow" class="btn-red pull-left" id="favorite" data-favorite="@isFavorite" data-user="@Pageview.User.LoggedIn" data-addText='@Translate("addToFavoritesRetail", "Add to Purchase List")' data-removeText='@Translate("removeFromPurchaseList", "Remove from Purchase List")' href="@favoriteUrl">@Translate(isFavorite ? "Remove from Purchase List" : "Add to Purchase List")<i class="fa fa-heart"></i></a> } *@ @if(GetString("Ecom:Product.PrimaryGroupID").Equals("L3CATALOGS-Catalogs") && !String.IsNullOrEmpty(techImage)) { var icon = GetIcon(techImage); <a class="btn-red pull-left" href="@techImage" target="_blank"> @Translate("downloadCatalog", "Download Catalog") <i class="fa @icon"></i></a> } </div> } @helper RenderRatingReview() { string str_starClass = "",str_halfStar = ""; <ul class="rating"> @for (int s = 5; s > 0; s--) { if (s == Math.Ceiling(GetDouble("Comments.Rating"))) { str_starClass = "class='star'"; str_halfStar = !(GetDouble("Comments.Rating") - Math.Round(GetDouble("Comments.Rating")) == 0) ? "fa-star-half-o" : "fa-star"; } else { str_starClass = ""; str_halfStar = "fa-star"; } <li data-star="@s" @str_starClass><i class="fa @str_halfStar"></i></li> } </ul> <a id="totalReviews" rel="nofollow" href="javascript:void(0)">@GetDouble("Comments.TotalCount") @Translate("reviews", "Reviews")</a> } @helper OrderNow(string currentPage,string productID,string variantID,List<LoopItem> productPrices,string groupID,string inquireLink) { string str_discountPrice = GetString("Ecom:Product.Price.Price"); string str_productPrice = GetString("Ecom:Product.DBPrice"); string str_myCart = (Pageview.Area.Item["MyCart"] ?? "").ToString(); string str_myMiniCart = (Pageview.Area.Item["MiniCart"] ?? "").ToString(); int num_stock = Convert.ToInt32(Dynamicweb.eCommerce.Products.Product.GetProductByID(productID).Stock); //GetInteger("Ecom:Product.Stock") List<LoopItem> lst_quantityPrices = productPrices.Where(x => x.GetString("Ecom:Product.Prices.GroupID") == groupID && x.GetInteger("Ecom:Product.Prices.Quantity") < 100).OrderByDescending(p => p.GetInteger("Ecom:Product.Prices.Quantity")).ToList(); <div class="order-now"> <form name="addToCart" class="add-to-cart form-fields" action2='@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl("/Default.aspx?ID=" + str_myCart)' method="post" action="/@str_myMiniCart"> <input type="hidden" name="cartcmd" value="add" /> <input type="hidden" name="productID" value="@productID" /> <input type="hidden" name="variantID" id="variantID" value="@variantID" @((String.IsNullOrEmpty(variantID)) ? "disabled='disabled'" : "") /> @*<input type="hidden" name="redirect" value="false" />*@ @if(!Pageview.Device.ToString().Equals("Desktop") && !String.IsNullOrWhiteSpace(str_myCart)){ str_myMiniCart = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(str_myMiniCart); <input type="hidden" name="redirect" value="@str_myCart" /> } <div class="row"> <div class="col-md-6 col-xs-12 "> <div class="product-price"> @if (Convert.ToDouble(str_discountPrice) < Convert.ToDouble(str_productPrice)) { <dt> @Translate("listPrice", "List Price:") </dt> <dd class="list-price"> @GetString("Ecom:Product.Currency.Symbol")@str_productPrice </dd> } <dt> @Translate("priceDetail", "Price:") </dt> <dd itemprop="offers" itemscope itemtype="///schema.org/Offer"> <meta itemprop="price" content="@GetString("Ecom:Product.Price.Price")"> <meta itemprop="priceCurrency" content="@GetString("Ecom:Product.CurrencyCode")"> @GetString("Ecom:Product.Currency.Symbol")@str_discountPrice </dd> @if (lst_quantityPrices.Any()) { <a class="viewPrices" href="#">@Translate("viewPrices", "View quantity discounts")</a> } </div> </div> <div class="col-xs-12"> <div class="col-xs-12 priceContainer"> <div class="highlight-content text-right"> @if (num_stock > 0) { <div class="quantity-container pull-left"> @Translate("quantity", "Quantity") <input class="quantity" name="Quantity" type="number" value="1" maxlength="4" min="1" /> <small class="clearBoth displayBlock noPadding-xs text-left">@Translate("qtyInStock", "qty in stock"): @num_stock</small> </div> <a rel="nofollow" class='btn-blue generalButton btn-action pull-left' id="addToCartSubmit"> @Translate("addToCart", "Add to Cart") <i class="fa fa-shopping-cart"></i> </a> } else { <a rel="nofollow" class='btn-blue generalButton btn-action pull-left' href='@inquireLink'> @Translate("availability", "Inquire About Availability") </a> } </div> </div> </div> </div> </form> </div> } @functions { public static string StripHtml(string source) { return Regex.Replace(source, "<.*?>", string.Empty); } public string GetGroupsStructure() { List<string[]> groups = new List<string[]>(); Dynamicweb.eCommerce.Products.Group primaryGroup = Dynamicweb.eCommerce.Products.Group.GetGroupByID(GetString("Ecom:Product.PrimaryOrFirstGroupID"), GetString("Ecom:Product.LanguageID")); groups.Add(new string[] {primaryGroup.Name, Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(String.Format("Default.aspx?ID={0}&GroupID={1}", Pageview.Page.ID, primaryGroup.ID))}); GetGroupsStructureItem(primaryGroup, ref groups); groups.Reverse(); return new JavaScriptSerializer().Serialize(groups); } public void GetGroupsStructureItem(Dynamicweb.eCommerce.Products.Group currentGroup, ref List<string[]> groups) { foreach (var g in currentGroup.ParentGroups) { groups.Add(new string[] { g.Name, Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(String.Format("Default.aspx?ID={0}&GroupID={1}", Pageview.Page.ID, g.ID)) }); GetGroupsStructureItem(g, ref groups); } } public static string GetFirstUserGroupID(object[] userGroups, List<string> productPricesGroups) { string userFirstGroup = ""; foreach (var userGroup in userGroups) { if (productPricesGroups.Contains(userGroup.ToString())) { userFirstGroup = userGroup.ToString(); break; } } return userFirstGroup; } public Dictionary<string, string> GetProductSpecifications() { Dictionary<string, string> result = new Dictionary<string, string>(); Dictionary<string, string> customFields = new Dictionary<string, string>(); customFields.Add(GetString("Ecom:Product:Field.BASICLOAD.Name"), GetString("Ecom:Product:Field.BASICLOAD")); customFields.Add(GetString("Ecom:Product:Field.DYNAMICLOAD.Name"), GetString("Ecom:Product:Field.DYNAMICLOAD")); customFields.Add(GetString("Ecom:Product:Field.WORKINGTEMP.Name"), GetString("Ecom:Product:Field.WORKINGTEMP")); customFields.Add(GetString("Ecom:Product:Field.RPMGREASE.Name"), GetString("Ecom:Product:Field.RPMGREASE")); customFields.Add(GetString("Ecom:Product:Field.RPMOIL.Name"), GetString("Ecom:Product:Field.RPMOIL")); customFields.Add(GetString("Ecom:Product:Field.RPM.Name"), GetString("Ecom:Product:Field.RPM")); foreach (var i in GetLoop("ProductCategories")) { foreach (var a in i.GetLoop("ProductCategoryFields").Where(s => !string.IsNullOrEmpty(s.GetString("Ecom:Product.CategoryField.Value.Clean")) && s.GetString("Ecom:Product.CategoryField.ID") != "PRODUCT_TYPE")) { string key = a.GetString("Ecom:Product.CategoryField.Label"), value = a.GetString("Ecom:Product.CategoryField.Value"); if(!result.ContainsKey(a.GetString("Ecom:Product.CategoryField.Label"))){ result.Add(key, value); } } } foreach(KeyValuePair<string, string> cf in customFields) { if(!result.ContainsKey(cf.Key)) { result.Add(cf.Key, cf.Value); } } return result;//.OrderBy(i => i.Key).ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value); } } <!-- TODO can only be solved after the URL problems Must open in the final page instead of the search page. And replace all globalvalue to pageview property --> @SnippetStart("OGMeta") <meta property="og:title" content='@str_productName' /> <meta property="og:image" content='@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@str_productGetImage' /> <meta property="og:site_name" content='@GetGlobalValue("Global:Area.Name")' /> <meta property="og:url" content='@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@GetGlobalValue("Global:Pageview.Url")' /> <meta property="og:description" content='@Dynamicweb.Base.TeaserString(StripHtml(str_metaDescription), 155, "...")' /> <meta property="og:type" content="article" /> <meta property="og:locale" content='@GetGlobalValue("Global:Area.LongLang").Replace("-", "_")' /> @SnippetEnd("OGMeta") @RenderSnippet("cadFiles") @SnippetStart("cadFileFinder") <script> "use strict"; // this is the CDS customer specific name, and will be provided to you // the load function must be called after the HTML page is loaded window.onload = function () { cds.setRemoteServerBaseURL("//www.product-config.net/catalog3"); cds.setDomain("bocabearings"); // this is the id of the product to get CAD for cds.CADRequester.setProduct('@GetString("Ecom:Product.ID")'); // this is the HTML element ID containing the CAD controls cds.CADRequester.setContainerElementId("cds-cad-container"); // this is the HTML element ID for the download format select element cds.CADRequester.setFormatSelectElementId("cds-cad-download-formats"); // this is the HTML element ID for the download button cds.CADRequester.setDownloadButtonElementId("cds-cad-download-button"); // this is the HTML element ID for the View 3D button cds.CADRequester.setView3DButtonElementId("cds-cad-view-button"); cds.CADRequester.load(); }; </script> @SnippetEnd("cadFileFinder") @SnippetStart("jsEndBody") <!-- Google Code for Remarketing Tag --> <script type="text/javascript"> var google_tag_params = { ecomm_prodid: '@str_productId', ecomm_pagetype: 'Product-Pages', ecomm_totalvalue: @GetString("Ecom:Product.Price.Price") }; </script> <script type="text/javascript"> /* <![CDATA[ */ var google_conversion_id = 1023402208; var google_custom_params = window.google_tag_params; var google_remarketing_only = true; /* ]]> */ </script> <script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js"> </script> <noscript> <div style="display:inline;"> <img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/1023402208/?guid=ON&amp;script=0"/> </div> </noscript> <script type="text/javascript"> var sidecar = sidecar || {}; sidecar.product_info = { group_id: '@sideCartInfo' }; </script> @SnippetEnd("jsEndBody")