{"version":3,"file":"../../javascript/builder.js","names":["Builder","sel","this","$elem","$","canvas","find","hide","context","getContext","variant","applyToBand","length","parseInt","val","stoneHover","stoneHoverId","activeStone","setupMask","that","on","e","preventDefault","$stone","target","each","className","id","changeOption","data","stripe","Biiju","changeStripeColour","addClass","setTimeout","removeClass","$checkbox","toggleClass","hasClass","css","inTransaction","prototype","type","numId","price","urlname","preload","$active","$new","first","attr","is","calculatePrice","updateUrl","last","changeVariant","builder","$controller","group","repaint","isEngraver","getOldSideClass","switchData","filter","name","match","index","substr","value","a","$option","callback","NProgress","start","img","Image","onload","done","$img","replaceWith","src","drawImage","isSafari5","test","navigator","userAgent","crossOrigin","off","offset","stonePositions","pos","split","push","x","parseFloat","y","w","h","variants","$variantOptions","detectStone","offsetX","pageX","left","offsetY","pageY","top","ret","getImageData","r","g","b","hover","i","indexOf","showStoneOptions","mStones","modal","origActive","showBubble","$bubble","appendTo","remove","$inputs","html","toLocaleString","url","baseUrl","p","stoneCounts","stoneCount","$stoneSummary","empty","stoneText","next","text","append","join","history","replaceState","title","current","replace","encodeURIComponent","location","hostname","handleControllers","$variantGroups","aClass","show","eq","$options","$current","$next","children","$prev","add","inClass","outClass","variantSel","currentIndex","prevAll","window","open","href","FB","ui","method"],"sources":["builder.js"],"mappings":"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","ignoreList":[],"sourcesContent":["function Builder(sel) {\n    this.$elem = $(sel);\n    this.canvas = this.$elem.find('canvas').hide()[0];\n\n    if (this.canvas) {\n        this.context = this.canvas.getContext('2d');\n    }\n\n    this.variant = 1;\n    this.applyToBand = false;\n\n    if ($('#option-variant').length) {\n        this.variant = parseInt($('#option-variant').val());\n    }\n\n    this.stoneHover = false;\n    this.stoneHoverId = 0;\n    this.activeStone = 0;\n\n    if (this.canvas) {\n        this.setupMask();\n    }\n\n    var that = this;\n\n    $('.stones__stone a').on('click', function(e) {\n        e.preventDefault();\n\n        if (that.applyToBand) {\n            var $stone = $(this);\n            var target = $('#stone' + that.activeStone);\n\n            $('.stone-position').each(function() {\n                if (this.className == target[0].className && this.id != target[0].id) {\n                    that.changeOption(this.id, $stone.data('id'), $stone.data('price'), $stone.data('urlname'));\n                }\n            });\n        }\n\n        that.changeOption('stone' + that.activeStone, $(this).data('id'), $(this).data('price'), $(this).data('urlname'));\n        var stripe = $(this).data('urlname');\n\n        Biiju.changeStripeColour(stripe);\n    }).on('touchstart', function() {\n        $(this).addClass('touchdown');\n    }).on('touchend', function() {\n        var that = this;\n        setTimeout(function() {\n            $(that).removeClass('touchdown');\n        }, 1000);\n    });\n\n    $('.stones__close').on('click', function(e) {\n        $('.stones').removeClass('stones--open');\n        $('.peek-nav').removeClass('peek-nav--off');\n    });\n\n    $('.stones__option').on('click', function() {\n        var $checkbox = $(this).find('.fake-checkbox');\n        $checkbox.toggleClass('active');\n        that.applyToBand = $checkbox.hasClass('active');\n    }).css('cursor', 'pointer');\n\n    this.inTransaction = false;\n};\n\nBuilder.prototype.changeOption = function(type, numId, price, urlname) {\n    var id = type + '-' + numId,\n        $elem = this.$elem,\n        that  = this;\n\n    this.preload(id, function() {\n        var $active = $elem.find('.'+type+'.active'),\n            $new    = $elem.find('.'+id).first();\n        $('#option-'+type).val(numId).attr('data-price', price).attr('data-urlname', urlname);\n\n        if (!$active.is($new)) {\n            $active.removeClass('active').addClass('inactive');\n            $new.removeClass('inactive').addClass('active');\n        } else {\n            $new.addClass('inactive-blip');\n            setTimeout(function() {\n                $new.removeClass('inactive-blip');\n            }, 200);\n        }\n\n        that.calculatePrice();\n        that.updateUrl();\n        if ($('.product-engraving__wrap').is('div')) {\n            $('.product-engraving').first().removeClass('inactive').addClass('active');\n            $('.product-engraving').last().removeClass('active').addClass('inactive');\n        }\n    });\n};\n\nBuilder.prototype.changeVariant = function(variant, urlname) {\n    var builder = this;\n    this.variant = variant;\n    this.inTransaction = true;\n\n    $('.product-options__controller').each(function() {\n        var $controller = $(this);\n        var $active = $(this).find('.active');\n\n        if ($active.attr('data-variant') && $active.attr('data-variant') != variant) {\n            var group = $active.attr('data-group');\n\n            var $new = $(this).find('span[data-variant=\"' + variant + '\"][data-group=\"' + group + '\"]');\n\n            if (!$new.length) {\n                $new = $(this).find('span[data-variant=\"' + variant + '\"]').first();\n            }\n\n            $controller.removeClass('animated');\n\n            Biiju.repaint($new, 'left');\n\n            $active.removeClass('active').addClass('inactive').removeClass('off-left off-right');\n            $new.removeClass('inactive').addClass('active').removeClass('off-left off-right');\n\n            $controller.addClass('animated');\n\n            builder.changeOption( $new.data('type'), $new.data('id'), $new.data('price'), $new.data('urlname') );\n\n            if (builder.isEngraver() && getOldSideClass() == \"engrave-back\") {\n                switchData(\"engrave-front\");\n            }\n        }\n    });\n\n    var $stones = $('.stones__stone').addClass('inactive-variant');\n    $stones.filter('.variant_' + variant).removeClass('inactive-variant');\n\n    $('.price-option').each(function() {\n        if (this.name.match('stone') !== null) {\n            var index = this.name.substr(14, this.name.length - 15),\n                id = this.value;\n\n            var $current = $('.stones__stone a[data-id=\"' + id + '\"]'),\n                group    = $current.attr('data-group');\n                $new     = $('.stones__stone a[data-variant=\"' + variant + '\"][data-group=\"' + group + '\"]');\n\n            if (!$new.length) {\n                $new = $('.stones__stone:not(.inactive-variant) a[data-group=\"' + group + '\"]');\n            }\n\n            if (!$new.length) {\n                $new = $('.stones__stone:not(.inactive-variant) a').first();\n            }\n\n            builder.changeOption('stone' + index, $new.data('id'), $new.data('price'), $new.data('urlname'));\n\n            var stripe = $new.data('urlname');\n            Biiju.changeStripeColour(stripe);\n        }\n    });\n\n    if ($('.stone-position.variant' + variant).length) {\n        $('.stone-position').addClass('inactive');\n        $('.stone-position.variant' + variant).removeClass('inactive');\n\n        $('.stone-position').each(function() {\n            var a = $(this).hasClass('inactive'),\n                $option = $('#option-' + this.id);\n\n            $option[ a ? 'addClass' : 'removeClass' ]('inactive');\n            $option[ a ? 'insertAfter' : 'appendTo']( $('.product-purchase') );\n        });\n    }\n\n    $('#option-variant').val(variant).attr('data-urlname', urlname);\n\n    this.inTransaction = false;\n    this.calculatePrice();\n    this.updateUrl();\n};\n\nBuilder.prototype.preload = function(id, callback) {\n    var $elem = this.$elem.find('.' + id);\n\n    if ($elem.is('img') || !$elem.length) {\n        callback();\n        return;\n    }\n\n    NProgress.start();\n    var img = new Image();\n    img.onload = function() {\n        NProgress.done();\n\n        var $img = $(img);\n        $img.attr('class', $elem.attr('class')).removeClass('lazy-replacement');\n\n        $elem.replaceWith($img);\n\n        Biiju.repaint($img, 'opacity');\n        callback();\n    };\n    img.src = $elem.data('src');\n};\n\nBuilder.prototype.setupMask = function() {\n    var that = this,\n        img;\n\n    img = new Image();\n    img.onload = function() {\n        that.context.drawImage(img, 0, 0);\n    };\n\n    // Safari 5 is a liar, it kind of supports CORS but not with canvas\n    var isSafari5 = /Safari/.test(navigator.userAgent) && /Version\\/5/.test(navigator.userAgent);\n\n    if ($('html').hasClass('cors') && !isSafari5) {\n        img.crossOrigin = '';\n        img.src = $(this.canvas).data('mask');\n    } else {\n        img.src = $(this.canvas).data('nocors-mask');\n    }\n\n    var off = this.$elem.offset();\n\n    var stonePositions = [];\n    $('.stone-position').each(function() {\n        var id  = this.id.substr(5),\n            pos = $(this).attr('data-pos').split(' ');\n\n        stonePositions.push({\n            id: id,\n            x: parseFloat(pos[0]),\n            y: parseFloat(pos[1]),\n            w: parseFloat(pos[2]),\n            h: parseFloat(pos[3]),\n            variants: $(this).attr('class').match(/variant([0-9]+)/g)\n        });\n    });\n\n    this.stonePositions = stonePositions;\n\n    var $variantOptions = $('.product-options__controller--variant span.product-options__control-label');\n\n    if (!$variantOptions.length) {\n        $variantOptions = $('.product-options__variants .product-options__variant--clickable');\n    }\n\n    var detectStone = function(e) {\n        if (!e.offsetX) {\n            // FF + MSIE\n            e.offsetX = e.pageX - off.left;\n            e.offsetY = e.pageY - off.top;\n        }\n\n        var ret = that.context.getImageData( e.offsetX, e.offsetY, 1, 1);\n\n        var r = ret.data[0],\n            g = ret.data[1],\n            b = ret.data[2],\n            a = ret.data[3];\n\n        var hover = false,\n            stoneHover = 0;\n        if (!r && !g && !b && a) {\n            // No red, green, blue but has alpha,\n            // means  it's a global mask\n            hover = true;\n        } else {\n\n            var index = 0;\n            $variantOptions.each(function(i) {\n                if (that.variant == $(this).data('id')) {\n                    index = i;\n                }\n            });\n\n            if (ret.data[index]) {\n                hover = true;\n            }\n        }\n\n        $.each(stonePositions, function() {\n            if (\n                e.offsetX > this.x &&\n                e.offsetX < (this.x + this.w) &&\n                e.offsetY > this.y &&\n                e.offsetY < (this.y + this.h)\n                ) {\n                    if (\n                        this.variants != null &&\n                        this.variants.length\n                       ) {\n                        if (this.variants.indexOf('variant' + that.variant) > -1) {\n                            stoneHover = this.id;\n                        } else {\n                            hover = false;\n                        }\n                    }\n            }\n        });\n\n        if (hover) {\n            that.stoneHover = true;\n            that.stoneHoverId = stoneHover;\n            that.$elem.addClass('hover');\n        }\n\n        if (!that.stoneHover && hover) {\n            that.stoneHover = true;\n            that.stoneHoverId = stoneHover;\n            that.$elem.addClass('hover');\n        } else if (that.stoneHover && !hover) {\n            that.stoneHover = false;\n            that.$elem.removeClass('hover');\n        }\n    };\n\n    this.$elem.on('click', function(e) {\n        e.preventDefault();\n        detectStone(e);\n        that.showStoneOptions(e);\n    }).on('dragstart', function() {\n        return false;\n    });\n\n    this.$elem.on('mousemove', function(e) {\n        detectStone(e);\n    });\n\n    $('#change-stone').on('click', function(e) {\n        var mStones = $(this).data('stones');\n        if (mStones == 1) {\n            that.stoneHover = true;\n            that.stoneHoverId = 0;\n            that.showStoneOptions();\n        } else if (mStones > 1) {\n            $('<div><p>Click each stone on the ring to make or change your selection, or click the \"Apply to band\" option in the stone wheel to change all the stones.</p><p><img src=\"/images/stones-howto.gif\" /></p></div>').modal();\n        }\n    }).css('cursor', 'pointer');\n};\n\nBuilder.prototype.showStoneOptions = function(e) {\n    if (this.stoneHover) {\n        var origActive = this.activeStone;\n        this.activeStone = this.stoneHoverId;\n\n        var that = this;\n        var showBubble = function() {\n            if (!e || !e.offsetX || !e.offsetY) {\n                return;\n            }\n            var $bubble = $('<div class=\"preview-bubble\"></div>');\n            $bubble.css({\n                left: e.offsetX - 35,\n                top: e.offsetY - 35\n            });\n            $bubble.appendTo( that.$elem );\n\n            Biiju.repaint($bubble, 'height');\n\n            $bubble.addClass('preview-bubble--active');\n            setTimeout(function() {\n                $bubble.remove();\n            }, 500);\n        };\n\n        if ($('.stones').hasClass('stones--open')) {\n            if (origActive === this.activeStone) {\n                $('.stones').toggleClass('stones--open');\n                $('.peek-nav').toggleClass('peek-nav--off');\n                // $('#change-stone').text( $('#change-stone').data('change') );\n            } else {\n                showBubble();\n            }\n        } else {\n            showBubble();\n            // $('#change-stone').text( $('#change-stone').data('changing') );\n            $('.stones').toggleClass('stones--open');\n            $('.peek-nav').toggleClass('peek-nav--off');\n        }\n    }\n};\n\nBuilder.prototype.calculatePrice = function() {\n    var $inputs = $('.product-page .price-option'),\n        price   = 0;\n\n    $inputs.each(function() {\n        if (!$(this).hasClass('inactive')) {\n            price += parseFloat($(this).attr('data-price'), 10);\n        }\n    });\n\n    $('#price').html('£' + price.toLocaleString());\n};\n\nBuilder.prototype.updateUrl = function() {\n    if (this.inTransaction) {\n        return;\n    }\n\n    if ($('.product-page').hasClass('product-box')) {\n        return;\n    }\n\n    var url = baseUrl = $('.product-page').attr('data-baseurl');\n\n    if ($('#option-variant').length) {\n        url += '/' + $('#option-variant').attr('data-urlname');\n    }\n\n    if ($('#option-metal').length) {\n        url += '/' + $('#option-metal').attr('data-urlname');\n    }\n\n    if ($('#option-stone0').length) {\n        var p = [],\n            stoneCounts = {};\n\n        var stoneCount = $('input[name^=\"option[stone]\"]').each(function() {\n            if (!$(this).hasClass('inactive')) {\n                var urlname = $(this).attr('data-urlname');\n\n                if (!stoneCounts[urlname]) {\n                    stoneCounts[urlname] = 0;\n                }\n                stoneCounts[urlname]++;\n\n                p.push(urlname);\n            }\n        }).length;\n\n        var $stoneSummary = $('#stone-summary');\n        $stoneSummary.empty();\n        $.each(stoneCounts, function(a, b) {\n            var stoneText = $('.stones__stone a[data-urlname=\"' + a + '\"]').first().next().text();\n            if (stoneCount <= 1) { b = ''; }\n            $stoneSummary.append('<li>' + b + ' ' + stoneText + '</li>');\n        });\n\n        url += '/' + p.join('+');\n    }\n\n    if ('replaceState' in history) {\n        history.replaceState({}, '', url);\n    }\n\n    var title = $('.share-wrap').attr('data-title');\n\n    $('.share--twitter').each(function() {\n        var current = $(this).attr('href');\n        current = current.replace(/text.*/, 'text=');\n        current += encodeURIComponent(title + ' http://' + location.hostname + url);\n        $(this).attr('href', current);\n    });\n\n    $('.share--pinterest').each(function() {\n         $(this).attr('href', url.replace(baseUrl, baseUrl + '/pinterest'));\n    });\n\n    if ($('#admin-bar-menu').length) {\n        $('#admin-bar-menu a[href*=\"add-to-inspire\"]').each(function() {\n            $(this).attr('href', url.replace(baseUrl, baseUrl + '/add-to-inspire'));\n        });\n    }\n\n    $('.share--facebook').attr('href', url);\n};\n\nBuilder.prototype.handleControllers = function(sel) {\n    var builder = this;\n\n    var $variantGroups = $('.product-options__variant--clickable').on('click', function(e) {\n        e.preventDefault();\n\n        var aClass = 'product-options__variant--active';\n\n        if ($(this).hasClass(aClass)) {\n            return;\n        }\n\n        $variantGroups.removeClass(aClass);\n        $(this).addClass(aClass);\n        $('.product-options__controller--variant').hide();\n\n        var group = $(this).attr('data-group');\n        if (group) {\n            var $group = $('.product-options__controller--variant.variant-type-' + group).show();\n            var $new = $group.find('.product-options__control-label').addClass('inactive').removeClass('active off-left off-right').eq(0).removeClass('inactive').addClass('active');\n            builder.changeVariant($new.data('id'), $new.data('urlname'));\n        } else {\n            var $new = $(this);\n            builder.changeVariant($new.data('id'), $new.data('urlname'));\n        }\n    });\n\n    $(sel).each(function() {\n        var $controller = $(this);\n\n        var $options = $(this).find('.product-options__control-label'),\n            $current = $(this).find('.active');\n\n        var $next = $(this).children().filter('.product-options__next'),\n            $prev = $(this).children().filter('.product-options__previous');\n\n        $next.add($prev).on('click', function(e) {\n            if (builder.isEngraver() && getOldSideClass() == \"engrave-back\") {\n                switchData(\"engrave-front\");\n            }\n            e.preventDefault();\n\n            $current = $controller.find('.active');\n\n            var inClass = 'off-left',\n                outClass = 'off-right';\n\n            if (!$(this).is($prev)) {\n                inClass = 'off-right';\n                outClass = 'off-left';\n            }\n\n            var variant = $current.attr('data-variant'),\n                variantSel = '[data-variant=\"' + variant + '\"]';\n\n            if ($current.data('type') == 'variant') {\n                variantSel = '';\n            }\n\n            var currentIndex = $current.prevAll('span' + variantSel).length,\n                $old = $current;\n\n            currentIndex += $(this).is($next) ? 1: -1;\n            currentIndex = currentIndex % $options.filter('span' + variantSel).length;\n\n            var $new = $options.filter('span' + variantSel).eq(currentIndex);\n\n            $controller.removeClass('animated');\n\n            $new.removeClass('off-left off-right').addClass(inClass);\n            $current.removeClass('off-left off-right');\n\n            Biiju.repaint($new, 'left');\n\n            $controller.addClass('animated');\n\n            $new.removeClass('inactive').addClass('active').removeClass(inClass);\n            $current.removeClass('active').addClass('inactive').addClass(outClass);\n\n            $current = $new;\n\n            if ($new.data('type') == 'variant') {\n                builder.changeVariant($new.data('id'), $new.data('urlname'));\n            } else {\n                builder.changeOption( $new.data('type'), $new.data('id'), $new.data('price'), $new.data('urlname') );\n            }\n        });\n    });\n};\n\n\n\n$(function() {\n    if (!$('#product-preview').length) {\n        return;\n    }\n    var builder = new Builder('#product-preview');\n    builder.handleControllers('.product-options__controller');\n\n    $('.share--pinterest').on('click', function(e) {\n        e.preventDefault();\n        window.open(this.href, \"biiju_pinterest\", \"width=10,height=10\");\n    });\n\n    $('.share--facebook').on('click', function(e) {\n        e.preventDefault();\n        FB.ui({\n            method: 'share',\n            href: this.href\n        });\n    });\n});\n\n\nBuilder.prototype.isEngraver = function() {\n    return $('.product-engraving__wrap').is('div');\n}\n"]}