
var BasketModel=function(){var basket=[];var basketTotal=0;var fees={};var listeners=[];var that=this;var userDataAvailable=false;this.getBasket=function(){return basket;}
this.isBasketEmpty=function(){return basket.length==0;}
this.isInBasket=function(id){var i=basket.length;while(i--){if(basket[i].id==id){return i;}}
return null;}
this.isProfileSpecific=function(){return(typeof userData!="undefined"&&userData.ugroup=="Client");}
this.updateBasketTotal=function(){var total=0;var i=basket.length;while(i--){total+=basket[i].amount*basket[i].price;}
for(var i in fees){total+=fees[i];}
total=total.toFixed(2);basketTotal=total;this.notifyBasketTotalUpdate();}
this.getBasketTotal=function(){return basketTotal;}
this.getDeliveryFee=function(){return deliveryFee;}
this.addDeliveryFee=function(){fees.delivery=this.getDeliveryFee();this.updateBasketTotal();}
this.removeDeliveryFee=function(){fees.delivery=0;this.updateBasketTotal();}
this.handleToggledProductGroup=function(id,visible){if(visible){this.saveExpandedProductGroup(id);}else{this.removeExpandedProductGroup(id);}}
this.loadExpandedProductGroups=function(){var groups=this.getCookie("expandedProductGroups");if(!groups||groups.constructor!=Array){groups=[];}
return groups;}
this.saveExpandedProductGroup=function(id){var groups=this.loadExpandedProductGroups();groups.push(id);this.bakeExpandedProductGroups(groups);}
this.removeExpandedProductGroup=function(id){var groups=this.loadExpandedProductGroups();var l=groups.length;for(var i=l;i--;){if(groups[i]==id){groups.splice(i,1);break;}}
if(groups.length==0){var path=location.pathname.substr(0,location.pathname.lastIndexOf("/"));this.unbake("expandedProductGroups",{path:path});}else{this.bakeExpandedProductGroups(groups);}}
this.bakeExpandedProductGroups=function(groups){var path=location.pathname.substr(0,location.pathname.lastIndexOf("/"));var expiryDate=new Date();expiryDate.setFullYear(expiryDate.getFullYear()+1);this.bake("expandedProductGroups",groups,{expiresAt:expiryDate,path:path});}
this.addToBasket=function(data){var basketID=this.isInBasket(data.id);if(basketID!=null){basket[basketID].id=data.id;basket[basketID].amount++;this.notifyUpdatedProduct(basket[basketID]);}else{basket.push(data);this.notifyAddedProduct(data);}
this.updateBasketTotal();this.bakeProducts();}
this.restoreBasket=function(data){basket=data;this.updateBasketTotal();}
this.removeFromBasket=function(id){var basketID=this.isInBasket(id);var devnull=basket.splice(basketID,1);this.bakeProducts();this.updateBasketTotal();this.notifyRemovedProduct(id);}
this.resetBasket=function(){basket=[];this.unbake("products");this.updateBasketTotal();this.notifyBasketReset();}
this.updateProductAmount=function(id,amount){var basketID=this.isInBasket(id);if(amount>0){basket[basketID].amount=amount;}else{this.removeFromBasket(id);}
this.updateBasketTotal();}
this.bake=function(name,data,params){if(!params){$.cookies.set(name,data);}else{$.cookies.set(name,data,params);}}
this.unbake=function(name,params){if(!params){$.cookies.del(name);}else{$.cookies.del(name,params);}}
this.getCookie=function(name){return $.cookies.get(name);}
this.bakeProducts=function(){var l=basket.length;if(l>0){var products=[];for(var i=0;i<l;i++){products.push({id:basket[i].id,amount:basket[i].amount})}
this.bake("products",products);}else{this.unbake("products");}}
this.postOrder=function(dataObj){var basket=this.getBasket();var basketContents="";var l=basket.length;for(var i=0;i<l;i++){var product=basket[i];basketContents+=product.id+": "+product.title+" x "+product.amount+"\n";}
dataObj['lang']=translation.lang;dataObj['basket']=basketContents;dataObj['basketTotal']=this.getBasketTotal();if(dataObj.delivery){dataObj['delivery_fee']=this.getDeliveryFee();}
$.post(siteIndex+"plugins/products_and_ordering/order.php",dataObj,that.orderPostHandler,'json');}
this.orderPostHandler=function(data,textStatus){if(textStatus=='success'){if(data.Success){that.notifyOrderCompleted(translation[data.Success]);}else if(data.banklinkData){that.notifyBankLinkInitialised(data);}else{if(data.Error=="err_session_expired"){that.notifySessionExpired();}
console.log("Order failed: "+data.Error);var error=(data.Error&&translation[data.Error])?translation[data.Error]:translation.err_order_processing;that.notifyOrderFailed(error);}}else{console.log("Order failed! Falling back to default error message...");that.notifyOrderFailed(translation.err_order_processing);}}
this.notifyBankLinkInitialised=function(data){var l=listeners.length;for(var i=l;i--;){listeners[i].bankLinkInitialised(data);}}
this.notifyOrderFailed=function(error){var l=listeners.length;for(var i=l;i--;){listeners[i].orderFailed(error);}}
this.notifyOrderCompleted=function(message){var l=listeners.length;for(var i=l;i--;){listeners[i].orderCompleted(message);}}
this.notifyBasketTotalUpdate=function(){var l=listeners.length;for(var i=l;i--;){listeners[i].basketTotalUpdated();}}
this.notifyAddedProduct=function(data){var l=listeners.length;for(var i=l;i--;){listeners[i].addedProduct(data);}}
this.notifyUpdatedProduct=function(data){var l=listeners.length;for(var i=l;i--;){listeners[i].updatedProduct(data);}}
this.notifyBasketReset=function(){var l=listeners.length;for(var i=l;i--;){listeners[i].basketReset();}}
this.notifyRemovedProduct=function(id){var l=listeners.length;for(var i=l;i--;){listeners[i].removedProduct(id);}}
this.notifySessionStarted=function(data){var l=listeners.length;for(var i=l;i--;){listeners[i].sessionStarted(data);}}
this.notifySessionExpired=function(){var l=listeners.length;for(var i=l;i--;){listeners[i].sessionExpired();}}
this.notifySessionDestroyed=function(){var l=listeners.length;for(var i=l;i--;){listeners[i].sessionDestroyed();}}
this.addListener=function(list){listeners.push(list);}}
var BasketModelListener=function(list){if(!list){list={};}
return $.extend({basketTotalUpdated:function(){},addedProduct:function(){},updatedProduct:function(){},removedProduct:function(){},orderFailed:function(){},orderCompleted:function(){},bankLinkInitialised:function(){},userDataLoaded:function(){},basketReset:function(){}},list);}
var BasketView=function($wrapper){var listeners=[];var that=this;var $loader=$("<div id='loader'></div>");var basketWindow="\
        <div id='basketWindow' class='sideWin'>\
            <h1>"+translation.basket_basket+"</h1>\
            <div class='rowHeader'>\
                <div class='col1'>"+translation.prod_title+"</div>\
                <div class='col2'>"+translation.prod_amount+"</div>\
                <div class='greyline'></div>\
            </div>\
            <p class='basketTotal'>"+translation.basket_total+": <strong><span>0</span> "+translation.basket_currency_sign+"</strong></p>\
            <p><a href='#' id='checkoutLink' class='buttonLink'>"+translation.basket_to_checkout+"</a></p>\
        </div>";var $loginLink=$("<a href='#' id='loginFromForm'>"+translation.client_area_login+"</a>");var $courierShipping=$("<label class='containerLabel' id='courierShipping'>\
                <input type='radio' name='delivery' value='"+translation.basket_courier+"' /> "+translation.basket_courier+"\
            </label>");var $terms=$("<fieldset id='termsDetails'>\
                <legend>"+translation.basket_terms_and_conditions+"</legend>\
                <input type='checkbox' name='accept' id='acceptTerms' />\
                <label for='acceptTerms'><a href='#'>"+translation.basket_terms_and_conditions+"</a></label>\
            </fieldset>");var $paymentType=$("<input type='hidden' name='paymentType' value='' />");this.toggleProductGroup=function(){var id=$(this).attr("href").substr(1);$(this).toggleClass('minus').toggleClass('plus').parent().next().slideToggle("fast",function(){that.notifyProductGroupToggled(id,$(this).is(":visible"));});}
this.expandProductGroups=function(groups){if(groups.length==0){$("#products > .prodGroup").eq(0).removeClass("collapsed").prev().children("a").toggleClass('minus').toggleClass('plus');return true;}
var l=groups.length;for(var i=l;i--;){var ref="#"+groups[i];$(ref).next().removeClass("collapsed");$(ref).children("a").toggleClass('minus').toggleClass('plus');}}
this.addLoginLink=function(){if($("#loginFromForm").length>0){$("#loginFromForm").show();}else{$("#shippingDetails > legend").after($loginLink);}}
this.removeLoginLink=function(){$("#loginFromForm").remove();}
this.addCourierShipping=function(){$("#shippingDetails > .containerLabel:first").before($courierShipping);}
this.removeCourierShipping=function(){$("#courierShipping").remove();$("#shippingDetails > .default input").attr("checked","checked");}
this.addTerms=function(){$("#orderLink").before($terms);}
this.removeTerms=function(){$("#termsDetails").remove();}
this.addOrder=function(basket,profileSpecific){var rowMarkup="\
            <div class='row'>\
                <div class='col1'></div>\
                <div class='col2'></div>\
                <div class='col3'></div>\
                <div class='greyline'></div>\
            </div>";var l=basket.length;for(var i=0;i<l;i++){var $row=$(rowMarkup);$row.children(".col1").text(basket[i].title);$row.children(".col2").text(basket[i].amount);if(profileSpecific){$row.children(".col3").remove();}else{var price=(basket[i].amount*basket[i].price).toFixed(2);$row.children(".col3").text(price).format({locale:"se"}).append(" "+translation.basket_currency_sign);}
$("#prodDetails > .basketTotal").before($row);}}
this.checkoutWindow=function(){return"\
        <div id='checkoutWindow'>\
            <h1>"+translation.basket_checkout+"</h1>\
            <fieldset id='prodDetails'>\
                <legend>"+translation.basket_order+"</legend>\
                <div class='rowHeader'>\
                    <div class='col1'>"+translation.prod_title+"</div>\
                    <div class='col2'>"+translation.basket_amount+"</div>\
                    <div class='col3'>"+translation.prod_price+"</div>\
                    <div class='greyline'></div>\
                </div>\
                <p class='basketTotal'>"+translation.basket_total+": <strong><span>0</span> "+translation.basket_currency_sign+"</strong></p>\
                <p><a href='#' class='backLink'>"+translation.basket_change_order+"</a></p>\
            </fieldset>\
            <fieldset id='paymentDetails'>\
                <legend>"+translation.basket_payment+"</legend>\
                <label>\
                    <input type='radio' name='payment' value='SEB' class='banklink' />\
                    <img src='"+siteIndex+"img/banklink_icons/seb_88x31.gif' alt='SEB' title='SEB' />\
                </label>\
                <label>\
                    <input type='radio' name='payment' value='Swedbank' class='banklink'/>\
                    <img src='"+siteIndex+"img/banklink_icons/swed_logo_88x31.gif' alt='Swedbank' title='Swedbank' />\
                </label>\
                <br /><br />\
                <label>\
                    <input type='radio' name='payment' value='"+translation.basket_invoice+"' /> <strong>"+translation.basket_invoice+"</strong>\
                    <span class='remark'>"+translation.basket_invoice_remark+"</span>\
                </label>\
            </fieldset>\
            <fieldset id='shippingDetails' class='autofill'>\
                <legend>"+translation.basket_shipping+"</legend>\
                <label class='containerLabel'>\
                    <input type='radio' name='delivery' value='"+translation.basket_self_pickup+"' /> "+translation.basket_self_pickup+"\
                </label>\
                <label class='containerLabel'>\
        <input type='radio' name='delivery' value='Smartpost' /> Smartpost ("+deliveryFee+" "+translation.basket_currency_sign+")\
                </label>\
                <label class='containerLabel'>\
        <select name='smartpostAddress' id='smartpostSelect'>\
                        <option value='0'>-- "+translation.basket_select_smartpost_terminal+" --</option>\
     </select>\
                </label><br />\
                <label for='nameFld'>"+translation.form_name+" *</label><input type='text' name='name' id='nameFld' /><br />\
                <label for='companyFld'>"+translation.form_company+"</label><input type='text' name='company' id='companyFld' /><br />\
                <label for='phoneFld'>"+translation.form_phone+" *</label><input type='text' name='phone' id='phoneFld' /><br />\
                <label for='addressFld'>"+translation.form_address+" *</label><textarea name='address' id='addressFld' cols='20' rows='3'></textarea><br />\
                <label for='emailFld'>"+translation.form_email+" *</label><input type='text' name='email' id='emailFld' /><br />\
                <label for='notesFld'>"+translation.form_special_requests+"</label><textarea name='notes' id='notesFld' cols='28' rows='6'></textarea>\
                <p>* "+translation.form_required_fields+"</p>\
            </fieldset>\
            <a href='#' id='orderLink' class='buttonLink'>"+translation.basket_purchase+"</a>\
        </div>";}
this.addBasket=function(){$("#rightBar").prepend(basketWindow);}
this.removeBasket=function(){$("#basketWindow").remove();}
this.restoreBasket=function(data){this.addBasket();var l=data.length;for(var i=0;i<l;i++){this.addProduct(data[i]);}}
this.addProduct=function(data){var row="\
          <div class='row'>\
              <div class='col1'>"+data.title+"</div>\
              <div class='col2'>\
                 <input type='text' name='prodAmount"+data.id+"' value='"+data.amount+"' size='2' maxlength='3' class='numericInput' />\
              </div>\
              <div class='col3'><a href='#"+data.id+"' title='"+translation.basket_remove+"' class='removeFromBasketLink'>&nbsp;</a></div>\
              <div class='greyline'></div>\
          </div>";$("#basketWindow > div:last").after(row);$("#basketWindow .numericInput").numeric();}
this.removeProduct=function(id){$("input[name='prodAmount"+id+"']").parent().parent().remove();}
this.updateProduct=function(data){$("input[name='prodAmount"+data.id+"']").val(data.amount);}
this.isBasket=function(){return $("#basketWindow").length>0;}
this.updateBasketTotal=function(total){$(".basketTotal span").text(total).format({locale:"se"});}
this.gotoCheckout=function(data,profileSpecific){$("#basketWindow").hide();$("#contentArea > .floatsplit").eq(0).prevAll().hide();$("#products").hide();$("#leftBar").append(this.checkoutWindow());this.addOrder(data,profileSpecific);if(profileSpecific){this.addCourierShipping();$("#checkoutWindow .rowHeader .col3, #paymentDetails, .basketTotal").hide();}else{this.removeCourierShipping();$("#checkoutWindow .rowHeader .col3, #paymentDetails, .basketTotal").show();}
this.addLoginLink();var TCSectionID=Number(translation.basket_terms_and_conditions_section_id);if(TCSectionID!=0&&!profileSpecific){this.addTerms();}else{this.removeTerms();}
var places=(typeof places_info!="undefined")?places_info:"Smartpost error!";this.addSmartpostOptions(places);$("input[name='delivery']").change(this.notifyDeliveryChanged);$("input[name='payment']").change(this.notifyPaymentChanged);$("#smartpostSelect").change(this.notifySmartpostChanged);}
this.rebuild=function(basketData,userProfile,sessionExpired){$("#checkoutWindow").remove();var profileSpecific=(userProfile&&userProfile.ugroup=="Client");this.gotoCheckout(basketData,profileSpecific);if(userProfile){this.fillInUserForm(userProfile);this.removeLoginLink();}else{this.addLoginLink();}
if(sessionExpired){$("#loginFromForm").before("<p class='error unindented'>"+translation.err_session_expired+"</p>");}}
this.revise=function(profileSpecific){if(profileSpecific){$("#products > .prodGroup .col3, .basketTotal").hide();}else{$("#products > .prodGroup .col3, .basketTotal").show();}}
this.fillInUserForm=function(data){$("#nameFld").val(data.forename+" "+data.surname);$("#companyFld").val(data.company);$("#phoneFld").val(data.phone);$("#addressFld").val(data.address);$("#emailFld").val(data.email);}
this.getProductData=function(id){var $link=$("a[href='#"+id+"']");var title=$link.parent().prevAll(".col1").text();var price=Number($link.parent().prev().children("span").text().split(" ").join("").replace(",","."));var data={id:id,title:title,price:price};return data;}
this.removeCheckout=function(){$("#checkoutWindow").remove();$("#basketWindow").show();$("#contentArea .floatsplit").eq(0).prevAll().show();$("#products").show();}
this.addSmartpostOptions=function(places){if(typeof places=="string"){$("#smartpostSelect > option").eq(0).val(places);return false;}
var placesLength=places.length;var optgroupMarkup="<optgroup></optgroup>";var lastGroup="";for(var i=0;i<placesLength;i++){var place=places_info[i];var group=place.group_name;if(lastGroup!=group){if(lastGroup!=""){$("#smartpostSelect").append($optgroup)}
$optgroup=$(optgroupMarkup).attr("label",group);lastGroup=group;}
$optgroup.append("<option value='"+place.place_id+"'>"+place.name+"</option>");}
return true;}
this.showSmartpostSelect=function(value){$("#smartpostSelect").show();if(value){$("#smartpostSelect option[value='"+value+"']").attr("selected",true);}else{$("#smartpostSelect option:first").attr("selected",true);}}
this.hideSmartpostSelect=function(){$("#smartpostSelect").hide();}
this.presetDelivery=function(delivery){var $option=delivery?$("input[name='delivery'][value='"+delivery+"']"):$("input[name='delivery']").eq(0);$option.attr("checked",true).trigger("change");}
this.presetPayment=function(value){var $option=value?$("input[name='payment'][value='"+value+"']"):$("input[name='payment']").eq(0);$option.attr("checked",true);}
this.processOrder=function(){$("p.error").remove();var requiredFields=["name","address","phone","email"];var optionalFields=["notes","company"];var dataObj={};var l=requiredFields.length;for(var i=l;i--;){var fieldID="#"+requiredFields[i]+"Fld";if($(fieldID).val()!=""){dataObj[requiredFields[i]]=$(fieldID).val();}else{$(fieldID).after("<p class='error'>"+translation.err_missing_field+"</p>");}}
if(dataObj.email!=""&&!validateEmail(dataObj.email)){$("#emailFld").after("<p class='error'>"+translation.err_incorrect_email+"</p>");try{animateGrumbler();}catch(error){}
return false;}
var delivery=$("input[name='delivery']:checked").val();if(delivery=="Smartpost"){var smartpostSelectValue=Number($("#smartpostSelect").val());if(smartpostSelectValue>0){dataObj['delivery']="Smartpost "+smartpostSelectValue+": "+$("#smartpostSelect :selected").text();}else{$("#smartpostSelect").after("<p class='error'>"+translation.basket_select_smartpost_terminal+"</p>");}}else{dataObj['delivery']=delivery;}
if($("p.error").is(":visible")){try{animateGrumbler();}catch(error){}
return false;}
l=optionalFields.length;for(var i=l;i--;){var fieldName=optionalFields[i];var fieldID="#"+fieldName+"Fld";var fieldValue=$(fieldID).val();if(fieldValue!=""){dataObj[fieldName]=fieldValue;}}
if($("#paymentDetails").is(":visible")){$payment=$("input[name='payment']:checked");dataObj['payment']=$payment.val();if($payment.hasClass("banklink")){dataObj['returnLocation']=window.location.protocol+"//"+window.location.hostname+window.location.pathname;}}
that.displayCheckoutLoader();that.notifyOrderFormProcessed(dataObj);}
this.displayCheckoutLoader=function(){$("#checkoutWindow > h1").nextAll().hide();$("#rightBar > *").hide();$("#checkoutWindow > h1").after($loader);}
this.displayOrderError=function(error){$loader.remove();$("#banklinkForm").remove();$("#checkoutWindow > h1").after("<p class='error'>"+error+"</p>").nextAll().show();$("#basketWindow").nextAll().show();}
this.displayOrderComplete=function(message){if($loader.is(":visible")){$loader.remove();}
$("#banklinkForm").remove();$("#contentArea > *").hide();$("#contentArea").append("<p class='msg'>"+message+"</p><p><a href='#' id='gotoStoreFront' class='arrowedBwLink'>"+translation.basket_to_products+"</a></p>");}
this.gotoStoreFront=function(){$(this).remove();$("#checkoutWindow, .error, .msg").remove();$("#contentArea > *, #products, #rightBar > *").show();}
this.submitBankLinkForm=function(data){var $form=$("<form method='post' action='"+data.banklinkURL+"' id='banklinkForm'></form>");for(var i in data.banklinkData){$form.append("<input type='hidden' name='"+i+"' value='"+data.banklinkData[i]+"' />");}
$("#checkoutWindow > h1").after($form);$("#banklinkForm").submit();}
this.verifyAmount=function(){var amount=$(this).val();if(amount==""){$(this).val(0).trigger("keyup");}}
this.notifyOrderFormProcessed=function(data){var l=listeners.length;for(var i=l;i--;){listeners[i].orderFormProcessed(data);}}
this.notifyAddedToBasket=function(){var id=$(this).attr('href').substr(1);var title=$(this).parent().prevAll(".col1").text();var price=Number($(this).parent().prev().children("span").text().split(" ").join("").replace(",","."));var data={id:id,amount:1,title:title,price:price};var l=listeners.length;for(var i=l;i--;){listeners[i].addedToBasket(data);}}
this.notifyRemovedFromBasket=function(){var href=$(this).attr('href');var id=href.substr(href.lastIndexOf("#")+1);var l=listeners.length;for(var i=l;i--;){listeners[i].removedFromBasket(id);}}
this.notifyAmountUpdate=function(){var amount=$(this).val();if(amount==""){return false;}
var id=Number($(this).attr('name').split("prodAmount")[1]);var l=listeners.length;for(var i=l;i--;){listeners[i].productAmountUpdated(id,amount);}}
this.notifyCheckedOut=function(){var l=listeners.length;for(var i=l;i--;){listeners[i].checkedOut();}}
this.notifyCheckoutCancelled=function(){var l=listeners.length;for(var i=l;i--;){listeners[i].checkoutCancelled();}}
this.notifyDeliveryChanged=function(){var value=$(this).val();var l=listeners.length;for(var i=l;i--;){listeners[i].deliveryChanged(value);}}
this.notifyPaymentChanged=function(){var value=$(this).val();var l=listeners.length;for(var i=l;i--;){listeners[i].paymentChanged(value);}}
this.notifySmartpostChanged=function(){var value=$(this).val();var l=listeners.length;for(var i=l;i--;){listeners[i].smartpostChanged(value);}}
this.notifyProductGroupToggled=function(id,visible){var l=listeners.length;for(var i=l;i--;){listeners[i].productGroupToggled(id,visible);}}
this.addListener=function(list){listeners.push(list);}
this.hookControls=function(){$(".prodHeading a").click(that.toggleProductGroup);$(".basketLink").click(that.notifyAddedToBasket);$(".removeFromBasketLink").live("click",that.notifyRemovedFromBasket);$("#basketWindow .row .col2 input").live("keyup",that.notifyAmountUpdate).live("blur",that.verifyAmount);$("#checkoutLink").live("click",that.notifyCheckedOut);$("#checkoutWindow .backLink").live("click",that.notifyCheckoutCancelled);$("#orderLink").live("click",that.processOrder);$("#checkoutWindow input").keyup(function(event){if(event.keyCode==13){$("#orderLink").trigger('click');}});$("#gotoStoreFront").live("click",that.gotoStoreFront);}}
var BasketViewListener=function(list){if(!list){list={};}
return $.extend({addedToBasket:function(){},removedFromBasket:function(){},productAmountUpdated:function(){},notifyCheckedOut:function(){},checkoutCancelled:function(){},deliveryChanged:function(){},paymentChanged:function(){},smartpostChanged:function(){},orderFormProcessed:function(){},userDataLoaded:function(){},productGroupToggled:function(){}},list);}
var BasketController=function(model,view){this.init=function(){var products=model.getCookie("products");if(products&&products.length>0){var basketData=[];var l=products.length;for(var i=0;i<l;i++){var data=view.getProductData(products[i].id);data.amount=products[i].amount;basketData.push(data);}
model.restoreBasket(basketData);view.restoreBasket(basketData);view.updateBasketTotal(model.getBasketTotal());}
if(model.getCookie("checkout")){view.notifyCheckedOut();}
view.hookControls();view.expandProductGroups(model.loadExpandedProductGroups());if(typeof orderSuccessful!="undefined"){if(orderSuccessful){model.notifyOrderCompleted(translation.msg_order_sent);}else{model.notifyOrderFailed(translation.err_payment_failed);}}}
var vlist=BasketViewListener({productGroupToggled:function(id,visible){model.handleToggledProductGroup(id,visible);},addedToBasket:function(data){model.addToBasket(data);},removedFromBasket:function(id){model.removeFromBasket(id);},productAmountUpdated:function(id,amount){model.updateProductAmount(id,amount);},checkedOut:function(){try{getUserData();}catch(error){}
try{animateCheckout();}catch(error){}
view.gotoCheckout(model.getBasket(),model.isProfileSpecific());view.updateBasketTotal(model.getBasketTotal());view.presetPayment(model.getCookie("payment"));view.presetDelivery(model.getCookie("delivery"));model.bake("checkout",1);},checkoutCancelled:function(){view.removeCheckout();model.unbake("checkout");if(!view.isBasket()){view.restoreBasket(model.getBasket());}
model.removeDeliveryFee();view.revise(model.isProfileSpecific());},deliveryChanged:function(delivery){if(delivery=="Smartpost"){var selectedValue=model.getCookie("smartpost");view.showSmartpostSelect(selectedValue);model.addDeliveryFee();}else{view.hideSmartpostSelect();model.removeDeliveryFee();}
model.bake("delivery",delivery);},paymentChanged:function(payment){model.bake("payment",payment);},smartpostChanged:function(value){if(value>0){model.bake("smartpost",value);}else{model.unbake("smartpost");}},orderFormProcessed:function(data){model.postOrder(data);}});view.addListener(vlist);var mlist=BasketModelListener({addedProduct:function(data){if(!view.isBasket()){view.addBasket();}
view.addProduct(data);try{animateShopping();}catch(error){}},updatedProduct:function(data){view.updateProduct(data);},removedProduct:function(id){view.removeProduct(id);if(model.isBasketEmpty()){view.removeBasket();}},basketTotalUpdated:function(){view.updateBasketTotal(model.getBasketTotal());},orderFailed:function(error){view.displayOrderError(error);try{animateGrumbler();}catch(error){}
if(typeof pageTracker!="undefined"){pageTracker._trackPageview("/order-failure");}},orderCompleted:function(message){model.resetBasket();model.unbake("checkout");view.displayOrderComplete(message);if(typeof pageTracker!="undefined"){pageTracker._trackPageview("/order-success");}},bankLinkInitialised:function(data){view.submitBankLinkForm(data);},sessionStarted:function(data){if(model.getCookie("checkout")){view.rebuild(model.getBasket(),data,false);view.presetPayment(model.getCookie("payment"));view.presetDelivery(model.getCookie("delivery"));view.updateBasketTotal(model.getBasketTotal());}else{view.revise(model.isProfileSpecific());}},sessionExpired:function(){if(model.getCookie("checkout")){view.rebuild(model.getBasket(),null,true);view.presetPayment(model.getCookie("payment"));view.presetDelivery(model.getCookie("delivery"));view.updateBasketTotal(model.getBasketTotal());view.addLoginLink();}else{view.revise(model.isProfileSpecific());}
fallBackToLogin();},sessionDestroyed:function(){view.removeCheckout();model.unbake("checkout");model.resetBasket();view.revise(false);},basketReset:function(){view.removeBasket();}});model.addListener(mlist);}
$.extend({},BasketModel,BasketModelListener,BasketView,BasketViewListener,BasketController);$(document).ready(function(){basketModel=new BasketModel();basketView=new BasketView($("#contentArea"));basketController=new BasketController(basketModel,basketView);basketController.init();});