var pricecharting; var imageInterval; /** * Main entry point of JavaScript code */ $(function () { // initImgLazy(); function checkAds() { if ($('.brand-box ins').length > 0) { $('.brand-box ins').each(function () { if ($(this).data('ad-status') === undefined) { if (imageInterval === undefined) { imageInterval = setInterval(checkAds, 1000); } return false; } else { if ($(this).data('ad-status') == 'filled' || $(this).data('ad-status') == 'unfilled') { clearInterval(imageInterval); resizeBoxes(); } } }); } } function resizeBoxes() { if (typeof $.fn.masonry !== 'undefined') { var $grid = $('#brand-container').masonry({ itemSelector: ".brand-box", gutter: ".gutter" }); $grid.imagesLoaded().progress( function() { $grid.masonry('layout'); }); } } resizeBoxes(); checkAds(); if ($('#pricechart').length > 0) { pricecharting = PriceCharting(); pricecharting.init(); } $(".x-show-more").click(showMore); $(".x-show-less").click(hideMore); $("#submit-error").click(showSubmitForm); if ($('body').hasClass('home')) { loadRecentWatches(); } $("form#search-bar").submit(function(e){ e.preventDefault(); var url = $(this).attr('action'); var q = $(this).find('input').val(); var newUrl = url; if (q != '') { newUrl += "#q="+q; } window.location.href = newUrl; if ($('#watch-filter').length > 0) { window.location.reload(); } }); $(".watch-radio").change(function (e) { var value = $(this).children("input").val(); var baseUrl = $('meta[property="og:url"]').attr('content'); var url = baseUrl + "?sort=" + value; window.location.href = url; }); $("#letter-bar a").each(function(){ var $letter = $(this); if ($letter.hasClass('letter')) { var numBrands = $("#brand-container [data-letter='"+$(this).data('letter')+"']").length; if (numBrands == 0) { $(this).addClass('disabled'); } } $letter.click(function(e){ e.preventDefault(); if ($(this).hasClass('disabled')) { return; } if ($(this).hasClass('active')) { $("#letter-bar a.all").trigger('click'); return; } var letterBar = $("#letter-bar"); letterBar.find('a').removeClass('active'); $(this).addClass('active'); var brandContainer = $("#brand-container"); var letter = $(this).data('letter'); brandContainer.find(".brand-box").removeClass('on').hide(); brandContainer.masonry('destroy'); if (letter == '-') { brandContainer.find(".brand-box").addClass('on').show(); } else { brandContainer.find(".brand-box[data-letter='"+letter+"']").addClass('on').show(); } brandContainer.masonry({ itemSelector: ".brand-box.on", gutter: ".gutter" }); }); }); }); function initImgLazy() { $("img.lazy, source.lazy").not('.lazyloaded').lazyload({effect: "fadeIn"}); $('img.lazy, source.lazy').not('.lazyloadded').first().load(function () { $(window).resize(); }); $("img.lazy, source.lazy").not('.lazyloaded').addClass('lazyloaded'); } function showSubmitForm() { if ($(this).hasClass('disabled')) return; var submitForm = $('#submit-form'); if ( ! submitForm.hasClass("hide")) { submitForm.fadeOut(function(){ submitForm.addClass("hide"); }); return false; } submitForm.removeClass("hide").hide().fadeIn(); submitForm.submit(submitDataError); return false; } function submitDataError() { var submitForm = $(this); var data = submitForm.find('form').first().serialize(); var url = submitForm.find('form').first().attr('action'); $.post(url, data).error(function() { alert('Something went wrong while submitting') }).success(function() { submitForm.fadeOut(); $("#submit-error").replaceWith('Your message has been send'); $("#submit-error").addClass('disabled'); }); return false; // don't post the form for real } function loadRecentWatches() { var watchcontainer = $('#recent-watch-container'); $.ajax({ url: watchcontainer.data('url') }).done(function(html){ var appended = $(html).appendTo(watchcontainer); appended.find('img.lazy, source.lazy:first').lazyload({effect: 'fadeIn'}); appended.find('img.lazy:first, source.lazy:first').load(function () { // do load the newly added lazyload images $(window).resize(); }); }); } function hideMore() { var moreId = $(this).data('less'); var $dotted = $(this).parent().children('.dots'); var $moreLink = $(this).parent().children('.showmore'); $(moreId).hide(); $moreLink.show(); $dotted.show(); $(this).hide(); } function showMore() { var moreId = $(this).data('more'); var $dotted = $(this).parent().children('.dots'); var $lesslink = $(this).parent().children('.showless'); $(moreId).show(); $lesslink.show(); $dotted.hide(); $(this).hide(); } /** * PriceCharting module, requires Chart.js */ var PriceCharting = function () { var api = {}; var json; var canvas; /** * Sets chartjs global settings, starts loading data using ajax */ api.init = function () { if (api.dependenciesNotLoaded()) { console.log("Chart.js is not loaded"); return false; } api.initGlobalSettings(); canvas = document.getElementById("pricechart").getContext("2d"); var url = $('#pricechart').data('url'); $.ajax(url).done(api.setChartData); return api; }; api.dependenciesNotLoaded = function () { return !("Chart" in window); }; api.initGlobalSettings = function () { Chart.defaults.global.responsive = true; Chart.defaults.global.scaleFontSize = 12; Chart.defaults.Line.pointDotRadius = 6; Chart.defaults.global.tooltipCornerRadius = 4; Chart.defaults.global.tooltipYPadding = 8; Chart.defaults.global.tooltipXPadding = 10; Chart.defaults.global.tooltipFillColor = "rgba(0,0,0,0.6)"; Chart.defaults.global.tooltipTemplate = "€ <%= parseInt( value ).toLocaleString() %>"; Chart.defaults.global.multiTooltipTemplate = "€ <%= parseInt( value ).toLocaleString() %>"; }; api.setChartData = function (data) { json = data; api.createLegends(); var options = { scaleLabel: " € <%= parseInt( value ).toLocaleString() %>" }; if (api.dataContainsOneEntry()) { options.tooltipEvents = []; // disable on mouse over options.onAnimationComplete = api.showToolTips; } new Chart(canvas).Line(json, options); }; api.createLegends = function () { if (api.dataContainsOneEntry()) { $("#chart-desc").append(json.datasets[0].label); $("#chart-desc").css("color", json.datasets[0].strokeColor); $("#chart-desc").prepend(" "); } else if (api.dataContainsTwoEntries()) { for (var i = 0; i < json.datasets.length; i++) { api.addSingleLegend(json.datasets[i].label, json.datasets[i].strokeColor); } } }; api.dataContainsOneEntry = function () { return json.datasets.length == 1; }; api.dataContainsTwoEntries = function () { return json.datasets.length == 2; }; api.addSingleLegend = function (label, color) { var $div = $("