PageSourceSearch

https://www.hcfonline.co.uk/meals4u/js/meals4u.checkout.min.js?v=558

js hcfonline.co.uk collected 2026-10-02 02:09:28 UTC 108,155 bytes, 106 lines download raw bytes

1var msg="/meals4u/messenger.php";var delivery_updated=false;function OfferDetails(oid){var params=msg+"?action=offer_details&oid="+oid;doLoad(params,PopResult,"","")}function OfferValid(oid){let me="Null";var params=msg+"?action=valid_offer&oid="+oid;var eDate=new Date;var index=MakeNewAJAXCall(params,SimpleCallback,"GET",ComplexCallback,"offer"+oid,eDate.getTime(),TimeoutCallback,10)}let load_reviews=null;function loadReviews(){let params="action=load_reviews";if(window.XMLHttpRequest){load_reviews=new XMLHttpRequest;load_reviews.onreadystatechange=processLoadReview;load_reviews.open("POST","/meals4u/messenger.php",true);load_reviews.setRequestHeader("Content-Type","application/x-www-form-urlencoded");load_reviews.send(params)}else if(window.ActiveXObject){load_reviews=new ActiveXObject("Microsoft.XMLHTTP");if(load_reviews){load_reviews.onreadystatechange=processLoadReview;load_reviews.open("POST","/meals4u/messenger.php",true);load_reviews.setRequestHeader("Content-Type","application/x-www-form-urlencoded");load_reviews.send(params)}}}function processLoadReview(){if(load_reviews.readyState==4){if(load_reviews.status==200){var r=load_reviews.responseText;PopBox(r)}}}let search_="";function search_menu(value){if(!gel("search_menu"))return;if(req_search)req_search.abort();let search_text=gel("search_menu").value;search_=search_text;if(search_text!==""){let params="action=search_menu&keyword="+search_text;doSearch("/meals4u/messenger.php",params)}else{$("#caiM").html(raw_menu);setTimeout(()=>{$(".meals4u").unbind();$(".meals4u").submit(function(e){add($(this));e.preventDefault()})},100)}}function search_menu_mobile(value){if(!gel("search_menu_mobile"))return;if(req_search_mobile)req_search_mobile.abort();let search_text=gel("search_menu_mobile").value;search_=search_text;if(search_text!==""){let params="action=search_menu_mobile&keyword="+search_text;doSearchMobile("/meals4u/messenger.php",params)}else{$(".accordion").first().html(raw_menu);setTimeout(()=>{$(".meals4u").unbind();$(".meals4u").submit(function(e){add($(this));e.preventDefault()});function close_accordion_section(){jQuery(".accordion .accordion-section-title").removeClass("active");jQuery(".accordion .accordion-section-content").slideUp(300).removeClass("open")}jQuery(".accordion-section-title").click(function(e){var currentAttrValue=jQuery(this).attr("href");if(jQuery(e.target).is(".active")){jQuery(this).removeClass("active");jQuery(this).siblings("div").slideUp(300).removeClass("open")}else{jQuery(this).addClass("active");jQuery(".accordion "+currentAttrValue).slideDown(300).addClass("open")}e.preventDefault()})},100)}}let req_search=null;function doSearch(url,pData){if(window.XMLHttpRequest){req_search=new XMLHttpRequest;req_search.onreadystatechange=processSearch;req_search.open("POST",url,true);req_search.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req_search.send(pData)}else if(window.ActiveXObject){req_search=new ActiveXObject("Microsoft.XMLHTTP");if(req_search){req_search.onreadystatechange=processSearch;req_search.open("POST",url,true);req_search.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req_search.send(pData)}}}function doLoadSync(url){var xhr;if(window.XMLHttpRequest){xhr=new XMLHttpRequest}else if(window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHTTP")}xhr.open("Post",url,false);xhr.send(null);return xhr.responseText}let req_search_mobile=null;function doSearchMobile(url,pData){if(window.XMLHttpRequest){req_search_mobile=new XMLHttpRequest;req_search_mobile.onreadystatechange=processSearch_mobile;req_search_mobile.open("POST",url,true);req_search_mobile.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req_search_mobile.send(pData)}else if(window.ActiveXObject){req_search_mobile=new ActiveXObject("Microsoft.XMLHTTP");if(req_search_mobile){req_search_mobile.onreadystatechange=processSearch_mobile;req_search_mobile.open("POST",url,true);req_search_mobile.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req_search_mobile.send(pData)}}}function processSearch(){if(req_search.readyState==4){if(req_search.status==200){$("#caiM").html(req_search.responseText);$(".lazy").Lazy()}}}function processSearch_mobile(){if(req_search_mobile.readyState==4){if(req_search_mobile.status==200){
1if(search_===gel("search_menu_mobile").value){$(".accordion").first().html(req_search_mobile.responseText);$(".lazy").Lazy()}}}}function add_search(form){let itemQty=form.find("[name="+config.item.qty+"]"),itemAdd=form.find("[name="+config.item.add+"]");console.log(form.serialize());$.ajax({data:form.serialize()+"&"+config.item.add+"="+itemAdd.val(),success:function(response){if(itemQty.val()>0&&tip.css("display")==="none"){tip.fadeIn("100").delay("400").fadeOut("100")}container.html(response);$("#meals4u-buttons").remove()}})}var combo_data=[];var selected_indexes=[];function is_default_combo_group(groupEl){if(!groupEl||!groupEl.classList.contains("group_container")){return false}var badge=groupEl.querySelector(".group_name .default_class");if(!badge){return false}return badge.textContent.replace(/\s+/g," ").trim().toLowerCase()==="default"}function scroll_to_next_combo_group(event){var clickedOption=event.target.closest(".option_name");if(!clickedOption){return}setTimeout(function(){var currentGroup=clickedOption.closest(".group_container");if(!currentGroup){return}var nextGroup=currentGroup.nextElementSibling;while(nextGroup&&(!nextGroup.classList.contains("group_container")||is_default_combo_group(nextGroup))){nextGroup=nextGroup.nextElementSibling}if(!nextGroup){return}var scrollContainer=clickedOption.closest(".fancybox-inner")||document.querySelector(".fancybox-inner");if(!scrollContainer){return}var targetScrollTop=scrollContainer.scrollTop+nextGroup.getBoundingClientRect().top-scrollContainer.getBoundingClientRect().top-10;scrollContainer.scrollTo({top:targetScrollTop,behavior:"smooth"})},100)}function combo_closest(el,selector){if(!el){return null}if(typeof el.closest==="function"){return el.closest(selector)}if(window.jQuery){const found=window.jQuery(el).closest(selector);return found.length?found[0]:null}return null}function is_combo_group_collapsible(index_top){return!!document.querySelector('.combo-group-collapsible[data-index-top="'+index_top+'"]')}function toggle_combo_group(event,headerEl){if(event){event.preventDefault();event.stopPropagation()}const group=combo_closest(headerEl,".combo-group-collapsible");if(!group){return}group.classList.toggle("is-collapsed");if(!group.classList.contains("is-collapsed")){const input=group.querySelector(".combo-search-input");if(input){input.value="";filter_combo_options(input)}}refresh_combo_collapsible_ui()}function filter_combo_options(inputEl){const group=combo_closest(inputEl,".combo-group-collapsible");if(!group){return}const query=String(inputEl.value||"").toLowerCase().trim();const clearBtn=group.querySelector(".combo-search-clear");const emptyEl=group.querySelector(".combo-search-empty");const options=group.querySelectorAll(".combo-options-list .option_name");let visibleCount=0;if(clearBtn){clearBtn.style.display=query?"inline-flex":"none"}for(let i=0;i<options.length;i++){const option=options[i];if(option.classList.contains("green")&&group.getAttribute("data-multiple")!=="2"){option.classList.remove("combo-option-filtered-out");continue}const labelEl=option.querySelector(".combo-option-label");const optionId=String(option.getAttribute("data-option-id")||"");const labelText=labelEl?String(labelEl.textContent||""):"";const attrSearch=String(option.getAttribute("data-option-search")||"");const haystack=(attrSearch+" "+optionId+" "+labelText).toLowerCase();const match=!query||haystack.indexOf(query)!==-1;if(match){option.classList.remove("combo-option-filtered-out");visibleCount++}else{option.classList.add("combo-option-filtered-out")}}if(emptyEl){emptyEl.style.display=visibleCount===0?"block":"none"}}function clear_combo_search(event,btnEl){if(event){event.preventDefault();event.stopPropagation()}const group=combo_closest(btnEl,".combo-group-collapsible");if(!group){return}const input=group.querySelector(".combo-search-input");if(input){input.value="";filter_combo_options(input);input.focus()}}function remove_combo_selected_summary_item(event,optionId){if(event){event.preventDefault();event.stopPropagation()}const bucket=document.getElementById(optionId);if(bucket){bucket.click()}}function refresh_combo_collapsible_ui(){const groups=document.querySelectorAll(".combo-group-collapsible");for(let g=0;g<groups.length;g++){const group=groups[g];const list=group.querySelector(".combo-options-list");const summary=group.querySelector(".combo-selected-summary");const countEl=group.querySelector(".combo-group-selected-count");const availableEl=group.querySelector(".combo-options-available");if(!list){continue}const options=Array.prototype.slice.call(list.querySelectorAll(".option_name"));const selected=[];const unselected=[];for(let i=0;i<options.length;i++){if(options[i].classList.contains("green")){selected.push(options[i])}else{unselected.push(options[i])}}const ordered=selected.concat(unselected);for(let i=0;i<ordered.length;i++){list.appendChild(ordered[i])}if(countEl){if(selected.length>0){countEl.textContent=" ("+selected.length+")"}else{countEl.textContent=""}}if(selected.length>0){group.classList.add("has-combo-selection")}else{group.classList.remove("has-combo-selection")}if(availableEl){availableEl.style.display=""}if(summary){if(selected.length===0){summary.innerHTML="";summary.style.display="none"}else{const hideRemove=group.getAttribute("data-multiple")==="0"&&group.getAttribute("data-optional")==="0";
1const isQuantity=group.getAttribute("data-multiple")==="2";const groupIdx=group.getAttribute("data-index-top")||"";let html="<div class='combo-selected-label'>Selected:</div>";for(let i=0;i<selected.length;i++){const option=selected[i];const labelEl=option.querySelector(".combo-option-label");const priceEl=option.querySelector(".right_span");const bucket=option.querySelector(".bucket");const bucketId=bucket?bucket.id:"";const optId=option.getAttribute("data-option-id")||"";const dotEl=isQuantity?document.getElementById("dot_"+optId+"_"+groupIdx):null;const qtyText=dotEl?String(dotEl.textContent||"").trim():"";const label=labelEl?labelEl.textContent:"";const displayLabel=isQuantity&&qtyText?qtyText+" "+label:label;const price=priceEl?String(priceEl.textContent||"").trim():"";html+="<div class='combo-selected-row'>"+"<span class='combo-selected-check'>•</span>"+"<span class='combo-selected-name'>"+displayLabel+"</span>"+(price?"<span class='combo-selected-price'>"+price+"</span>":"")+(hideRemove?"":"<button type='button' class='combo-selected-remove' onclick=\"remove_combo_selected_summary_item(event, '"+bucketId+"')\" aria-label='Remove'>&times;</button>")+"</div>"}summary.innerHTML=html;summary.style.display="block"}}const searchInput=group.querySelector(".combo-search-input");if(searchInput&&!group.classList.contains("is-collapsed")){filter_combo_options(searchInput)}}}function update_combo_items_selected(index_top){const countDisplay=document.getElementById("count_display_"+index_top);if(countDisplay){let count=0;for(let i=0;i<combo_data.length;i++){if(combo_data[i].id.endsWith("_"+index_top)){count+=combo_data[i].item_count}}countDisplay.innerText=count+""}}function remove_error_text(index_top){const selectError=document.getElementById("error_"+index_top);selectError.innerText=""}function add_to_cart(event,dish_details,options_details,clicked_item,index,index_top,price,optn_name){optn_name=decodeURIComponent(optn_name.replace(/\+/g," "));if(options_details.multiple==="0"){let id=options_details.options.split("|")[index]+"_"+index_top;let object={index:index,option:options_details.options.split("|")[index],id:id,item_count:1,is_multiple:false,is_number:false,unit_price:price,name:optn_name,optional:options_details.optional==="1"};for(var i=0;i<options_details.options.split("|").length;i++){var id_to_check=options_details.options.split("|")[i]+"_"+index_top;if(selected_indexes.indexOf(id_to_check)!==-1){var index=selected_indexes.indexOf(id_to_check);document.getElementById(combo_data[index].id).parentElement.classList.remove("green");document.getElementById(combo_data[index].id).style.display="none";document.getElementById("dot_"+combo_data[index].id).style.display="none";selected_indexes.splice(index,1);combo_data.splice(index,1)}}combo_data.push(object);selected_indexes.push(id);scroll_to_next_combo_group(event)}else if(options_details.multiple==="1"){let id=options_details.options.split("|")[index]+"_"+index_top;let object={index:index,option:options_details.options.split("|")[index],id:id,item_count:1,is_number:true,unit_price:price,is_multiple:true,name:optn_name,optional:options_details==="1"};if(options_details.limitation==="1"){let distinct_count=0;for(let i=0;i<selected_indexes.length;i++){if(selected_indexes[i].endsWith("_"+index_top)){distinct_count++}}const index_=selected_indexes.indexOf(id);if(index_===-1){if(distinct_count>=parseInt(options_details.limitation_upto)){alert("You can only select up to "+options_details.limitation_upto+" different combo items.");return}combo_data.push(object);selected_indexes.push(id);remove_error_text(index_top);update_combo_items_selected(index_top)}}else if(options_details.limitation==="0"){const index_=selected_indexes.indexOf(id);if(index_===-1){combo_data.push(object);selected_indexes.push(id);remove_error_text(index_top);update_combo_items_selected(index_top)}}}else if(options_details.multiple==="2"){let id=options_details.options.split("|")[index]+"_"+index_top;let object={index:index,option:options_details.options.split("|")[index],id:id,item_count:1,is_number:true,unit_price:price,is_multiple:true,
1name:optn_name,optional:options_details==="1"};if(options_details.limitation==="1"){const total_quantity=combo_data.reduce((sum,item)=>item.id.endsWith("_"+index_top)?sum+item.item_count:sum,0);if(total_quantity>=parseInt(options_details.limitation_upto)){alert(`You can only select a total of ${options_details.limitation_upto} combo items.`);return}}let index_=selected_indexes.indexOf(id);if(index_>-1){combo_data[index_].item_count++}else{combo_data.push(object);selected_indexes.push(id)}remove_error_text(index_top);update_combo_items_selected(index_top)}else if(options_details.multiple==="3"){event.target.onclick=function(){return false};let id=options_details.options.split("|")[index]+"_"+index_top;let object={index:index,option:options_details.options.split("|")[index],id:id,item_count:1,is_number:false,unit_price:price,is_multiple:false,name:optn_name,optional:options_details==="1"};const index_=selected_indexes.indexOf(id);if(index_>-1){combo_data[index_].item_count++}else{combo_data.push(object);selected_indexes.push(id)}}update_DOM(event,dish_details)}function update_DOM(event,dish_details){let price_data=[];let map={};for(var i=0;i<combo_data.length;i++){document.getElementById("dot_"+combo_data[i].id).parentElement.parentElement.classList.add("green");if(combo_data[i].is_number){document.getElementById("dot_"+combo_data[i].id).innerText=combo_data[i].item_count+"x ";document.getElementById("dot_"+combo_data[i].id).style.display="inline-block";document.getElementById(combo_data[i].id).style.display="flex"}else{document.getElementById("dot_"+combo_data[i].id).style.display="inline-block"}if(combo_data[i].optional){document.getElementById(combo_data[i].id).style.display="flex"}const optionRow=document.getElementById("dot_"+combo_data[i].id).parentElement.parentElement;const collapsibleGroup=combo_closest(optionRow,".combo-group-collapsible");if(collapsibleGroup){const hideTrash=collapsibleGroup.getAttribute("data-multiple")==="0"&&collapsibleGroup.getAttribute("data-optional")==="0";if(!hideTrash){document.getElementById(combo_data[i].id).style.display="flex"}}let obj={id:combo_data[i].id.split("_")[1],price:parseFloat(combo_data[i].unit_price)*combo_data[i].item_count};price_data.push(obj);if(obj.id in map){map[obj.id]=map[obj.id]+obj.price}else{map[obj.id]=obj.price}}$("[id^=price_]").text("");let total_price=parseFloat(dish_details.oprice);for(let i in map){if(Number(map[i])>0){document.getElementById("price_"+i).innerText="+£"+map[i].toFixed(2)}else{document.getElementById("price_"+i).innerText=""}total_price+=map[i]}document.getElementById("price_total").innerText="£"+total_price.toFixed(2);refresh_combo_collapsible_ui();update_combo_add_button()}function combo_groups_valid(all_rows){var all_ids=[];for(var i=0;i<selected_indexes.length;i++){all_ids.push(selected_indexes[i].split("_")[1])}const new_all_rows=[];all_rows.forEach(row=>{const count=row.upto||1;for(let i=0;i<count;i++){new_all_rows.push(row)}});console.log("new_all_rows:",new_all_rows);all_rows=new_all_rows;for(var i=0;i<all_rows.length;i++){if(all_rows[i].multiple==="3"){continue}if(all_rows[i].min_dishes==="1"){var minRequired=parseInt(all_rows[i].min_dishes_upto,10);var selectedCount=get_combo_group_selected_count(i,all_rows[i].multiple);if(all_rows[i].optional==="1"&&selectedCount===0){continue}if(selectedCount<minRequired){return false}continue}if(all_ids.indexOf(i+"")===-1&&all_rows[i].optional==="0"){return false}}return true}function update_combo_add_button(){var btn=document.getElementById("combo_add_cart_btn");if(!btn)return;var raw=btn.getAttribute("data-all-rows");if(!raw)return;try{var all_rows=JSON.parse(raw);btn.disabled=!combo_groups_valid(all_rows)}catch(e){}}function remove_from_cart(event,dish_details,options_details,clicked_item,index,index_top){if(options_details.multiple==="0"&&options_details.optional==="0"){}else if(options_details.multiple==="1"||options_details.multiple==="0"&&options_details.optional==="1"){let id=options_details.options.split("|")[index]+"_"+index_top;const index_=selected_indexes.indexOf(id);if(index_>-1){if(combo_data[index_].item_count===1){document.getElementById(combo_data[index_].id).parentElement.classList.remove("green");document.getElementById(combo_data[index_].id).style.display="none";document.getElementById("dot_"+combo_data[index_].id).style.display="none";combo_data.splice(index_,1);selected_indexes.splice(index_,1)}}update_combo_items_selected(index_top)}else if(options_details.multiple==="2"){let id=options_details.options.split("|")[index]+"_"+index_top;const index_=selected_indexes.indexOf(id);if(index_>-1){if(combo_data[index_].item_count===1){document.getElementById(combo_data[index_].id).parentElement.classList.remove("green");document.getElementById(combo_data[index_].id).style.display="none";document.getElementById("dot_"+combo_data[index_].id).style.display="none";combo_data.splice(index_,1);selected_indexes.splice(index_,1)}else{combo_data[index_].item_count--}}update_combo_items_selected(index_top)}update_DOM(event,dish_details)}function get_combo_group_selected_count(index_top,multiple){if(multiple==="1"){let distinct_count=0;for(let i=0;i<selected_indexes.length;i++){if(selected_indexes[i].endsWith("_"+index_top)){distinct_count++}}return distinct_count}if(multiple==="2"){return combo_data.reduce(function(sum,item){return item.id.endsWith("_"+index_top)?sum+item.item_count:sum},0)}for(let i=0;i<selected_indexes.length;i++){if(selected_indexes[i].endsWith("_"+index_top)){return 1}}return 0}function add_combo(cid,mid,opts,top_index,all_rows){console.log("cid:",cid);
1console.log("mid:",mid);console.log("opts:",opts);console.log("top_index:",top_index);console.log("all_rows:",all_rows);const new_all_rows=[];all_rows.forEach(row=>{const count=row.upto||1;for(let i=0;i<count;i++){new_all_rows.push(row)}});console.log("new_all_rows:",new_all_rows);all_rows=new_all_rows;let all_ids=[];console.log("selected_indexes:",selected_indexes);for(let i=0;i<selected_indexes.length;i++){all_ids.push(selected_indexes[i].split("_")[1])}for(let i=0;i<top_index;i++){if(all_rows[i]?.multiple==="3"){document.getElementById("error_"+i).style.display="none";continue}if(all_rows[i]?.min_dishes==="1"){var minRequired=parseInt(all_rows[i].min_dishes_upto,10);var selectedCount=get_combo_group_selected_count(i,all_rows[i].multiple);if(all_rows[i].optional==="1"&&selectedCount===0){document.getElementById("error_"+i).style.display="none";continue}if(selectedCount<minRequired){var elmMin=document.getElementById("error_"+i);elmMin.innerText=" Please select at least "+all_rows[i].min_dishes_upto+" options ";var savedTabIndexMin=elmMin.getAttribute("tabindex");elmMin.style.display="inline-block";elmMin.setAttribute("tabindex","-1");elmMin.focus();elmMin.setAttribute("tabindex",savedTabIndexMin);return false}document.getElementById("error_"+i).style.display="none";continue}if(all_ids.indexOf(i+"")===-1&&all_rows[i].optional==="0"){var elm=document.getElementById("error_"+i);var savedTabIndex=elm.getAttribute("tabindex");elm.style.display="inline-block";elm.setAttribute("tabindex","-1");elm.focus();elm.setAttribute("tabindex",savedTabIndex);return false}else{document.getElementById("error_"+i).style.display="none"}}var s=getElementsByClassName(document,"*","optionSelect");var v=cid;var m=mid;var n=document.getElementById("combo_name").value;var f=document.getElementById("combo_sub").value;var p=Number(document.getElementById("combo_price").value);if(f){n+=" "+f}for(let i=0;i<combo_data.length;i++){v=v+"_"+combo_data[i].item_count+"@"+combo_data[i].option;if(combo_data[i].is_multiple){n=n+"|"+combo_data[i].item_count+"x "+combo_data[i].name+"^"}else{n=n+"|"+combo_data[i].name+"^"}p=p+Number(combo_data[i].unit_price*combo_data[i].item_count)}var params="my-add-button=1&my-item-id="+v+"&my-item-name="+urlencode(n)+"&my-item-price="+p.toFixed(2)+"&my-item-qty=1&my-item-url=";doCombo("/meals4u/relay.php",params)}function toggle_menu(event,id){event.preventDefault();const $section=$("#"+id);const $icon=$("#icon_"+id);const svgUp=`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="11" viewB
1ox="0 0 20 11" fill="none">
2<path d="M8.82337 10.5397C9.47416 11.1534 10.531 11.1534 11.1818 10.5397L19.5119 2.68433C20.1627 2.07063 20.1627 1.07398 19.5119 0.460277C18.8611 -0.153426 17.8042 -0.153426 17.1535 0.460277L10 7.20609L2.84654 0.465186C2.19576 -0.148516 1.13888 -0.148516 0.488091 0.465186C-0.162697 1.07889 -0.162697 2.07554 0.488091 2.68924L8.81817 10.5446L8.82337 10.5397Z" fill="#3A3839"/>
3</svg>`;const svgDown=`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="11" viewBox="0 0 20 11" fill="none">
4		<path d="M8.82337 0.460277C9.47416 -0.153426 10.531 -0.153426 11.1818 0.460277L19.5119 8.31567C20.1627 8.92937 20.1627 9.92602 19.5119 10.5397C18.8611 11.1534 17.8042 11.1534 17.1535 10.5397L10 3.79391L2.84654 10.5348C2.19576 11.1485 1.13888 11.1485 0.488091 10.5348C-0.162697 9.92111 -0.162697 8.92446 0.488091 8.31076L8.81817 0.455366L8.82337 0.460277Z" fill="#3A3839"/>
5		</svg>`;if($section.is(":visible")){$section.slideUp("slow");$icon.html(svgUp)}else{$section.slideDown("slow");$icon.html(svgDown)}}var additional_data=[];var additional_data_selected=[];var total_amount_additional=0;function add_special_item(event,json_data){if(Array.from(event.target.classList).indexOf("selected")===-1){event.target.classList.add("selected");let object={name:json_data.title,price:json_data.price,id:json_data.ID,is_selected:true};total_amount_additional+=Math.abs(Number(object.price));additional_data_selected.push(object)}else{event.target.classList.remove("selected");if(additional_data_selected.length>0){let index=additional_data_selected.findIndex(function(item,i){return item.id===json_data.ID});total_amount_additional-=Math.abs(Number(additional_data_selected[index].price));if(total_amount_additional<=0)total_amount_additional=0;additional_data_selected.splice(index,1)}}if(total_amount_additional.toFixed(2)!="0.00"){$("#additional_button_save").text("Save +£"+total_amount_additional.toFixed(2))}else{$("#additional_button_save").text("Save")}}function isInView(elem){var docViewTop=$(window).scrollTop();var docViewBottom=docViewTop+$(window).height();var elemTop=$(elem).offset().top;var elemBottom=elemTop+$(elem).height();return elemTop<=docViewBottom&&elemBottom>=docViewTop}$.fn.scrollEnd=function(callback,timeout){$(this).on("scroll",function(){var $this=$(this);if($this.data("scrollTimeout")){clearTimeout($this.data("scrollTimeout"))}$this.data("scrollTimeout",setTimeout(callback,timeout))})};let in_view=[];$(window).scroll(function(){let elems=$('table[id*="cai"]');for(let i=0;i<elems.length;i++)if(isInView(elems[i])){let my_elem=$(elems[i]).attr("id").split("cai");if(my_elem.length>0&&!isNaN(my_elem[1])){if(in_view.indexOf(my_elem[1])===-1){for(let k=0;k<in_view.length;k++){let id="cat_scroll"+in_view[k];$("[id*="+id+"]").removeClass("is_in_view")}in_view=[];let id="cat_scroll"+my_elem[1];$("[id*="+id+"]").addClass("is_in_view");let target=$("[id*="+id+"]")[1];if(target){document.getElementById("categories").scrollTop=target.offsetTop;in_view.push(my_elem[1])}}}}});function getMinimCharges(){setTimeout(()=>{let postcode=gel("postcode").value;if(document.getElementById("meals4u_multi_minimal_enabled")&&document.getElementById("meals4u_multi_minimal_enabled").value==="1"&&checkPostCode(gel("postcode").value)){var params="multiminimal_query=1&postcode_multi="+postcode;doMultiMinimal("/meals4u/relay.php",params)}},50)}function getMinCharges_Commit(req,oid){if(req.responseText!=="-7|"&&req.responseText!=="-6|"){let json_resp=JSON.parse(req.responseText);if(json_resp.order_value){gel("meals4u_minimal_order_value").value="&pound"+json_resp.order_value;gel("meals4u_minimal_order_value").parentElement.lastChild.data="Minimal order is  £"+json_resp.order_value+" (not include delivery charge)"}}else{}}function save_additional(id){const additional_comment=$("#additional_comments").attr("value");if(additional_comment===""||additional_comment.match(/^[\w\s.,_]+$/)){if(additional_comment.length>100){alert("Please add a shorter comment.");return}let object={item_id:id,additional_data_selected:additional_data_selected,total_amount_additional:total_amount_additional,meals4uUpdate_Additional:true};let params="item_id="+object.item_id+"&additional_data_selected="+JSON.stringify(object.additional_data_selected)+"&total_amount_additional="+object.total_amount_additional+"&meals4uUpdate_Additional=true&additional_comments="+additional_comment;doAdditional("/meals4u/relay.php",params)}else{alert("Only alphanumeric characters are allowed, please update your comment")}}function combo_format(str,itype){if(str.indexOf("(")!=-1){if(itype=="price"){var t=str.substring(str.lastIndexOf("(")+1,str.lastIndexOf(")"));return string_trim(t)}else{var t=str.substring(0,str.lastIndexOf("("));return string_trim(t)}}else{return false}}
5function doCombo(url,pData){if(window.XMLHttpRequest){req=new XMLHttpRequest;req.onreadystatechange=processCombo;req.open("POST",url,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.send(pData)}else if(window.ActiveXObject){req=new ActiveXObject("Microsoft.XMLHTTP");if(req){req.onreadystatechange=processCombo;req.open("POST",url,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.send(pData)}}}function processCombo(){if(req.readyState==4){if(req.status==200){parent.$.fancybox.close();$("#meals4u").html(req.responseText);$("#meals4u-buttons").remove()}}}var multi_req=null;function doMultiMinimal(url,pData){if(window.XMLHttpRequest){multi_req=new XMLHttpRequest;multi_req.onreadystatechange=processMultiMinimal;multi_req.open("POST",url,true);multi_req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");multi_req.send(pData)}else if(window.ActiveXObject){multi_req=new ActiveXObject("Microsoft.XMLHTTP");if(multi_req){multi_req.onreadystatechange=processMultiMinimal;multi_req.open("POST",url,true);multi_req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");multi_req.send(pData)}}}function randomIntFromInterval(min,max){return Math.floor(Math.random()*(max-min+1)+min)}function processMultiMinimal(){if(multi_req.readyState==4){if(multi_req.status==200){const rndInt=randomIntFromInterval(1,1e3);setTimeout(()=>{$("#meals4u").html(multi_req.responseText);$("#meals4u-buttons").remove()},rndInt)}}}function doAdditional(url,pData){if(window.XMLHttpRequest){req=new XMLHttpRequest;req.onreadystatechange=processAdditional;req.open("POST",url,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.send(pData)}else if(window.ActiveXObject){req=new ActiveXObject("Microsoft.XMLHTTP");if(req){req.onreadystatechange=processAdditional;req.open("POST",url,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.send(pData)}}}function processAdditional(){if(req.readyState==4){if(req.status==200){parent.$.fancybox.close();$("#meals4u").html(req.responseText);$("#meals4u-buttons").remove()}}}function coupon(cmd,checkout){if(cmd==="add"){var code=gel("dcode").value}else{var code=""}if(document.getElementById("memo")!=null){var um=gel("memo");var params="coupon=meals4u&code="+urlencode(code)+"&cmd="+cmd+"&isCheckout="+checkout+"&comments="+urlencode(um.value)}else{var params="coupon=meals4u&code="+urlencode(code)+"&cmd="+cmd+"&isCheckout="+checkout+"&comments="}doCombo("/meals4u/relay.php",params)}function changePromoCodeOffer(checkout,code,cmd){const existing=document.getElementById("promoModal");if(existing)existing.remove();const modal=document.createElement("div");modal.id="promoModal";modal.style.position="fixed";modal.style.top="0";modal.style.left="0";modal.style.width="100%";modal.style.height="100%";modal.style.backgroundColor="rgba(0, 0, 0, 0.5)";modal.style.display="flex";modal.style.justifyContent="center";modal.style.alignItems="center";modal.style.zIndex="9999";if(!document.getElementById("promoModalStyles")){const style=document.createElement("style");style.id="promoModalStyles";style.textContent=`
6			.promo-btn {
7				display: flex;
8				height: 44px;
9				padding: 8px 32px;
10				justify-content: center;
11				align-items: center;
12				gap: 10px;
13				border-radius: 4px;
14				border: 1px solid #F77337;
15				cursor: pointer;
16				background: #FFF;
17				color: #F77337;
18				font-family: Inter, sans-serif;
19				font-size: 16px;
20				font-weight: 600;
21				line-height: normal;
22				transition: all 0.2s ease;
23			}
24			.promo-btn:hover {
25				background: #F77337;
26				color: #FFF;
27			}
28		`;document.head.appendChild(style)}modal.innerHTML=`
29        <div style="
30			display: inline-flex;
31			height: 165px;
32			padding: 24px 16px 16px 16px;
33			flex-direction: column;
34			justify-content: center; 
35			align-items: center;
36			gap: 24px;
37			border-radius: 8px;
38			border: 1px solid #F77337;
39			background: #FFF;
40		">
41            <p style="
42				color: #000;
43				text-align: center;
44				font-family: Inter, sans-serif;
45				font-size: 16px;
46				font-weight: 400;
47				width: 260px;
48				line-height: normal;
49				margin: 0;
50			">
51                Do you want to apply new promo code offer?
52                Existing promo code will be removed if you click Yes.
53            </p>
54            <div style="display: flex; justify-content: center; gap: 24px;">
55                <button id="promoNo" class="promo-btn">NO</button>
56                <button id="promoYes" class="promo-btn">YES</button>
57            </div>
58        </div>
59    `;document.body.appendChild(modal);document.getElementById("promoYes").onclick=function(){if(code){applyAndRemoveCouponCode(code,checkout,cmd)}else coupon("add",checkout);modal.remove()};document.getElementById("promoNo").onclick=function(){modal.remove()}}function applyAndRemoveCouponCode(code,checkout,cmd){var params="coupon=meals4u&code="+urlencode(code)+"&cmd="
59+cmd+"&isCheckout="+checkout+"&comments=";doCombo("/meals4u/relay.php",params)}function voluntary_tip_charges(cmd,checkout){if(cmd==="add"){var tip_charges=gel("tip_charges").value;if(parseFloat(tip_charges)<0){alert("Tip amount cannot be negative.");gel("tip_charges").value="";return}}else{var tip_charges=0}if(document.getElementById("memo")!=null){var um=gel("memo");var params="voluntary_tip=meals4u&tip_charges="+urlencode(tip_charges)+"&cmd="+cmd+"&isCheckout="+checkout+"&comments="+urlencode(um.value)}else{var params="voluntary_tip=meals4u&tip_charges="+urlencode(tip_charges)+"&cmd="+cmd+"&isCheckout="+checkout+"&comments="}doCombo("/meals4u/relay.php",params)}function ReOrder(oid,cmd){var loadParams=msg+"?action=reorder&oid="+oid+"&confirm="+cmd;doLoad(loadParams,ReOrderResult,"","")}function ReOrderResult(req,oid){if(string_trim(req.responseText)=="1"){window.location.replace("/checkout")}else{if(string_trim(req.responseText)=="0"){PopBox("Please login your account to re-order.")}else{PopBox(req.responseText)}}}function cOptions(mid,combo){function getCookie(name){const value=`; ${document.cookie}`;const parts=value.split(`; ${name}=`);if(parts.length===2)return parts.pop().split(";").shift()}let cookie=getCookie("meals4u_cart");if(cookie&&cookie.length>3e3){alert("You have reached the order limit, please login or sign up to add more items to your cart");return}combo_data=[];selected_indexes=[];if(combo=="1"){var loadParams=msg+"?action=options&mid="+mid;doLoad(loadParams,PopResult,"","");return false}else{return true}}function fill_address(street,town,postcode){gel("street1").value=street;gel("city").value=town;gel("postcode").value=postcode;parent.$.fancybox.close()}function postcode_lookup(){var postcode=gel("postcode");var pc=string_trim(postcode.value);if(string_trim(postcode.value)){if(checkPostCode(pc)){var loadParams=msg+"?action=postcode_lookup&postcode="+pc;doLoad(loadParams,PopResultWithoutLoginStatus,"","")}else{alert("Invalid postcode.");postcode.focus()}}else{alert("Please input postcode.");postcode.focus()}}function validateForm_(){var first_name=gel("first_name");var email=gel("email");var mobile_number=gel("mobile_number");var error="";if(string_trim(first_name.value)==""){error=error+'<p class="errors">Your name is required.</p>'}if(string_trim(email.value)==""){error=error+'<p class="errors">Your email address is required.</p>'}if(string_trim(mobile_number.value)==""){error=error+'<p class="errors">Your phone number is required.</p>'}if(!checkUKTelephone(mobile_number.value)){error=error+'<p class="errors">Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>'}if(gel("delivery_choice").value==="delivery"){var postcode=gel("postcode");var address_line_1=gel("street1");var city=gel("city");if(string_trim(address_line_1.value)==""){error=error+'<p class="errors">Your address is required.</p>'}if(string_trim(city.value)==""){error=error+'<p class="errors">Your city is required.</p>'}var pc=string_trim(postcode.value);if(string_trim(postcode.value)){if(checkPostCode(pc)){}else{error=error+'<p class="errors"> Invalid postcode.</p>'}}else{error=error+'<p class="errors">Please input postcode</p>'}}if(error==""){}else{PopBox(error);return false}}function showMinOrderModal(message){const modal=document.getElementById("minOrderModal");if(!modal)return;document.getElementById("minOrderMessage").textContent=message;console.log(modal);modal.style.display="flex";document.getElementById("modalCloseBtn").onclick=function(){modal.style.display="none"};document.getElementById("modalAddMoreBtn").onclick=function(){window.location.href="/menu.php"}}function validCheckout_guest(){let addressForm=document.getElementById("GformTick");let timeForm=document.getElementById("timeTick");if(addressForm&&timeForm&&(addressForm.style.display==="none"||timeForm.style.display==="none")){alert("Please select time and address before checking out");digital_wallet_order_placed_successfully=false;digital_wallet_order_placing=false;return}if(document.getElementById("meals4u_minimal_order")?.value==="1"&&document.getElementById("meals4u-is-checkout")!=null){const minOrderValueEl=document.getElementById("meals4u_minimal_order_value");const currentOrderEl=document.getElementById("ttp");console.log(minOrderValueEl,currentOrderEl);if(minOrderValueEl){const minOrderValueRaw=minOrderValueEl.value.replace(/&[^;]+;/g,"").replace(/[^\d.]/g,"");const minOrderValue=parseFloat(minOrderValueRaw||0);const currentValue=parseFloat(currentOrderEl?.value||0);const remaining=(minOrderValue-currentValue).toFixed(2);const message=`Add £${remaining} more to reach the £${minOrderValue} minimum order (excluding delivery and payment charge).`;console.log(message);showMinOrderModal(message)}return false}if(document.getElementById("meals4u-is-checkout")!=null){if(!(apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked))if(gel("workingday").value==0){var oreminder="Our restaurant is closed today. Your pre-order will be delivered next working day.\n Are you sure you want to checkout now?";if(!confirm(oreminder)){return false}}else{if(gel("workinghour").value==0){var oreminder="Our restaurant is closed now. Your pre-order will be delivered at a later time.\n Are you sure you want to checkout now?";if(!confirm(oreminder)){return false}}}
59delivery_update()}else{return true}var error="";if(document.getElementById("isMember").value=="0"){var cmd="n";var e=gel("account_email");var atpos=e.value.indexOf("@");var dotpos=e.value.lastIndexOf(".");var newsletter=gel("newsletter");var rem=gel("rememberme2");if(atpos<1||dotpos<atpos+2||dotpos+2>=e.value.length){error=error+'<p class="errors">Not a valid email address.</p>'}var extra="&email="+e.value+"&pwd=123&rpwd=123&newsletter=false&rememberme=false"}var asap=0;var n=gel("name");var p=gel("phone");var st=gel("street1");var c=gel("city");var postcode=gel("postcode");if(postcode){var pc=string_trim(postcode.value);var incode=pc.slice(-3);var outcode=string_trim(pc.slice(0,-3))}var sline=gel("store_line");var semail=gel("store_email");var stv=$("#schedule_time option:selected").text();if(string_trim(p.value)==""){error=error+'<p class="errors">Your phone number is required.</p>'}if(stv.indexOf("As soon as")>=0||stv.indexOf("ASAP")>=0){asap=1}if(string_trim(n.value)==""){error=error+'<p class="errors">Your name is required.</p>'}if(!checkUKTelephone(p.value)){error=error+'<p class="errors">Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>'}if(gel("delivery_choice").value=="delivery"){if(string_trim(st.value)==""){error=error+'<p class="errors">First line of your address is required.</p>'}if(string_trim(pc)==""){error=error+'<p class="errors">Postcode is required.</p>'}if(!checkPostCode(pc)){error=error+'<p class="errors">Invalid postcode.</p>'}}else{if(gel("force_address_in_guest_checkout")&&gel("force_address_in_guest_checkout").value==="1"){doCheck(msg,"action=collection_guest&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(document.getElementById("street1").value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(document.getElementById("street3").value)+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(document.getElementById("city").value)+"&memo="+urlencode(document.getElementById("memo").value)+""+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}else{doCheck(msg,"action=collection_guest&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1=old&street2=old3&street3=old3&outcode=LE11&incode=1lh&"+"city=loughborough&memo="+urlencode(document.getElementById("memo").value)+""+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}}if(error==""){var district=incode;if(gel("delivery_choice").value=="delivery"){var cmd="delivery_guest";if(gel("df").innerText==="N/A"){PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");return false}if(!(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked)){if(Number(gel("df").innerText)>0){var oreminder="The delivery price for this order is "+gel("df").innerText+" Please press ok to confirm";if(!confirm(oreminder)){return false}}}if(gel("pf")){var oreminder="There is a minimum order charge of  "+gel("pf").innerText+" Please press ok to confirm";if(!(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked))if(!confirm(oreminder)){return false}}gel("ToPayment").disabled=true;if(document.getElementById("delivery_areas")!=null){if(document.getElementById("delivery_charge")!=null){var da=gel("delivery_areas");var dc=gel("delivery_charge");var df=gel("df");if(document.getElementById("df")!=null){if(df.innerHTML=="N/A"){PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}else{var da=gel("delivery_areas");var dap=gel("delivery_areasPlus");var dapp=gel("delivery_areasPlusPro");var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}var areaPlus=dap.value.split("|");m=0;while(areaPlus[m]){if(areaPlus[m].toLowerCase()==outcode.toLowerCase()||areaPlus[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}var areaPlusPro=dapp.value.split("|");m=0;while(areaPlusPro[m]){if(areaPlusPro[m].toLowerCase()==outcode.toLowerCase()||areaPlusPro[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}else{if(document.getElementById("delivery_pro")!=null){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}else{var k=1;while(k<=9){if(document.getElementById("delivery_areas"+k)!=null){var da=gel("delivery_areas"+k);var district=incode;var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}}else{break}k++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}}else{doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}}else{PopBox(error);return false}}function validCheckout_guest_mobile(){const minimalOrderEl=document.getElementById("meals4u_minimal_order");const minOrderValueEl=document.getElementById("meals4u_minimal_order_value");const checkoutEl=document.getElementById("meals4u-is-checkout");if(!minimalOrderEl||!minOrderValueEl)return;if(minimalOrderEl.value==="1"&&checkoutEl!==null){const currentOrderEl=document.getElementById("ttp");console.log(minOrderValueEl,currentOrderEl);if(minOrderValueEl){const minOrderValueRaw=minOrderValueEl.value.replace(/&[^;]+;/g,"").replace(/[^\d.]/g,"");const minOrderValue=parseFloat(minOrderValueRaw||0);const currentValue=parseFloat(currentOrderEl?.value||0);const remaining=(minOrderValue-currentValue).toFixed(2);const message=`Add £${remaining} more to reach the £${minOrderValue} minimum order (excluding delivery and payment charge).`;console.log(message);showMinOrderModal(message)}return false}if(document.getElementById("meals4u-is-checkout")!=null){if(!(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked))if(gel("workingday").value==0){var oreminder="Our restaurant is closed today. Your pre-order will be delivered next working day.\n Are you sure you want to checkout now?";if(!confirm(oreminder)){return false}}else{if(gel("workinghour").value==0){var oreminder="Our restaurant is closed now. Your pre-order will be delivered at a later time.\n Are you sure you want to checkout now?";if(!confirm(oreminder)){return false}}}
59delivery_update()}else{return true}var error="";if(document.getElementById("isMember").value=="0"){var cmd="n";var e=gel("account_email");var atpos=e.value.indexOf("@");var dotpos=e.value.lastIndexOf(".");var newsletter=gel("newsletter");var rem=gel("rememberme2");if(atpos<1||dotpos<atpos+2||dotpos+2>=e.value.length){error=error+'<p class="errors">Not a valid email address.</p>'}var extra="&email="+e.value+"&pwd=123&rpwd=123&newsletter=false&rememberme=false"}var asap=0;var n=gel("name");var p=gel("phone");var st=gel("street1");var c=gel("city");var postcode=gel("postcode");if(postcode){var pc=string_trim(postcode.value);var incode=pc.slice(-3);var outcode=string_trim(pc.slice(0,-3))}var sline=gel("store_line");var semail=gel("store_email");var stv=$("#schedule_time option:selected").text();if(string_trim(p.value)==""){error=error+'<p class="errors">Your phone number is required.</p>'}if(stv.indexOf("As soon as")>=0||stv.indexOf("ASAP")>=0){asap=1}if(string_trim(n.value)==""){error=error+'<p class="errors">Your name is required.</p>'}if(!checkUKTelephone(p.value)){error=error+'<p class="errors">Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>'}if(gel("force_address_in_guest_checkout")&&gel("force_address_in_guest_checkout").value==="1"){if(string_trim(st.value)==""){error=error+'<p class="errors">First line of your address is required.</p>'}if(string_trim(postcode.value)==""){error=error+'<p class="errors">Postcode is required.</p>'}if(string_trim(c.value)==""){error=error+'<p class="errors">City is required.</p>'}if(!checkPostCode(postcode.value)){error=error+'<p class="errors">Invalid postcode.</p>'}}if(gel("delivery_choice").value=="delivery"){if(string_trim(st.value)==""){error=error+'<p class="errors">First line of your address is required.</p>'}if(string_trim(pc)==""){error=error+'<p class="errors">Postcode is required.</p>'}if(!checkPostCode(pc)){error=error+'<p class="errors">Invalid postcode.</p>'}}else{if(error==""){if(gel("force_address_in_guest_checkout")&&gel("force_address_in_guest_checkout").value==="1"){doCheck(msg,"action=collection_guest&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(document.getElementById("street1").value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(document.getElementById("street3").value)+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(document.getElementById("city").value)+"&memo="+urlencode(document.getElementById("memo").value)+""+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}else{doCheck(msg,"action=collection_guest&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1=old&street2=old3&street3=old3&outcode=LE11&incode=1lh&"+"city=loughborough&memo="+urlencode(document.getElementById("memo").value)+""+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}}else{PopBox(error);return false}}if(error==""){var district=incode;if(gel("delivery_choice").value=="delivery"){var cmd="delivery_guest";if(gel("df").innerText==="N/A"){PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");return false}if(!(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked)){if(Number(gel("df").innerText)>0){var oreminder="The delivery price for this order is "+gel("df").innerText+" Please press ok to confirm";if(!confirm(oreminder)){return false}}}if(!(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked))if(gel("pf")){var oreminder="There is a minimum order charge of  "+gel("pf").innerText+" Please press ok to confirm";if(!confirm(oreminder)){return false}}gel("ToPayment").disabled=true;if(document.getElementById("delivery_areas")!=null){if(document.getElementById("delivery_charge")!=null){var da=gel("delivery_areas");var dc=gel("delivery_charge");var df=gel("df");if(document.getElementById("df")!=null){if(df.innerHTML=="N/A"){PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}else{var da=gel("delivery_areas");var dap=gel("delivery_areasPlus");var dapp=gel("delivery_areasPlusPro");var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}var areaPlus=dap.value.split("|");m=0;while(areaPlus[m]){if(areaPlus[m].toLowerCase()==outcode.toLowerCase()||areaPlus[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}var areaPlusPro=dapp.value.split("|");m=0;while(areaPlusPro[m]){if(areaPlusPro[m].toLowerCase()==outcode.toLowerCase()||areaPlusPro[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}else{if(document.getElementById("delivery_pro")!=null){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}else{var k=1;while(k<=9){if(document.getElementById("delivery_areas"+k)!=null){var da=gel("delivery_areas"+k);var district=incode;var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}}else{break}k++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}}else{doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}}else{PopBox(error);return false}}function validCheckout(){let addressForm=document.getElementById("formTick");
59let timeForm=document.getElementById("timeTick");if(addressForm&&timeForm&&(addressForm.style.display==="none"||timeForm.style.display==="none")){alert("Please select time and address before checking out");digital_wallet_order_placed_successfully=false;digital_wallet_order_placing=false;return}const minimalOrder=document.getElementById("meals4u_minimal_order");const minOrderValueEl=document.getElementById("meals4u_minimal_order_value");if(minimalOrder.value==="1"&&document.getElementById("meals4u-is-checkout")!=null){const currentOrderEl=document.getElementById("ttp");console.log(minOrderValueEl,currentOrderEl);if(minOrderValueEl){const minOrderValueRaw=minOrderValueEl.value.replace(/&[^;]+;/g,"").replace(/[^\d.]/g,"");const minOrderValue=parseFloat(minOrderValueRaw||0);const currentValue=parseFloat(currentOrderEl?.value||0);const remaining=(minOrderValue-currentValue).toFixed(2);const message=`Add £${remaining} more to reach the £${minOrderValue} minimum order (excluding delivery and payment charge).`;console.log(message);showMinOrderModal(message)}return false}if(document.getElementById("meals4u-is-checkout")!=null){if(!(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked))if(gel("workingday").value==0){var oreminder="Our restaurant is closed today. Your pre-order will be delivered next working day.\n Are you sure you want to checkout now?";if(!confirm(oreminder)){return false}}else{if(gel("workinghour").value==0){var oreminder="Our restaurant is closed now. Your pre-order will be delivered at a later time.\n Are you sure you want to checkout now?";if(!confirm(oreminder)){return false}}}delivery_update()}else{return true}var error="";if(document.getElementById("isMember").value=="0"){var cmd="n";var e=gel("account_email");var pwd=gel("account_password");var rpwd=gel("confirm_password");var atpos=e.value.indexOf("@");var dotpos=e.value.lastIndexOf(".");var newsletter=gel("newsletter");var rem=gel("rememberme2");if(atpos<1||dotpos<atpos+2||dotpos+2>=e.value.length){error=error+'<p class="errors">Not a valid email address.</p>'}if(!rpwd.value||!pwd.value){error=error+'<p class="errors">Input and confirm your password.</p>'}if(pwd.value!=rpwd.value){error=error+'<p class="errors">Password not matched.</p>'}else{if(pwd.value.length<=3){error=error+'<p class="errors">Password is too short.</p>'}}var extra="&email="+e.value+"&pwd="+pwd.value+"&rpwd="+rpwd.value+"&newsletter="+newsletter.checked+"&rememberme="+rem.checked}else{var cmd="m";var extra=""}var asap=0;var n=gel("name");var p=gel("phone");var st=gel("street1");var c=gel("city");var postcode=gel("postcode");var pc=string_trim(postcode.value);var incode=pc.slice(-3);var outcode=string_trim(pc.slice(0,-3));var sline=gel("store_line");var semail=gel("store_email");var stv=$("#schedule_time option:selected").text();if(stv.indexOf("As soon as")>=0||stv.indexOf("ASAP")>=0){asap=1}if(string_trim(n.value)==""){error=error+'<p class="errors">Your name is required.</p>'}if(string_trim(p.value)==""){error=error+'<p class="errors">Your phone number is required.</p>'}if(!checkUKTelephone(p.value)){error=error+'<p class="errors">Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>'}if(string_trim(st.value)==""){error=error+'<p class="errors">First line of your address is required.</p>'}if(string_trim(pc)==""){error=error+'<p class="errors">Postcode is required.</p>'}if(!checkPostCode(pc)){error=error+'<p class="errors">Invalid postcode.</p>'}if(error==""){gel("ToPayment").disabled=true;var district=incode;if(gel("delivery_choice").value=="delivery"){if(document.getElementById("delivery_areas")!=null){if(document.getElementById("delivery_charge")!=null){var da=gel("delivery_areas");var dc=gel("delivery_charge");var df=gel("df");if(document.getElementById("df")!=null){if(df.innerHTML=="N/A"){PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}else{var da=gel("delivery_areas");var dap=gel("delivery_areasPlus");var dapp=gel("delivery_areasPlusPro");var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}var areaPlus=dap.value.split("|");m=0;while(areaPlus[m]){if(areaPlus[m].toLowerCase()==outcode.toLowerCase()||areaPlus[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}var areaPlusPro=dapp.value.split("|");m=0;while(areaPlusPro[m]){if(areaPlusPro[m].toLowerCase()==outcode.toLowerCase()||areaPlusPro[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}else{if(document.getElementById("delivery_pro")!=null){if(gel("df").innerText==="N/A"){PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}else{var k=1;while(k<=9){if(document.getElementById("delivery_areas"+k)!=null){var da=gel("delivery_areas"+k);var district=incode;var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}m++}}else{break}k++}PopBox('<p class="errors">Out of delivery range, Please Call <b>'+sline.value+"</b> or email to "+semail.value+" for advise.</p>");gel("ToPayment").disabled=false;return false}}}else{doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}}else{PopBox(error);return false}}
59function validSignupGuest(){var e=gel("email");var pwd=gel("password");var rpwd=gel("repeatpass");var n=gel("name");var p=gel("phone");var st=gel("street1");var c=gel("city");var postcode=gel("postcode");var pc=string_trim(postcode.value);var incode=pc.slice(-3);var outcode=string_trim(pc.slice(0,-3));var sline=gel("store_line");var semail=gel("store_email");var error="";var valid=false;var atpos=e.value.indexOf("@");var dotpos=e.value.lastIndexOf(".");if(atpos<1||dotpos<atpos+2||dotpos+2>=e.value.length){error=error+"<p class='errors'>Not a valid email address.</p>"}if(!rpwd.value||!pwd.value){error=error+"<p class='errors'>Input and confirm your password.</p>"}if(pwd.value!=rpwd.value){error=error+"<p class='errors'>Password not matched.</p>"}else{if(pwd.value.length<=3){error=error+"<p class='errors'>Password is too short.</p>"}}if(!checkUKTelephone(p.value)){error=error+"<p class='errors'>Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>"}if(string_trim(n.value)==""){error=error+"<p class='errors'>Your name is required.</p>"}if(string_trim(p.value)==""){error=error+"<p class='errors'>Your phone number is required.</p>"}if(string_trim(st.value)==""){error=error+"<p class='errors'>First line of your address is required.</p>"}if(string_trim(pc)==""){error=error+"<p class='errors'>Postcode is required.</p>"}if(!checkPostCode(pc)){error=error+"<p class='errors'>Invalid postcode.</p>"}if(error==""){if(document.getElementById("delivery_areas")!=null){if(document.getElementById("delivery_charge")!=null){var da=gel("delivery_areas");var dc=gel("delivery_charge");var district=incode;var areas=da.value.split("|");var m=0;var out=1;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){valid=true}m++}}else{var da=gel("delivery_areas");var dap=gel("delivery_areasPlus");var dapp=gel("delivery_areasPlusPro");var district=incode;var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){valid=true;break}m++}var areaPlus=dap.value.split("|");m=0;while(areaPlus[m]){if(areaPlus[m].toLowerCase()==outcode.toLowerCase()||areaPlus[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){valid=true;break}m++}var areaPlusPro=dapp.value.split("|");m=0;while(areaPlusPro[m]){if(areaPlusPro[m].toLowerCase()==outcode.toLowerCase()||areaPlusPro[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){valid=true;break}m++}}}else{if(document.getElementById("delivery_pro")!=null){doCheck(msg,"action="+cmd+"&name="+urlencode(n.value)+"&phone="+urlencode(p.value)+"&street1="+urlencode(st.value)+"&street2="+urlencode(document.getElementById("street2").value)+"&street3="+urlencode(urlencode(document.getElementById("street3").value))+"&outcode="+urlencode(outcode)+"&incode="+urlencode(incode)+"&city="+urlencode(c.value)+"&memo="+urlencode(document.getElementById("memo").value)+"&dtime="+urlencode(document.getElementById("schedule_time").value)+extra+"&asap="+asap);return true}else{var k=1;while(k<=9){if(document.getElementById("delivery_areas"+k)!=null){var da=gel("delivery_areas"+k);var district=incode;var areas=da.value.split("|");var m=0;while(areas[m]){if(areas[m].toLowerCase()==outcode.toLowerCase()||areas[m].toLowerCase()==outcode.toLowerCase()+" "+district[0]){valid=true;break}m++}}else{break}k++}}}if(valid==false){PopBox("<p class='errors'>Out of delivery range, Please Call <b>"+sline.value+"</b> or email to "+semail.value+" for advise.</p>");return false}}else{PopBox(error);return false}}function DeliveryChargesModal(reqOrMessage){let message;if(typeof reqOrMessage==="object"&&reqOrMessage.responseText){message=reqOrMessage.responseText}else{message=reqOrMessage}const modal=document.getElementById("DeliveryModal");const modalText=document.getElementById("DeliveryModalText");modalText.innerHTML=message;modal.style.display="flex";const closeButton=document.getElementById("closeDeliveryModal");closeButton.onclick=()=>{modal.style.display="none"};window.onclick=event=>{if(event.target===modal){modal.style.display="none"}}}function deliveryFees(){var loadParams=msg+"?action=delivery";doLoad(loadParams,DeliveryChargesModal,"","")}function toggle_delivery(is_delivery){localStorage.setItem("modeTr
59iggered",is_delivery?"delivery":"pickup");let form=document.createElement("form");let element1=document.createElement("input");let element2=document.createElement("input");form.method="POST";form.action="";element1.value="";element1.name="meals4uCheckout";form.appendChild(element1);element2.value=is_delivery?"delivery":"pickup";element2.name="delivery_choice";form.appendChild(element2);document.body.appendChild(form);form.submit()}function openingTime(){var loadParams=msg+"?action=opening";doLoad(loadParams,PopResultWithoutLoginStatus,"","")}function loginStatus(){var loadParams=msg+"?action=islogin";doLoad(loadParams,LoginResult,"login","")}function OrderDetails(oid){var loadParams=msg+"?action=order&oid="+oid;doLoad(loadParams,OrderResult,"","")}function storeStatus(){var loadParams=msg+"?action=status";doLoad(loadParams,PopResult,"","")}function hasValidScheduleTimeOption(){var schedule=gel("schedule_time");if(!schedule||!schedule.options||schedule.options.length===0){return false}for(var i=0;i<schedule.options.length;i++){var option=schedule.options[i];if(!option){continue}var optionValue=string_trim((option.value||"").toString());var optionText=string_trim((option.text||"").toString());if(optionValue!==""||optionText!==""){return true}}return false}function updateCheckoutAvailabilityByTimeSlot(){if(!gel("schedule_time")){return true}var hasValidSlot=hasValidScheduleTimeOption();var checkoutButton=gel("ToPayment");var unavailableMessage=gel("timeSlotUnavailableMessage");var timeConfirmButton=gel("toHideTimeDetail2");if(checkoutButton){checkoutButton.disabled=!hasValidSlot;checkoutButton.style.opacity=hasValidSlot?"":"0.6";checkoutButton.style.cursor=hasValidSlot?"":"not-allowed"}if(timeConfirmButton){timeConfirmButton.disabled=!hasValidSlot;timeConfirmButton.style.opacity=hasValidSlot?"":"0.6";timeConfirmButton.style.cursor=hasValidSlot?"":"not-allowed"}if(unavailableMessage){if(hasValidSlot){unavailableMessage.style.display="none"}else{unavailableMessage.style.display="block";unavailableMessage.style.margin="14px 0 18px 0";unavailableMessage.style.lineHeight="1.45"}}return hasValidSlot}function SetStime(){if(order_data_digital_wallet){order_data_digital_wallet={}}var st=gel("schedule_time");var stv=$("#schedule_time option:selected").text();if(stv.indexOf("As soon as")>=0||stv.indexOf("ASAP")>=0){var stime=""}else{var stime=urlencode(st.value)}var loadParams=msg+"?action=set_stime&stime="+stime;doLoad(loadParams,SetStimeResult,"","")}function SetStimeResult(oid){}function SetGateway(gateway,page,fee){document.getElementById("checkout_form").action=page;var mf=gel("meals4u_booking_fee_value");var mc=gel("meals4u_booking_charge");var um=gel("memo");var st=gel("schedule_time");var stv=$("#schedule_time option:selected").text();if(stv.indexOf("As soon as")>=0||stv.indexOf("ASAP")>=0){var stime=""}else{var stime=urlencode(st.value)}var loadParams=msg+"?action=booking_fee&fee="+fee+"&gateway="+gateway+"&stime="+stime+"&comments="+urlencode(um.value);doLoad(loadParams,setReload,"","")}function OrderResult(req,oid){if(string_trim(req.responseText)=="0"){PopBox("Please login your account to view this order.")}else{PopBox(req.responseText)}}function LoginResult(req,oid){if(string_trim(req.responseText)=="0"){document.getElementById(oid).innerHTML='<a href="/login">Login</a> | <a href="/signup">Sign up</a>'}else{document.getElementById(oid).innerHTML='<a href="/myaccount">My account</a> | <a href="/logout.php?ref='+urlencode(window.location.href.toString())+'">Log out</a>'}}function setEmpty(oid){document.getElementById(oid).innerHTML=""}function PopResult(req,oid){var r=req.responseText.split("|");if(r[0]=="1"&&req.responseText!="1"){ModalBox(r[1])}else{switch(req.responseText){case"1":break;default:PopBox(req.responseText);break}}loginStatus()}function PopResultWithoutLoginStatus(req,oid){var r=req.responseText.split("|");if(r[0]=="1"&&req.responseText!="1"){ModalBox(r[1])}else{switch(req.responseText){case"1":break;default:PopBox(req.responseText);break}}}function ModalBox(str){document.getElementById("meals4u-modal-lightbox").innerHTML=str;$("#meals4u-modal-link").trigger("click")}function PopBox(str,from_additional=false){digital_wallet_order_placed_successfully=false;digital_wallet_order_placing=false;document.getElementById("meals4u-result-lightbox").innerHTML=str;$("#meals4u-result-link").trigger("click");if(from_additional){additional_data=[];additional_data_selected=[];total_amount_additional=0;$(".bubble_box.toClick").trigger("click")}}function openModal(data){document.getElementById("freeDeliveryText").innerText=data.freeDeliveryText;document.getElementById("chargeRule1").innerText=data.chargeRule1;document.getElementById("chargeRule2").innerText=data.chargeRule2;document.getElementById("min1").innerText=data.min1;document.getElementById("min2").innerText=data.min2;document.getElementById("min3").innerText=data.min3;document.getElementById("customModal").style.display="flex"}function closeModal(){document.getElementById("customModal").style.display="none"}function doCheck(url,pData){if(url.indexOf("messenger.php")!==-1&&!gel("recaptcha_not_required")&&grecaptcha&&grecaptcha.getResponse().length!==0){pData+="&reCaptchaResponse="+grecaptcha.getResponse()}setTimeout(()=>
59{if(window.XMLHttpRequest){req=new XMLHttpRequest;req.onreadystatechange=processOrder;req.open("POST",url,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.send(pData)}else if(window.ActiveXObject){req=new ActiveXObject("Microsoft.XMLHTTP");if(req){req.onreadystatechange=processOrder;req.open("POST",url,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.send(pData)}}},1e3)}let digital_req=null;function digitalWalletCheck(url,pData){setTimeout(()=>{if(window.XMLHttpRequest){digital_req=new XMLHttpRequest;digital_req.onreadystatechange=processOrder_digital;digital_req.open("POST",url,true);digital_req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");digital_req.send(pData)}else if(window.ActiveXObject){digital_req=new ActiveXObject("Microsoft.XMLHTTP");if(digital_req){digital_req.onreadystatechange=processOrder_digital;digital_req.open("POST",url,true);digital_req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");digital_req.send(pData)}}},100)}function DeliveryResultUpdate_guest(req,oid){end_loader();delivery_updated=true;return true}function start_loader(){$("body").append('<div style="" id="loadingDiv"><div class="loader">Loading...</div></div>')}function end_loader(){$("#loadingDiv").fadeOut(500,function(){$("#loadingDiv").remove()})}function processOrder(){if(req.readyState==4){if(req.status==200){var r=req.responseText;if(r.indexOf("errors")!=-1){PopBox(r);gel("ToPayment").disabled=false;return false}else var purl=document.getElementById("checkout_form").action;const smallDiscountFlag=document.getElementById("isSmallDiscountApplicable");if(smallDiscountFlag&&smallDiscountFlag.value==="1"){const value=parseFloat(document.querySelector("#meals4u-subtotal").innerText.match(/[\d.]+/)[0]);const discount=parseFloat(doLoadSync(msg+"?action=small_discount_checker&total="+value));if(!isNaN(discount)&&discount<value){showDiscountModal(value,discount).then(()=>{if(google_pay_enabled&&document.getElementById("meals4u-checkout-options-googlepay").checked){digitalWalletCheck("/api/api.wallets.php?vcode="+urlencode(r),"");return true}else if(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked){digitalWalletCheck("/api/api.wallets.php?vcode="+urlencode(r),"");return true}else{window.location.replace(purl+"?vcode="+urlencode(r))}});return false}}if(google_pay_enabled&&document.getElementById("meals4u-checkout-options-googlepay").checked){digitalWalletCheck("/api/api.wallets.php?vcode="+urlencode(r),"");return true}else if(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked){digitalWalletCheck("/api/api.wallets.php?vcode="+urlencode(r),"");return true}else{window.location.replace(purl+"?vcode="+urlencode(r))}}}}let order_data_digital_wallet={};function processOrder_digital(){if(digital_req.readyState==4){if(digital_req.status==200){let r=digital_req.responseText;r=JSON.parse(r);if(r.is_error){if(r.message==="duplicate"){window.location.href="/myaccount?msg=duplicate";return}}order_data_digital_wallet=r;if(google_pay_enabled&&document.getElementById("meals4u-checkout-options-googlepay").checked){onGooglePaymentButtonClicked_POST_data_from_server(r)}else if(document.getElementById("meals4u-checkout-options-applepay")&&apple_pay_enabled&&document.getElementById("meals4u-checkout-options-applepay").checked){onApplePaymentButtonClicked_POST_data_from_server(r)}}}}function checkPostCode(toCheck){var alpha1="[abcdefghijklmnoprstuwyz]";var alpha2="[abcdefghklmnopqrstuvwxy]";var alpha3="[abcdefghjkpmnrstuvwxy]";var alpha4="[abehmnprvwxy]";var alpha5="[abdefghjlnpqrstuwxyz]";var pcexp=new Array;pcexp.push(new RegExp("^("+alpha1+"{1}"+alpha2+"?[0-9]{1,2})(\\s*)([0-9]{1}"+alpha5+"{2})$","i"));pcexp.push(new RegExp("^("+alpha1+"{1}[0-9]{1}"+alpha3+"{1})(\\s*)([0-9]{1}"+alpha5+"{2})$","i"));pcexp.push(new RegExp("^("+alpha1+"{1}"+alpha2+"{1}"+"?[0-9]{1}"+alpha4+"{1})(\\s*)([0-9]{1}"+alpha5+"{2})$","i"));pcexp.push(/^(GIR)(\s*)(0AA)$/i);pcexp.push(/^(bfpo)(\s*)([0-9]{1,4})$/i);
59pcexp.push(/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);pcexp.push(/^([A-Z]{4})(\s*)(1ZZ)$/i);var postCode=toCheck;var valid=false;for(var i=0;i<pcexp.length;i++){if(pcexp[i].test(postCode)){pcexp[i].exec(postCode);postCode=RegExp.$1.toUpperCase()+" "+RegExp.$3.toUpperCase();postCode=postCode.replace(/C\/O\s*/,"c/o ");valid=true;break}}if(valid){return postCode}else return false}function checkUKTelephone(telephoneNumber){var telnum=telephoneNumber+" ";if(telnum.length==1){telNumberErrorNo=1;return false}telnum.length=telnum.length-1;var exp=/^(\+)[\s]*(.*)$/;if(exp.test(telnum)==true){telNumberErrorNo=2;return false}while(telnum.indexOf(" ")!=-1){telnum=telnum.slice(0,telnum.indexOf(" "))+telnum.slice(telnum.indexOf(" ")+1)}while(telnum.indexOf("-")!=-1){telnum=telnum.slice(0,telnum.indexOf("-"))+telnum.slice(telnum.indexOf("-")+1)}exp=/^[0-9]{10,11}$/;if(exp.test(telnum)!=true){telNumberErrorNo=3;return false}exp=/^0[0-9]{9,10}$/;if(exp.test(telnum)!=true){telNumberErrorNo=4;return false}var tnexp=new Array;tnexp.push(/^(0113|0114|0115|0116|0117|0118|0121|0131|0141|0151|0161)(4960)[0-9]{3}$/);tnexp.push(/^02079460[0-9]{3}$/);tnexp.push(/^01914980[0-9]{3}$/);tnexp.push(/^02890180[0-9]{3}$/);tnexp.push(/^02920180[0-9]{3}$/);tnexp.push(/^01632960[0-9]{3}$/);tnexp.push(/^07700900[0-9]{3}$/);tnexp.push(/^08081570[0-9]{3}$/);tnexp.push(/^09098790[0-9]{3}$/);tnexp.push(/^03069990[0-9]{3}$/);for(var i=0;i<tnexp.length;i++){if(tnexp[i].test(telnum)){telNumberErrorNo=5;return false}}exp=/^(01|02|03|05|070|071|072|073|074|075|07624|077|078|079)[0-9]+$/;if(exp.test(telnum)!=true){telNumberErrorNo=5;return false}return telnum}const baseRequest={apiVersion:2,apiVersionMinor:0};let google_pay_loading=false;const allowedCardNetworks=["MASTERCARD","VISA"];const allowedCardAuthMethods=["PAN_ONLY","CRYPTOGRAM_3DS"];const tokenizationSpecification={type:"PAYMENT_GATEWAY",parameters:{gateway:"globalpayments",gatewayMerchantId:"meals4ultd"}};const baseCardPaymentMethod={type:"CARD",parameters:{allowedAuthMethods:allowedCardAuthMethods,allowedCardNetworks:allowedCardNetworks}};const cardPaymentMethod=Object.assign({},baseCardPaymentMethod,{tokenizationSpecification:tokenizationSpecification});let paymentsClient=null;function getGoogleIsReadyToPayRequest(){return Object.assign({},baseRequest,{allowedPaymentMethods:[baseCardPaymentMethod]})}function getGooglePaymentDataRequest(json_data){const paymentDataRequest=Object.assign({},baseRequest);paymentDataRequest.allowedPaymentMethods=[cardPaymentMethod];paymentDataRequest.transactionInfo=getGoogleTransactionInfo(json_data);paymentDataRequest.merchantInfo={merchantId:"BCR2DN4TVD66VCRC",merchantName:"Meals 4U",merchantOrigin:document.getElementById("domain_name").value,authJwt:document.getElementById("jwt_token").value};return paymentDataRequest}function getGooglePaymentsClient(){if(paymentsClient===null){paymentsClient=new google.payments.api.PaymentsClient({environment:"PRODUCTION"})}return paymentsClient}let google_pay_enabled=false;function onGooglePayLoaded(){if(!gel("container_google_pay")){return}google_pay_enabled=true;const paymentsClient=getGooglePaymentsClient();paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest()).then(function(response){if(response.result){addGooglePayButton()}}).catch(function(err){console.error(err)})}function addGooglePayButton(){const paymentsClient=getGooglePaymentsClient();const button=paymentsClient.createButton({onClick:onGooglePaymentTopButtonClicked,buttonType:"order"});document.getElementById("container_google_pay").appendChild(button);if(document.getElementById("meals4u-checkout-options-googlepay").checked){let isIOS=/(iPhone|iPod|iPad)/i.test(navigator.platform);let isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);if(isIOS||isSafari){let toPayment=document.getElementById("ToPayment");toPayment.style.background="none";toPayment.style.backgroundImage="none";toPayment.style.background="none";toPayment.style.backgroundUrl="none";toPayment.style.backgroundColor="#e87428";document.getElementById("ToPayment").classList.add("go_to_menu_button");document.getElementById("ToPayment").value="Validate order and checkout";document.querySelectorAll("select, input").forEach(item=>{item.addEventListener("change",event=>{document.getElementById("ToPayment").style.display="block";gel("ToPayment").disabled=false;document.getElementById("container_google_pay_actual").style.display="none"})})}else{document.getElementById("ToPayment").style.display="none";const button_2=paymentsClient.createButton({onClick:onGooglePaymentButtonClicked});document.getElementById("container_google_pay_actual").appendChild(button_2)}}}function getGoogleTransactionInfo(json_data){let display_items=[];if(json_data.cart&&json_data.cart.length>0){for(let i=0;i<json_data.cart.length;i++){let item={label:json_data.cart[i].name,type:"LINE_ITEM",price:parseFloat(json_data.cart[i].subtotal).toFixed(2)};if(json_data.cart[i].id==="Discount"){item.price="-"+item.price}display_items.push(item)}}else{alert("There is an error in the cart, please try again later");return null}return{transactionId:json_data.order_id,countryCode:"GB",currencyCode:"GBP",totalPriceStatus:"FINAL",totalPrice:(json_data.amount/100).toFixed(2),totalPriceLabel:"Final total",displayItems:display_items}}function prefetchGooglePaymentData(){const paymentDataRequest=getGooglePaymentDataRequest();paymentDataRequest.transactionInfo={totalPriceStatus:"NOT_CURRENTLY_KNOWN",currencyCode:"GBP"};const paymentsClient=getGooglePaymentsClient();paymentsClient.prefetchPaymentData(paymentDataRequest)}function onGooglePaymentTopButtonClicked(){document.getElementById("meals4u-checkout-options-googlepay").click()}function __sleep(ms){return new Promise(resolve=>setTimeout(resolve,ms))}async function onGooglePaymentButtonClicked(){if(JSON.stringify(order_data_digital_wallet)!=="{}"){onGooglePaymentButtonClicked_POST_data_from_server(order_data_digital_wallet,true)}else{document.getElementById("ToPayment").click()}}function onGooglePaymentButtonClicked_POST_data_from_server(json_data,is_force=false){let isIOS=/(iPhone|iPod|iPad)/i.test(navigator.platform);let isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);const paymentsClient=getGooglePaymentsClient();if((isIOS||isSafari)&&!is_force){document.getElementById("ToPayment").style.display="none";document.getElementById("container_google_pay_actual").style.display="block";if(document.getElementById("container_google_pay_actual").innerHTML===""){const button_2=paymentsClient.createButton({onClick:onGooglePaymentButtonClicked});document.getElementById("container_google_pay_actual").appendChild(button_2)}return}const paymentDataRequest=getGooglePaymentDataRequest(json_data);paymentDataRequest.transactionInfo=getGoogleTransactionInfo(json_data);paymentsClient.loadPaymentData(paymentDataRequest).then(function(paymentData){processPayment(paymentData)}).catch(function(err){gel("ToPayment").disabled=false;end_loader();console.error(err)})}function processPayment(paymentData){start_loader();paymentToken=paymentData.paymentMethodData.tokenizationData.token;let token=paymentToken;let amount=order_data_digital_wallet.amount;let amount_string=(order_data_digital_wallet.amount/100).toFixed(2);let order_id=order_data_digital_wallet.order_id;let is_google="true";let params="is_google=true&token="+urlencode(token)+"&amount="+urlencode(amount)+"&order_id="+urlencode(order_id)+"&amount_string="+urlencode(amount_string);digitalWalletFinalCheck("/api/digital_wallet_final.php",params,finalProcessDigital)}let digital_req_final=null;function digitalWalletFinalCheck(url,pData,callback){setTimeout(()=>{if(window.XMLHttpRequest){digital_req_final=new XMLHttpRequest;digital_req_final.onreadystatechange=callback;digital_req_final.open("POST",url,true);digital_req_final.setRequestHeader("Content-Type","application/x-www-form-urlencoded");digital_req_final.send(pData)}else if(window.ActiveXObject){digital_req_final=new ActiveXObject("Microsoft.XMLHTTP");if(digital_req_final){digital_req_final.onreadystatechange=callback;digital_req_final.open("POST",url,true);digital_req_final.setRequestHeader("Content-Type","application/x-www-form-urlencoded");digital_req_final.send(pData)}}},100)}function finalProcessDigital(){if(digital_req_final.readyState==4){if(digital_req_final.status==200){let res=digital_req_final.responseText;end_loader();PopBox(res)}}}let apple_pay_enabled=false;var applePayUiController=function(){var DOMStrings={appleButton:"ckoApplePay",appleButtonActual:"ckoApplePay_actual",appleButtonContainer:"container_apple_pay_actual",errorMessage:"ckoApplePayError",applePayRadioButton:"meals4u-checkout-options-applepay"};return{DOMStrings:DOMStrings,displayApplePayButton:function(){document.getElementById(DOMStrings.appleButton).style.display="block";if(document.getElementById("meals4u-checkout-options-applepay").checked){shipping_label=document.getElementById("delivery_choice").value==="delivery"?"Delivery Charges":"Collection Order";document.getElementById("ToPayment").style.display="none";document.getElementById(DOMStrings.appleButtonContainer).style.display="block"}},hideApplePayButton:function(){if(document.getElementById(DOMStrings.appleButton))document.getElementById(DOMStrings.appleButton).style.display="none";if(document.getElementById(DOMStrings.appleButtonContainer))document.getElementById(DOMStrings.appleButtonContainer).style.display="none";if(document.getElementById(DOMStrings.applePayRadioButton))document.getElementById(DOMStrings.applePayRadioButton).style.display="none"},displayErrorMessage:function(){}}}();var delivery_charges=0;var apple_pay_loading=false;var digital_wallet_order_placing=false;var digital_wallet_order_placed_successfully=false;var lineItems=[];var totalApplePay={};var applePayMerchantSessionIdentifier="";var shipping_label="Delivery Charges";var applePayController=function(uiController){var BACKEND_URL_VALIDATE_SESSION="https://{your backend URL}/validateSession";var BACKEND_URL_PAY="https://{your backend URL}/pay";var config={payments:{acceptedCardSchemes:["masterCard","visa"]},shop:{product_price:1,shop_name:"Meals4U",shop_localisation:{currencyCode:"GBP",countryCode:"GB"}},shipping:{GB_region:[{label:shipping_label,amount:delivery_charges.toFixed(2),detail:"",identifier:"freeShipping"}]}};var _applePayAvailable=function(){return window.ApplePaySession&&ApplePaySession.canMakePayments()};var _startApplePaySession=async function(config){var applePaySession=new ApplePaySession(6,config);_handleApplePayEvents(applePaySession);let retry=0;while(!digital_wallet_order_placed_successfully&&retry<50){console.log("Waiting for order to be placed");retry++;await __sleep(500)}digital_wallet_order_placing=false;if(!digital_wallet_order_placed_successfully){console.log("Apple Pay order was not placed, please try again later");return}applePaySession.begin()};var _validateApplePaySession=function(appleUrl_,callback){let hostName=window.location.hostname;fetch("https://admin.refund.tmssite.com/validateSession",{method:"post",mode:"cors",body:JSON.stringify({appleUrl_:appleUrl_,domain_name:hostName}),headers:{"Access-Control-Allow-Origin":"*","Content-Type":"application/json",charset
59:"utf-8"}}).then(res=>res.json()).then(callback)};var _getAvailableShippingMethods=function(region){if(region==="GB"){return{methods:config.shipping.GB_region}}else{return{methods:config.shipping.WORLDWIDE_region}}};var _calculateTotal=function(subtotal,shipping){return(parseFloat(subtotal)+parseFloat(shipping)).toFixed(2)};var _performTransaction=function(details,callback){let paymentToken=details.token;let amount=order_data_digital_wallet.amount;let amount_string=(order_data_digital_wallet.amount/100).toFixed(2);let order_id=order_data_digital_wallet.order_id;let useOpayo=!!document.getElementById("meals4u-checkout-options-opayo");let token=useOpayo?paymentToken:paymentToken.paymentData;let params="is_google=false&token="+urlencode(JSON.stringify(token))+"&amount="+urlencode(amount)+"&order_id="+urlencode(order_id)+"&amount_string="+urlencode(amount_string);if(useOpayo&&applePayMerchantSessionIdentifier){params+="&merchantSessionIdentifier="+urlencode(applePayMerchantSessionIdentifier)}digitalWalletFinalCheck("/api/digital_wallet_final.php",params,callback)};var _handleApplePayEvents=function(appleSession){appleSession.onvalidatemerchant=function(event){_validateApplePaySession(event.validationURL,function(merchantSession){console.log(merchantSession);if(merchantSession&&merchantSession.merchantSessionIdentifier){applePayMerchantSessionIdentifier=merchantSession.merchantSessionIdentifier}appleSession.completeMerchantValidation(merchantSession)})};appleSession.onpaymentmethodselected=async function(event){var shipping=_getAvailableShippingMethods(config.shop.shop_localisation.countryCode);shipping.methods[0].amount=delivery_charges;shipping.methods[0].label=shipping_label;let i=0;while(apple_pay_loading){await __sleep(500);i++;if(i>15){apple_pay_loading=false;appleSession.abort();return}}var newTotal=totalApplePay;var newLineItems=lineItems;appleSession.completePaymentMethodSelection(newTotal,newLineItems)};appleSession.onshippingmethodselected=function(event){var newTotal=totalApplePay;var newLineItems=lineItems;appleSession.completeShippingMethodSelection(ApplePaySession.STATUS_SUCCESS,newTotal,newLineItems)};appleSession.onpaymentauthorized=function(event){_performTransaction(event.payment,function(outcome){if(digital_req_final.readyState==4){if(digital_req_final.status==200){let res=digital_req_final.responseText;
59if(res.indexOf("Thank you!")!==-1){appleSession.completePayment(ApplePaySession.STATUS_SUCCESS)}else{appleSession.completePayment(ApplePaySession.STATUS_FAILURE)}setTimeout(()=>{PopBox(res)},500)}}})};appleSession.oncancel=function(event){gel("ToPayment").disabled=false}};var _sleep=function(milliseconds){const date=Date.now();let currentDate=null;do{currentDate=Date.now()}while(currentDate-date<milliseconds)};var _setButtonClickListener=function(){document.getElementById(uiController.DOMStrings.appleButtonActual).addEventListener("click",function(){apple_pay_loading=true;let amount="5.00";if(document.getElementById("meals4u-subtotal")){amount=Number(gel("meals4u-subtotal").innerText.split("£")[1]).toFixed(2)}else if(document.getElementById("tsp")){amount=Number(gel("tsp").innerText).toFixed(2)}if(digital_wallet_order_placing){alert("Your order is being placed, please wait a moment, if this takes too long, please refresh this page and try again");return}digital_wallet_order_placing=true;digital_wallet_order_placed_successfully=false;_startApplePaySession({currencyCode:config.shop.shop_localisation.currencyCode,countryCode:config.shop.shop_localisation.countryCode,merchantCapabilities:["supports3DS"],supportedNetworks:config.payments.acceptedCardSchemes,lineItems:lineItems,total:{label:config.shop.shop_name,amount:amount,type:"final"}});document.getElementById("ToPayment").click()});document.getElementById(uiController.DOMStrings.appleButton).addEventListener("click",function(){document.getElementById(uiController.DOMStrings.applePayRadioButton).click()})};return{init:function(){if(_applePayAvailable()){apple_pay_enabled=true;uiController.displayApplePayButton();_setButtonClickListener()}else{uiController.hideApplePayButton();uiController.displayErrorMessage()}},init_transaction:function(json_data){lineItems=[];totalApplePay={label:config.shop.shop_name,amount:(Number(json_data.amount)/100).toFixed(2),type:"final"};if(!json_data.cart)return;for(let i=0;i<json_data.cart.length;i++){let lineItem={};if(json_data.cart[i].name==="Delivery Charge"){delivery_charges=Number(json_data.cart[i].subtotal).toFixed(2)}if(json_data.cart[i].name!=="Discount"){lineItem={label:json_data.cart[i].name,amount:Number(json_data.cart[i].subtotal).toFixed(2),type:"final"}}else{lineItem={label:json_data.cart[i].name,amount:"-"+Number(json_data.cart[i].subtotal).toFixed(2),type:"final"}}lineItems.push(lineItem)}apple_pay_loading=false}}}(applePayUiController);function eventFire(el,etype){if(el.fireEvent){el.fireEvent("on"+etype)}else{var evObj=document.createEvent("Events");evObj.initEvent(etype,true,false);el.dispatchEvent(evObj)}}function onApplePaymentButtonClicked_POST_data_from_server(json_data){digital_wallet_order_placed_successfully=true;setTimeout(()=>{applePayController.init_transaction(json_data)},500)}setTimeout(()=>{applePayController.init()},1e3);setTimeout(()=>{const name=document.getElementById("name");const phone=document.getElementById("phone");const postcode=document.getElementById("postcode");const street1=document.getElementById("street1");const street2=document.getElementById("street2");const street3=document.getElementById("street3");const city=document.getElementById("city");const account_email=document.getElementById("account_email");if(name){name.addEventListener("input",makeOrderNull)}if(phone){phone.addEventListener("input",makeOrderNull)}if(postcode){postcode.addEventListener("input",makeOrderNull)}if(street1){street1.addEventListener("input",makeOrderNull)}if(street2){street2.addEventListener("input",makeOrderNull)}if(street3){street3.addEventListener("input",makeOrderNull)}if(city){city.addEventListener("input",makeOrderNull)}if(account_email){account_email.addEventListener("input",makeOrderNull)}},200);function makeOrderNull(){if(order_data_digital_wallet){order_data_digital_wallet={}}}function pickup_reminder(){alert("Home delivery service is currently not available.")}function delivery_reminder(){alert("In store collection service is currently not available.")}function showDetails(){let arr=["toHideAddressRow0","toHideAddressRow1","toHideAddressRow2","toHideAddressRow3","toHideAddressRow4","toHideAddressRow5","toHideAddressRow6","toHideAddressRow7","toHideAddressRow8","toHideAddressRow9","toHideAddressRow10"];let email=gel("email").value;let name=gel("name").value;let phone=gel("phone").value;if(!email||email===""){PopBox("<p class='errors'>Email is required</p>");return}if(!name||name===""){PopBox("<p class='errors'>First name is required</p>");return}if(!phone||phone===""||!checkUKTelephone(phone)){PopBox("<p class='errors'>Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>");return}if(gel("city")){let city=gel("city").value;if(!city||city===""){PopBox("<p class='errors'>Town or city is required</p>");return}}let postcode=document.getElementById("postcode").value;if(!postcode||!checkPostCode(postcode)){PopBox("<p class='errors'>Invalid postcode.</p>");return}let street=gel("street1").value;if((!street||street==="")&&gel("delivery_choice").value==="delivery"){PopBox("<p class='errors'>First line of address is required</p>");return}for(let i=0;i<arr.length;i++){let div=document.getElementById(arr[i]);if(div.style.display!=="none"){div.style.display="none"}else{div.style.display=""}}let div=document.getElementById("formTick");if(div.style.display!=="none"){div.style.display="none"}else{div.style.display="inline-block"}let detail=document.getElementById("name").value+"<br>"+" "+document.getElementById("phone").value+"<br>"+" "+document.getElementById("street1").value+"<br>"+" "+document.getElementById("postcode").value;document.getElementById("detailParagraph").innerHTML=detail;let detailEmail=document.getElementById("email").value;document.getElementById("detailEmail").style.marginTop=detail.length+"px";document.getElementById("detailEmail").innerHTML="Confirmation email will be sent to "+"<strong>"+detailEmail+"</strong>"}function TimeDetails(){let e=document.getElementById("schedule_time");if(e.selectedIndex<0){alert("Please select a valid time");return}let arr2=["toHideTimeDetail1","toHideTimeDetail2","toHideTimeDetail3","TimeButton","toHideTimeDetail4"];for(let i=0;i<arr2.length;i++){let div=document.getElementById(arr2[i]);if(div.style.display!=="none"){div.style.display="none"}else{div.style.display="block"}}let div=document.getElementById("timeTick");if(div.style.display!=="none"){div.style.display="none"}else{div.style.display="inline-block"}let timeDetail=e.options[e.selectedIndex].text;document.getElementById("toHideTimeDetail3").innerHTML="Your Selected Delivery Time is:  "+"<strong>"+timeDetail+"</strong>"}function showGDetails(){let email=gel("account_email").value;let name=gel("name").value;let phone=gel("phone").value;if(gel("phone")&&phone&&phone.indexOf("+44")===0){gel("phone").value=phone.replace("+44","0");phone=phone.replace("+44","0")}
59if(!email||email===""){PopBox("<p class='errors'>Email is required</p>");return}if(!name||name===""){PopBox("<p class='errors'>First name is required</p>");return}if(!phone||phone===""||!checkUKTelephone(phone)){PopBox("<p class='errors'>Invalid phone number. UK telephone numbers should contain 10 or 11 digits, and start with a 0.</p>");return}if(gel("delivery_choice").value==="delivery"){let arr=["toHideGAddressRow1","toHideGAddressRow2","toHideGAddressRow3","toHideGAddressRow4","toHideGAddressRow5","toHideGAddressRow6","toHideGAddressRow7","toHideGAddressRow8","toHideGAddressRow9","toHideGAddressRow10","toHideGAddressRow11","toHideGAddressRow12"];let postcode=document.getElementById("postcode").value;if(!postcode||!checkPostCode(postcode)){PopBox("<p class='errors'>Invalid postcode.</p>");return}let street=gel("street1").value;if(!street||street===""){PopBox("<p class='errors'>First line of address is required</p>");return}let city=gel("city").value;if(!city||city===""){PopBox("<p class='errors'>Town or city 
59is required</p>");return}for(let i=0;i<arr.length;i++){let div=document.getElementById(arr[i]);if(div.style.display!=="none"){div.style.display="none"}else{div.style.display=""}}let div=document.getElementById("GformTick");if(div.style.display!=="none"){div.style.display="none"}else{div.style.display="inline-block"}let detail=document.getElementById("name").value+"<br>"+" "+document.getElementById("phone").value+"<br>"+" "+document.getElementById("street1").value+"<br>"+" "+document.getElementById("postcode").value;document.getElementById("GdetailParagraph").innerHTML=detail;let GdetailEmail=document.getElementById("account_email").value;document.getElementById("GdetailEmail").style.marginTop=detail.length+"px";document.getElementById("GdetailEmail").innerHTML="Confirmation email will be sent to "+"<strong>"+GdetailEmail+"</strong>"}else{let arr=["toHideGAddressRow5","toHideGAddressRow6","toHideGAddressRow7","toHideGAddressRow1","toHideGAddressRow2","toHideGAddressRow3","toHideGAddressRow4"];if(gel("force_address_in_guest_checkout")&&gel("force_address_in_guest_checkout").value==="1"){arr=["toHideGAddressRow1","toHideGAddressRow2","toHideGAddressRow3","toHideGAddressRow4","toHideGAddressRow5","toHideGAddressRow6","toHideGAddressRow7","toHideGAddressRow8","toHideGAddressRow9","toHideGAddressRow10","toHideGAddressRow11","toHideGAddressRow12"];let postcode=document.getElementById("postcode").value;if(!postcode||!checkPostCode(postcode)){PopBox("<p class='errors'>Invalid postcode.</p>");return}let street=gel("street1").value;if(!street||street===""){PopBox("<p class='errors'>First line of address is required</p>");return}}for(let i=0;i<arr.length;i++){let div=document.getElementById(arr[i]);if(div.style.display!=="none"){div.style.display="none"}else{div.style.display=""}}let div=document.getElementById("GformTick");if(div.style.display!=="none"){div.style.display="none"}else{div.style.display="inline-block"}let detail=document.getElementById("name").value+"<br>"+" "+document.getElementById("phone").value+"<br>";if(gel("force_address_in_guest_checkout")&&gel("force_address_in_guest_checkout").value==="1"){detail=document.getElementById("name").value+"<br>"+" "+document.getElementById("phone").value+"<br>"+" "+document.getElementById("street1").value+"<br>"+" "+document.getElementById("postcode").value}document.getElementById("GdetailParagraph").innerHTML=detail;let GdetailEmail=document.getElementById("account_email").value;document.getElementById("GdetailEmail").style.marginTop=detail.length+"px";document.getElementById("GdetailEmail").innerHTML="Confirmation email will be sent to "+"<strong>"+GdetailEmail+"</strong>"}}function goToMenu(){window.location.href="/menu"}function createDiscountModal(){return new Promise(resolve=>{if(document.getElementById("discountModal")){const modal=document.getElementById("discountModal");modal.style.display="flex";const closeBtn=document.getElementById("closeModal");const handler=()=>{modal.style.display="none";closeBtn.removeEventListener("click",handler);resolve()};closeBtn.addEventListener("click",handler);return}const style=document.createElement("style");style.textContent=`
60		#discountModal {
61			display:none; position:fixed; top:0; left:0; width:100%; height:100%;
62			background:rgba(0,0,0,0.5); justify-content:center; align-items:center; z-index:1000;
63			animation: fadeIn 0.3s ease;
64		}
65		#discountModal .modal-box {
66			border-radius: 8px;
67			border: 1px solid #F77337;
68			background: #FFF;
69			display: inline-flex;
70			padding: 40px 24px 32px 24px;
71			flex-direction: column;
72			align-items: center;
73			animation: scaleIn 0.3s ease;
74		}
75		#discountModal h3 {
76			margin:0 0 10px; color:#333; font-size:20px; font-weight:600;
77		}
78		#discountModal p {
79			font-size:18px; color:#222; margin:10px 0 20px;
80		}
81		#discountModal .old-price {
82			text-decoration: line-through; color:#222; margin-right:5px;
83		}
84		#discountModal .new-price {
85			color:#d93025; font-weight:bold; font-size:22px;
86		}
87		#discountModal button {
88			background:#ff7b00; color:white; border:none; padding:10px 30px;
89			border-radius:8px; font-size:16px; cursor:pointer; transition:background 0.2s;
90		}
91		#discountModal button:hover {
92			background:#e46e00;
93		}
94		@keyframes fadeIn {
95			from { opacity: 0; } to { opacity: 1; }
96		}
97		@keyframes scaleIn {
98			from { transform: scale(0.9); opacity:0; } to { transform: scale(1); opacity:1; }
99		}
100		`;document.head.appendChild(style);const modal=document.createElement("div");modal.id="discountModal";modal.innerHTML=`
101		<div class="modal-box">
102			<h3>Small Discount Applied!</h3>
103			<p>Total Now <span class="old-price" id="oldPrice"></span><span class="new-price" id="newPrice"></span></p>
104			<button id="closeModal">Got it</button>
105		</div>
106		`;document.body.appendChild(modal);const closeBtn=document.getElementById("closeModal");closeBtn.addEventListener("click",()=>{modal.style.display="none";resolve()});modal.style.display="flex"})}function showDiscountModal(oldValue,newValue){return new Promise(resolve=>{createDiscountModal();setTimeout(()=>{const modal=document.getElementById("discountModal");const oldPriceEl=modal.querySelector("#oldPrice");const newPriceEl=modal.querySelector("#newPrice");const closeBtn=modal.querySelector("#closeModal");if(oldPriceEl&&newPriceEl){oldPriceEl.textContent=`£${oldValue.toFixed(2)}`;newPriceEl.textContent=`£${newValue.toFixed(2)}`}else{console.warn("⚠️ Price elements not found in modal.")}modal.style.display="flex";closeBtn.onclick=()=>{modal.style.display="none";resolve()}},0)})}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.