Web.define("Web.Extension.VoucherConfigurator.Controller.VoucherConfigurator",{extend:"Web.Core.Controller",feature:"Web.Extension.VoucherConfigurator.Feature.VoucherConfigurator",views:{},state:{isUpdating:!1,blockUpdates:!1,validation:{buybox:!1},articleId:null,templateId:null,value:null,message:"",delivery:null,quantity:1},preventedUpdates:[],preventUpdates:!1,hasPreventedUpdate:!1,featureEvents:{"Web.Extension.VoucherConfigurator.Feature.TemplateDetail":"Web.Extension.VoucherConfigurator.Event.TemplateDetail.Initialize","Web.Extension.VoucherConfigurator.Feature.Templates":"Web.Extension.VoucherConfigurator.Event.Templates.Initialize","Web.Extension.VoucherConfigurator.Feature.Values":"Web.Extension.VoucherConfigurator.Event.Values.Initialize","Web.Extension.VoucherConfigurator.Feature.Message":"Web.Extension.VoucherConfigurator.Event.Message.Initialize","Web.Extension.VoucherConfigurator.Feature.Delivery":"Web.Extension.VoucherConfigurator.Event.Delivery.Initialize","Web.Extension.VoucherConfigurator.Feature.BuyBox":"Web.Extension.VoucherConfigurator.Event.BuyBox.Initialize","Web.Extension.VoucherConfigurator.Feature.Quantity":"Web.Extension.VoucherConfigurator.Event.Quantity.Initialize","Web.Extension.VoucherConfigurator.Feature.Basket":"Web.Extension.VoucherConfigurator.Event.Basket.Initialize"},listeners:{"Web.Extension.VoucherConfigurator.Event.TemplateDetail.Initialize":function(n,t){this.initView("detail","Web.Extension.VoucherConfigurator.View.TemplateDetail",n,t)},"Web.Extension.VoucherConfigurator.Event.Templates.Initialize":function(n,t){this.initView("templates","Web.Extension.VoucherConfigurator.View.Templates",n,t)},"Web.Extension.VoucherConfigurator.Event.Values.Initialize":function(n,t){this.initView("values","Web.Extension.VoucherConfigurator.View.Values",n,t)},"Web.Extension.VoucherConfigurator.Event.Message.Initialize":function(n,t){this.initView("message","Web.Extension.VoucherConfigurator.View.Message",n,t)},"Web.Extension.VoucherConfigurator.Event.Delivery.Initialize":function(n,t){this.initView("delivery","Web.Extension.VoucherConfigurator.View.Delivery",n,t)},"Web.Extension.VoucherConfigurator.Event.BuyBox.Initialize":function(n,t){this.initView("buybox","Web.Extension.VoucherConfigurator.View.BuyBox",n,t)},"Web.Extension.VoucherConfigurator.Event.Quantity.Initialize":function(n,t){this.initView("quantity","Web.Extension.VoucherConfigurator.View.Quantity",n,t)},"Web.Extension.VoucherConfigurator.Event.Basket.Initialize":function(n,t){this.initView("basket","Web.Extension.VoucherConfigurator.View.Basket",n,t)}},initialize:function(){this.callParent.apply(this,arguments);_.extend(this,Backbone.Events);this.initView("configurator","Web.Extension.VoucherConfigurator.View.Configurator",this.feature,Web.getFeature(this.feature))},setState:function(n){var i,r,u;if(this.preventUpdates){this.hasPreventedUpdate=!0;this.preventedUpdates.push(n);return}var f=function(n,t){return _.isFunction(n)?n(t):n},t=_.clone(this.state),o=f(n,t),e=_.extend({},t,o);if(this.preventUpdates=!0,this.trigger("statechange",t,e),this.preventUpdates=!1,this.state=e,this.hasPreventedUpdate){for(this.hasPreventedUpdate=!1,i={},r=_.clone(this.state);this.preventedUpdates.length>0;)u=f(this.preventedUpdates.shift(),r),_.extend(i,u),_.extend(r,u);this.setState(i)}},triggerValidate:function(){var n=_.clone(this.state);_.each(_.values(this.views),function(t){t.onValidate(n,n)})},initView:function(n,t,i,r){this.views[n]=Web.create(t,{controller:this,feature:i,el:r})},updateBuyBox:function(n,t,i){this.post("{$baseFolder}/{$language}/VoucherConfiguratorArticle/BuyBox",n,t,i)},addToBasket:function(n,t,i){this.post("{$baseFolder}/{$language}/VoucherConfiguratorBasket/Add",n,t,i)},post:function(n,t,i,r){var u=this;u.setState({isUpdating:!0});Web.Core.Server.post({url:n,data:t,success:function(n){i.call(r||u,n)},error:function(){console.log(arguments)},complete:function(){u.setState({isUpdating:!1})}})}});Web.define("Web.Extension.VoucherConfigurator.View.Base",{extend:"Web.Core.View",stateId:null,deferUpdate:0,deferedUpdate:null,initialize:function(n){this.controller=n.controller;this.controller.on("statechange",this.onValidate,this);this.controller.on("statechange",this.onStateChange,this);this.init(n)},init:function(){},onStateChange:function(){},getUpdatedState:function(){return{}},validate:function(n){return!_.isUndefined(n[this.stateId])&&!_.isNull(n[this.stateId])},updateState:function(n){var t=this,i=function(){var i=n,r;i instanceof jQuery.Event&&(i=$(i.target));r=_.extend({},t.getUpdatedState(i,n));r[t.stateId]=i.val();t.controller.setState(r);t.deferedUpdate=0};this.deferUpdate>0?(this.deferedUpdate&&clearTimeout(this.deferedUpdate),this.deferedUpdate=setTimeout(i,this.deferUpdate)):i()},onValidate:function(n,t){var i=this,r;i.stateId&&(r=i.validate(t),r!==t.validation[i.stateId])&&i.controller.setState(function(n){var t=_.extend({},n.validation);return t[i.stateId]=r,{validation:t}})},setHtml:function(n,t){var i=this.getId(n);i&&i.html(t)},setChecked:function(n,t){n.prop("checked",t)},input:function(n){var t=this.$('input[name="'+this.stateId+'"]');return _.isUndefined(n)?t:t.filter(function(){return $(this).val()===n})}});Web.define("Web.Extension.VoucherConfigurator.View.Basket",{extend:"Web.Extension.VoucherConfigurator.View.Base",onStateChange:function(n,t){n.basketContent!==t.basketContent&&(this.setContent(t.basketContent),this.open())},setContent:function(n){this.$el.html(n);Web.initializeFeatures()},open:function(){this.getId("BasketModal").modal()}});Web.define("Web.Extension.VoucherConfigurator.View.BuyBox",{extend:"Web.Extension.VoucherConfigurator.View.Base",events:{'click [data-id="CallToAction"]':"onClickCallToAction"},stateId:"buybox",onStateChange:function(n,t){if(!t.blockUpdates&&!t.isUpdating){var r=this.getUpdateValues(n),i=this.getUpdateValues(t),u=n.validation.buybox!==t.validation.buybox,f=n.blockUpdates&&!t.blockUpdates;(!_.isEqual(r,i)||u||f)&&this.controller.updateBuyBox(i,this.onUpdateBuyBox,this)}},validate:function(n){return!n.requiresConfiguration||_.every(this.getValidation(n),function(n){return n.isValid})},onUpdateBuyBox:function(n){this.setHtml("Content",n);Web.initializeFeatures()},getValidation:function(n){var t=_.omit(this.getUpdateValues(n),"articleId"),i=n.validation;return _.map(t,function(n,t){return{key:t,value:n,isValid:i[t]||!1}})},getUpdateValues:function(n){return _.pick(n,["articleId","templateId","value","message","delivery","quantity"])},onClickCallToAction:function(){this.controller.triggerValidate();var n=this.controller.state;n.validation.buybox&&this.controller.addToBasket(this.getUpdateValues(n),this.onAddToBasket,this)},onAddToBasket:function(n){this.controller.setState({basketContent:n});var t={ArticleId:this.controller.state.articleId,Quantity:this.controller.state.quantity};Web.fireEvent("Web.Core.Event.Basket.AddArticle",[[t]]);Web.fireEvent("Web.Core.Event.Basket.Update")}});Web.define("Web.Extension.VoucherConfigurator.View.Configurator",{extend:"Web.Extension.VoucherConfigurator.View.Base",init:function(){this.controller.setState({articleId:this.getArticleId(),requiresConfiguration:this.requiresConfiguration()})},onStateChange:function(n,t){this.setMask(t.isUpdating)},getArticleId:function(){return this.getId("Article").val()},requiresConfiguration:function(){return this.getId("RequiresConfiguration").val().toLowerCase()==="true"},setMask:function(n){(n?this.mask:this.unmask).call(this)},mask:function(){this.getId("MaskTarget").mask("")},unmask:function(){this.getId("MaskTarget").unmask()}});Web.define("Web.Extension.VoucherConfigurator.View.Delivery",{extend:"Web.Extension.VoucherConfigurator.View.Base",events:{'change input[name="delivery"]':"updateState"},stateId:"delivery",onStateChange:function(n,t){n.delivery!==t.delivery&&this.setChecked(this.input(t.delivery),!0)},init:function(){this.input().length===1&&this.updateState(this.input().eq(0))}});Web.define("Web.Extension.VoucherConfigurator.View.Message",{extend:"Web.Extension.VoucherConfigurator.View.Base",events:{'change textarea[name="message"]':"updateState",'keyup textarea[name="message"]':"updateState"},stateId:"message",remainingEl:null,remainingTpl:function(n){return n.remaining+" Zeichen verbleibend"},errorTpl:function(n){return"Die Nachricht darf maximal "+n.length+" Zeichen lang sein!"},init:function(){this.initRemaining()},initRemaining:function(){var n=this.getId("Remaining");if(n.length!==0){var t=n.data("template"),i=n.data("error-template"),r={interpolate:/\[(.+?)\]/g};this.remainingEl=n;this.remainingTpl=t?_.template(t,null,r):this.remainingTpl;this.errorTpl=i?_.template(i,null,r):this.errorTpl;this.setRemaining()}},onStateChange:function(n,t){n.message!==t.message&&this.input().val(t.message);n.validation.message!==t.validation.message&&this.markError(t);this.setRemaining(t)},getUpdatedState:function(n,t){return{blockUpdates:t&&t.type==="keyup"}},setRemaining:function(n){var t,i,r,u;this.remainingEl&&(n?(t=n.message.length,i=n.validation.message):(t=0,i=!0),r=this.maxlength()-t,u=i?this.remainingTpl({remaining:r}):this.errorTpl({length:this.maxlength()}),this.remainingEl.html(u))},validate:function(n){if(this.el.querySelector("[data-id=ConfigurationMessageDisabled]"))return!0;var t=n.message?n.message.length:0,i=this.maxlength()-t;return i>=0},markError:function(n){if(this.remainingEl){var t=n.validation.message,i=t?"remaining":"error",r=t?"error":"remaining";this.remainingEl.addClass(i);this.remainingEl.removeClass(r)}},input:function(){return this.$('textarea[name="message"]')},maxlength:function(){return this.input().data("maxlength")}});Web.define("Web.Extension.VoucherConfigurator.View.Quantity",{extend:"Web.Extension.VoucherConfigurator.View.Base",events:{'change input[name="quantity"]':"updateState"},stateId:"quantity",deferUpdate:350,onStateChange:function(n,t){n.quantity!==t.quantity&&this.input().val(t.quantity)}});Web.define("Web.Extension.VoucherConfigurator.View.TemplateDetail",{extend:"Web.Extension.VoucherConfigurator.View.Base",onStateChange:function(n,t){n.image!==t.image&&this.setImage(t.image);n.description!==t.description&&this.setDescription(t.description)},setImage:function(n){this.getId("Image").attr("src",n)},setDescription:function(n){this.getId("Description").html(n)}});Web.define("Web.Extension.VoucherConfigurator.View.Templates",{extend:"Web.Extension.VoucherConfigurator.View.Base",events:{'change input[name="templateId"]':"updateState"},stateId:"templateId",init:function(){this.preselect()},preselect:function(){this.updateState(this.input().eq(0))},onStateChange:function(n,t){if(n.templateId!==t.templateId){var i=this.input(t.templateId);this.setTitle(i.data("title"));this.setChecked(i,!0)}},getUpdatedState:function(n){return n.data()},setTitle:function(n){this.setHtml("Title",n)}});Web.define("Web.Extension.VoucherConfigurator.View.Values",{extend:"Web.Extension.VoucherConfigurator.View.Base",events:{'change input[name="value"]':"updateState"},stateId:"value",minValue:null,maxValue:null,defaultValue:null,init:function(n){var t=n.el.find("input");t&&(this.minValue=parseInt(t.data().min),this.maxValue=parseInt(t.data().max),this.defaultValue=parseInt(t.val()));this.isRange()&&(this.deferUpdate=350);(this.isRange()||this.isSingleValue())&&this.preselect()},validate:function(n){var t=parseInt(n.value);if(this.maxValue===null&&this.minValue===null&&t<0)if(this.defaultValue!=null)n.value=String(this.defaultValue);else return!1;if(this.minValue===null&&t<0)if(this.defaultValue!=null)n.value=String(this.defaultValue);else return!1;return this.minValue!==null&&this.minValue>t&&(n.value=String(this.minValue)),this.maxValue!==null&&this.maxValue<t&&(n.value=String(this.maxValue)),!0},preselect:function(){this.updateState(this.input().eq(0))},onStateChange:function(n,t){n.value!==t.value&&(this.isRange()?this.input().val(t.value):this.setChecked(this.input(t.value),!0))},getValueOption:function(){return this.$el.data("option")},isRange:function(){return this.getValueOption()==="Range"},isSingleValue:function(){return this.getValueOption()==="Single"}})