Exception in template (Designs\XLEidsvoll\eCom/Product/ProductXL.cshtml): System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.SZArrayHelper.get_Item[T](Int32 index)
   at System.Linq.Enumerable.ElementAt[TSource](IEnumerable`1 source, Int32 index)
   at CompiledRazorTemplates.Dynamic.cbbdaedbbafac.Execute()
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
   at RazorEngine.Templating.TemplateService.Run(ITemplate template, DynamicViewBag viewBag)
   at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName)
   at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()
@using System.Globalization @using Dynamicweb.Security.UserManagement @using Dynamicweb.Security; @using Dynamicweb; @using System.Linq; @using System.Web; @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> @using Dynamicweb.Security.UserManagement @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> @using System.Text.RegularExpressions @using System.Web @functions{ public class WrapMethods { //Gets the contrasting color public static string getContrastYIQ(string hexcolor) { if (hexcolor != "") { hexcolor = Regex.Replace(hexcolor, "[^0-9a-zA-Z]+", ""); int r = Convert.ToByte(hexcolor.Substring(0, 2), 16); int g = Convert.ToByte(hexcolor.Substring(2, 2), 16); int b = Convert.ToByte(hexcolor.Substring(4, 2), 16); int yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000; if (yiq >= 128) { return "black"; } else { return "white"; } } else { return "black"; } } //Truncate text public static string Truncate (string value, int count, bool strip=true) { if (strip == true){ value = StripHtmlTagByCharArray(value); } if (value.Length > count) { value = value.Substring(0, count - 1) + "..."; } return value; } //Strip text from HTML public static string StripHtmlTagByCharArray(string htmlString) { char[] array = new char[htmlString.Length]; int arrayIndex = 0; bool inside = false; for (int i = 0; i < htmlString.Length; i++) { char let = htmlString[i]; if (let == '<') { inside = true; continue; } if (let == '>') { inside = false; continue; } if (!inside) { array[arrayIndex] = let; arrayIndex++; } } return new string(array, 0, arrayIndex); } //Make the correct count of columns public static string ColumnMaker(int Col, string ScreenSize) { string Columns = ""; switch (Col) { case 1: Columns = "col-"+ScreenSize+"-12"; break; case 2: Columns = "col-"+ScreenSize+"-6"; break; case 3: Columns = "col-"+ScreenSize+"-4"; break; case 4: Columns = "col-"+ScreenSize+"-3"; break; case 6: Columns = "col-"+ScreenSize+"-2"; break; default: Columns = "col-"+ScreenSize+"-3"; break; } return Columns; } private string Custom(string firstoption, string secondoption) { if (firstoption == "custom") { return secondoption; } else { return firstoption; } } } } @helper GetProductList(dynamic Loop, int ColMD = 3, int ColSM = 3, int ColXS = 1) { int Count = 0; string ColumnsMD = WrapMethods.ColumnMaker(ColMD, "md"); string ColumnsSM = WrapMethods.ColumnMaker(ColSM, "sm"); string ColumnsXS = WrapMethods.ColumnMaker(ColXS, "xs"); var user = User.get_Current(PagePermissionLevels.Frontend); bool proff = user != null && user.Groups.Any(z => z.Name.ToLower().Contains("proffer")); string pricePostFix = proff ? "ink.mva" : ""; foreach (var product in Loop) { string message = ""; string Image = product.GetString("Ecom:Product.ImageSmall.Clean"); var resizedImage = !string.IsNullOrEmpty(Image) ? Image.Replace("square", "wide") : ""; string GroupLink = product.GetString("Ecom:Product.LinkGroup.Clean"); var groupLinkRelative = string.Format("/{0}", GroupLink); string Name = product.GetString("Ecom:Product.Name"); string Id = product.GetString("Ecom:Product.ID"); string Description = product.GetString("Ecom:Product.ShortDescription.Raw"); string Discount = product.GetString("Ecom:Product.Discount.Price"); string Price = product.GetString("Ecom:Product.Price"); var productType = product.GetString("StockStatus") == "Skaffevare" ? "S" : "L"; var priceVal = product.GetDouble("Ecom:Product.Price.PriceWithVAT.Value"); var priceNoDiscount = 0.0; var priceNoDiscountFormatted = ""; var directDeliveryMinFreight = product.GetString("DirectdeliveryMinFreightFormatted"); var directDelivery = product.GetBoolean("SupplierCanDeliverToCustomer") && !string.IsNullOrEmpty(product.GetString("PriceDeliveredFromManufacturer")); //Get stock info hack... var stockinfo = product.GetString("Ecom:Product.Price.Currency.Name").Split(':'); string stockUnit = ""; double stock = 0; if(stockinfo != null && stockinfo.Length == 2) { stockUnit = stockinfo[0]; double.TryParse(stockinfo[1].Replace(",", "."), System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out stock); } var campaign = product.GetBoolean("Ecom:Product:Field.Campaign"); var salesUnit = product.GetString("Ecom:Product.DefaultUnitID"); var prices = product.GetLoop("Product.Prices"); foreach (var prc in prices) { if (prc.GetString("Ecom:Product.Prices.UnitID") == salesUnit) { priceNoDiscount = prc.GetDouble("Ecom:Product.Prices.Price"); priceNoDiscountFormatted = prc.GetString("Ecom:Product.Prices.PriceFormatted").Replace("kr","").Trim(); } } <div class="productlist @ColumnsMD @ColumnsSM @ColumnsXS"> <div class="thumbnail"> @if(campaign) { <p> <span>KAMPANJE</span> </p> } <div class="row"> <div class="col-md-12 col-sm-12 col-xs-4" style="height:120px;"> <a href="@GroupLink"> @if (String.IsNullOrEmpty(resizedImage)) { <div class="image-missing"> <i class="fa fa-camera fa-5x"></i> </div> } else { <img src="@resizedImage" alt="" class="img-responsive"> } </a> @if(product.GetBoolean("SupplierCanDeliverToCustomer") && !string.IsNullOrEmpty(product.GetString("PriceDeliveredFromManufacturer"))) { message = "Denne varen kan leveres direkte fra produsent til din byggeplass til angitt pris. "; if(!string.IsNullOrEmpty(directDeliveryMinFreight) && directDeliveryMinFreight != "kr 0,00") { message += "Minimumsfrakt på " + @directDeliveryMinFreight + " tilkommer. &lt;br/&gt;"; } else { message += "Frakt tilkommer og vil vises i handlekurven.&lt;br/&gt;&lt;br/&gt;"; } if(!string.IsNullOrEmpty(@product.GetString("DirectdeliveryTimeEstimate"))) { message += "Forventet leveringstid: " + @product.GetString("DirectdeliveryTimeEstimate"); } message += "&lt;br/&gt;&lt;br/&gt;" + @product.GetString("DirectdeliveryDescription"); <a href="#" onclick="showXlInfoDialog(event, ' Direktelevering fra produsent', 'fa fa-truck', '@message');"> <div class="directdeliveryicondiv"><i class="fa fa-truck" style="font-size:1.5em; color:grey;"></i></div> </a> } </div> <div class="col-md-12 col-sm-12 col-xs-8 btn-listadd-div"> <div class="row"> <div class="col-md-12 col-xs-12 listtextcontainer"> <h4> <a href="@GroupLink">@Name</a> </h4> <p>@Description</p> </div> <div class="col-md-12 col-xs-12"> <a href="/Default.aspx?ID=9096&search=@product.GetString("Ecom:Product:Field.Brandname")">@product.GetString("Ecom:Product:Field.Brandname")</a> </div> <div class="col-md-12 col-xs-12"> @if(productType == "S") { <i class="fa fa-truck" style="color:orange"></i><span property="availability"> Bestillingsvare</span> } else { if (stock > 0) { <i class="fa fa-check" style="color:green"></i><span property="availability"> På lager</span> } else { <i class="fa fa-times" style="color:orange"></i><span property="availability"> Ikke på lager</span> } } </div> @if(product.GetBoolean("SupplierCanDeliverToCustomer") && !string.IsNullOrEmpty(product.GetString("PriceDeliveredFromManufacturer"))) { if(product.GetDouble("PriceDeliveredFromManufacturer") == priceVal) { <div class="col-md-8 col-sm-8 col-xs-8" style="padding-right:0"> @if(priceVal > 0) { <h4>@Price<span> /@salesUnit @pricePostFix</span></h4> } </div> <div class="col-md-4 col-sm-4 col-xs-4 price-discount-base" style="margin-top:12px; text-align:right;"> @if(priceNoDiscount > priceVal) { <span>@priceNoDiscountFormatted</span> } </div> } else { <div class="col-md-12 col-sm-12 col-xs-12"> @if(priceVal > 0) { <h4 class="margin-bottom-0">@Price<span> /@salesUnit fra lager @pricePostFix</span></h4> } </div> <div class="col-md-12 col-sm-12 col-xs-12"> <h4>@product.GetString("PriceDeliveredFromManufacturerFormatted")<span> /@salesUnit @pricePostFix <a href="#" style="text-transform:inherit" onclick="showXlInfoDialog(event, ' Direktelevering fra produsent', 'fa fa-truck', '@message');">fra produsent <i class="fa fa-info-circle"></i></a></span></h4> </div> } } else { <div class="col-md-8 col-sm-8 col-xs-8" style="padding-right:0"> @if(priceVal > 0) { <h4>@Price<span> /@salesUnit @pricePostFix</span></h4> } </div> <div class="col-md-4 col-sm-4 col-xs-4 price-discount-base" style="margin-top:12px; text-align:right;"> @if(priceNoDiscount > priceVal) { <span>@priceNoDiscountFormatted</span> } </div> } </div> </div> <div class="col-md-12 hidden-xs btnaddtocartcontainer"> @if(priceVal > 0) { <button value="@Id" class="btn btn-primary btn-product-list btnaddtocart" type="button" data-directdelivery="@directDelivery" data-url="@groupLinkRelative" data-producttype="@productType"><i class="fa fa-shopping-cart" aria-hidden="true"></i> KJ&Oslash;P</button> } </div> </div> </div> </div> } } @{ string image = ""; string grouplink = ""; string productname = ""; string imagesize = "6"; string infosize = "6"; var pid = GetValue("Ecom:Product.ID"); var loggedin = GetGlobalValue("Global:Extranet.UserID") != "0"; string factor = ""; string m2Price = ""; var user = User.get_Current(PagePermissionLevels.Frontend); bool proffkunde = false; if(user != null) { proffkunde = user.Groups.Any(z => z.Name.ToLower().Contains("proffer")); } var productType = GetString("StockStatus") == "Skaffevare" ? "S" : "L"; var salesUnit = String.IsNullOrEmpty(GetString("Ecom:Group:Field.DefaultUnitOverride")) ? GetString("Ecom:Product.DefaultUnitID") : GetString("Ecom:Group:Field.DefaultUnitOverride").Trim(); //Hack to fix problem with related Group for Parkett if(GetString("Ecom:Group.ID") == "1512" && salesUnit == "M2") { salesUnit = "PAK"; } var minQty = (salesUnit == "LM" && GetDouble("Ecom:Group:Field.MinQuantityLm") != null && GetDouble("Ecom:Group:Field.MinQuantityLm") > 0) ? GetDouble("Ecom:Group:Field.MinQuantityLm") : 1; var priceUnit = GetString("Ecom:Product.DefaultUnitID"); var defaultPrice = GetLoop("Product.Prices").FirstOrDefault(z => z.GetString("Ecom:Product.Prices.UnitID") == priceUnit); var price = GetDouble("Ecom:Product.Price.PriceWithVAT.Value"); var priceFormatted = price.ToString().Replace(',','.').Replace(" ", string.Empty); string pricePostFix = proffkunde ? "ink.mva" : ""; bool directDelivery = !string.IsNullOrEmpty(GetString("PriceDeliveredFromManufacturer")) && GetBoolean("Ecom:Group:Field.DirekteleveringAktivert"); var directDeliveryPrice = GetString("PriceDeliveredFromManufacturerFormatted"); var directDeliveryMinFreight = GetString("DirectdeliveryMinFreightFormatted"); var hideaddbuttonclass = price > 0 ? "" : "hidden"; var canAddToCart = productType == "L" || (GetBoolean("CanAddToCart") && productType == "S"); var salesUnitPrice = GetLoop("Product.Prices").FirstOrDefault(z => z.GetString("Ecom:Product.Prices.UnitID") == salesUnit); var showCalc = GetString("Ecom:Product:Field.EnhetList.Value").Split(';').Any(z => z.Trim() == "M2"); //Get stock info hack... var stockinfo = GetString("Ecom:Product.Price.Currency.Name").Split(':').ToList(); string stockUnit = ""; double stock = 0; if(stockinfo != null & stockinfo.Count == 2) { stockUnit = stockinfo.First(); double.TryParse(stockinfo.Last().Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture, out stock); } if(showCalc) { var factors = GetString("Ecom:Product:Field.EnhetList.Value").Split(';').ToList(); var m2Index = factors.FindIndex(z => z.Trim() == "M2"); var salesIndex = factors.FindIndex(z => z.Trim().Equals(salesUnit.Trim(), StringComparison.CurrentCultureIgnoreCase)); var m2FactorRaw = GetString("Ecom:Product:Field.Omregningsfaktorer.Value").Split(';').ElementAt(m2Index); var m2Factor = float.Parse(m2FactorRaw, CultureInfo.GetCultureInfo("nb")); var salesFactorRaw = GetString("Ecom:Product:Field.Omregningsfaktorer.Value").Split(';').ElementAt(salesIndex); var salesFactor = float.Parse(salesFactorRaw, CultureInfo.GetCultureInfo("nb")); factor = ((float)m2Factor / (float)salesFactor).ToString().Replace(',','.'); m2Price = (float.Parse(factor, CultureInfo.InvariantCulture) * price).ToString("C"); } } <div class="col-md-12 col-sm-12 col-xs-12"> <div class="row"> <div class="col-md-10"> <h1><span property="name">@GetString("Ecom:Product.Name")</span> @GetString("Ecom:Product.SelectedVariantComboName")</h1> <span class="clearfix"></span> <div property="description" id="description"> @GetString("Ecom:Product.ShortDescription") </div> <span class="clearfix"></span> </div> <div class="col-md-2" style="text-align:right;padding-right:0"> <ul class="share-buttons list-inline" style="margin-top: 20px;"> <li><a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fxleidsvoll.no&t=" target="_blank" class="social-link facebook-link" title="Del på Facebook" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"><i class="fa fa-facebook"></i></a></li> <li><a href="mailto:?subject=&body=:%20http%3A%2F%2Fxleidsvoll.no" target="_blank" title="Del på e-post" class="social-link email-link" onclick="window.open('mailto:?subject=XL-BYGG Eidsvoll: ' + encodeURIComponent(document.title) + '&body=' + encodeURIComponent(document.URL)); return false;"><i class="fa fa-envelope"></i></a></li> </ul> </div> </div> <div class="row product"> <!--<p> <span>KAMPANJE</span> </p>--> @* The image area *@ <div class="col-md-5 col-sm-12 col-xs-12"> <div class="product-gallery"> @* Product images *@ @{ image = System.Web.HttpContext.Current.Server.UrlEncode(GetString("Ecom:Product.ImageLarge.Clean")); } <div class="primary-image"> @if (String.IsNullOrEmpty(image)) { <div class="image-missing"> <i class="fa fa-camera fa-4x"></i> </div> } else { <a href="#" data-toggle="modal" data-target=".bs-example-modal-lg" class="fancybox"> <img src="@GetString("Ecom:Product.ImageLarge.Clean")" class="img-responsive" alt="Product image"> </a> } </div> <div>&nbsp;</div> <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12 text-center"> <ul class="list-inline"> @foreach (LoopItem detail in GetLoop("Details")) { image = detail.GetString("Ecom:Product:Detail.Link"); <li> <a href="#" data-toggle="modal" data-target=".bs-example-modal-lg"> <img src="@image" class="thumbnail-responsive" alt=""> </a> </li> @*image = System.Web.HttpContext.Current.Server.UrlEncode(detail.GetString("Ecom:Product:Detail.Link")); <div class="col-md-3 col-sm-6 col-xs-6"> <div class="thumbnail-images"> <a href="@image" class="fancybox"> <img src="@detail.GetString("Ecom:Product:Detail.Link")" alt=""> </a> </div> </div>*@ } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Video.Value"))) { <li> <a href="#" class="" data-toggle="modal" data-target="#videomodal" title="Spill video" data-theVideo="@GetString("Ecom:Product:Field.Video.Value")"> <i class="fa fa-play-circle-o fa-4x"></i> </a> </li> } </ul> </div> </div> </div> </div> <div class="col-md-2">&nbsp;</div> @* The main product information area *@ <div class="col-md-5 col-sm-12 col-xs-12"> <form name="@pid" id="@pid" method="post" action="/Default.aspx"> @GetValue("Ecom:Product.Form.Clean") <div class="product-info" vocab="http://schema.org/" typeof="Product" id="productinfo"> <div property="offers" typeof="Offer"> <div class="row"> <span class="clearfix"></span> <div class="product-short-info"> @if(GetDouble("Ecom:Product.Price.PriceWithVAT.Value") > 0) { <div class="col-md-12 col-xs-12"> <p> @if(GetString("StockStatus") == "Skaffevare") { <i class="fa fa-truck" style="color:orange"></i> <span> Bestillingsvare (forventet leveringstid: @GetString("EstimatedDeliverTime"))</span> } else { <span>Lagerstatus:</span> if(stock > 0) { <span property="availability">@stock @stockUnit på lager </span><i class="fa fa-check" style="color:green"></i> } else { <span property="availability">For øyeblikket ikke på lager </span><i class="fa fa-times" style="color:orange"></i> } } </p> @if(!canAddToCart) { <div class="alert alert-warning"> <strong>OBS!</strong> Denne varen kan kun bestilles i vår butikk. Kostnader for frakt, pall og emballasje kan tilkomme. </div> } else if(GetString("StockStatus") == "Skaffevare" && !GetBoolean("Fraktfritt") && !string.IsNullOrEmpty(GetString("FreigtCost"))) { <div class="alert alert-warning"> <strong>OBS!</strong> På denne varen tilkommer frakt til lager på @GetString("FreigtCost") </div> } </div> } </div> </div> @* Prices and actions *@ <div class="row equal"> @if(GetDouble("Ecom:Product.Price.PriceWithVAT.Value") > 0) { <div class="col-md-4 col-sm-12 col-xs-12 vertical-align-bottom"> <span class="price pull-left" style="font-size: 28px !important; margin-top:4px !important" property="price"> @GetString("Ecom:Product.Price") </span> <span style="text-indent: 10px;">pr. </span> <span class="lowercase">@priceUnit @pricePostFix</span> </div> if(!string.IsNullOrEmpty(GetString("PriceDeliveredFromManufacturer"))) { var message = "Denne varen kan leveres direkte fra produsent til din byggeplass til angitt pris. "; if(!string.IsNullOrEmpty(directDeliveryMinFreight) && directDeliveryMinFreight != "kr 0,00") { message += "Minimumsfrakt på " + @directDeliveryMinFreight + " tilkommer. &lt;br/&gt;"; } else { message += "Frakt tilkommer og vil vises i handlekurven.&lt;br/&gt;&lt;br/&gt;"; } if(!string.IsNullOrEmpty(@GetString("DirectdeliveryTimeEstimate"))) { message += "Forventet leveringstid: " + @GetString("DirectdeliveryTimeEstimate"); } message += "&lt;br/&gt;&lt;br/&gt;" + @GetString("DirectdeliveryDescription"); <div class="col-md-6 col-sm-12 col-xs-12 vertical-align-bottom"> <span class="price pull-left" style="font-size: 28px !important; margin-top:4px !important" property="price"> @GetString("PriceDeliveredFromManufacturerFormatted") </span> <span style="text-indent: 10px;"><a href="#" onclick="showXlInfoDialog(event, ' Direktelevering fra produsent', 'fa fa-truck', '@message');" style="color:black;"> direkte fra produsent<i class="fa fa-info-circle"></i></a></span> </div> } else { if(salesUnitPrice != null && GetDouble("Ecom:Product.Price.PriceWithVAT.Value") < salesUnitPrice.GetDouble("Ecom:Product.Prices.Price")) { <div class="col-md-4 col-sm-12 col-xs-12 vertical-align-bottom price-discount-base"> <span class="price pull-left" style="margin-top:4px !important" property="price"> @salesUnitPrice.GetString("Ecom:Product.Prices.PriceFormatted") </span> </div> } } } </div> <input type="hidden" name="productId" class="productId" id="productId" value="@GetString("Ecom:Product.ID")" /> <input type="hidden" name="minSupplierQty" id="minSupplierQty" value="@GetString("ProductMinQty")" /> <input type="hidden" name="minSupplierQtySuccess" id="minSupplierQtySuccess" value="@GetString("ProductMinQtyOk")" /> @if(!showCalc && price > 0 && canAddToCart) { <div class="row" style="margin-top: 25px;"> <div class="col-md-12 col-xs-12 form-group"> <input type="text" pattern=".{0}|.{1,70}" maxlength="70" id="orderline-comment" class="form-control" placeholder="Kommentar til ordrelinje..."> </div> <div class="col-md-2 col-sm-2 col-xs-2"> <input type="text" min="4,5" step="any" name="Quantity" value="@minQty" data-minqty="@minQty" id="qtyToAdd" data-salesunit="@salesUnit" class="quantity" style="width:60px; text-align:center; margin-right:15px !important; height:34px;"> </div> <div class="col-md-10 col-sm-10 col-xs-10"> <button type="submit" name="submit" data-fromcalc="false" data-directdelivery="@directDelivery" class="btn-add-to-cart-details btn btn-success btn-dw-cart btn-add-to-cart @hideaddbuttonclass"><i class="fa fa-shopping-cart" aria-hidden="true"></i> Legg i handlekurv</button> @if(loggedin) { <a href="#" title="Legg i materialliste" class="btn btn-default" data-toggle="modal" data-target="#addtolistmodal"><i class="fa fa-list-alt" aria-hidden="true"></i> Materialliste</a> } @if(GetDouble("Ecom:Product.RelatedCount") > 0) { <a href="#" data-productid="@pid" id="showRelatedProducts" title="Se tilbehør" class="btn btn-default"><i class="fa fa-lightbulb-o" aria-hidden="true"></i> Se tilbehør</a> } </div> </div> <div class="row"><div class="col-md-12 col-sm-12 col-xs-12"><span id="errmsg" style="color:red;"></span></div></div> } </div> </div> </form> <!-- Show unit calc for product with M2 packages --> @if(showCalc && price > 0) { <div class="row margin-top-15"> <!--Faktor = @factor--> <div class="col-md-12 container unitCalcContainer"> <div class="col-md-12 col-xs-12"> <h3>Hvor mye trenger du?</h3> </div> <div class="col-md-4 col-xs-6"> <div class="form-group"> <div class="input-group"> <input type="text" id="qtyToAdd" name="qtyToAdd" step="any" value="0" data-minqty="@minQty" data-salesunit="@salesUnit" data-priceunit="@GetString("Ecom:Product.DefaultUnitID")" data-factor="@factor" data-mode="1" data-price="@priceFormatted" class="form-control" style="text-align:center;"> <div class="input-group-addon" id="productUnitLabel" class="productUnitLabel" name="productUnitLabel">M2</div> <!-- <label for="Quantity">M2</label>--> </div> </div> </div> <div class="col-md-4 col-xs-6"> <a class="btn btn-default btn-switch-calc-mode" href="#"> <i class="fa fa-exchange"></i> Bytt til <span id="btnSwitchModeUnitLabel">@salesUnit</span></a> </div> <div class="col-md-12 col-xs-12 form-group"> <div class="checkbox"> <input type="checkbox" name="addWastage" id="addWastage" class=""> <label for="addWastage">Legg til kapp (10%)</label> </div> </div> @if(priceUnit != "M2") { if(directDelivery) { <div class="col-md-12 col-xs-12 form-group" style="margin-bottom: 0"> <h4>@m2Price pr. M2. <span style="font-size:small">(fra lager Eidsvoll)</span> Selges i @salesUnit.</h4> </div> } else { <div class="col-md-12 col-xs-12 form-group" style="margin-bottom: 0"> <h4>@m2Price pr. M2. Selges i @salesUnit.</h4> </div> } } @{ var hidePriceClass = !string.IsNullOrEmpty(GetString("PriceDeliveredFromManufacturer")) ? "hidden" : ""; } <div class="col-md-12 col-xs-12 form-group"> <h3><span id="qty">0,00</span> <span id="qtyunit-label">M2</span> <i class="fa fa-chevron-right" aria-hidden="true"></i> <span id="total-qty">0</span> <span id="calcUnitLabel" class="calcUnitLabel">@salesUnit</span>. <span class="">Pris <span id="total-price">00,00</span></span></h3> </div> <div class="col-md-12 col-xs-12 form-group"> <input type="text" pattern=".{0}|.{1,70}" maxlength="70" id="orderline-comment" class="form-control" placeholder="Kommentar til ordrelinje..."> </div> <div class="col-md-12 col-xs-12 form-group"> @if(canAddToCart) { <input type="hidden" name="qtyForCart" class="qtyForCart" id="qtyForCart" /> <button type="submit" data-fromcalc="true" data-directdelivery="@directDelivery" name="submit" class="btn-add-to-cart-details btn btn-success btn-dw-cart btn-add-to-cart"><i class="fa fa-shopping-cart" aria-hidden="true"></i> Legg i handlekurv</button> if(loggedin) { <a href="#" title="Legg i materialliste" class="btn btn-default" data-toggle="modal" data-target="#addtolistmodal"><i class="fa fa-list-alt" aria-hidden="true"></i> Materialliste</a> } if(GetDouble("Ecom:Product.RelatedCount") > 0) { <a href="#" data-productid="@pid" id="showRelatedProducts" title="Se tilbehør" class="btn btn-default"><i class="fa fa-lightbulb-o" aria-hidden="true"></i> Se tilbehør</a> } } </div> </div> </div> } @if(minQty > 1) { <div class="row" style="margin-top:10px;"> <div class="col-md-12"> <div class="alert alert-info"> Minste bestillbare kvantum for denne varen er @minQty @salesUnit </div> </div> </div> } <div class="row"> <div style="margin-top: 15px;margin-bottom: 15px;"> @if(GetBoolean("Ecom:Product:Field.Svane.Value")) { <div class="col-md-3"> <img src="Files/Templates/Designs/XLEidsvoll/images/svane.jpg" class="img-responsive" title="Denne varen er Svanemerket" /> </div> } @if(GetBoolean("Ecom:Product:Field.Pefc.Value")) { <div class="col-md-3"> <img src="Files/Templates/Designs/XLEidsvoll/images/pefc.jpg" class="img-responsive" title="Denne varen er PEFC merket" /> </div> } @if(GetBoolean("Ecom:Product:Field.Fsc.Value")) { <div class="col-md-3"> <img src="Files/Templates/Designs/XLEidsvoll/images/fsc.jpg" class="img-responsive" title="Denne varen er FSC merket" /> </div> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Yte.Value"))) { <div class="col-md-3"> <img src="Files/Templates/Designs/XLEidsvoll/images/CE_logo.png" class="img-responsive" title="Denne varen er CE merket" /> </div> } </div> </div> @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.UnNumber.Value"))) { <div class="row" style="margin-top: 20px;margin-bottom: 15px;"> <div class="col-md-12"> <i class="fa fa-2x fa-exclamation-triangle" aria-hidden="true" style="color:red"></i> <span style="font-size:1.2em;padding:7px">Denne varen sendes ikke i posten!</span> </div> </div> } <a href="https://instore.prisjakt.no/cheapest_redirect.php?id=@pid&f=27505" target="_blank"><img src="https://instore.prisjakt.no/cheapest.php?id=@pid&f=27505" style="margin-top:20px" /></a> </div> </div> @if(!string.IsNullOrEmpty(GetString("Ecom:Product.LongDescription"))) { <div class="row margin-top-15"> <div class="col-md-12 col-sm-12 col-xs-12"> <div class="row"> <div id="descriptionContainer" class="col-md-12 col-sm-12 col-xs-12"> <p> @GetString("Ecom:Product.LongDescription") </p> </div> </div> <div class="row"><div class="col-md-12 col-sm-12 col-xs-12">&nbsp;</div></div> </div> </div> } <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12"> <ul class="nav nav-tabs"> <li class="active"> <a href="#1" data-toggle="tab">Detaljer</a> </li> <li> <a href="#2" data-toggle="tab">Dokumenter</a> </li> <!--<li> <a href="#3" data-toggle="tab">Spørsmål og svar</a> </li>--> </ul> <div class="tab-content "> <div class="tab-pane active" id="1"> <div class="row"> <div class="col-md-2 col-xs-5"> @Translate("NOBB nummer", "NOBB nummer"): </div> <div class="col-md-10 col-xs-7"> @{ var nobbUrl = String.Format("http://www.nobb.no/nobbnr/{0}", GetString("Ecom:Product.Number")); } @GetString("Ecom:Product.Number") <a href="@nobbUrl" target="_blank">Vis i NOBB <i class="fa fa-external-link" aria-hidden="true"></i></a> </div> </div> <div class="row margin-top-5"> <div class="col-md-2 col-xs-5"> @Translate("Leverandørs nummer", "Leverandørs nummer"): </div> <div class="col-md-10 col-xs-7"> @GetString("Ecom:Product:Field.LeverandorVarenummer.Value") </div> </div> <div class="row margin-top-5"> <div class="col-md-2 col-xs-5"> @Translate("Leverandør", "Leverandør"): </div> <div class="col-md-10 col-xs-7"> <a href="@GetString("Ecom:Manufacturer.Web")" target="_blank">@GetString("Ecom:Manufacturer.Name") </a> </div> </div> <div class="row margin-top-5"> <div class="col-md-2 col-xs-5"> Merke: </div> <div class="col-md-10 col-xs-7"> @GetString("Ecom:Product:Field.Brandname") </div> </div> <div class="row margin-top-5"> <div class="col-md-2 col-xs-5"> @Translate("Vekt", "Vekt"): </div> <div class="col-md-10 col-xs-7"> @if(GetString("Ecom:Product.Weight") != "0") { @GetString("Ecom:Product.Weight") <span> kg</span> } </div> </div> <div class="row margin-top-5"> <div class="col-md-2 col-xs-5"> @Translate("Volum", "Volum"): </div> <div class="col-md-10 col-xs-7"> @if(GetString("Ecom:Product.Volume") != "0") { @GetString("Ecom:Product.Volume") <span> m3</span> } </div> </div> </div> <div class="tab-pane" id="2"> <ul class="document-list"> @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Bro.Value"))) { <li> @*Fdv*@ <a href="@GetString("Ecom:Product:Field.Bro.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Bro.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Fdv.Value"))) { <li> @*Fdv*@ <a href="@GetString("Ecom:Product:Field.Fdv.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Fdv.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Man.Value"))) { <li> @*Montering*@ <a href="@GetString("Ecom:Product:Field.Man.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Man.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Sds.Value"))) { <li> @*Sikkerhetsdatablad*@ <a href="@GetString("Ecom:Product:Field.Sds.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Sds.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Clp.Value"))) { <li> @*Clp Etikett*@ <a href="@GetString("Ecom:Product:Field.Clp.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Clp.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Pre.Value"))) { <li> @*Produktdatablad*@ <a href="@GetString("Ecom:Product:Field.Pre.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Pre.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Yte.Value"))) { <li> @*Ytelseserklæring*@ <a href="@GetString("Ecom:Product:Field.Yte.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Yte.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Tekg.Value"))) { <li> @*Ytelseserklæring*@ <a href="@GetString("Ecom:Product:Field.Tekg.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Tekg.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Ser.Value"))) { <li> @*Sertifikat*@ <a href="@GetString("Ecom:Product:Field.Ser.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Ser.Name")</a> </li> } @if (!String.IsNullOrEmpty(GetString("Ecom:Product:Field.Breeam.Value"))) { <li> @*Breeam*@ <a href="@GetString("Ecom:Product:Field.Breeam.Value")" target="_blank"><i class="fa fa-file-pdf-o"></i> @GetString("Ecom:Product:Field.Breeam.Name")</a> </li> } </ul> </div> <div class="tab-pane" id="3"> <div class="row"> <div class="col-md-12"> <a class="btn btn-primary" href="#" data-toggle="modal" data-target="#askquestiondialog">Skriv et spørsmål</a> </div> </div> <div class="row"> &nbsp; </div> <div class="row"> &nbsp; </div> <div class="row"> @if(!GetLoop("Comments").Any()) { <h4>Det finnes ingen spørsmål enda.</h4> } @foreach (var comment in GetLoop("Comments")) { <div class="row margin-top-15"> <div class="col-md-12"> <div class="col-md-1"> @if(comment.GetString("Email").ToLower().Contains("@xleidsvoll")) { <img src="files/templates/designs/xleidsvoll/images/fav.png" style="width: 40px; height:auto" alt="" > } else { <i class="fa fa-user fa-2x"></i> } </div> <div class="col-md-5"> <p>@comment.GetString("Text")</p> </div> <div class="col-md-6"> </div> </div> </div> } </div> </div> </div> </div> </div> <div class="row">&nbsp;</div> <div class="row" id="freightresult"> </div> <div class="row">&nbsp;</div> <!-- RELATED PRODUCTS --> @if (GetString("Ecom:Product.RelatedCount") != "0") { <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12"> <h3 class="section-title" style="display:inline">@Translate("Related products", "Aktuelt tilbehør")</h3> <hr /> </div> </div> foreach (LoopItem relatedgroup in GetLoop("ProductRelatedGroups")) { <div class="row"> @{ var relatedproductloop = relatedgroup.GetLoop("RelatedProducts").OrderByDescending(g => g.GetString("Ecom:Product.LoopCounter")).Take(8).ToList(); } @GetProductList(relatedproductloop, 4, 4, 1) </div> <div class="row">&nbsp;</div> } } @if (GetInteger("ProductsFromSameModule.Count") > 0) { <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12"> <h3 class="section-title">@Translate("Other great products in the same category", "Andre varer fra samme gruppe")</h3> <hr /> </div> </div> <div class="row"> @{ var productsFromSameModule = GetLoop("ProductsFromSameModule").OrderBy(g => g.GetDouble("Ecom:Product.Price.Price")).Take(4).ToList(); } @GetProductList(productsFromSameModule, 4, 4, 1) </div> } @if (GetInteger("XlCustomerAlsoBought.Count") > 0) { <div class="row"> <div class="col-md-12 col-sm-12 col-xs-12"> <h3 class="section-title">@Translate("Other great products in the same category", "Andre kunder kjøpte også")</h3> <hr /> </div> </div> <div class="row"> @{ var products = GetLoop("XlCustomerAlsoBought").Take(4).ToList(); } @GetProductList(products, 4, 4, 1) </div> } <br /><br /> </div> </div> <div class="modal fade" id="videomodal" tabindex="-1" role="dialog" aria-labelledby="videoModal" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <div> <iframe width="100%" height="350" src=""></iframe> </div> </div> </div> </div> </div> @if(GetLoop("Details").Any()) { <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div id="carousel-example-generic" class="carousel slide" data-ride="carousel"> <!-- Wrapper for slides --> <div class="carousel-inner"> @{ int i = 0; } @foreach (LoopItem detail in GetLoop("Details")) { image = detail.GetString("Ecom:Product:Detail.Link"); var classes = String.Format("item{0}", i == 0 ? " active" : ""); <div class="@classes"> <img class="img-responsive" src="@image" alt="..."> <div class="carousel-caption"> </div> </div> i++; } @{ image = GetString("Ecom:Product.ImageLarge.Clean"); } <div class="item"> <img class="img-responsive" src="@image" alt="..."> <div class="carousel-caption"> </div> </div> </div> <!-- Controls --> <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left"></span> </a> <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right"></span> </a> </div> </div> </div> </div> } <!-- Direct delivery modal --> <div class="modal fade" id="directdeliverymodal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <div class="row"> <div class="col-md-10"> <h3 class="modal-title" id="myModalLabel"><i class="fa fa-truck"></i> Velg levering</h3> </div> <div class="col-md-2" style="text-align:right;"> <span aria-hidden="true" data-dismiss="modal" class="closeModal"><i class="fa fa-times"></i></span> </div> </div> </div> <div class="modal-body"> <div id="deliverystep1"> <p>Denne varen kan leveres direkte fra leverandør til din byggeplass.</p> <div class="row"> <div class="col-xs-12"> <input type="hidden" id="deliveryzip" value="@GetString("DeliveryZip")"> <div class="radio"> <label><input type="radio" name="deliveryoption" value="stock" checked>Fra lager Eidsvoll. Pris: @GetString("Ecom:Product.Price") /@priceUnit</label> <div class="deliveryoptiondesc">Levering fra lager Eidsvoll fra kr 450,- (Øvre Romerike)</div> </div> <div class="radio"> <label><input type="radio" name="deliveryoption" value="direct">Direkte fra produsent. Pris: @directDeliveryPrice /@priceUnit</label> <div class="deliveryoptiondesc">Levering direkte fra produsent til byggeplass. Minimumsfrakt på @GetString("DirectdeliveryMinFreightFormatted") tilkommer. <br/> Forventet leveringstid: @GetString("DirectdeliveryTimeEstimate")<br/><br/>@GetString("DirectdeliveryDescription")</div> </div> <div class="directQtyMessageContainer"></div> </div> </div> </div> <div id="deliverystep2" style="display:none;"> <p>Oppgi postnummer for levering:</p> <div class="row"> <div class="col-xs-12"> <input type="number" class="delivery-wizard" id="EcomOrderCustomerZip" name="EcomOrderCustomerZip" style="height:33px; padding:5px;" placeholder=" Postnummer" name="" value=""> <span id="directdelivery-wizard-postalarea"></span> </div> <div class="col-xs-12 margin-top-15" id="deliverystatuscontainer"> </div> </div> </div> </div> <div class="modal-footer"> <button type="submit" id="btn-confirm-delivery" data-action="addtocart" class="btn btn-primary">Legg i handlekurv</button> </div> </form> </div> </div> </div> <!-- Add to list modal--> <div class="modal fade" id="addtolistmodal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> <div class="row"> <div class="col-md-10"> <h3 class="modal-title" id="myModalLabel"><i class="fa fa-list-alt" aria-hidden="true"></i> Legg i materialliste</h3> </div> <div class="col-md-2" style="text-align:right;"> <span aria-hidden="true" data-dismiss="modal" class="closeModal"><i class="fa fa-times"></i></span> </div> </div> </div> <div class="modal-body"> @foreach(var t in GetLoop("CustomerCenter.ListTypes")) { <select class="form-control" id="listselector"> @foreach(var l in t.GetLoop("CustomerCenter.ProductLists")) { var qscoll = HttpUtility.ParseQueryString(l.GetString("Ecom:Product.AddToThisListAction")); var listid = qscoll["CCAddToListID"]; <option value="@l.GetString("Ecom:CustomerCenter.List.Name")" data-listid="@listid" data-action="@l.GetString("Ecom:Product.AddToThisListAction")">@l.GetString("Ecom:CustomerCenter.List.Name")</option> } </select> } </div> <div class="modal-footer"> <div class="pull-left"> <a class="btn btn-primary" href="#createListDialog" data-toggle="modal" data-dismiss="modal" ><i class="fa fa-plus" aria-hidden="true"></i> Lag ny liste</a> </div> <div class="pull-right"> <button type="submit" class="btn btn-primary" id="btnaddtolist">Legg til</button> </div> </div> </div> </div> </div> <script> //Hack to remove inline styles from ProductDescr set by DW editor $(document).ready(function () { $("#descriptionContainer span").removeAttr("style"); }); autoPlayYouTubeModal(); function autoPlayYouTubeModal() { var trigger = $("body").find('[data-toggle="modal"]'); trigger.click(function () { var theModal = $(this).data("target"), videoSRC = $(this).attr("data-theVideo"), videoSRCauto = videoSRC + "?autoplay=1"; $(theModal + ' iframe').attr('src', videoSRCauto); $(theModal + ' button.close').click(function () { $(theModal + ' iframe').attr('src', videoSRC); }); $('.modal').click(function () { $(theModal + ' iframe').attr('src', videoSRC); }); }); } $("#maincontent").on("click", "#btnaddtolist", function(event) { event.preventDefault(); var btntext = $(event.target).html(); $(event.target).html("<i class=\"fa fa-spinner fa-spin\"></i>"); $(event.target).addClass('faded'); var url = $("#listselector option:selected").data("action"); var listid = $("#listselector option:selected").data("listid"); var qty = $('#qtyForCart').val() if(!qty) qty = $('#qtyToAdd').val() $.ajax({ type: 'GET', url: url, success: function (response) { if(qty > 1) { UpdateListQty(qty, listid); } }, error: function () { alert("En feil oppstod."); }, complete: function() { $(event.target).html(btntext); $(event.target).removeClass('faded'); $('#addtolistmodal').modal('hide'); $('body').removeClass('modal-open'); $('.modal-backdrop').remove(); } }); }); function UpdateListQty(qty, listid) { var productid = $("#productId").val(); var url = "/materiallister?ProductID=" + productid + "&CC11357=UpdateProductQuantity&Quantity=" + qty + "&CCVariantID=&CCLanguageID=LANG7&ListID=" + listid; $.ajax({ type: 'GET', url: url, success: function (response) { }, error: function () { alert("En feil oppstod."); }, complete: function() { } }); } $("#btn-calc-supplierfreight").on("click", function(event) { var zip = $(this).data("destinationzip"); var supplier = $(this).data("supplier"); var qty = $("#qtyForCart").val(); var volume = parseFloat($(this).data("volume").replace(",",".")) * parseFloat($("#qtyForCart").val().replace(",", ".")); $.ajax({ type: 'GET', url: '/Default.aspx?ID=10188', data: {to: zip, supplier: supplier, volume: volume}, success: function (response) { $("#freightresult").text(response.price) }, error: function (xhr, status, thrown) { var debug = ""; }, complete: function() { } }); }); $(".btn-add-to-cart-details").on("click", function(event) { event.preventDefault(); var minSupplierQty = $("#minSupplierQty").val(); var minSupplierOk = $("#minSupplierQtySuccess").val(); var qty = $('#qtyForCart').val(); if(!qty) qty = $('#qtyToAdd').val() if($.isNumeric(minSupplierQty) && minSupplierOk === "True" && qty % minSupplierQty != 0) { console.log("Invalid qty. Must be at least" + minSupplierQty); showXlInfoDialog(event, "Ugyldig antall", "", "Vennligst velg et antall som går opp med " + minSupplierQty + "."); //alert("Ugyldig antall. Vennligst velg et antall som går opp i " + minSupplierQty + "."); return false; } var directDelivery = $(this).data("directdelivery"); var comment = $("#orderline-comment").val(); if(directDelivery == "True") { //$("#btn-confirm-delivery").html("Legg i handlekurv"); $(".directQtyMessageContainer").html(''); $("#directdeliverymodal").modal(); } else { // Add to cart var fromCalc = $(this).data("fromcalc"); if(fromCalc === true) AddToCart(event, $('#productId').val(), $('#qtyForCart').val(), '@salesUnit', '@stock', '@productType', '@proffkunde', 'False', comment, true); else AddToCart(event, $('#productId').val(), $('#qtyToAdd').val().replace(',', '.'), '@salesUnit', '@stock', '@productType', '@proffkunde', 'False', comment, true); setTimeout(function(){ $("#orderline-comment").val(""); }, 2000); } }); $("#btn-confirm-delivery").on("click", function(event) { var action = $(this).data("action"); var direct = "False"; var supplier = '@GetString("Ecom:Manufacturer.ID")'; var pid = $('#productId').val() var qty = $('#qtyForCart').val(); if(!qty) qty = $('#qtyToAdd').val(); if($("input[name='deliveryoption']:checked").val() == "direct") direct = "True"; var btntext = $("#btn-confirm-delivery").html(); $("#btn-confirm-delivery").html("<i class=\"fa fa-spinner fa-spin\"></i>"); // Validate qty validateQty(supplier, pid, '@salesUnit', qty).done(function(response) { console.log('Validate:' + response.message); if(response.success) { if(action == "showzipform") { $("#deliverystep1").fadeOut(800, function() { $("#btn-confirm-delivery").html("Legg i handlekurv"); $("#deliverystep2").show(); }); $("#btn-confirm-delivery").data("action", "addtocart"); } else { //Add to cart var selectedDelivery = $("input[type='radio'][name='deliveryoption']:checked").val(); if(direct == "False") { AddToCart(event, pid, qty, '@salesUnit', '@stock', '@productType', '@proffkunde', direct, '', true); setTimeout(function(){ $('#directdeliverymodal').modal('toggle'); //$('body').removeClass('modal-open'); //$('.modal-backdrop').remove(); $("#btn-confirm-delivery").html(btntext); }, 2000); } else { var zip = $("#EcomOrderCustomerZip").val(); if(!zip) zip = $("#deliveryzip").val(); if(!zip) { $("#deliverystatuscontainer").html("<div class='alert alert-danger'>Oppgi postnummer!</div>"); $("#btn-confirm-delivery").html(btntext); return; } canDeliver(supplier, zip).done(function(response) { if(response.result === true) { //Set customers destinatiopn zip in session $.ajax({ type: 'GET', url: '/setdestinationzip', data: {zip: zip}, success: function (response) { AddToCart(event, $('#productId').val(), qty, '@salesUnit', '@stock', '@productType', '@proffkunde', direct, '', true); setTimeout(function(){ $('#directdeliverymodal').modal('toggle'); //$('#directdeliverymodal').modal('hide'); //$('body').removeClass('modal-open'); //$('.modal-backdrop').remove(); $("#btn-confirm-delivery").html(btntext); }, 2000); } }); } else { $("#deliverystatuscontainer").html("<div class='alert alert-danger'>Vi kan dessverre ikke levere til dette postnummeret.</div>"); $("#btn-confirm-delivery").html(btntext); return; } }); } } } else { console.log('Not valid'); $("#btn-confirm-delivery").html(btntext); $(".directQtyMessageContainer").html("<div class='alert alert-warning' role='alert'>" + response.message + "</div>"); } }); }); $("input[name='deliveryoption']").on("change", function(event) { if($(this).val() == "direct" && !$("#deliveryzip").val()) { $("#btn-confirm-delivery").html("Neste <i class='fa fa-angle-right'></i>"); $("#btn-confirm-delivery").data("action", "showzipform"); } else { $("#btn-confirm-delivery").html("Legg i handlekurv"); $("#btn-confirm-delivery").data("action", "addtocart"); } }); function canDeliver(supplier, zip) { return $.ajax({ url: '/json-direktevalidering', data: { supplier: supplier, zip: zip }, type: 'GET', dataType: 'json', success: function (response) { var debug = ""; }, error: function (xhr, status, thrown) { var debug = ""; }, complete: function() { } }); } function validateQty(supplier, productid, unit, qty) { return $.ajax({ url: '/validatequantity', data: { supplier: supplier, pid: productid, unit: unit, qty: qty }, type: 'GET', dataType: 'json', success: function (response) { console.log(response) }, error: function (xhr, status, thrown) { }, complete: function() { } }); } $("#directdeliverymodal .delivery-wizard").on("keyup", function (e) { var postalcode = $(this).val(); if(postalcode.length === 4) { $.ajax({ url: "https://api.bring.com/shippingguide/api/postalCode.json?pnr=" + postalcode + "&clientUrl=http://xleidsvoll.no", dataType: "jsonp", jsonpCallback: "showPostalCodeResult", success: function(response) { //console.log('callback success'); }, error: function(xhr, status, error) { //console.log(status + '; ' + error); } }); } else if (postalcode.length > 4) { $("#directdelivery-wizard-postalarea").html("Ugyldig postnummer"); $("#btn-confirm-delivery").attr("disabled", "disabled"); } }); function showPostalCodeResult(json) { if(json.valid === true) { $("#directdelivery-wizard-postalarea").html(json.result); $("#btn-confirm-delivery").removeAttr("disabled", "disabled"); } else { $("#directdelivery-wizard-postalarea").html("Ugyldig postnummer"); $("#btn-confirm-delivery").attr("disabled", "disabled"); } } $("#showRelatedProducts").on("click", function(e) { e.preventDefault(); var productid = $(this).data("productid"); showRelatedProductsDialog(productid); }); </script>