jQuery(function ($) {
$.fn.forceNumeric = function() {
return this.each(function() {
$(this).keydown(function(e) {
var key = e.charCode || e.keyCode || 0;
// allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
// home, end, period, and numpad decimal
return (
key == 8 ||
key == 9 ||
key == 13 ||
key == 46 ||
key == 110 ||
key == 190 ||
(key >= 35 && key <= 40) ||
(key >= 48 && key <= 57) ||
(key >= 96 && key <= 105));
});
});
};
$('.numericOnly').forceNumeric();
$.ucfirst = function(str) {
var first = str[0].toUpperCase();
var rest = str.substring(1, str.length);
var word = first + rest;
return word;
};
$.extend($.expr[':'], {
percMore: function(e, i, m) { return parseInt($(e).data('perc')) >= m[3]; },
percLess: function(e, i, m) { return parseInt($(e).data('perc')) <= m[3]; }
});
/*
* Lazy Load - jQuery plugin for lazy loading images
*
* Copyright (c) 2007-2013 Mika Tuupola
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Project home:
* http://www.appelsiini.net/projects/lazyload
*
* Version: 1.8.4
*
*/
(function(a,b,c,d){var e=a(b);a.fn.lazyload=function(c){function i(){var b=0;f.each(function(){var c=a(this);if(h.skip_invisible&&!c.is(":visible"))return;if(!a.abovethetop(this,h)&&!a.leftofbegin(this,h))if(!a.belowthefold(this,h)&&!a.rightoffold(this,h))c.trigger("appear"),b=0;else if(++b>h.failure_limit)return!1})}var f=this,g,h={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null};return c&&(d!==c.failurelimit&&(c.failure_limit=c.failurelimit,delete c.failurelimit),d!==c.effectspeed&&(c.effect_speed=c.effectspeed,delete c.effectspeed),a.extend(h,c)),g=h.container===d||h.container===b?e:a(h.container),0===h.event.indexOf("scroll")&&g.bind(h.event,function(a){return i()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,c.one("appear",function(){if(!this.loaded){if(h.appear){var d=f.length;h.appear.call(b,d,h)}a("").bind("load",function(){c.hide().attr("src",c.data(h.data_attribute))[h.effect](h.effect_speed),b.loaded=!0;var d=a.grep(f,function(a){return!a.loaded});f=a(d);if(h.load){var e=f.length;h.load.call(b,e,h)}}).attr("src",c.data(h.data_attribute))}}),0!==h.event.indexOf("scroll")&&c.bind(h.event,function(a){b.loaded||c.trigger("appear")})}),e.bind("resize",function(a){i()}),/iphone|ipod|ipad.*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent.persisted&&f.each(function(){a(this).trigger("appear")})}),a(b).load(function(){i()}),this},a.belowthefold=function(c,f){var g;return f.container===d||f.container===b?g=e.height()+e.scrollTop():g=a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return f.container===d||f.container===b?g=e.width()+e.scrollLeft():g=a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return f.container===d||f.container===b?g=e.scrollTop():g=a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return f.container===d||f.container===b?g=e.scrollLeft():g=a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!a.rightoffold(b,c)&&!a.leftofbegin(b,c)&&!a.belowthefold(b,c)&&!a.abovethetop(b,c)},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})})(jQuery,window,document)
/**
* jQuery Unveil
* A very lightweight jQuery plugin to lazy load images
* http://luis-almeida.github.com/unveil
*
* Licensed under the MIT license.
* Copyright 2013 Luís Almeida
* https://github.com/luis-almeida
*/
;(function($){$.fn.unveil=function(threshold,callback){var $w=$(window),th=threshold||0,retina=window.devicePixelRatio>1,attrib=retina?"data-src-retina":"data-original",images=this,loaded;this.one("unveil",function(){var source=this.getAttribute(attrib);source=source||this.getAttribute("data-original");if(source){this.setAttribute("src",source);if(typeof callback==="function")callback.call(this);}});function unveil(){var inview=images.filter(function(){var $e=$(this),wt=$w.scrollTop(),wb=wt+$w.height(),et=$e.offset().top,eb=et+$e.height();return eb>=wt-th&&et<=wb+th;});loaded=inview.trigger("unveil");images=images.not(loaded);}/* $w.scroll(unveil); */$w.resize(unveil);unveil();return this;};})(window.jQuery||window.Zepto);
/*! Backstretch - v2.0.4 - 2013-06-19
* http://srobbin.com/jquery-plugins/backstretch/
* Copyright (c) 2013 Scott Robbin; Licensed MIT */
(function(a,d,p){a.fn.backstretch=function(c,b){(c===p||0===c.length)&&a.error("No images were supplied for Backstretch");0===a(d).scrollTop()&&d.scrollTo(0,0);return this.each(function(){var d=a(this),g=d.data("backstretch");if(g){if("string"==typeof c&&"function"==typeof g[c]){g[c](b);return}b=a.extend(g.options,b);g.destroy(!0)}g=new q(this,c,b);d.data("backstretch",g)})};a.backstretch=function(c,b){return a("body").backstretch(c,b).data("backstretch")};a.expr[":"].backstretch=function(c){return a(c).data("backstretch")!==p};a.fn.backstretch.defaults={centeredX:!0,centeredY:!0,duration:5E3,fade:0};var r={left:0,top:0,overflow:"hidden",margin:0,padding:0,height:"100%",width:"100%",zIndex:-999999},s={position:"absolute",display:"none",margin:0,padding:0,border:"none",width:"auto",height:"auto",maxHeight:"none",maxWidth:"none",zIndex:-999999},q=function(c,b,e){this.options=a.extend({},a.fn.backstretch.defaults,e||{});this.images=a.isArray(b)?b:[b];a.each(this.images,function(){a("")[0].src=this});this.isBody=c===document.body;this.$container=a(c);this.$root=this.isBody?l?a(d):a(document):this.$container;c=this.$container.children(".backstretch").first();this.$wrap=c.length?c:a('
').css(r).appendTo(this.$container);this.isBody||(c=this.$container.css("position"),b=this.$container.css("zIndex"),this.$container.css({position:"static"===c?"relative":c,zIndex:"auto"===b?0:b,background:"none"}),this.$wrap.css({zIndex:-999998}));this.$wrap.css({position:this.isBody&&l?"fixed":"absolute"});this.index=0;this.show(this.index);a(d).on("resize.backstretch",a.proxy(this.resize,this)).on("orientationchange.backstretch",a.proxy(function(){this.isBody&&0===d.pageYOffset&&(d.scrollTo(0,1),this.resize())},this))};q.prototype={resize:function(){try{var a={left:0,top:0},b=this.isBody?this.$root.width():this.$root.innerWidth(),e=b,g=this.isBody?d.innerHeight?d.innerHeight:this.$root.height():this.$root.innerHeight(),j=e/this.$img.data("ratio"),f;j>=g?(f=(j-g)/2,this.options.centeredY&&(a.top="-"+f+"px")):(j=g,e=j*this.$img.data("ratio"),f=(e-b)/2,this.options.centeredX&&(a.left="-"+f+"px"));this.$wrap.css({width:b,height:g}).find("img:not(.deleteable)").css({width:e,height:j}).css(a)}catch(h){}return this},show:function(c){if(!(Math.abs(c)>this.images.length-1)){var b=this,e=b.$wrap.find("img").addClass("deleteable"),d={relatedTarget:b.$container[0]};b.$container.trigger(a.Event("backstretch.before",d),[b,c]);this.index=c;clearInterval(b.interval);b.$img=a("").css(s).bind("load",function(f){var h=this.width||a(f.target).width();f=this.height||a(f.target).height();a(this).data("ratio",h/f);a(this).fadeIn(b.options.speed||b.options.fade,function(){e.remove();b.paused||b.cycle();a(["after","show"]).each(function(){b.$container.trigger(a.Event("backstretch."+this,d),[b,c])})});b.resize()}).appendTo(b.$wrap);b.$img.attr("src",b.images[c]);return b}},next:function(){return this.show(this.indexe||d.operamini&&"[object OperaMini]"==={}.toString.call(d.operamini)||n&&7458>t||-1e||h&&6>h||"palmGetResource"in d&&e&&534>e||-1=k)})(jQuery,window);
/**
* Cookie plugin
*
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
jQuery.cookie=function(b,j,m){if(typeof j!="undefined"){m=m||{};if(j===null){j="";m.expires=-1}var e="";if(m.expires&&(typeof m.expires=="number"||m.expires.toUTCString)){var f;if(typeof m.expires=="number"){f=new Date();f.setTime(f.getTime()+(m.expires*24*60*60*1000))}else{f=m.expires}e="; expires="+f.toUTCString()}var l=m.path?"; path="+(m.path):"";var g=m.domain?"; domain="+(m.domain):"";var a=m.secure?"; secure":"";document.cookie=[b,"=",encodeURIComponent(j),e,l,g,a].join("")}else{var d=null;if(document.cookie&&document.cookie!=""){var k=document.cookie.split(";");for(var h=0;ha)return l.idle=!1,clearTimeout(e.idleTimer.tId),d.enabled&&(e.idleTimer.tId=setTimeout(o,d.timeout)),void 0;var m=e.Event(e.data(i,"idleTimer",l.idle?"idle":"active")+".idleTimer");e(i).trigger(m)},m=function(e){var t=e.data("idleTimerObj")||{};t.enabled=!1,clearTimeout(t.tId),e.off(".idleTimer")};if(a.olddate=a.olddate||+new Date,"number"==typeof t)d.timeout=t;else{if("destroy"===t)return m(l),this;if("getElapsedTime"===t)return+new Date-a.olddate}l.on(e.trim((d.events+" ").split(" ").join(".idleTimer ")),function(){var t=e.data(this,"idleTimerObj");clearTimeout(t.tId),t.enabled&&(t.idle&&o(this),t.tId=setTimeout(o,t.timeout))}),a.idle=d.idle,a.enabled=d.enabled,a.timeout=d.timeout,d.startImmediately&&(a.tId=setTimeout(o,a.timeout)),l.data("idleTimer","active"),l.data("idleTimerObj",a)},e.fn.idleTimer=function(t,i){return i||(i={}),this[0]&&e.idleTimer(t,this[0],i),this}})(jQuery);
/**
* Isotope v1.5.25
* An exquisite jQuery plugin for magical layouts
* http://isotope.metafizzy.co
*
* Commercial use requires one-time license fee
* http://metafizzy.co/#licenses
*
* Copyright 2012 David DeSandro / Metafizzy
*/
(function(a,b,c){"use strict";var d=a.document,e=a.Modernizr,f=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},g="Moz Webkit O Ms".split(" "),h=function(a){var b=d.documentElement.style,c;if(typeof b[a]=="string")return a;a=f(a);for(var e=0,h=g.length;e"+d+"{#modernizr{height:3px}}"+"").appendTo("head"),f=b('').appendTo("html");a=f.height()===3,f.remove(),e.remove()}return a},csstransitions:function(){return!!j}},l;if(e)for(l in k)e.hasOwnProperty(l)||e.addTest(l,k[l]);else{e=a.Modernizr={_version:"1.6ish: miniModernizr for Isotope"};var m=" ",n;for(l in k)n=k[l](),e[l]=n,m+=" "+(n?"":"no-")+l;b("html").addClass(m)}if(e.csstransforms){var o=e.csstransforms3d?{translate:function(a){return"translate3d("+a[0]+"px, "+a[1]+"px, 0) "},scale:function(a){return"scale3d("+a+", "+a+", 1) "}}:{translate:function(a){return"translate("+a[0]+"px, "+a[1]+"px) "},scale:function(a){return"scale("+a+") "}},p=function(a,c,d){var e=b.data(a,"isoTransform")||{},f={},g,h={},j;f[c]=d,b.extend(e,f);for(g in e)j=e[g],h[g]=o[g](j);var k=h.translate||"",l=h.scale||"",m=k+l;b.data(a,"isoTransform",e),a.style[i]=m};b.cssNumber.scale=!0,b.cssHooks.scale={set:function(a,b){p(a,"scale",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.scale?d.scale:1}},b.fx.step.scale=function(a){b.cssHooks.scale.set(a.elem,a.now+a.unit)},b.cssNumber.translate=!0,b.cssHooks.translate={set:function(a,b){p(a,"translate",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.translate?d.translate:[0,0]}}}var q,r;e.csstransitions&&(q={WebkitTransitionProperty:"webkitTransitionEnd",MozTransitionProperty:"transitionend",OTransitionProperty:"oTransitionEnd otransitionend",transitionProperty:"transitionend"}[j],r=h("transitionDuration"));var s=b.event,t=b.event.handle?"handle":"dispatch",u;s.special.smartresize={setup:function(){b(this).bind("resize",s.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",s.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",u&&clearTimeout(u),u=setTimeout(function(){s[t].apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Isotope=function(a,c,d){this.element=b(c),this._create(a),this._init(d)};var v=["width","height"],w=b(a);b.Isotope.settings={resizable:!0,layoutMode:"masonry",containerClass:"isotope",itemClass:"isotope-item",hiddenClass:"isotope-hidden",hiddenStyle:{opacity:0,scale:.001},visibleStyle:{opacity:1,scale:1},containerStyle:{position:"relative",overflow:"hidden"},animationEngine:"best-available",animationOptions:{queue:!1,duration:800},sortBy:"original-order",sortAscending:!0,resizesContainer:!0,transformsEnabled:!0,itemPositionDataEnabled:!1},b.Isotope.prototype={_create:function(a){this.options=b.extend({},b.Isotope.settings,a),this.styleQueue=[],this.elemCount=0;var c=this.element[0].style;this.originalStyle={};var d=v.slice(0);for(var e in this.options.containerStyle)d.push(e);for(var f=0,g=d.length;fg?1:f0&&(i=function(a,b){b.$el[d](b.style,f).one(q,k)},j=!1)}}b.each(this.styleQueue,i),j&&k(),this.styleQueue=[]},resize:function(){this["_"+this.options.layoutMode+"ResizeChanged"]()&&this.reLayout()},reLayout:function(a){this["_"+this.options.layoutMode+"Reset"](),this.layout(this.$filteredAtoms,a)},addItems:function(a,b){var c=this._getAtoms(a);this.$allAtoms=this.$allAtoms.add(c),b&&b(c)},insert:function(a,b){this.element.append(a);var c=this;this.addItems(a,function(a){var d=c._filter(a);c._addHideAppended(d),c._sort(),c.reLayout(),c._revealAppended(d,b)})},appended:function(a,b){var c=this;this.addItems(a,function(a){c._addHideAppended(a),c.layout(a),c._revealAppended(a,b)})},_addHideAppended:function(a){this.$filteredAtoms=this.$filteredAtoms.add(a),a.addClass("no-transition"),this._isInserting=!0,this.styleQueue.push({$el:a,style:this.options.hiddenStyle})},_revealAppended:function(a,b){var c=this;setTimeout(function(){a.removeClass("no-transition"),c.styleQueue.push({$el:a,style:c.options.visibleStyle}),c._isInserting=!1,c._processStyleQueue(a,b)},10)},reloadItems:function(){this.$allAtoms=this._getAtoms(this.element.children())},remove:function(a,b){this.$allAtoms=this.$allAtoms.not(a),this.$filteredAtoms=this.$filteredAtoms.not(a);var c=this,d=function(){a.remove(),b&&b.call(c.element)};a.filter(":not(."+this.options.hiddenClass+")").length?(this.styleQueue.push({$el:a,style:this.options.hiddenStyle}),this._sort(),this.reLayout(d)):d()},shuffle:function(a){this.updateSortData(this.$allAtoms),this.options.sortBy="random",this._sort(),this.reLayout(a)},destroy:function(){var a=this.usingTransforms,b=this.options;this.$allAtoms.removeClass(b.hiddenClass+" "+b.itemClass).each(function(){var b=this.style;b.position="",b.top="",b.left="",b.opacity="",a&&(b[i]="")});var c=this.element[0].style;for(var d in this.originalStyle)c[d]=this.originalStyle[d];this.element.unbind(".isotope").undelegate("."+b.hiddenClass,"click").removeClass(b.containerClass).removeData("isotope"),w.unbind(".isotope")},_getSegments:function(a){var b=this.options.layoutMode,c=a?"rowHeight":"columnWidth",d=a?"height":"width",e=a?"rows":"cols",g=this.element[d](),h,i=this.options[b]&&this.options[b][c]||this.$filteredAtoms["outer"+f(d)](!0)||g;h=Math.floor(g/i),h=Math.max(h,1),this[b][e]=h,this[b][c]=i},_checkIfSegmentsChanged:function(a){var b=this.options.layoutMode,c=a?"rows":"cols",d=this[b][c];return this._getSegments(a),this[b][c]!==d},_masonryReset:function(){this.masonry={},this._getSegments();var a=this.masonry.cols;this.masonry.colYs=[];while(a--)this.masonry.colYs.push(0)},_masonryLayout:function(a){var c=this,d=c.masonry;a.each(function(){var a=b(this),e=Math.ceil(a.outerWidth(!0)/d.columnWidth);e=Math.min(e,d.cols);if(e===1)c._masonryPlaceBrick(a,d.colYs);else{var f=d.cols+1-e,g=[],h,i;for(i=0;id&&(e.x=0,e.y=e.height),c._pushPosition(a,e.x,e.y),e.height=Math.max(e.y+g,e.height),e.x+=f})},_fitRowsGetContainerSize:function(){return{height:this.fitRows.height}},_fitRowsResizeChanged:function(){return!0},_cellsByRowReset:function(){this.cellsByRow={index:0},this._getSegments(),this._getSegments(!0)},_cellsByRowLayout:function(a){var c=this,d=this.cellsByRow;a.each(function(){var a=b(this),e=d.index%d.cols,f=Math.floor(d.index/d.cols),g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByRowGetContainerSize:function(){return{height:Math.ceil(this.$filteredAtoms.length/this.cellsByRow.cols)*this.cellsByRow.rowHeight+this.offset.top}},_cellsByRowResizeChanged:function(){return this._checkIfSegmentsChanged()},_straightDownReset:function(){this.straightDown={y:0}},_straightDownLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,0,c.straightDown.y),c.straightDown.y+=d.outerHeight(!0)})},_straightDownGetContainerSize:function(){return{height:this.straightDown.y}},_straightDownResizeChanged:function(){return!0},_masonryHorizontalReset:function(){this.masonryHorizontal={},this._getSegments(!0);var a=this.masonryHorizontal.rows;this.masonryHorizontal.rowXs=[];while(a--)this.masonryHorizontal.rowXs.push(0)},_masonryHorizontalLayout:function(a){var c=this,d=c.masonryHorizontal;a.each(function(){var a=b(this),e=Math.ceil(a.outerHeight(!0)/d.rowHeight);e=Math.min(e,d.rows);if(e===1)c._masonryHorizontalPlaceBrick(a,d.rowXs);else{var f=d.rows+1-e,g=[],h,i;for(i=0;id&&(e.x=e.width,e.y=0),c._pushPosition(a,e.x,e.y),e.width=Math.max(e.x+f,e.width),e.y+=g})},_fitColumnsGetContainerSize:function(){return{width:this.fitColumns.width}},_fitColumnsResizeChanged:function(){return!0},_cellsByColumnReset:function(){this.cellsByColumn={index:0},this._getSegments(),this._getSegments(!0)},_cellsByColumnLayout:function(a){var c=this,d=this.cellsByColumn;a.each(function(){var a=b(this),e=Math.floor(d.index/d.rows),f=d.index%d.rows,g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByColumnGetContainerSize:function(){return{width:Math.ceil(this.$filteredAtoms.length/this.cellsByColumn.rows)*this.cellsByColumn.columnWidth}},_cellsByColumnResizeChanged:function(){return this._checkIfSegmentsChanged(!0)},_straightAcrossReset:function(){this.straightAcross={x:0}},_straightAcrossLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,c.straightAcross.x,0),c.straightAcross.x+=d.outerWidth(!0)})},_straightAcrossGetContainerSize:function(){return{width:this.straightAcross.x}},_straightAcrossResizeChanged:function(){return!0}},b.fn.imagesLoaded=function(a){function h(){a.call(c,d)}function i(a){var c=a.target;c.src!==f&&b.inArray(c,g)===-1&&(g.push(c),--e<=0&&(setTimeout(h),d.unbind(".imagesLoaded",i)))}var c=this,d=c.find("img").add(c.filter("img")),e=d.length,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",g=[];return e||h(),d.bind("load.imagesLoaded error.imagesLoaded",i).each(function(){var a=this.src;this.src=f,this.src=a}),c};var x=function(b){a.console&&a.console.error(b)};b.fn.isotope=function(a,c){if(typeof a=="string"){var d=Array.prototype.slice.call(arguments,1);this.each(function(){var c=b.data(this,"isotope");if(!c){x("cannot call methods on isotope prior to initialization; attempted to call method '"+a+"'");return}if(!b.isFunction(c[a])||a.charAt(0)==="_"){x("no such method '"+a+"' for isotope instance");return}c[a].apply(c,d)})}else this.each(function(){var d=b.data(this,"isotope");d?(d.option(a),d._init(c)):b.data(this,"isotope",new b.Isotope(a,this,c))});return this}})(window,jQuery);
// modified Isotope methods for gutters in masonry
$.Isotope.prototype._getMasonryGutterColumns = function() {
var gutter = this.options.masonry && this.options.masonry.gutterWidth || 0;
containerWidth = this.element.width();
this.masonry.columnWidth = this.options.masonry && this.options.masonry.columnWidth ||
// or use the size of the first item
this.$filteredAtoms.outerWidth(true) ||
// if there's no items, use size of container
containerWidth;
this.masonry.columnWidth += gutter;
this.masonry.cols = Math.floor( ( containerWidth + gutter ) / this.masonry.columnWidth );
this.masonry.cols = Math.max( this.masonry.cols, 1 );
};
$.Isotope.prototype._masonryReset = function() {
// layout-specific props
this.masonry = {};
// FIXME shouldn't have to call this again
this._getMasonryGutterColumns();
var i = this.masonry.cols;
this.masonry.colYs = [];
while (i--) {
this.masonry.colYs.push( 0 );
}
};
$.Isotope.prototype._masonryResizeChanged = function() {
var prevSegments = this.masonry.cols;
// update cols/rows
this._getMasonryGutterColumns();
// return if updated cols/rows is not equal to previous
return ( this.masonry.cols !== prevSegments );
};
/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
* Licensed under the MIT License (LICENSE.txt).
*
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
* Thanks to: Seamus Leahy for adding deltaX and deltaY
*
* Version: 3.0.6
*
* Requires: 1.2.2+
*/
(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;b.axis!==void 0&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);b.wheelDeltaY!==void 0&&(g=b.wheelDeltaY/120);b.wheelDeltaX!==void 0&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=
d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,false);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
});
var filter = {};
var site = {
viewType: 'compact',
loggedIn: false,
loggedInInfo: {firstname:'', lastname:'', fullname:'', email:''},
showMessage: function(fType, fMessage) {
//alert(fMessage);
tools.modalMessage('html', fMessage);
},
showDealsLoader: function() {},
showProductSearchResult: function() {},
resetLazyLoad: function() {},
afterLazyLoadFunction:[],
translations: {
'Please wait': {nl:'Een moment geduld...'},
'An error has occurred. Please try again later.': {nl:'Er is een fout opgetreden. Probeer het later opnieuw'},
'Are you sure you want to cancel your account?': {nl:'Weet je zeker dat je je account wil opheffen?'},
'You will have to activate your new emailaddress. An activation-link was sent to your mailbox.': {nl:'Je moet je nieuwe e-mailadres eerst activeren. Er is een activatielink verzonden naar je nieuwe e-mailadres.'},
'This page requires you to log in. You will be taken back to the home page.': {nl:'Deze pagina is alleen beschikbaar voor ingelogde bezoekers. Je gaat nu terug naar de homepage.'},
'Please fill in all required fields.': {nl:'Je hebt niet alle verplichte velden ingevoerd.'},
"Your message has been sent. We'll be in touch with you soon.": {nl:'Je bericht is verzonden. Onze redactie neemt zo spoedig mogelijk contact op.'},
'Your link will appear on our links-page in a couple of minutes.': {nl:'Je link wordt binnen enkele minuten op onze partners pagina weergegeven.'},
'Your vote has been registered.': {nl:'Bedankt voor je beoordeling!'},
'Please enter a valid email address.': {nl:'Vul een geldig e-mailadres in.'},
'A new activationmail has been sent.': {nl:'Er is een nieuwe activatiemail verzonden.'},
'A new password has been sent to your e-mail address': {nl:'Er is een nieuw wachtwoord verstuurd naar het door jou opgegeven e-mailadres.'},
'An error has occurred. Activationmail could not be sent.': {nl:'Er is een fout opgetreden. E-mail kon niet worden verzonden.'},
'This email address has already been registered.': {nl:'Er bestaat al een account met dit e-mailadres.'},
'The location you selected is added to your daily newsletter.': {nl:'De geselecteerde stad is toegevoegd aan je dagelijkse nieuwsbrief.'},
'The passwords do not match.': {nl:'De opgegeven wachtwoorden komen niet overeen.'},
'Please fill in both password fields.': {nl:'Vul beide wachtwoord velden in.'},
'The minimum password length is 6 character. White spaces are not allowed.': {nl:'Het wachtwoord moet bestaan uit minimaal 6 karakters. Spaties zijn niet toegestaan.'},
'Please fill in a valid e-mail address.': {nl:'Vul een geldig e-mailadres in.'},
'Are you sure you want to change your emailaddress to:': {nl:'Weet je zeker dat je je e-mailadres wilt wijzgigen in:'},
'Please accept the terms & conditions.': {nl:'Je moet de algemene voorwaarden nog accepteren.'},
'Please select a location.': {nl:'Selecteer een locatie.'},
'Settings saved successfully': {nl:'Instellingen opgeslagen'},
'Password saved successfully': {nl:'Wachtwoord opgeslagen'},
'Expired': {nl:'Verlopen'},
'Close': {nl:'Sluiten'},
'activate': {nl:'activeren'},
'Wrong password': {nl:'Het ingevoerde wachtwoord is niet juist'},
'Your account has been removed. You will be directed to the homepage.': {nl:'Je account is verwijderd. Je wordt nu doorverwezen naar de homepage.'},
'Voucheralarm saved.': {nl:'Voucher alarm opgeslagen.'},
'comments': {nl:'reacties'},
'No comments yet': {nl:'Nog geen reacties'},
'Your comment is waiting for approval.': {nl:'Je reactie is verzonden. Voordat je reactie zichtbaar wordt, moet deze eerst worden goedgekeurd door onze redactie.'},
'Your deal alarm has been saved.': {nl:'Het Deal Alarm is opgeslagen.'},
'Your voucher alarm has been saved.': {nl:'Je voucher alarm is opgeslagen.'},
'Voucher alarm removed.': {nl:'Voucher alarm verwijderd.'},
'Are you sure you want to delete this deal alarm?': {nl:'Weet je zeker dat je dit deal alarm wil verwijderen?'},
'Are you sure you want to delete this voucher alarm?': {nl:'Weet je zeker dat je dit voucher alarm wil verwijderen?'},
'Your cheaper alternative has been submitted and will be reviewed by our content managers soon.': {nl:'Je goedkoper alternatief is verstuurd en zal zo snel mogelijk worden beoordeeld door onze redactie.'},
'monday': {nl:'maandag'}, 'tuesday': {nl:'dinsdag'}, 'wednesday': {nl:'woensdag'}, 'thursday': {nl:'donderdag'}, 'friday': {nl:'vrijdag'}, 'saturday': {nl:'zaterdag'}, 'sunday': {nl:'zondag'},
'january': {nl:'januari'}, 'februari': {nl:'februari'}, 'march': {nl:'maart'}, 'april': {nl:'april'}, 'may': {nl:'mei'}, 'june': {nl:'juni'}, 'july': {nl:'juli'}, 'august': {nl:'augustus'}, 'september': {nl:'september'}, 'october': {nl:'oktober'}, 'november': {nl:'november'}, 'december': {nl:'december'},
'hours': {nl:'uur'}, 'hour': {nl:'uur'}, 'minutes': {nl:'minuten'}, 'minute': {nl:'minuut'}, 'day': {nl:'dag'}, 'days': {nl:'dagen'}, 'week': {nl:'week'}, 'weeks': {nl:'weken'},
'before expiration': {nl:'van tevoren'},
'Your mail has been sent!': {nl:'Je mail is verzonden.'},
'Your vote has been registered': {nl:'Je stem is geregistreerd.'},
'You can only vote once.': {nl:'Je kan maar een keer stemmen.'},
'Rating': {nl:'Beoordeling'},
'time': {nl:'tijd'}, 'times':{nl:'tijden'}, 'no times selected':{nl:'geen tijden geselecteerd'},
'country': {nl:'land'}, 'countries':{nl:'landen'}, 'no countries selected':{nl:'niets geselecteerd'},
'city': {nl:'stad'}, 'cities':{nl:'steden'}, 'no cities selected':{nl:'selecteer stad'},
'price': {nl:'prijs'}, 'prices':{nl:'prijzen'}, 'no prices selected':{nl:'geen prijzen geselecteerd'},
'discount': {nl:'korting'}, 'discounts':{nl:'kortingen'}, 'no discount selected':{nl:'geen korting geselecteerd'},
'shop': {nl:'shop'}, 'shops':{nl:'shops'}, 'no shops selected':{nl:'geen shops geselecteerd'},
'refresh type': {nl:'ververs type'}, 'refresh types':{nl:'ververs types'}, 'nothing selected':{nl:'niets geselecteerd'},
'time period': {nl:'termijn'}, 'time periods':{nl:'termijnen'},
'targetgroup': {nl:'doelgroep'}, 'targetgroups':{nl:'doelgroepen'}, 'no targetgroups selected':{nl:'geen doelgroepen geselecteerd'},
'close': {nl:'sluit'},
'all': {nl:'alle'},
'selected': {nl:'geselecteerd'},
'Select all': {nl:'Selecteer alles'}, 'Deselect all': {nl:'Selecteer niets'}
},
translate: function(fString) {
switch (LANGUAGE) {
case 'english': return fString; break;
case 'dutch':
if (!site.translations[fString] || !site.translations[fString].nl) return fString;
return site.translations[fString].nl;
break;
}
},
socialPopup: function(fSocial, fShareType, fId) {
var width=500;
var height=400;
var left = (screen.width/2)-(width/2);
var top = (screen.height/2)-(height/2);
newwindow=window.open(site.getShareLink(fSocial, fShareType, fId),'Share!','height='+height+',width='+width+', top='+top+', left='+left);
return false;
},
bookmark: function () {
var url = DR;
var title = SITEFULLNAME;
if(document.all) { // ie
window.external.AddFavorite(url, title);
}
else if(window.sidebar) { // firefox
window.sidebar.addPanel(title, url, "");
}
else if(window.opera && window.print) { // opera
var elem = document.createElement('a');
elem.setAttribute('href',url);
elem.setAttribute('title',title);
elem.setAttribute('rel','sidebar');
elem.click(); // this.title=document.title;
}
},
initVisualTimers: function() {
},
onLoginFunctions: [],
getLoginUrl: function(fReturnUrl) {
if (!fReturnUrl) {
return '/login?return='+location.pathname;
}
else {
return '/login?return='+fReturnUrl;
}
},
loginAndReturn: function() {
location = site.getLoginUrl();
},
afterCheckLogin: function() {},
checkLogin: function(fData) {
if (fData) var data = fData;
else var data = {};
data['submitType'] = 'check_login';
$.ajax({
type: 'POST',
//url: DR+'__submit.php',
url: '/__submit.php',
dataType: "json",
data: data,
cache: false,
context:this,
success: function(data){
if (data.banners) site.showBanners(data.banners);
if (data.tweets) site.showTweets(data.tweets);
if (data.memberlogin) {
site.loggedIn = true;
$.each(['fullname', 'firstname', 'lastname', 'email'], function(k,field){
$('.ml_'+field).val(data.memberlogin[field]).blur();
site.loggedInInfo[field] = data.memberlogin[field];
})
}
if (data && data.facebookLoginUrl) {
$('a.fbLoginUrl').attr('href', data.facebookLoginUrl);
$('input.fbLoginUrl').click(function(){
window.location = data.facebookLoginUrl;
return false;
});
}
if (data && data.googleLoginUrl) {
$('a.googleLoginUrl').attr('href', data.googleLoginUrl);
$('input.googleLoginUrl').click(function(){
window.location = data.googleLoginUrl;
return false;
});
}
site.handleLoginResult(data);
//alert(data.googleLoginUrl)
if (data.theme) {
eval(data.theme);
}
if (data.banners) {
for (var i in data.banners) {
//console.log(data.banners[i]);
if (data.banners[i] && ($('#'+i).is(':empty') || !data.defaultBanners[i])) {
if (data.banners[i]) $('#'+i).html(data.banners[i]).attr("id", "bn-used");
}
else {
}
}
}
if (data.notifications) {
var hiddenNotificationIds = $.cookie('hiddenNotificationIds');
//console.log(hiddenNotificationIds);
if (hiddenNotificationIds) hiddenNotificationIds = tools.arrayObj(hiddenNotificationIds.split(';'));
else hiddenNotificationIds = {};
//console.log(hiddenNotificationIds);
var notifications = [];
$.each(data.notifications, function(k,notification) {
if (!hiddenNotificationIds[notification.id]) {
notifications.push(notification);
}
});
site.handleNotifications(notifications);
}
if (data.news) {
site.handleNews(data.news);
}
site.afterCheckLogin();
}
});
},
closeNotification: function(fId) {
$('#notification_'+fId).fadeOut();
var hiddenNotificationIds = $.cookie('hiddenNotificationIds');
if (hiddenNotificationIds) hiddenNotificationIds = hiddenNotificationIds.split(';');
else hiddenNotificationIds = [];
hiddenNotificationIds.push(fId);
//console.log(hiddenNotificationIds);
$.cookie('hiddenNotificationIds', hiddenNotificationIds.join(';'), {expires:30, path:'/'});
},
logout: function() {
$.ajax({
type: 'GET',
url: DR+'__submit.php',
dataType: "json",
data: {
submitType: 'ajaxlogout'
},
cache: false,
context:this,
success: function(data){
//alert('loggedout')
location.reload();
}
});
},
login: function(fCallBack, fLoginEmailSelector, fLoginPasswordSelector, fForwardUrl) {
if (!fLoginEmailSelector) fLoginEmailSelector='#login-email';
if (!fLoginPasswordSelector) fLoginPasswordSelector='#login-password';
tools.clearErrorState(fLoginEmailSelector+', '+fLoginPasswordSelector);
/*
$('#login-email, #login-password').removeClass('input_error');
$('#login-email, #login-password').parent().removeClass('input_error');
*/
errors = 0;
error = false;
//console.log(fLoginEmailSelector);
//console.log($(fLoginEmailSelector));
var emailVal = $(fLoginEmailSelector).val();
var passwordVal = $(fLoginPasswordSelector).val();
if (!emailVal || !tools.validateEmail(emailVal)) {
tools.setErrorState(fLoginEmailSelector);
errors++;
if (!error) error = site.translate('Please enter a valid email address.');
}
if (!passwordVal) {
tools.setErrorState(fLoginPasswordSelector);
if (!error) error = site.translate('Please fill in all required fields.');
errors++;
}
if (!errors) {
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: {
submitType: 'login',
email: emailVal,
password: passwordVal,
keepSession: ($('#login-keep-session').attr('checked')?1:0)
},
cache: false,
context:this,
success: function(data){
//tools.log(data);
if (data.memberlogin) {
site.loggedIn = true;
$.each(['fullname', 'firstname', 'lastname', 'email'], function(k,field){
site.loggedInInfo[field] = data.memberlogin[field];
});
}
$.each(site.onLoginFunctions, function(i,cmd) {/* console.log(cmd); */ eval(cmd)});
if (data.memberlogin) {
if (fForwardUrl) { document.location = fForwardUrl; return;}
if (fCallBack) {
eval(fCallBack+'(data)')
}
else {
if (data && data.facebookLoginUrl) {
$('a.fbLoginUrl').attr('href', data.facebookLoginUrl);
$('input.fbLoginUrl').click(function(){
window.location = data.facebookLoginUrl;
return false;
});
}
site.handleLoginResult(data);
}
}
else if (data.errorMessage) {
site.showMessage('error', data.errorMessage);
tools.setErrorState(fLoginEmailSelector+', '+fLoginPasswordSelector);
}
}
})
}
else {
if (error) {
site.showLoginError(error);
//alert(error)
}
}
},
showLoginError: function(fError) {
},
trackEvent: function(fCat, fAct, fLabel) {
if (fCat, fAct, fLabel) { _gaq.push(['_trackEvent', fCat, fAct, fLabel]); return }
if (fCat, fAct) { _gaq.push(['_trackEvent', fCat, fAct]); return }
if (fCat) { _gaq.push(['_trackEvent', fCat]); return }
},
setPassword: function(fPasswordId, fPasswordConfirmId) {
tools.clearErrorState('#'+fPasswordId, '#'+fPasswordConfirmId);
var pwField = $('#'+fPasswordId);
var pwConfirmField = $('#'+fPasswordConfirmId);
var error = false;
if (!pwField.val() || pwField.val()==pwField.data('defaultvalue')) {
tools.setErrorState('#'+fPasswordId); error=true;
};
if (!pwConfirmField.val() || pwConfirmField.val()==pwConfirmField.data('defaultvalue')) {
tools.setErrorState('#'+fPasswordConfirmId); error=true;
};
if (error) return;
if (pwField.val()!=pwConfirmField.val()) {
tools.setErrorState('#'+fPasswordId);
tools.setErrorState('#'+fPasswordConfirmId);
return;
}
var data = {
submitType: 'register_details',
step: 1,
password: pwField.val(),
password_confirm: pwConfirmField.val()
};
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: data,
cache: false,
context:this,
success: function(result){
if (result.success) {
alert('Je wachtwoord is opgeslagen. Je wordt nu doorgestuurd naar de homepage.');
window.location = '/';
return;
}
else {
if (result.code) {
site.showMessage('error', site.getRegisterCode(result.code));
}
else if (result.errorMessage) {
site.showMessage('error', site.translate(result.errorMessage))
}
}
if (result.errorFields) {
$.each(result.errorFields, function(k,errorField){
tools.setErrorState('#register_'+errorField);
})
}
}
});
},
recoverPassword: function(fId) {
tools.clearErrorState('#'+fId);
recoverEmailEl = $('#'+fId);
errors = 0;
var emailVal = recoverEmailEl.val();
if (!emailVal || !tools.validateEmail(emailVal)) {
tools.setErrorState('#'+fId);
errors++;
}
if (!errors) {
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: {
submitType: 'recover_password',
email: emailVal
},
cache: false,
context:this,
success: function(data){
site.handleRecoverPassword(fId, data);
}
})
}
},
handleRecoverPassword: function(fId, fData) {
if (fData.success) {
site.showMessage('success', site.translate('A new password has been sent to your e-mail address'));
}
else {
tools.setErrorState('#'+fId);
if (fData.errorMessage)
site.showMessage('error', site.translate(fData.errorMessage));
}
},
showSavePasswordResult: function(fType, fMessage) {
site.showMessage(fType, fMessage);
},
removeAccount: function(fPasswordSelector) {
tools.clearErrorState(fPasswordSelector);
if (!confirm(site.translate('Are you sure you want to cancel your account?'))) {
return;
}
var formData = {submitType:'removeaccount', password:$(fPasswordSelector).val()};
tools.modalWait('html', site.translate('Please wait'));
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: formData,
cache: false,
context:this,
success: function(data){
tools.removeModalWait();
if (data.success) {
alert(site.translate('Your account has been removed. You will be directed to the homepage.'));
window.location.replace('/');
return;
}
else {
tools.setErrorState(fPasswordSelector);
site.showMessage('error', site.translate('Wrong password'));
}
}
});
},
savePassword: function(fPasswordSelPf) {
if (!fPasswordSelPf) fPasswordSelPf = 'accountsettings';
$('#password_message').html('');
var formData = {submitType:'password'};
errors = 0;
$.each(['password', 'password_confirm', 'password_current'], function(k,field){
if ($('#'+fPasswordSelPf+'_'+field).length) {
formData[field] = ($('#'+fPasswordSelPf+'_'+field).val()!=$('#'+fPasswordSelPf+'_'+field).data('defaultvalue')?$('#'+fPasswordSelPf+'_'+field).val():'');
tools.clearErrorState('#'+fPasswordSelPf+'_'+field);
}
});
if (!formData['password'] || !formData['password_confirm']) {
tools.setErrorState('#'+fPasswordSelPf+'_password, #'+fPasswordSelPf+'_password_confirm');
site.showSavePasswordResult('error', site.translate('Please fill in both password fields.'));
errors++;
}
if (!errors && (formData['password'] || formData['password_confirm']) && formData['password']!=formData['password_confirm']) {
errors++;
tools.setErrorState('#'+fPasswordSelPf+'_password, #'+fPasswordSelPf+'_password_confirm');
if (formData['password']=='' || formData['password_confirm']=='')
site.showSavePasswordResult('error', site.translate('Please fill in both password fields.'));
else
site.showSavePasswordResult('error', site.translate('The passwords do not match.'));
}
if (!errors) {
tools.modalWait('html', site.translate('Please wait'));
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: formData,
cache: false,
context:this,
success: function(data){
tools.removeModalWait();
if (!data.success) {
window.location.replace('/');
return;
}
if (data.code)
site.showRegisterError(data.code);
else {
$('#'+fPasswordSelPf+'_password').val('').focus().blur();
$('#'+fPasswordSelPf+'_password_confirm').val('').focus().blur();
$('#'+fPasswordSelPf+'_password_current').val('').focus().blur();
site.showSavePasswordResult('success', site.translate('Password saved successfully'));
}
}
});
}
},
showSaveAccountSettingsResult: function(fType, fMessage) {
site.showMessage(fType, fMessage);
},
lastEmailAccount: false,
loadAccountSettings: function() {
$.ajax({
type: 'POST',
url: DR+'__load.php',
dataType: "json",
data: {loadType:'accountsettings'},
cache: false,
context:this,
success: function(data){
//console.log(data)
if (!data.success) {
window.location.replace('/');
return;
}
site.lastEmailAccount = data['email'];
$.each(['firstname', 'lastname', 'gender', 'email', 'region', 'birthdate_day', 'birthdate_month', 'birthdate_year', 'birthdate'], function(k,field){
if (data[field]) {
switch (field) {
case 'birthdate':
var birthdateE = data[field].split('-');
$('#accountsettings_'+field).val(birthdateE[2]+'/'+birthdateE[1]+'/'+birthdateE[0]).blur().trigger('change');
break;
default:
$('#accountsettings_'+field).val(data[field]).blur().trigger('change');
}
}
})
}
});
},
saveAccountSettings: function() {
if (site.lastEmailAccount && site.lastEmailAccount!=$('#accountsettings_email').val()) {
if (!confirm(site.translate('Are you sure you want to change your emailaddress to:')+' '+$('#accountsettings_email').val()+'?')) {
return;
}
}
var formData = {submitType:'accountsettings'};
errors = 0;
$.each(['password', 'password_confirm', 'email', 'username', 'firstname', 'lastname', 'gender', 'street', 'streetnumber', 'postal', 'city', 'region', 'phone', 'twitter', 'googleplus', 'facebook', 'pinterest', 'birthdate_day', 'birthdate_month', 'birthdate_year', 'birthdate'], function(k,field){
if ($('#accountsettings_'+field).length) {
formData[field] = ($('#accountsettings_'+field).val()!=$('#accountsettings_'+field).data('defaultvalue')?$('#accountsettings_'+field).val():'');
tools.clearErrorState('#accountsettings_'+field);
}
});
if (formData['birthdate']) {
var birthdateE = formData['birthdate'].split('/');
if (COUNTRY=='usa') formData['birthdate'] = birthdateE[2]+'-'+birthdateE[0]+'-'+birthdateE[1];
else formData['birthdate'] = birthdateE[2]+'-'+birthdateE[1]+'-'+birthdateE[0];
}
else if (formData['birthdate_day'] && formData['birthdate_month'] && formData['birthdate_year']) {
formData['birthdate'] = formData['birthdate_year']+'-'+formData['birthdate_month']+'-'+formData['birthdate_day'];
}
if ((formData['password'] || formData['password_confirm']) && formData['password']!=formData['password_confirm']) {
errors++;
tools.setErrorState('#accountsettings_password, #accountsettings_password_confirm');
if (!formData['password'] || !formData['password_confirm'])
site.showMessage('error', site.translate('Please fill in both password fields.'));
else
site.showMessage('error', site.translate('The passwords do not match.'));
}
if (!errors) {
tools.modalWait('html', site.translate('Please wait'));
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: formData,
cache: false,
context:this,
success: function(data){
tools.removeModalWait();
if (!data.success) {
window.location.replace('/');
return;
}
site.lastEmailAccount!=$('#accountsettings_email').val();
if (data.code)
site.showRegisterError(data.code);
else
site.showSaveAccountSettingsResult('success', site.translate('Settings saved successfully'));
}
});
}
},
updateLocationList:function(){
},
showSaveAccountNewsletterSettingsResult: function(fType, fMessage) {
site.showMessage(fType, fMessage);
},
loadAccountNewsletterSettings: function() {
tools.modalWait('body');
$.ajax({
type: 'POST',
url: DR+'__load.php',
dataType: "json",
data: {loadType:'accountnewslettersettings'},
cache: false,
context:this,
success: function(data){
//console.log(data);
if (!data.success) {
window.location.replace('/');
return;
}
for (var i=1; i<=7; i++) {
$('#mailing_day'+i).attr('checked', (data['mailing_day'+i]==1?'checked':null)).trigger('change');
};
/*
$('#mailing_hour').val(data['mailing_hour']).trigger('change');
$('#mailing_promotions').attr('checked', (data['mailing_promotions']==1?'checked':null)).trigger('change');
$('#mailing_localdeals').attr('checked', (data['mailing_localdeals']==1?'checked':null)).trigger('change');
$('#mailing_dailydeals').attr('checked', (data['mailing_dailydeals']==1?'checked':null)).trigger('change');
$('#mailing_news').attr('checked', (data['mailing_news']==1?'checked':null)).trigger('change');
*/
$.each(['day', 'month', 'promotions', 'dailydeals', 'localdeals', 'news'], function(k,type){
if ($('#mailing_'+type).length) {
if ($('#mailing_'+type).attr('type')=='checkbox') {
$('#mailing_'+type).attr('checked', (data['mailing_'+type]==1?'checked':null)).trigger('change');
}
else if ($('#mailing_'+type).attr('type')=='hidden') {
$('#mailing_'+type).val((data['mailing_'+type]==1?1:0)).trigger('change');
}
}
});
if (data.region)
$('#mail_region').val(data.region).trigger('change');
$('#mailing_loc_ids').val(data.locIds);
site.updateLocationList()
tools.removeModalWait();
}
});
},
saveAccountNewsletterHour: function(fHourSelector) {
var formData = {submitType:'accountnewslettersettings'};
formData['mailing_hour'] = $(fHourSelector).val();
tools.modalWait('body');
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: formData,
cache: false,
context:this,
success: function(data){
if (!data.success) {
window.location.replace('/');
return;
}
site.showSaveAccountNewsletterSettingsResult('success', site.translate('Settings saved successfully'));
//tools.removeModalWait();
}
});
},
saveAccountNewsletterLocIds: function () {
var formData = {submitType:'accountnewslettersettings'};
formData['loc_ids'] = $('#mailing_loc_ids').val();
tools.modalWait('body');
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: formData,
cache: false,
context:this,
success: function(data){
if (!data.success) {
window.location.replace('/');
return;
}
site.showSaveAccountNewsletterSettingsResult('success', site.translate('Settings saved successfully'));
//tools.removeModalWait();
}
});
},
saveAccountNewsletterSettings: function () {
var formData = {submitType:'accountnewslettersettings'};
formData['mailing_hour'] = $('#mailing_hour').val();
/*
formData['mailing_day'] = ($('#mailing_day').attr('checked')=='checked' || $('#mailing_day').val()==1?1:0);
formData['mailing_month'] = ($('#mailing_month').attr('checked')=='checked' || $('#mailing_day').val()==1?1:0);
formData['mailing_promotions'] = ($('#mailing_promotions').attr('checked')=='checked'?1:0);
formData['mailing_localdeals'] = ($('#mailing_localdeals').attr('checked')=='checked'?1:0);
formData['mailing_dailydeals'] = ($('#mailing_dailydeals').attr('checked')=='checked'?1:0);
formData['mailing_news'] = ($('#mailing_news').attr('checked')=='checked'?1:0);
*/
$.each(['day', 'month', 'promotions', 'dailydeals', 'localdeals', 'news'], function(k,type){
if ($('#mailing_'+type).length) {
if ($('#mailing_'+type).attr('type')=='checkbox') {
formData['mailing_'+type] = ($('#mailing_'+type).attr('checked')=='checked'?1:0);
}
else if ($('#mailing_'+type).attr('type')=='hidden') {
formData['mailing_'+type] = $('#mailing_'+type).val();
}
}
});
formData['loc_ids'] = $('#mailing_loc_ids').val();
//console.log(formData);
tools.modalWait('body');
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: formData,
cache: false,
context:this,
success: function(data){
if (!data.success) {
window.location.replace('/');
return;
}
site.showSaveAccountNewsletterSettingsResult('success', site.translate('Settings saved successfully'));
//tools.removeModalWait();
}
});
},
/*
facebookLogin: function() {
$.ajax({
type: 'POST',
url: DR+'__load.php',
dataType: "json",
data: {
loadType:'facebooklogin'
},
cache: false,
context:this,
success: function(data){
tools.log(data);
}
});
},
*/
handleNews: function(news) {},
handleNotifications: function(notifications) {},
showBanners: function(banners) {},
showTweets: function(tweets) {},
togglePreview: function(fShopSectionId) {},
closePreview: function(fShopSectionId) {},
prepareForSort: function() {},
updateFilterResultLabel: function(fResult) {
//fResult.total;
//fResult.matched;
},
facebookRegistrationPopup: function() {
$.fancybox.open({
href: DR+'facebook_registration',
type: 'iframe',
padding: 0,
width: 765,
height: 459,
closeBtn: this.popupCloseButton,
autoSize: false
});
},
youtubePopup: function(fYoutubeId) {
$.fancybox.open({
href: 'http://www.youtube-nocookie.com/embed/'+fYoutubeId+'?autoplay=1',
type: 'iframe',
padding: 10,
fitToView: true,
closeBtn: false,
autoSize: true,
openEffect: 'none',
closeEffect: 'none'
});
},
mapPopup: function(fId, fLat, fLng) {
tools.modalFrame('html', '');
//console.log(dealSorter.productData[fId]);
var myCenter = new google.maps.LatLng(fLat, fLng);
var mapOptions = {
scrollwheel: false,
zoom: 13,
center: myCenter,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var mapPopup = new google.maps.Map(document.getElementById('mapPopup'), mapOptions);
var contentString = ''+ '';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var marker = new google.maps.Marker({
position: myCenter,
map: mapPopup,
title: dealSorter.productData[fId].title
});
google.maps.event.addListener(marker, 'click', function() {
//infowindow.open(mapPopup,marker);
});
infowindow.open(mapPopup, marker);
$('.modal').click(function(){
tools.closeModalFrame();
});
return;
var url = 'http://maps.google.com/?ll='+fLat+','+fLng+'&spn='+fLat+','+fLng+'&z=15&output=embed';
var url = 'https://maps.google.com/maps?q=loc:'+fLat+','+fLng+'&z=15&output=embed&markers=size:mid%7Ccolor:red%7CSan+Francisco';
var url = 'http://maps.google.com/maps?f=q&source=s_q&hl=es&geocode=&q='+fLat+','+fLng+'&ie=UTF8&t=m&z=14&output=embed&iwloc=A'
//console.log(url);
$.fancybox.open({
href: url,
type: 'iframe',
padding: 0,
width: 800,
height: 800,
closeBtn: this.popupCloseButton,
autoSize: false
});
},
tellafriend: function(fType, fId) {
$.fancybox.open({
href: DR+'tellafriend/'+fType+'/'+fId,
type: 'iframe',
padding: this.popupPadding,
width: this.popupWidth,
closeBtn: this.popupCloseButton,
autoSize: true
});
},
alternative: function(fType, fId, fStep) {
$.fancybox.open({
href: DR+'alternatief/'+fType+'/'+fId+(fStep?'/'+fStep:''),
type: 'iframe',
padding: this.popupPadding,
width: this.popupWidth,
closeBtn: this.popupCloseButton,
autoSize: true
});
},
submitAlternative: function(fType, fId) {
$(function(){
var postData = {
submitType: 'alternative',
type: fType,
id: fId,
url: ($('#alt-url').data('defaultvalue')!=$('#alt-url').val()?$('#alt-url').val():''),
price: ($('#alt-price').data('defaultvalue')!=$('#alt-price').val()?$('#alt-price').val():''),
pricecents: ($('#alt-pricecents').data('defaultvalue')!=$('#alt-pricecents').val()?$('#alt-pricecents').val():'0'),
shippingcosts: ($('#alt-shippingcosts').data('defaultvalue')!=$('#alt-shippingcosts').val()?$('#alt-shippingcosts').val():''),
shippingcostscents: ($('#alt-shippingcostscents').data('defaultvalue')!=$('#alt-shippingcostscents').val()?$('#alt-shippingcostscents').val():'0')
};
parent.tools.modalWait('html', site.translate('Please wait'));
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
parent.tools.removeModalWait();
//$('#alt-url, #alt-price, #alt-pricecents, #alt-shippingcosts, #alt-shippingcostscents').removeClass('input_error');
tools.clearErrorState('#alt-url, #alt-price, #alt-pricecents, #alt-shippingcosts, #alt-shippingcostscents');
if (data.errorFields && Object.keys(data.errorFields).length) {
$.each(data.errorFields, function(field, error) {
//$('#alt-'+field).addClass('input_error');
tools.setErrorState('#alt-'+field);
})
}
if (data.errorMessages && Object.keys(data.errorMessages).length) {
var errorShown = false;
$.each(data.errorMessages, function(field, error) {
if (!errorShown) {
if ($('#alt-errormessage').length) $('#alt-errormessage').html(error);
else site.showMessage('error', error);
errorShown = true;
}
})
}
site.handleAlternativeResult(data);
}
});
});
},
updateAltTotalPrice: function () {
var price = parseInt($('#alt-price').val());
if (!price) price = 0;
var pricecents = parseInt($('#alt-pricecents').val());
if (!pricecents) pricecents=0;
var shippingcosts = parseInt($('#alt-shippingcosts').val());
if (!shippingcosts) shippingcosts = 0;
var shippingcostscents = parseInt($('#alt-shippingcostscents').val());
if (!shippingcostscents) shippingcostscents=0;
var totalPrice = price+(pricecents/100)+shippingcosts+(shippingcostscents/100);
var cheaper = parseFloat($('#alt-default-price').val())+parseFloat($('#alt-default-shippingcosts').val())-totalPrice;
$('#alt-totalprice-preview').html(PRICE_CURRENCY_SIGN+' '+totalPrice.toFixed(2).replace('.',PRICE_DELIMETER));
if (cheaper>=0) {
$('#alt-cheaper-error').hide();
$('#alt-cheaper-message').show();
$('#alt-cheaper-preview').html(PRICE_CURRENCY_SIGN+' '+cheaper.toFixed(2).replace('.',PRICE_DELIMETER));
} else {
cheaper = cheaper*-1;
$('#alt-cheaper-message').hide();
$('#alt-cheaper-error').show();
$('#alt-cheaper-error-price').html(PRICE_CURRENCY_SIGN+' '+cheaper.toFixed(2).replace('.',PRICE_DELIMETER));
}
},
handleAlternativeResult: function(fData) {
if (fData.success) {
window.location = fData.url;
}
},
submitTellafriend: function(fType, fId) {
$(function(){
var postData = {
submitType: 'tellafriend',
type: fType,
id: fId,
onlyValidate:1,
name: ($('#taf-name').data('defaultvalue')!=$('#taf-name').val()?$('#taf-name').val():''),
email: ($('#taf-email').data('defaultvalue')!=$('#taf-email').val()?$('#taf-email').val():''),
message: ($('#taf-message').data('defaultvalue')!=$('#taf-message').val()?$('#taf-message').val():'')
};
for (var i=1; i<=4; i++){
postData['name'+i] = ($('#taf-name'+i).data('defaultvalue')!=$('#taf-name'+i).val()?$('#taf-name'+i).val():'')
postData['email'+i] = ($('#taf-email'+i).data('defaultvalue')!=$('#taf-email'+i).val()?$('#taf-email'+i).val():'')
}
$('#taf-submitbutton').prop('disabled', true);
//parent.site.getTAFCaptchConfirmation(postData);
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
$('#taf-submitbutton').prop('disabled', false);
if (data.success) {
parent.site.tafData = postData;
parent.site.getTAFCaptchConfirmation();
}
else {
site.handleTellafriendResult(data);
}
}
});
});
},
getTAFCaptchConfirmation: function() {
$.ajax({
type: 'POST',
url: DR+'__load.php?loadType=captcha',
dataType: "json",
cache: false,
context:this,
success: function(data){
$.fancybox.close();
$.fancybox.open({
content: data.html,
padding: this.popupPadding,
width: this.popupWidth,
closeBtn: this.popupCloseButton,
height: 260,
autoSize: false
});
}
});
setTimeout(function(){$('#cptch_code').focus()}, 400);
},
showTAFCaptchaResult: false,
submitTellafriendConfirmation: function(fPostData) {
//console.log('SUBMIT');
site.tafData.onlyValidate=0;
site.tafData.cptch = $('#cptch_code').val();
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: site.tafData,
cache: false,
context:this,
success: function(data){
//console.log(data);
if (site.showTAFCaptchaResult) {
site.showTAFCaptchaResult(data);
return;
}
if (!data.success) {
$('#cptch_form').fadeOut(400, function(){
$('#cptch_img').attr('src', '/cptch.png?r='+Math.round((new Date()).getTime() / 1000));
$('#cptch_code').val("");
$('#cptch_error').fadeIn(400, function(){
});
setTimeout(function(){
$('#cptch_error').fadeOut(400, function(){
$('#cptch_form').fadeIn(400, function(){
$('#cptch_code').focus();
});
});
}, 700)
})
//$('#cptch_code').css({'border-color':'red'});
return;
}
$('#taf-submitbutton').prop('disabled', false);
site.handleTellafriendResult(data);
}
});
},
handleTellafriendResult: function(fData) {},
submitContact: function(fType, fId) {
$(function(){
var postData = {
submitType: 'contact',
type: fType,
id: fId,
name: ($('#con-name').data('defaultvalue')!=$('#con-name').val()?$('#con-name').val():''),
email: ($('#con-email').data('defaultvalue')!=$('#con-email').val()?$('#con-email').val():''),
subject: ($('#con-subject').data('defaultvalue')!=$('#con-subject').val()?$('#con-subject').val():''),
message: ($('#con-message').data('defaultvalue')!=$('#con-message').val()?$('#con-message').val():'')
};
var errors = 0;
$.each(['name','email','subject','message'], function(k,field){
//$('#con-'+field).removeClass('input_error');
tools.clearErrorState('#con-'+field);
if (!postData[field] || postData[field]=='') {
//$('#con-'+field).addClass('input_error');
tools.setErrorState('#con-'+field);
errors++;
}
});
if (!tools.validateEmail(postData.email)) {
//$('#con-email').addClass('input_error');
tools.setErrorState('#con-email');
errors++;
}
if (errors) {
site.showMessage('error', site.translate('Please fill in all required fields.'));
return;
}
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
site.handleContactResult(data);
}
});
});
},
handleContactResult: function(fData) {
site.showMessage('success', site.translate("Your message has been sent. We'll be in touch with you soon."));
$('#con-name, #con-email, #con-subject, #con-message').val('').blur()
},
locationPopup: function(fId) {
$.fancybox.open({
href: DR+'__popup.php?popupType=location&id='+fId,
type: 'iframe',
padding: this.popupPadding,
width: (this.popupLocationWidth?this.popupLocationWidth:this.popupWidth),
closeBtn: this.popupCloseButton,
autoSize: true
});
},
linkexchangeFields: ['name', 'email', 'title', 'url_website', 'url_link', 'cat_id', 'description'],
submitLinkexchange: function() {
$(function(){
var postData = {submitType:'linkexchange'};
$.each(site.linkexchangeFields, function(i, fieldName) {
postData[fieldName] = ($('#lex-'+fieldName).data('defaultvalue')!=$('#lex-'+fieldName).val()?$('#lex-'+fieldName).val():'')
});
//tools.log(postData);
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
site.handleLinkexchangeResult(data);
}
});
});
},
showLinkExchangeErrors: function(fData) {},
handleLinkexchangeResult: function(fData) {
//tools.log(fData);
if (fData.success==1) {
var url = $('#lex-successurl').val();
var timeout = $('#lex-successurl-timeout').val();
if (url) {
if (timeout) {
setTimeout(function(){
window.location = url;
}, (timeout*1000));
}
else {
window.location = url;
}
}
else {
site.showMessage('success', site.translate('Your link will appear on our links-page in a couple of minutes.'));
}
return;
}
$.each(site.linkexchangeFields, function(i, fieldName) {
//$('#lex-'+fieldName).removeClass('input_error');
tools.clearErrorState('#lex-'+fieldName);
});
if (Object.keys(fData.errorMessages).length) {
var errorMessages = [];
$.each(fData.errorMessages, function(field, error) {
errorMessages[errorMessages.length] = '- '+error;
});
$('#lex-errormessage').html('');
$('#lex-errormessage').html(errorMessages.join('
'));
site.showLinkExchangeErrors(fData);
}
if (Object.keys(fData.errorFields).length) {
$.each(fData.errorFields, function(field, error) {
//$('#lex-'+field).addClass('input_error');
tools.setErrorState('#lex-'+field);
})
}
},
resendActivationMail: function(fEmail) {
if (!tools.validateEmail(fEmail)) {
site.showMessage('error', site.translate('Please enter a valid email address.'));
return;
}
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: {
submitType: 'resendactivation',
email:fEmail
},
cache: false,
context:this,
success: function(data){
if (data.success) {
site.showMessage('success', site.translate('A new activationmail has been sent.'));
}
else {
site.showMessage('error', site.translate('An error has occurred. Activationmail could not be sent.'));
}
}
})
},
submitRegister: function() {
var fields = {firstname:true, lastname:true, gender:true, email:true, password:true, password_confirm:true, terms:false, newsletter_daily:false, newsletter_monthly:false, birthdate_day:false, birthdate_month:false, birthdate_year:false, region:false, city:false, loc_id:false};
var postData = {};
var errorFields = {};
var errors = 0;
$.each(fields, function(fieldName, required) {
//$('#register_'+fieldName).removeClass('input_error'); // reset error states
tools.clearErrorState('#register_'+fieldName);
if ($('#register_'+fieldName).attr('type')=='hidden') postData[fieldName] = ($('#register_'+fieldName).data('defaultvalue')!=$('#register_'+fieldName).val()?$('#register_'+fieldName).val():'');
if ($('#register_'+fieldName).attr('type')=='text') postData[fieldName] = ($('#register_'+fieldName).data('defaultvalue')!=$('#register_'+fieldName).val()?$('#register_'+fieldName).val():'');
if ($('#register_'+fieldName).attr('type')=='password') postData[fieldName] = ($('#register_'+fieldName).data('defaultvalue')!=$('#register_'+fieldName).val()?$('#register_'+fieldName).val():'');
if ($('#register_'+fieldName).attr('type')=='checkbox') postData[fieldName] = ($('#register_'+fieldName).attr('checked')?1:0);
if ($('#register_'+fieldName).prop('tagName')=='SELECT') { postData[fieldName] = ($('#register_'+fieldName).data('defaultvalue')!=$('#register_'+fieldName).val()?$('#register_'+fieldName).val():'');}
if ($('#register_'+fieldName).length) {
if (required && !postData[fieldName]) {
tools.setErrorState('#register_'+fieldName);
//$('#register_'+fieldName).addClass('input_error');
errorFields[fieldName] = true;
errors++;
}
else {
tools.clearErrorState('#register_'+fieldName);
//$('#register_'+fieldName).removeClass('input_error');
errorFields[fieldName] = false;
}
}
});
if (!tools.validateEmail(postData['email'])) {
//$('#register_email').addClass('input_error');
tools.setErrorState('#register_email');
errorFields['email'] = true;
errors++;
}
if (!$('#register_terms').attr('checked')) {
//$('#register_terms').addClass('input_error');
tools.setErrorState('#register_terms');
errorFields['terms'] = true;
errors++;
}
if (postData['password'] != postData['password_confirm']) {
//$('#register_password, #register_password_confirm').addClass('input_error');
tools.setErrorState('#register_password');
tools.setErrorState('#register_password_confirm');
errorFields['password'] = true;
errorFields['password_confirm'] = true;
errors++;
}
else{
if (!errors && (postData['password_confirm'].length < 6 || (postData['password']!=postData['password'].replace(' ', '')))) {
tools.setErrorState('#register_password');
tools.setErrorState('#register_password_confirm');
//$('#register_password').addClass('input_error');
//$('#register_password_confirm').addClass('input_error');
site.showRegisterError('password_too_short');
return;
}
}
if (errors) {
site.handleRegisterErrors(errorFields);
}
else {
//console.log(postData);
postData['submitType'] = 'register';
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
if (data.success) {
window.location="/activeren";
return;
}
$.each(fields, function(fieldName, required) {
//$('#register_'+fieldName).removeClass('input_error'); // reset error states
tools.clearErrorState('#register_'+fieldName);
});
if (data.errorFields && data.errorFields.length){
$.each(data.errorFields, function(fieldName, error) {
if ($('#register_'+fieldName).length && error) {
//$('#register_'+fieldName).addClass('input_error');
tools.setErrorState('#register_'+fieldName);
}
});
site.handleRegisterErrors(data.errorFields);
}
if (data.code)
site.showRegisterError(data.code);
}
});
}
},
getRegisterCode: function(fCode) {
switch(fCode) {
case 'user_already_exists':
return site.translate('This email address has already been registered.');
break;
case 'password_match':
return site.translate('The passwords do not match.');
break;
case 'password_too_short':
return site.translate('The minimum password length is 6 character. White spaces are not allowed.');
break;
case 'invalid_email':
return site.translate('Please fill in a valid e-mail address.');
break;
case 'activation_mail_sent':
return site.translate('You will have to activate your new emailaddress. An activation-link was sent to your mailbox.');
break;
case 'location_added':
return site.translate('The location you selected is added to your daily newsletter.');
break;
default:
return site.translate(fCode);
break;
};
},
showRegisterError: function(fCode, fMessageContainer) {
switch(fCode) {
case 'user_already_exists':
case 'password_match':
case 'password_too_short':
case 'activation_mail_sent':
case 'location_added':
//alert(site.getRegisterCode(fCode));
site.showMessage('error', site.getRegisterCode(fCode));
break;
case 'user_activated':
window.location="/"+site.translate('activate');
break;
case 'user_facebook_update':
window.location = '/shared/facebook/facebook-logged-in.php';
break;
default:
//alert(fCode);
site.showMessage('error', site.getRegisterCode(fCode));
break;
};
},
showRegisterEmailError: function(fCode, fMessageContainer) {
site.showRegisterError(fCode, fMessageContainer);
},
handleRegisterErrors: function() {},
handleRegisterEmailErrors: function(fFields, fMessageContainer) {},
setTimeLeftIndicators: function() {},
rateShopSection: function(fSsId, fRating, fContainer) {
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: {
submitType:'rateshopsection',
ssId:fSsId,
rating:fRating
},
cache: false,
context:this,
success: function(result){
site.showMessage('success', site.translate('Your vote has been registered.'));
fContainer.update(result.rating);
}
});
},
getCategoryDetailsUrl: function(fShortname, fType) {
switch(fType) {
case 'local': case 'localdeals': case 'localdeal':
return DR+PATH_LOCAL+'/'+site.translate('category')+'/'+fShortname;
case 'daily': case 'dailydeals': case 'dailydeal':
return DR+PATH_DEALS+'/'+site.translate('category')+'/'+fShortname;
}
},
getShopSectionMaskedUrl: function(fId, fShortname) {
return DR+'info/shop/'+fId+'/'+fShortname;
},
getShopSectionDailyDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_DEALS+'/'+shopShortname+(shopSectionShortname!=MAIN_DAILYDEAL_SHORTNAME?'/'+shopSectionShortname:'');
},
getShopSectionLocalDetailsUrl: function(shopShortname, shopSectionShortname){
//return DR+PATH_LOCAL+'/'+shopShortname+(shopSectionShortname!=MAIN_DAILYDEAL_SHORTNAME?'/'+shopSectionShortname:'');
return DR+PATH_LOCAL+'/'+shopShortname;
},
getShopSectionClubDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_SHOPPINGCLUBS+'/'+shopSectionShortname;
},
getShopSectionAuctionDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_AUCTIONS+'/'+shopSectionShortname;
},
getShopSectionSubscriptionDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_SUBSCRIPTIONSHOPS+'/'+shopSectionShortname;
},
getShopSectionBrandDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_BRANDS+'/'+shopSectionShortname;
},
getShopSectionWebshopDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_WEBSHOPS+'/'+shopSectionShortname;
},
getShopSectionDiscountDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_COUPONSHOPS+'/'+shopSectionShortname;
},
getShopSectionCrowdfundingDetailsUrl: function(shopShortname, shopSectionShortname){
return DR+PATH_CROWDFUNDING+'/'+shopSectionShortname;
},
getPromotionMaskedUrl: function(fPromotionId, fTitle) {
return DR+site.translate('discount')+'/'+fPromotionId+'/'+encodeURI(fTitle);
},
getSaleMaskedUrl: function(fSaleId, fShopSectionShortname, fTitle) {
return DR+'info/sale/'+fSaleId+'/'+fShopSectionShortname+'/'+encodeURI(fTitle);
},
getShopSectionDetailsUrl: function(fType, fSelected) {
//console.log(fType);
//console.log(fSelected);
if (fSelected.data) var shopSectionShortname = fSelected.data('shortname');
else var shopSectionShortname = fSelected.shopSectionShortname;
if (fSelected.data) var shopShortname = fSelected.data('shop-shortname');
else var shopShortname = fSelected.shopShortname;
switch (fType) {
case 'dailydealshops': case 'dailydealshop': case 'daily':
return site.getShopSectionDailyDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'localdealshops': case 'localdealshop': case 'local':
return site.getShopSectionLocalDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'shoppingclubs': case 'shoppingclub': case 'club':
return site.getShopSectionClubDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'auctionshops': case 'auctionshop': case 'auction':
return site.getShopSectionAuctionDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'subscriptionshops': case 'subscriptionshop': case 'subscription':
return site.getShopSectionSubscriptionDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'brands': case 'brand':
return site.getShopSectionBrandDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'webshops': case 'webshop':
return site.getShopSectionWebshopDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'crowdfunding': case 'crowdfundingshop': case 'crowdfundingshops':
return site.getShopSectionCrowdfundingDetailsUrl(shopShortname, shopSectionShortname);
break;
case 'discounts': case 'discount': case 'couponshop':
return site.getShopSectionDiscountDetailsUrl(shopShortname, shopSectionShortname);
break;
}
},
getShareLink: function(fType, fShareType, fId) {
switch(fType) {
default:
return DR+'share/'+fType+'/'+fShareType+'/'+fId;
break;
}
},
/*
getDailydealshopDetailsUrl: function(fId, fShortName) {
return DR+PATH_DEALS+'/'+fShortName;
},
getBrandDetailsUrl: function(fId, fShortName) {
return DR+PATH_BRANDS+'/'+fShortName;
},
getWebshopDetailsUrl: function(fId, fShortName) {
return DR+PATH_WEBSHOPS+'/'+fShortName;
},
getShoppingclubDetailsUrl: function(fId, fShortName) {
return DR+PATH_SHOPPINGCLUBS+'/'+fShortName;
},
*/
setIconStates: function(fData) {},
currentPromotionFilter: false,
afterPromotionsFilter: function() {},
filterPromotions: function(fFilterType, fContainerId) {
if (fFilterType==this.currentPromotionFilter) return;
if (!fContainerId) var fContainerId = 'promotions-container';
if (this.currentPromotionFilter) {
$("#"+fContainerId+" .deal-container").hide(200);
$("#"+fContainerId+" .deal-container"+(fFilterType!=0?"[data-type='"+fFilterType+"']":"")).delay(200).show(300);
}
else {
$("#"+fContainerId+" .deal-container:not([data-type='"+fFilterType+"'])").hide(300);
}
this.currentPromotionFilter = fFilterType;
setTimeout(function(){site.afterPromotionsFilter(fContainerId);}, 800)
},
addMoreDeals: function(fCrit) {
var solrQuery = {
wt:'json',
rows:12,
sort:'id desc'
};
var solrQueryData = [];
$.each(fCrit, function(k,v){
solrQueryData.push(k+':'+v);
});
var solrUrl = SOLRDR+'solr/products/select/';
solrQuery.q = solrQueryData.join(' AND ');
$.ajax({
url: solrUrl,
data: solrQuery,
dataType: 'jsonp',
jsonp: 'json.wrf',
success: function(data) {
var productData = data.response.docs;
if (productData.length==data.response.numFound) {
$('#showMoreDealsBar').remove();
}
site.showProductSearchResult(data.response);
}
});
},
loadLocalDealMenu: function(options) {
var postData = {
loadType:'localdeal-menu'
}
if (options) {
$.each(options, function(k,v){
postData[k] = v;
})
}
$.ajax({
type: 'POST',
url: DR+'__load.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
//console.log('city: '+data.menu_city_time);
//console.log('shop: '+data.menu_shop_time);
//console.log('category: '+data.menu_category_time);
$('#localdeal-menu-city').html(data.menu_city);
$('#localdeal-menu-shop').html(data.menu_shop);
$('#localdeal-menu-category').html(data.menu_category);
this.resetLocalDealMenu();
}
});
},
localDealMenuConfig: {
city: {height:false, active:false},
shop: {height:false, active:false},
category: {height:false, active:false},
active: false
},
localDealMenuCloseDisplayState:'block',
resetLocalDealMenu: function() {
site.localDealMenuConfig = {
city: {height:false, active:false},
shop: {height:false, active:false},
category: {height:false, active:false},
active: false
}
$.each(['shop','city','category'], function(k,type){
if (!$('#localdeal-menu-'+type).data('donthide')) $('#localdeal-menu-'+type).css({height:'auto', display:'none'});
site.localDealMenuConfig[type].height = $('#localdeal-menu-'+type).height();
})
},
showLocalDealMenu: function(fType) {
if (site.localDealMenuConfig.active == fType) {
$('#localdeal-menu-'+fType).animate({height:0}, 200, 'swing', function(){
$('#localdeal-menu-'+fType).css({display:site.localDealMenuCloseDisplayState});
site.localDealMenuConfig.active = false;
});
return;
}
if (site.localDealMenuConfig.active) {
$('#localdeal-menu-'+site.localDealMenuConfig.active).animate({height:0}, 200, 'swing', function(){
$('#localdeal-menu-'+site.localDealMenuConfig.active).css({display:site.localDealMenuCloseDisplayState});
site.localDealMenuConfig.active = false;
});
setTimeout(function() {site.showLocalDealMenu(fType);}, 300);
return;
}
if (!site.localDealMenuConfig[fType].height) {
site.localDealMenuConfig[fType].height = $('#localdeal-menu-'+fType).height();
}
//console.log('active: '+site.localDealMenuConfig.active)
for (var i in site.localDealMenuConfig) {
if (site.localDealMenuConfig.active==i) {
//console.log('close '+i)
$('#localdeal-menu-'+i).animate({height:0}, 200, 'swing', function(){
//console.log('show2 '+fType)
site.localDealMenuConfig.active = fType;
$('#localdeal-menu-'+i).css({height:'0px', overflow:'hidden'})
$('#localdeal-menu-'+fType).css({display:site.localDealMenuCloseDisplayState, height:0})
$('#localdeal-menu-'+fType).animate({height:site.localDealMenuConfig[fType].height}, 200, 'swing');
});
return
}
else {
if (!site.localDealMenuConfig.active) {
//console.log('show1 '+fType)
site.localDealMenuConfig.active = fType;
$('#localdeal-menu-'+fType).css({display:'block', height:'0px', overflow:'hidden'})
$('#localdeal-menu-'+fType).animate({height:site.localDealMenuConfig[fType].height}, 200, 'swing');
return;
}
}
}
},
submitRegisterEmailSuccess:false,
submitRegisterEmail: function(form, customDR) {
var postData = {}
var errors=0;
var errorMessages = [];
var formElements = $('input[type=hidden], input[type=text], select', form);
if ($(form).data('message-container')) {
$('#'+$(form).data('message-container')).html('');
}
//console.log(formElements)
$.each(formElements, function(k, formElement) {
var formElement = $(this);
var elementVal = ($(this).data('defaultvalue')!=$(this).val()?$(this).val():'');
tools.clearErrorState($(this));
site.activationUrl = false;
switch(formElement.attr('name')) {
case 'activationUrl':
postData[formElement.attr('name')] = elementVal;
break;
case 'email':
if (!tools.validateEmail(elementVal)) {
tools.setErrorState(formElement);
/*
if (formElement.attr('data-error-container')) {
$('#'+formElement.attr('data-error-container')).addClass('input_error');
}
else formElement.addClass('input_error');
*/
errorMessages[errorMessages.length] = site.translate('Please fill in a valid e-mail address.');
errors++;
}
else {postData[formElement.attr('name')] = elementVal;}
break;
case 'region':
case 'loc_id':
if (!elementVal || elementVal=='') {
tools.setErrorState(formElement);
errorMessages[errorMessages.length] = site.translate('Please select a location.');
errors++;
}
else {postData[formElement.attr('name')] = elementVal;}
break;
}
});
if (!errors) {
tools.modalWait('html', site.translate('Please wait'));
postData['submitType'] = 'registeremail';
$.ajax({
type: 'POST',
url: (customDR?customDR:DR)+'__submit.php',
dataType: "json",
data: postData,
cache: false,
context:this,
success: function(data){
//console.log(data);return;
tools.removeModalWait();
if (data.success) {
if (data.activationmail) {
$.cookie('registeredEmail', data.email);
if (site.submitRegisterEmailSuccess) {
site.submitRegisterEmailSuccess(data);
return;
}
if (data.activationUrl) {
window.location=data.activationUrl;
return;
}
switch (LANGUAGE) {
case 'dutch': window.location="/activeren"; break;
case 'english': window.location="/activate"; break;
}
return;
}
else {
site.showMessage('success', data.message);
return;
}
}
$.each(formElements, function(k, formElement) {
//$(formElement).removeClass('input_error'); // reset error states
tools.clearErrorState(formElement);
});
if (data.errorFields && data.errorFields.length){
$.each(data.errorFields, function(k, fieldName) {
if ($('input[name='+fieldName+']', form).length) {
tools.clearErrorState($('input[name='+fieldName+']', form));
}
});
site.handleRegisterEmailErrors(data.errorFields, $(form).data('message-container'));
}
if (data.code)
site.showRegisterEmailError(site.getRegisterCode(data.code), $(form).data('message-container'));
}
});
}
else {
site.showRegisterEmailError(errorMessages[0], $(form).data('message-container'));
}
},
couponPopup: function(fId) {
var couponPopupTpl = couponPopupTplBase;
var solrUrl = SOLRDR+'solr/coupons/select/';
var solrQuery = {
wt:'json',
rows:1
};
var solrFQueryData = [];
solrFQueryData.push('id:'+fId);
if (solrFQueryData.length) {
solrQuery.q = solrFQueryData.join(' AND ');
}
$.ajax({
url: solrUrl,
data: solrQuery,
dataType: 'jsonp',
jsonp: 'json.wrf',
success: function(data) {
couponData = data.response.docs[0];
couponData.siteLogo = DR+'shared/images/sites/'+SIT_ID+'_logo.png';
couponData.enddate = new Date(couponData.enddate);
couponData.enddate = tools.defaultDateFormat(couponData.enddate);
couponData.promotionMaskedUrl = couponData.shopSectionMaskedUrl;
couponData.promotionMaskedUrl = site.getPromotionMaskedUrl(couponData.id, couponData.title);
var d = couponData.enddate.replace(' ','-').replace(/\:/g,'-').split('-');
couponData.enddate = 'Verloopt '+parseInt(d[2])+' '+site.translate(tools.months[parseInt(d[1])-1])+' '+d[0]+', '+d[3]+':'+d[4]+' uur';
$.each(couponData, function(k,v){
var find = '{$'+k+'}';
var re = new RegExp(find.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"), 'g');
couponPopupTpl = couponPopupTpl.replace(re, v);
});
tools.modalFrame('html', couponPopupTpl);
$('.modalFrameCloseBtn').click(function(){tools.closeModalFrame();});
$('.modalFrameCode').click(function(){$(this).select();})
var client = new ZeroClipboard( document.getElementById("couponCopyButton") );
client.on( "ready", function( readyEvent ) {
client.on( "aftercopy", function( event ) {
alert('Kortingscode gekopieerd naar clipboard!');
} );
} );
}
});
},
}
function Blog(fId) {
if (!fId) fId = false;
this.id = fId;
this.init = function() {
this.loadComments();
$('.blogShare').each(function() {
$(this).attr('href', site.getShareLink($(this).data('share-type'), 'blog', $(this).data('blo-id')))
});
}
this.loadComments = function() {
if (this.id) {
$.ajax({
type: 'GET',
url: DR+'__load.php',
dataType: "json",
data: {loadType:'comments', bloId:this.id},
cache: false,
context:this,
success: function(data){
$('#blogComments').empty();
if (data.comments.length>0) $('.commentsCount').html(data.comments.length+' '+site.translate('comments'))
else $('.commentsCount').html(site.translate('No comments yet'))
$.each(data.comments, function(i,comment){
Blog.addCommentHtml(comment);
});
if (data.loggedIn) {
$('#addComment').show();
$('#addCommentLogin').hide();
}
}
});
}
else {
$.ajax({
url: DR+'shared/ajax/blog/'+SIT_ID+'.js?u='+tools.time(),
dataType: "json",
context:this,
success: function(data){
this.blogData = data;
$.each(this.blogData, function(bloId, bloData){
if (bloData.comments>0) $('#blogPost-'+bloId+' .commentsCount').html(bloData.comments+' '+site.translate('comments'))
else $('#blogPost-'+bloId+' .commentsCount').html(site.translate('No comments yet'))
})
}
})
}
}
this.addComment = function(fText) {
var text = $('#blogcomment-text').val().trim();
if (!text) {
site.showMessage('error', site.translate('Please fill in all required fields.'));
return;
}
$.ajax({
type: 'POST',
url: DR+'__submit.php',
dataType: "json",
data: {
submitType: 'blogcomment',
bloId: this.id,
text: text
},
cache: false,
context:this,
success: function(data){
//this.addCommentHtml(data.comment);
if (data.success) {
site.showMessage('success', site.translate('Your comment is waiting for approval.'));
$('#blogcomment-text').val('');
}
}
});
}
}
var tools = {
arrayObj: function (array){
var o = {};
if (!array || !array.length) return 0;
$.each(array, function(k, v){
o[v] = 1;
});
return o;
},
log: function(fData) {
if (!window.console) return;
//console.log(fData);
},
time: function() {
return Math.round(jQuery.now()/1000);
},
fixDate: function(fDate) {
//console.log(fDate.getUTCHours());
return new Date(fDate.getTime() + (fDate.getTimezoneOffset()*60000));
},
defaultDateFormat: function(fDate) {
function pad(s) { return (s < 10) ? '0' + s : s; }
return fDate.getFullYear()+'-'+pad(fDate.getMonth()+1)+'-'+pad(fDate.getDate())+' '+pad(fDate.getHours())+':'+pad(fDate.getMinutes())+':'+pad(fDate.getSeconds());
//return fDate.getUTCFullYear()+'-'+pad(fDate.getUTCMonth()+1)+'-'+pad(fDate.getUTCDate())+' '+pad(fDate.getUTCHours())+':'+pad(fDate.getUTCMinutes())+':'+pad(fDate.getUTCSeconds());
//return fDate.getUTCFullYear()+'-'+pad(fDate.getUTCMonth()+1)+'-'+pad(fDate.getUTCDate()+1)+' '+pad(fDate.getUTCHours())+':'+pad(fDate.getUTCMinutes())+':'+pad(fDate.getUTCSeconds());
},
formatCommaNumber: function(x) {
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(",");
},
ordinalDateSuffix: function(day) {
switch(day) {
case '1': case '21': case '31': suffix = 'st'; break;
case '2': case '22': suffix = 'nd'; break;
case '3': case '23': suffix = 'rd'; break;
default: suffix = 'th';
};
return suffix;
},
days: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'],
months: ['january', 'februari', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'],
formatDate: function(u, fFormat) {
var mDate = new Date(u*1000);
var month = mDate.getMonth(); var monthName = site.translate(tools.months[month]);
var day = mDate.getDate(); var dayName = site.translate(tools.days[mDate.getDay()]);
var hours = mDate.getHours();
var minutes = mDate.getMinutes();
switch(fFormat) {
case 1:
break;
default:
if (LANGUAGE=='english') return dayName+' '+monthName+' '+day+tools.ordinalDateSuffix(day);
if (LANGUAGE=='dutch') return dayName+' '+day+' '+monthName;
break;
}
},
formatTime: function(u, fFormat) {
var mDate = new Date(u*1000);
var hours = mDate.getHours();
var minutes = mDate.getMinutes();
if (minutes<10) minutes = '0'+minutes;
switch(fFormat) {
default:
if (LANGUAGE=='english') { if(hours>12) return (hours-12)+':'+minutes+' PM'; else if(hours==12) return '12:'+minutes+' PM'; else return (hours)+':'+minutes+' AM';};
if (LANGUAGE=='dutch') return hours+':'+minutes+' uur';
break;
}
},
executeCommandList: function(list, delay) {
if (delay) {
setTimeout(function(){tools.executeCommandList(list)}, delay);
return;
}
$.each(list, function(i,cmd){
eval(cmd);
})
},
setErrorState: function(fSelector) {
if (typeof(fSelector)=='object') {
if (fSelector.data('pseudo')) fSelector.parent().addClass('input_error');
else fSelector.addClass('input_error');
}
else {
$(fSelector).each(function(){
if ($(this).data('pseudo')) {
if ($.isNumeric($(this).data('pseudo'))) {$(this).parents().eq($(this).data('pseudo')).addClass('input_error');}
else $(this).parent().addClass('input_error');
}
else $(this).addClass('input_error');
});
}
},
clearErrorState: function(fSelector) {
if (typeof(fSelector)=='object') {
if (!(fSelector instanceof jQuery)) {fSelector = $(fSelector)}
if (fSelector.data('pseudo')) fSelector.parent().removeClass('input_error');
else fSelector.removeClass('input_error');
}
else {
$(fSelector).each(function(){
if ($(this).data('pseudo')) {
if ($.isNumeric($(this).data('pseudo'))) {$(this).parents().eq($(this).data('pseudo')).removeClass('input_error');}
else $(this).parent().removeClass('input_error');
}
else $(this).removeClass('input_error');
});
}
},
validateEmail: function(fEmail) {
var filter = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!filter.test(fEmail)) return false;
return true;
},
validateURL: function(fUrl) {
var myRegExp =/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i;
if (!myRegExp.test(fUrl)) return false;
return true;
},
isNumeric: function(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
},
refresh: function() {
tools.reloadStylesheets();
},
reloadStylesheets: function() {
var queryString = '?reload=' + new Date().getTime();
$('link[rel="stylesheet"]').each(function () {
this.href = this.href.replace(/\?.*|$/, queryString);
});
},
isTouchDevice: function(){
var is_touch_device = 'ontouchstart' in document.documentElement;
return is_touch_device;
return false;
return (typeof(window.ontouchstart) != 'undefined') ? true : false;
},
getNextDay: function(i) {
var ret = new Date(new Date());
ret.setDate(ret.getDate() + (i - 1 - ret.getDay() + 7) % 7 + 1);
ret.setHours(0,0,0,0);
return ret;
},
getModalMessageHtml: function(fMessage) {
return ''+fMessage+'
';
},
modalFrame: function(fSelector, fHtml) {
if (!fHtml) return;
$(fSelector).each(function(k,el){
$(this).append('');
if ($(this).outerHeight()==0) {
$('.modal', $(this)).css('height', '100%');
}
else {
var height = window.outerHeight;
$('.modal', $(this)).height(height);
}
$('.modal', $(this)).width($(this).outerWidth());
//
$(this).append(''+fHtml+'
');
});
},
closeModalFrame: function() {
$('.modal, .modalFrame').remove();
},
modalMessage: function(fSelector, fMessage, fSeconds) {
if (!fMessage) return;
$(fSelector).each(function(k,el){
$(this).append('');
if ($(this).outerHeight()==0) {
$('.modal', $(this)).css('height', '100%');
}
else {
var height = window.outerHeight;
$('.modal', $(this)).height(height);
}
$('.modal', $(this)).width($(this).outerWidth());
//
$(this).append(tools.getModalMessageHtml(fMessage));
if (!fSeconds) fSeconds = 3;
setTimeout(function(){
$('.modal, .modalMessage').fadeOut(500, function() {
$(this).remove();
});
}, (fSeconds*1000));
});
},
modalWait: function(fSelector, fMessage) {
if (!fMessage) fMessage = site.translate('Loading...');
$(fSelector).each(function(k,el){
$(this).append('');
if ($(this).outerHeight()==0) {
$('.modal', $(this)).css('height', '100%');
}
else {
var height = window.outerHeight;
$('.modal', $(this)).height(height);
}
$('.modal', $(this)).width($(this).outerWidth());
//
$(this).append(tools.getModalWaitHtml(fMessage));
});
},
getModalWaitHtml: function(fMessage) {
return ''+fMessage+' ';
},
removeModalWait: function() {
$('.modal, .modalMessage').remove();
},
animatedCollapse: function(divId, collapseIconId) {
if (!$('#'+divId).attr('data-collapse-height')) $('#'+divId).attr('data-collapse-height', $('#'+divId).css('height'));
$('#'+divId).css({overflow:'hidden'})
var state = $('#'+divId).attr('data-collapse-state');
if (state=='closed') {
$('#'+divId).css({display:'block', height:'0px'})
$('#'+divId).animate({height:$('#'+divId).attr('data-collapse-height')})
$('#'+collapseIconId).attr('src', $('#'+collapseIconId).attr('data-open-img'));
$('#'+divId).attr('data-collapse-state', 'open');
}
else {
$('#'+divId).animate({height:'0px'}, function(){
$(this).hide();
})
$('#'+collapseIconId).attr('src', $('#'+collapseIconId).attr('data-closed-img'));
$('#'+divId).attr('data-collapse-state', 'closed');
}
},
getIdleState: function() {
return $.data(document,'idleTimer');
},
changeText: function(fContainers, fText) {
if ($(this).text().replace(/\u20ac/g,'€')!=fText && $(this).text()!=fText) {
for (var i in fContainers) {
fContainers[i].fadeOut('fast', function() {
$(this).html(fText).fadeIn('fast').attr('style', null);
});
}
}
/*
fContainers.each(function(){
if ($(this).text().replace(/\u20ac/g,'€')!=fText && $(this).text()!=fText) {
$(this).fadeOut('fast', function() {
$(this).html(fText).fadeIn('fast').attr('style', null);
});
}
})
*/
},
changeImage: function(fContainers, fId, fLastChange) {
for (var i in fContainers) {
fContainers[i].fadeOut('fast', function() {
$(this).attr('src', CDN_URL+'shared/images/products/'+fId+'_'+SITENAME+'.'+PRODUCT_IMAGE_FORMAT+'?d='+fLastChange).fadeIn('fast');
$(this).data('lastchange', fLastChange)
});
}
/*
fContainers.each(function(){
//tools.log($(this).data('lastchange')); tools.log(fLastChange);
if ($(this).data('lastchange')!=fLastChange) {
$(this).fadeOut('fast', function() {
$(this).attr('src', DR+'shared/images/products/'+fId+'_'+SITENAME+'.png?d='+fLastChange).fadeIn('fast');
$(this).data('lastchange', fLastChange)
});
}
})
*/
},
createNiceInput: function(fId, fDefaultValue, fValue, fInactiveClass, fActiveClass) {
$(function(){
var el = document.getElementById(fId);
if (!el) return;
var tagName = el.tagName;
var jEl = $('#'+fId);
jEl.attr('data-defaultvalue', fDefaultValue);
var elType = jEl.attr('type');
jEl.attr('data-defaulttype', elType);
el.value = (fValue?fValue:fDefaultValue);
el.value = (fValue?fValue:fDefaultValue);
if (elType=='password') el.setAttribute('type', 'text');
if (fDefaultValue==fValue || !fValue) {
jEl.addClass(fInactiveClass).removeClass(fActiveClass);
}
else {
jEl.removeClass(fInactiveClass).addClass(fActiveClass);
}
var myOnFocus = function(val) {
if (tagName=="INPUT") {
if (jEl.val()==fDefaultValue) {
this.value="";
jEl.removeClass(fInactiveClass).addClass(fActiveClass);
}
if (el.getAttribute('data-defaulttype')=='password') {
el.setAttribute('type', 'password');
}
}
if (tagName=="TEXTAREA") {
if (jEl.val()==fDefaultValue) {
this.value="";
jEl.removeClass(fInactiveClass).addClass(fActiveClass);
}
}
}
var myOnBlur = function(val) {
if (tagName=="INPUT") {
if (jEl.val()=="") {
this.value=fDefaultValue;
jEl.addClass(fInactiveClass).removeClass(fActiveClass);
if (el.getAttribute('data-defaulttype')=='password') {
el.setAttribute('type', 'text');
}
}
else
jEl.removeClass(fInactiveClass).addClass(fActiveClass);
}
if (tagName=="TEXTAREA") {
if (this.value=="") {
this.value=fDefaultValue;
jEl.addClass(fInactiveClass).removeClass(fActiveClass);
}
}
}
if (tagName=="SELECT") {
var myOnChange = function(val) {
if (jEl.val()!=fDefaultValue) {
if ($(this).hasClass('styledDropdown')) {
$('span.customSelect', $(this).parent()).addClass(fActiveClass).removeClass(fInactiveClass);
}
else {
$(this).addClass(fActiveClass).removeClass(fInactiveClass);
$('.customSelect', $(this).parent()).addClass(fActiveClass).removeClass(fInactiveClass);
}
}
else {
if ($(this).hasClass('styledDropdown')) {
$('span.customSelect', $(this).parent()).removeClass(fActiveClass).addClass(fInactiveClass);
}
else {
$(this).removeClass(fActiveClass).addClass(fInactiveClass);
$('.customSelect', $(this).parent()).addClass(fInactiveClass);
}
}
}
el.onchange = myOnChange;
el.onchange();
$(this).trigger('change');
}
el.onfocus = myOnFocus;
el.onblur = myOnBlur;
/*
$('#'+fId).fn.reset = function() {
$(this).val(fDefaultValue);
if ($(this).data('defaulttype')=='password')
$(this).get(0).setAttribute('type', 'text');
else
$(this).get(0).setAttribute('type', $(this).data('defaulttype'));
$(this).addClass(fInactiveClass).removeClass(fActiveClass);
};
*/
/*
el.reset = function() {
document.getElementById(fId).value = fDefaultValue;
if (el.getAttribute('data-defaulttype')=='password')
document.getElementById(fId).setAttribute('type', 'text');
else
document.getElementById(fId).setAttribute('type', el.getAttribute('data-defaulttype'));
$('#'+fId).addClass(fInactiveClass).removeClass(fActiveClass);
}
*/
});
},
loadShopSectionOptions: function(fType, fContainerId, fId, fEmptyText) {
$(function(){
$.ajax({
url: DR+'shared/ajax/'+fType+'-options.js',
dataType: "json",
cache: false,
context:this,
success: function(data){
$('#'+fContainerId).html((fEmptyText?'':'')+data.options);
if (fId)
$('#'+fContainerId).val(fId)
$('#'+fContainerId).change(function(){
var selected = $(this).find('option:selected');
//var shortname = selected.data('shortname');
if (selected.attr('value'))
window.location = site.getShopSectionDetailsUrl(fType, selected);
});
}
});
});
},
loadDailydealshopOptions: function(fContainerId, fId, fEmptyText) {
tools.loadShopSectionOptions('dailydealshops', fContainerId, fId, fEmptyText);
},
loadBrandOptions: function(fContainerId, fId, fEmptyText) {
tools.loadShopSectionOptions('brands', fContainerId, fId, fEmptyText);
},
loadWebshopOptions: function(fContainerId, fId, fEmptyText) {
tools.loadShopSectionOptions('webshops', fContainerId, fId, fEmptyText);
},
loadShoppingclubsOptions: function(fContainerId, fId, fEmptyText) {
tools.loadShopSectionOptions('shoppingclubs', fContainerId, fId, fEmptyText);
},
loadAuctionshopsOptions: function(fContainerId, fId, fEmptyText) {
tools.loadShopSectionOptions('auctionshops', fContainerId, fId, fEmptyText);
},
loadSubscriptionshopsOptions: function(fContainerId, fId, fEmptyText) {
tools.loadShopSectionOptions('subscriptionshops', fContainerId, fId, fEmptyText);
},
resortUl: function(containerWidth, listWidth) {
var columns = Math.floor(containerWidth/listWidth);
//console.log(columns+' cols');
$('.resortlist').each(function(kList,list){
var listContainer = $(this);
var children = $(this).children('li');
var totalChildren = children.length;
var maxItems = Math.ceil(totalChildren/columns);
var tempColumns = {};
for (var i=1; i<=columns; i++) tempColumns[i] = [];
var colI=1;
if (!$(this).attr('sort')) {
children.each(function(k,el){
$(this).attr('data-sort', (k+1));
})
$(this).attr('sort', 'initiated');
}
var tempI = 0;
var itemsLeft = totalChildren;
children.sort(function(a,b){
var sortA =parseInt( $(a).attr('data-sort'));
var sortB =parseInt( $(b).attr('data-sort'));
return (sortA < sortB) ? -1 : (sortA > sortB) ? 1 : 0;
}).each(function(k,el){
tempColumns[colI][tempColumns[colI].length] = $(this);
tempI++;
if (tempI==Math.ceil(itemsLeft/(columns-(colI-1)))) {
colI++;
itemsLeft = itemsLeft-tempI;
tempI=0;
}
})
var newChildren = [];
for (var i=1; i<=columns; i++) {
tempColumns[i] = tempColumns[i].reverse();
}
var colI = 1;
for (var i=0; icolumns) colI=1;
}
$(this).empty();
$(this).append(newChildren);
return;
})
}
}
function dealsorter_sortByParticipants($elem) {
if (dealSorter.filterData[$($elem).data('id')])
return parseInt(dealSorter.filterData[$($elem).data('id')].participants);
/*
if (dealSorter.productData[$($elem).data('id')])
return dealSorter.productData[$($elem).data('id')].newprice_raw;
*/
tools.log('cannot sort by participants ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByPrice($elem) {
if (dealSorter.filterData[$($elem).data('id')])
return parseInt(dealSorter.filterData[$($elem).data('id')].newprice_raw);
/*
if (dealSorter.productData[$($elem).data('id')])
return dealSorter.productData[$($elem).data('id')].newprice_raw;
*/
tools.log('cannot sort by price ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByPriceDesc($elem) {
if (dealSorter.filterData[$($elem).data('id')])
return -parseInt(dealSorter.filterData[$($elem).data('id')].newprice_raw);
tools.log('cannot sort by priceDesc ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByDiscount($elem) {
if (dealSorter.filterData[$($elem).data('id')]) {
if (parseInt(dealSorter.filterData[$($elem).data('id')].discount)>0)
return parseInt(dealSorter.filterData[$($elem).data('id')].discount);
}
tools.log('cannot sort by discount ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByDiscountPercentage($elem) {
if (dealSorter.filterData[$($elem).data('id')])
return parseInt(dealSorter.filterData[$($elem).data('id')].discountPercentage);
tools.log('cannot sort by discountPercentage ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByTimeRemaining($elem) {
//return $($elem).data('next-update');
//console.log($($elem).attr('data-ssid')+': '+parseInt($($elem).data('next-update'))+' '+parseInt($($elem).attr('data-order'))+' '+(parseInt($($elem).data('next-update'))-parseInt($($elem).attr('data-order'))));
return (parseInt($($elem).data('next-update'))+parseInt($($elem).attr('data-order')));
}
function dealsorter_sortByOrder($elem) {
return parseInt($($elem).attr('data-order'));
}
function dealsorter_sortByBelgium($elem) {
if (dealSorter.filterData[$($elem).data('id')] && parseInt(dealSorter.filterData[$($elem).data('id')].sen_belgium)) {
//console.log(dealSorter.filterData[$($elem).data('id')].title+' : '+(1+(1000-parseInt($($elem).attr('data-order')))));
return -(1+(1000-parseInt($($elem).attr('data-order'))));
}
if (dealSorter.filterData[$($elem).data('id')]) {
return 0;
}
//console.log('cannot sort by belgium ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByNetherlands($elem) {
if (dealSorter.filterData[$($elem).data('id')] && parseInt(dealSorter.filterData[$($elem).data('id')].sen_holland)) {
return (1+parseInt($($elem).attr('data-order')));
}
tools.log('cannot sort by netherlands ('+$($elem).data('id')+')');
return 0;
}
function dealsorter_sortByClicks($elem) {
if (dealSorter.productData[$($elem).data('id')])
return dealSorter.productData[$($elem).data('id')].clicks;
tools.log('cannot sort by clicks ('+$($elem).data('id')+')');
return 0;
}
function getTimeLeft(fDateU, fSeconds) {
var now = new Date();
if (fDateU) var diff = (fDateU-now.getTime());
else if (fSeconds) {
var diff = fSeconds;
}
var days = Math.floor(diff / (60 * 60 * 24 * 1000));
var hours = (Math.floor(diff / (60 * 60 * 1000)))%24;
var minutes = (Math.floor(diff / (60 * 1000))+1)%60;
var seconds = (Math.floor(diff / 1000) +1)%60;
if (days==0 && hours==0) {
switch(LANGUAGE) {
case 'dutch':
switch(countdownFormat) {
case 1: string = minutes + ' minuten'; break;
case 11: string = minutes + ' min'; break;
case 2: string = minutes + 'm'; break;
case 3: case 4: string = 'Nog '+ minutes + ' minuten'; break;
case 5: string = 'Nog '+ minutes + 'm'; break;
}
break;
case 'english':
switch(countdownFormat) {
case 1: string = minutes + ' minutes'; break;
case 11: string = minutes + ' min'; break;
case 2: case 5: string = minutes + 'm'; break;
case 3: case 4: string = ''+ minutes + ' minutes left'; break;
}
break;
}
} else if (days > 1) {
switch(LANGUAGE) {
case 'dutch':
switch(countdownFormat) {
case 1: case 11: string = days + ' dagen en ' + hours + ' uur'; break;
case 2: string = days + 'd ' + hours + 'u'; break;
case 3: case 4: string = 'Nog '+ days + ' dagen, ' + hours + ' uur'; break;
case 5: string = 'Nog '+ days + 'd ' + hours + 'u'; break;
}
break;
case 'english':
switch(countdownFormat) {
case 1: case 11: string = days + ' days and ' + hours + ' hours'; break;
case 2: case 5: string = days + 'd ' + hours + 'h'; break;
case 3: case 4: string = ''+ days + ' days, ' + hours + ' hours left'; break;
}
break;
}
} else if (days == 1) {
switch(LANGUAGE) {
case 'dutch':
switch(countdownFormat) {
case 1: case 11: string = '1 dag en '+hours + ' uur'; break;
case 2: string = '1d '+hours + 'u'; break;
case 3: case 4: string = 'Nog 1 dag en '+hours + ' uur'; break;
case 5: string = 'Nog 1d '+ hours + 'u'; break;
}
break;
case 'english':
switch(countdownFormat) {
case 1: case 11: string = '1 day and '+hours + ' uur'; break;
case 2: case 5: string = '1d '+hours + 'u'; break;
case 3: case 4: string = 'One day and '+hours + ' hours'; break;
}
break;
}
} else if (days == 0 && hours>0) {
switch(LANGUAGE) {
case 'dutch':
switch(countdownFormat) {
case 1: string = hours + ' uur en '+minutes+ ' minuten'; break;
case 11: string = hours + ' uur en '+minutes+ ' min'; break;
case 2: string = hours + 'u '+minutes+ 'm'; break;
case 3: string = 'Nog '+ hours + ' uur en '+minutes+ ' min'; break;
case 4: string = 'Nog '+ hours + ' uur en '+minutes+ ' minuten'; break;
case 5: string = 'Nog '+ hours + 'u '+minutes+ 'm'; break;
}
break;
case 'english':
switch(countdownFormat) {
case 1: string = hours + ' hours and '+minutes+ ' minutes'; break;
case 11: string = hours + ' hrs and '+minutes+ ' min'; break;
case 2: case 5: string = hours + 'u '+minutes+ 'm'; break;
case 3: string = ''+ hours + ' hours and '+minutes+ ' min'; break;
case 4: string = ''+ hours + ' hours and '+minutes+ ' minutes'; break;
}
break;
}
} else {
switch(LANGUAGE) {
case 'dutch':
string = "Verlopen"
break;
case 'english':
string = "Expired"
break;
}
}
var perc=0;
if (days>0) perc=100;
if (days==0) {
perc = 100
if (hours<12) perc=90;
if (hours<15) perc=80;
if (hours<10) perc=75;
if (hours<9) perc=60;
if (hours<8) perc=50;
if (hours<7) perc=40;
if (hours<6) perc=30;
if (hours<4) perc=20;
if (hours<3) perc=10;
if (hours<2) perc=1;
}
return {
string:string,
perc:perc,
hours:hours,
minutes:minutes,
seconds:seconds
};
}
var myNow = new Date();
function updateCountdownTimer(fSsId, fInit, fC) {
if (!dealSorter.containers || !dealSorter.productData[fSsId]) {
if (!dealSorter.productData[fSsId] && dealSorter.filterData[fSsId]) {
dealSorter.productData[fSsId]=dealSorter.filterData[fSsId];
updateCountdownTimer(fSsId, fInit, fC);
return;
}
dealSorter.cacheContainers();
//console.log(fSsId);
if (!fC) fC=0;
fC++;
if (fC>10) return;
setTimeout(function(){updateCountdownTimer(fSsId, fInit, fC)}, 250);
return;
}
//console.log('init cd '+fSsId);
var data = dealSorter.productData[fSsId];
//var data = dealSorter.filterData[fSsId];
//console.log(data);
string = '';
var now = myNow;
/*
if (fSsId==1113676) {
console.log(data);
}
*/
switch(data.refreshType) {
case '':
var nextUpdate = new Date(data.nextUpdateU*1000)
var diff = (nextUpdate-now.getTime());
break;
case 'weekly':
var nextUpdate = new Date(data.nextUpdateU*1000)
var refreshTime = 60*60*24*7*1000;
var diff = (nextUpdate-now.getTime())%refreshTime;
break;
default:
var nextUpdate = new Date(data.nextUpdateU*1000)
var refreshTime = 60*60*24*1000;
var diff = (nextUpdate-now.getTime())%refreshTime;
break;
}
if (diff<0) diff= diff+(24*60*60*1000);
if (fInit) {
//$('.deal-container[data-id='+fSsId+']').attr('data-next-update', (diff));
if (!dealSorter.containers[fSsId]) {
if (!$('.deal-container[data-id='+fSsId+']').length)
return;
}
$('.deal-container[data-id='+fSsId+']').attr('data-next-update', (diff));
//dealSorter.containers[fSsId].main.attr('data-next-update', (diff));
}
var timeLeft = getTimeLeft(false, diff);
var string = timeLeft.string;
var perc = timeLeft.perc;
//console.log(timeLeft);
site.setTimeLeftIndicators($('.deal-container[data-id='+fSsId+']'), perc);
//console.log('.deal-container[data-id='+fSsId+'] .cdc');
$('.deal-container[data-id='+fSsId+'] .cdc').html(string);
//$('.deal-container[data-id='+fSsId+'] .cdc_hours').html(timeLeft.hours);
//$('.deal-container[data-id='+fSsId+'] .cdc_minutes').html(timeLeft.minutes);
setTimeout('updateCountdownTimer('+fSsId+');', (60*1000));
}
var dealSorter = {
isotope: true,
masonry: false,
masonryHorizontal: false,
hideDuplicates: false,
duplicateData: {},
reloadData: false,
//containers: {},
productData: {},
filterData: {},
facetInitiated:false,
productType: false,
containers: false,
ready: false,
timersInitiated:false,
lastUpdate: false,
//refreshTimeOut: 12,
refreshTimeOut: false,
currentSort: 'default',
currentFilterConditions: {},
currentFilter: false,
hasMap: false,
uniqueMarkers: true,
mapLoaded: false,
mapShapes: [],
strokeColor: "d61f1f",
fillColor: "#d61f1f",
enableIsotope: true,
markers: [],
markerObjects: {},
infoClickBoxes: {},
infoHoverBoxes: {},
customInfoWindow: false,
noDealsFoundMessage: function() {},
classNames: ['cdc', 'tc', 'dc', 'opc', 'npc', 'npc_pc', 'npc_ac', 'scc', 'imc', 'ac'],
afterDealsFilter: function() {},
cacheContainers: function() {
if (dealSorter.containers) return;
dealSorter.containers = {};
$('#deals-container .deal-container').each(function(){
var container = $(this);
var containerId = container.data('id');
if (!dealSorter.containers[containerId]) {
dealSorter.containers[containerId] = {
main: container
};
var fd = container.data('filterdata');
if (fd) {
var filterData = fd.split(';');
var fData = {};
fData.title = $('.tc', container).html();
$.each(filterData, function(k,v){
fData[FILTERDEFINITIONS[k]] = v;
if (FILTERDEFINITIONS[k].substr(0,4)=='sen_' && v==1) {
container.addClass('filter-'+FILTERDEFINITIONS[k].substr(4));
}
});
dealSorter.filterData[containerId] = fData;
}
for (var i in dealSorter.classNames) {
var className = dealSorter.classNames[i];
dealSorter.containers[containerId][className]=[];
var els = $('.'+className, container);
if (els && els.length) {
els.each(function(){
dealSorter.containers[containerId][className].push($(this));
});
}
};
updateCountdownTimer(container.data('id'), true);
}
});
},
getColumnCount: function() {
return Math.floor($('#deals-container').width()/$('.deal-container').width());
},
getContainerPosition: function(fContainer) {
return fContainer.position();
},
repositionShopSectionGroups: function() {
return;
var cc = dealSorter.getColumnCount();
$('.deal-container[data-fixedpos]').each(function(){
var el = $(this);
var fixedPos = el.data('fixedpos')-1;
var currentPos = el.index('.deal-container:visible');
while (fixedPos>currentPos) {
el.insertAfter(el.next());
fixedPos = el.data('fixedpos')-1;
currentPos = el.index('.deal-container:visible');
}
});
if (!dealSorter.ssGroups) return;
//return;
$.each(dealSorter.ssGroups, function(k, group){
var tempGroup = [];
$('.deal-container').each(function(){
if ($(this).data('ssid')) {
if ($.inArray($(this).data('ssid').toString(), group)>-1) {
tempGroup.push($(this).data('ssid'));
}
}
});
group = tempGroup;
if (group.length>=cc) {
//console.log('must fill row');
var firstEl = $('.deal-container[data-ssid='+group[0]+']');
var steps=0;
while (dealSorter.getContainerPosition(firstEl).left>20 && steps<8) {
//console.log(dealSorter.getContainerPosition(firstEl).left);
firstEl.insertBefore(firstEl.prev());
}
var lastEl = firstEl;
$.each(group.slice(1), function(k, ssId){
//console.log('move');
var el = $('.deal-container[data-ssid='+ssId+']');
el.insertAfter(lastEl);
lastEl = el;
});
}
else {
//console.log(group);
//console.log('must be on same row');
var topPos = {};
$.each(group, function(k2, ssId){
var top = dealSorter.getContainerPosition($('.deal-container[data-ssid='+ssId+']')).top;
//var left = $('.deal-container[data-ssid='+ssId+']').position().left;console.log(left);
if (!topPos[top]) {topPos[top] = true;}
});
//console.log(topPos);
if (Object.keys(topPos).length>1) {
var firstEl = $('.deal-container[data-ssid='+group[0]+']');
while (Object.keys(topPos).length>1) {
//console.log('move');
firstEl.insertBefore(firstEl.prev());
lastEl = firstEl;
$.each(group.slice(1), function(k, ssId){
var el = $('.deal-container[data-ssid='+ssId+']');
el.insertAfter(lastEl);
lastEl = el;
});
var topPos = {};
$.each(group, function(k2, ssId){
var top = dealSorter.getContainerPosition($('.deal-container[data-ssid='+ssId+']')).top;
//var left = $('.deal-container[data-ssid='+ssId+']').position().left;console.log(left);
if (!topPos[top]) {topPos[top] = true;}
});
}
}
}
});
dealSorter.afterDealsFilter();
},
search: function(fSearchCrit) {
// remove match classes:
var matchClassName = 'searchMatch-'+fSearchCrit.type;
$('.deal-container').removeClass(matchClassName);
switch(fSearchCrit.type) {
case 'price':
$('.deal-container').each(function(){
var data = dealSorter.productData[$(this).data('id')];
var price = (data.newprice_raw/100);
if (price>=fSearchCrit.min && price<=fSearchCrit.max) {
$(this).addClass(matchClassName);
}
});
$('.deals-container').isotope({filter:'.'+matchClassName});
$('.deals-container').css('overflow', 'visible');
break;
case 'text':
$('.deal-container').each(function(){
var data = dealSorter.productData[$(this).data('id')];
var string = data.shopSectionFullname+' '+data.title+' '+data.description;
if (string.toLowerCase().indexOf(fSearchCrit.query.toLowerCase()) !== -1) {
$(this).addClass(matchClassName);
}
});
if (dealSorter.enableIsotope) {
$('.deals-container').isotope({filter:'.'+matchClassName});
$('.deals-container').css('overflow', 'visible');
}
break;
}
},
fLastFilterRequestId:0,
productsSkipped:0,
lastFilterSearchQuery:false,
lastFilterSearchQueryText:false,
lastSortOrder:'order_'+SIT_ID+' asc',
filterSearch: function(fConditions) {
tools.log('filtersearch');
//console.log(fConditions);
var solrQuery = {
wt:'json',
rows:10000000,
facet:true
}
var lazy = true;
LAZYLOAD_SIZE=30;
var solrQueryData = [];
var solrQueryDataExtra = [];
solrQueryData.push('active:1');
solrQueryData.push('order_'+SIT_ID+':[1 TO *]');
solrQueryData.push('productType:"'+fConditions.productType+'"');
solrQueryDataExtra.push('productType:"extradeal"');
solrQueryDataExtra.push('order_'+SIT_ID+':[1 TO *]');
if (dealSorter.ssIds) {
solrQueryData.push('ssId:('+Object.keys(dealSorter.ssIds).join(' OR ')+')');
}
if (fConditions.prices && fConditions.prices.min && fConditions.prices.max && (fConditions.prices.min>0 || fConditions.prices.max<2000)) {
solrQueryData.push('newprice_raw:['+(fConditions.prices.min*100)+' TO '+(fConditions.prices.max*100)+']');
solrQueryDataExtra.push('newprice_raw:['+(fConditions.prices.min*100)+' TO '+(fConditions.prices.max*100)+']');
}
if (fConditions.discount && fConditions.discount.min && fConditions.discount.max && (fConditions.discount.min>0 || fConditions.discount.max<100)) {
solrQueryData.push('discountPercentage:['+fConditions.discount.min+' TO '+fConditions.discount.max+']');
solrQueryDataExtra.push('discountPercentage:['+fConditions.discount.min+' TO '+fConditions.discount.max+']');
}
var forceEmpty = false;
if (fConditions.query) {
if (fConditions.query!=dealSorter.lastFilterSearchQueryText) {
forceEmpty=true;
}
solrQueryData.push('text:*'+fConditions.query+'*');
solrQueryDataExtra.push('text:*'+fConditions.query+'*');
dealSorter.lastFilterSearchQueryText = fConditions.query;
}
var categoriesQueryParts = [];
for (var catIdStr in fConditions.categories) {
var catId = parseInt(catIdStr.substr(4));
categoriesQueryParts.push('catId:'+catId);
lazy=false;
forceEmpty=true;
}
if (categoriesQueryParts.length) {
solrQueryData.push('('+categoriesQueryParts.join(' OR ')+')');
solrQueryDataExtra.push('('+categoriesQueryParts.join(' OR ')+')');
}
var citiesQueryParts = [];
for (var locIdStr in fConditions.cities) {
var locId = parseInt(locIdStr);
citiesQueryParts.push('locId:'+locId);
//lazy=false;
}
if (citiesQueryParts.length) {
solrQueryData.push('('+citiesQueryParts.join(' OR ')+')');
solrQueryDataExtra.push('('+citiesQueryParts.join(' OR ')+')');
}
if (fConditions.countries && Object.keys(fConditions.countries).length>0) {
var couQ = [];
$.each(fConditions.countries, function(k,v){
couQ.push('countries:'+k)
});
solrQueryData.push('('+couQ.join(' OR ')+')');
}
if (fConditions.shops && Object.keys(fConditions.shops).length>0) {
var ssQ = [];
$.each(fConditions.shops, function(k,v){
ssQ.push('shoId:'+k.substr(5));
});
solrQueryData.push('('+ssQ.join(' OR ')+')');
solrQueryDataExtra.push('('+ssQ.join(' OR ')+')');
}
if (fConditions.times && Object.keys(fConditions.times).length>0) {
var ssQ = [];
$.each(fConditions.times, function(k,v){
ssQ.push('updateHour:'+(k.substr(5)*100));
});
solrQueryData.push('('+ssQ.join(' OR ')+')');
solrQueryDataExtra.push('('+ssQ.join(' OR ')+')');
}
if (fConditions.refreshtypes && Object.keys(fConditions.refreshtypes).length>0) {
var ssQ = [];
$.each(fConditions.refreshtypes, function(k,v){
ssQ.push('refreshType:'+k);
});
solrQueryData.push('('+ssQ.join(' OR ')+')');
solrQueryDataExtra.push('('+ssQ.join(' OR ')+')');
}
if (lazy) solrQuery.rows = LAZYLOAD_SIZE;
//var solrUrl = SOLRDR.substr(0,DR.length-1)+':8983/solr/products/select';
dealSorter.duplicateData = {};
var solrUrl = SOLRDR+'solr/products/select/?facet.field=catId&facet.field=shoId&facet.field=productType';
//&sort=newprice_raw+desc
//var solrQuery = solrQueryData.join(' AND ');
if (solrQueryData.length) solrQuery.q = solrQueryData.join(' AND ');
if (dealSorter.sortDirection) solrQuery.sort = dealSorter.sortDirection;
else {
if (fConditions.productType=='localdeal') solrQuery.sort = 'order_top desc, random asc';
else solrQuery.sort = 'order_'+SIT_ID+' asc';
}
tools.log(dealSorter.lastSortOrder+' - '+solrQuery.sort);
if (dealSorter.lastSortOrder && dealSorter.lastSortOrder!=solrQuery.sort) {
//console.log(dealSorter.lastSortOrder);
//console.log(solrQuery.sort);
forceEmpty=true; //console.log('fe');
}
dealSorter.lastSortOrder=solrQuery.sort;
//console.log('q');
//console.log(dealSorter.lastFilterSearchQuery);
//console.log(solrQuery.q+solrQuery.sort);
var orderCrit='';
if (forceEmpty || (dealSorter.lastFilterSearchQuery && dealSorter.lastFilterSearchQuery!=solrQuery.q+solrQuery.sort)) {
$('#deals-container').empty();
dealSorter.productsSkipped=0;
site.showDealsLoader();
dealSorter.lastFilterSearchQuery=solrQuery.q+solrQuery.sort;
solrQueryData.push('order_'+SIT_ID+':[* TO 1000000]');
site.allDealsLoaded=false;
}
else {
//solrQuery.start=$('#deals-container .deal-container').length;
if (solrQuery.sort == 'order_'+SIT_ID+' asc') {
//var startOrder=$('#deals-container .deal-container').last().data('slrorder')+1;
var startOrder=$('#deals-container .deal-container').last().data('slrorder')-2; // fix klaas 20150312
//console.log(startOrder);
if (isNaN(startOrder)) startOrder=0;
else startOrder=startOrder+dealSorter.productsSkipped
if (fConditions.productType=='localdeal') {
startOrder=$('#deals-container .deal-container').length+1+dealSorter.productsSkipped;
}
//console.log(startOrder);
orderCrit = 'order_'+SIT_ID+':['+startOrder+' TO 1000000]';
solrQueryData.push(orderCrit);
}
else {
var startOrder=$('#deals-container .deal-container').length;
solrQuery.start = startOrder+dealSorter.productsSkipped;
}
//var startOrder=$('#deals-container .deal-container').length;
dealSorter.lastFilterSearchQuery=solrQuery.q+solrQuery.sort;
tools.log('offset: '+startOrder+' ('+solrQuery.sort+')');
}
//console.log(orderCrit);
solrQuery.q = solrQueryData.join(' AND ');
solrQuery.fq = 'active:1';
solrQuery['json.nl'] = 'map';
if (dealSorter.productType=='daily') {
solrQuery.q = '('+solrQueryData.join(' AND ')+') OR ( productType:extradeal AND '+solrQueryData.join(' AND ')+' '+(orderCrit?' AND '+orderCrit:'')+' AND startdate:[* TO NOW] AND enddate:[NOW TO *])';
solrQuery.q = '('+solrQueryData.join(' AND ')+') OR ( '+solrQueryDataExtra.join(' AND ')+' '+(orderCrit?' AND '+orderCrit:'')+' AND startdate:[* TO NOW] AND enddate:[NOW TO *])';
}
if (site.allDealsLoaded) return;
//console.log(solrQuery);
$.ajax({
url: solrUrl,
data: solrQuery,
dataType: 'jsonp',
jsonp: 'json.wrf',
success: function(data) {
//console.log(data);
//if (!dealSorter.facetInitiated) site.updateFilterFacetFields(data.facet_counts);
dealSorter.facetInitiated=true;
$.each(data.response.docs, function(k,data){
dealSorter.productData[data.id] = data;
});
site.showProductSearchResult(data.response);
}
});
},
filter2: function(fConditions, fRequestId) {
if (!fRequestId) {
dealSorter.fLastFilterRequestId++
var filterRequestId = dealSorter.fLastFilterRequestId;
}
else var filterRequestId = fRequestId;
tools.log('requestId: '+filterRequestId);
if (!dealSorter.ready) {
if (filterRequestId == dealSorter.fLastFilterRequestId) {
tools.log('wait '+filterRequestId);
setTimeout(function(){
tools.log('wait for filter '+filterRequestId);
dealSorter.filter2(fConditions, filterRequestId);
}, 300);
}
return;
}
tools.log('filter now!');
//console.log(fConditions);
//console.log(fConditions.categories.length+' cats selected');
$('.deal-container').removeClass('filter-match').show();
var matched = 0;
var total = 0;
var matchedProductIds = [];
//$.each(dealSorter.productData, function(ssId, product) {
$.each(dealSorter.filterData, function(ssId, product) {
//if ($('.deal-container[data-id='+ssId+']').length) {
//console.log(ssIds)
//console.log(ssId);
if (ssIds[ssId] /* && $('.deal-container[data-id='+ssId+']').length */) {
//console.log('found');
//console.log(product.title+': '+product.cat_id);
//console.log(product);
total++;
var match = true;
var failed = false;
if (match && fConditions.shops && Object.keys(fConditions.shops).length && !fConditions.shops['shop_'+product.ss_id]) { match=false; failed = product.ss_id+' failed on shop'; }
if (match && fConditions.categories && Object.keys(fConditions.categories).length && product.cat_id && !fConditions.categories['cat_'+product.cat_id]) { match=false; failed = ssId+' failed on category '+product.cat_id; }
if (match && fConditions.times && Object.keys(fConditions.times).length && !fConditions.times['time_'+product.updateHour]) { match=false; failed = ssId+' failed on time'+product.updateHour; }
if (match && fConditions.types && Object.keys(fConditions.types).length && !fConditions.types[product.refreshType]) { match=false; failed = ssId+' failed on type'; }
if (match && (fConditions.prices.min>(product.newprice_raw/100) || fConditions.prices.max<(product.newprice_raw/100))) { match=false; failed = ssId+' failed on price'; }
if (match) {
var countryMatch = false;
for (var countryProp in fConditions.countries) {
//console.log(countryProp+' '+product[countryProp]);
if (product[countryProp]==1) {
countryMatch=true;
}
}
if (!countryMatch) {
match=false;
failed = ssId+' failed on country';
}
}
if (match && fConditions.query) {
var string = product.shopSectionFullname+' '+product.title+' '+product.description;
if (string.toLowerCase().indexOf(fConditions.query.toLowerCase()) == -1) {
match=false;
failed = ssId+' failed on query';
}
}
if (failed) {
tools.log(failed);
}
if (match) {
matchedProductIds.push(product.productId)
matched++;
$('.deal-container[data-id='+ssId+']').addClass('filter-match');
}
}
else {
//console.log('not found');
}
})
//console.log('WARNING FILTER DISABLED!')
$('.deal-container:not(.filter-match)').hide();
if (this.hasMap) {
//console.log(matchedProductIds);
$.each(this.markerObjects, function(productId, marker){
marker.setMap(null);
});
$.each(matchedProductIds, function(i, productId){
if (dealSorter.markerObjects[productId]!='undefined' && dealSorter.markerObjects[productId])
dealSorter.markerObjects[productId].setMap(dealSorter.map);
else {
tools.log(productId+' no marker');
}
})
}
site.updateFilterResultLabel({total:total, matched:matched})
},
filter: function(fFilterType) {
if (this.currentFiterType==fFilterType) return;
switch(fFilterType) {
case false:
case 0:
if (dealSorter.enableIsotope) {
$('.deals-container').isotope({filter:'*'});
}
else {
$('.deals-container .deal-container').show();
}
break;
default:
if (dealSorter.enableIsotope) {
$('.deals-container').isotope({filter:fFilterType});
}
else {
$('.deals-container .deal-container').hide();
$('.deals-container .deal-container'+fFilterType).show();
}
break;
}
},
sort: function(fSortType, fFilterConditions) {
if (!fSortType) return;
if (!fFilterConditions) fFilterConditions = {};
if (this.isotope && dealSorter.enableIsotope) {
site.prepareForSort();
if (this.currentSort==fSortType && this.currentFilterConfitions==fFilterConditions) return;
switch(fSortType) {
case 'discount':
case 'discountPercentage':
$('.deals-container').isotope({sortBy:fSortType, sortAscending:false});
break;
case 'priceDesc':
$('.deals-container').isotope({sortBy:'price', sortAscending:false});
break;
/*
case 'order':
$('.deals-container').isotope({sortBy:'netherlands '+fSortType, sortAscending:true});
break;
*/
case 'belgium':
fFilterConditions = {'belgium':true};
$('.deals-container').isotope({sortBy:fSortType, sortAscending:true});
break;
case 'default':
fSortType='order';
$('.deals-container').isotope({sortBy:fSortType, sortAscending:true});
break;
case 'order':
fFilterConditions = {'holland':true};
default:
$('.deals-container').isotope({sortBy:fSortType, sortAscending:true});
break;
}
this.currentSort=fSortType;
if (fFilterConditions) {
var conditions = [];
for (var i in fFilterConditions) {
if (fFilterConditions[i]) conditions[conditions.length] = '.filter-'+i;
}
if (conditions.length) {
$('.deals-container').isotope({filter:conditions.join(', ')});
}
}
}
else if(!dealSorter.enableIsotope) {
if (!filter.allDealsLoaded) {
tools.log('wait for all deals!');
site.lazyLoadAllDeals();
setTimeout(function(){
dealSorter.sort(fSortType, fFilterConditions);
}, 250);
return;
}
var sortFunctions = {
order: dealsorter_sortByOrder,
price: dealsorter_sortByPrice,
priceDesc: dealsorter_sortByPriceDesc,
participants: dealsorter_sortByParticipants,
discount: dealsorter_sortByDiscount,
discountPercentage: dealsorter_sortByDiscountPercentage,
timeRemaining: dealsorter_sortByTimeRemaining,
clicks: dealsorter_sortByClicks,
belgium: dealsorter_sortByBelgium,
netherlands: dealsorter_sortByNetherlands
};
switch(fSortType) {
//case 'belgium':
case 'netherlands':
case 'discount':
case 'discountPercentage':
case 'participants':
var sortOrder='DESC';
break;
case 'belgium':
$('.deal-container.filter-belgium').show();
var sortOrder='ASC';
break;
case 'default':
$('.deal-container').show();
default:
$('.deal-container.filter-belgium').not('.filter-holland').hide();
var sortOrder='ASC';
break;
}
/*
switch(fSortType) {
case 'discount':
case 'discountPercentage':
points.sort(function(a,b){return a-b});
//$('.deals-container').isotope({sortBy:fSortType, sortAscending:false});
break;
default:
//$('.deals-container').isotope({sortBy:fSortType, sortAscending:true});
break;
}
*/
//console.log(fSortType);
var dealsContainer = $('.deals-container');
var dealContainers = dealsContainer.children(".deal-container");
dealContainers.sort(function(a, b){
var valA = sortFunctions[fSortType](a);
var valB = sortFunctions[fSortType](b);
if (sortOrder=='ASC') return (valA < valB) ? -1 : (valA > valB) ? 1 : 0;
if (sortOrder=='DESC') return (valA < valB) ? 1 : (valA > valB) ? -1 : 0;
return (sortFunctions[fSortType](a)>sortFunctions[fSortType](b)?true:false);
});
$(dealsContainer).append(dealContainers);
this.currentSort=fSortType;
$(window).trigger("scroll");
dealSorter.afterDealsFilter(fSortType, fFilterConditions);
/*
if (fFilterConditions) {
var conditions = [];
for (var i in fFilterConditions) {
if (fFilterConditions[i]) conditions[conditions.length] = '.filter-'+i;
}
if (conditions.length) {
//$('.deals-container').isotope({filter:conditions.join(', ')});
}
}
*/
}
//$("img.lazy").lazyload({ threshold : 200 });
$("img.lazy").unveil();
},
getCurrentOrder: function(fContainerId) {
if (dealSorter.enableIsotope) {
var items = $('.deals-container').data('isotope').$filteredAtoms;
}
else {
//var items = $('.deals-container .deal-container:visible');
var items = $('.deal-container:visible', $('.deal-container[data-containerid='+fContainerId+']').parent());
}
var o = {
order:{},
mapping:{}
};
items.each(function(key, value){
o.order[(key+1)] = $(this).data('id');
if (!o.mapping[$(this).data('containerid')]) o.mapping[$(this).data('containerid')] = (key+1);
})
return o;
},
init: function() {
$('#deals-container').addClass('deals-container');
if (dealSorter.enableIsotope) {
if (!this.ready && dealSorter.reloadData) {
tools.log('wait for dealSorter.initSort()');
setTimeout('dealSorter.initSort()', 400);
return;
}
if (this.isotope) {
$('.deals-container').isotope({
onLayout: function() {
$(window).trigger("scroll");
},
masonry:this.masonry,
masonryHorizontal:this.masonryHorizontal
});
$('.deals-container').css({overflow:'visible'})
}
}
else {
this.ready=true;
}
},
initSort: function() {
$('#deals-container').addClass('deals-container');
if (!this.ready/* && dealSorter.reloadData */) {
tools.log('wait for dealSorter.initSort()');
setTimeout('dealSorter.initSort()', 400);
return;
}
//console.log(3450);
if (dealSorter.enableIsotope && this.isotope) {
$('.deals-container').isotope({
containerStyleObject:{overflow:'visible'},
getSortData : {
order: dealsorter_sortByOrder,
price: dealsorter_sortByPrice,
discount: dealsorter_sortByDiscount,
discountPercentage: dealsorter_sortByDiscountPercentage,
timeRemaining: dealsorter_sortByTimeRemaining,
clicks: dealsorter_sortByClicks,
belgium: dealsorter_sortByBelgium,
netherlands: dealsorter_sortByNetherlands
},
filter: '.filter-holland',
onLayout: function() {
$(window).trigger("scroll");
},
masonry:this.masonry,
masonryHorizontal:this.masonryHorizontal
});
$('.deal-container').removeClass('notransition');
dealSorter.afterInitSort();
}
else {
$('.deal-container').removeClass('notransition');
dealSorter.afterInitSort();
}
},
afterInitSort: function() {
},
initProductData: function(fProductType) {
var solrQuery = {
wt:'json',
rows:10000000,
facet:true
}
//console.log('ipd');
var solrQueryData = [];
solrQueryData.push('active:1');
solrQueryData.push('productType:'+fProductType.toLowerCase()+'');
if (this.hasMap) {
//solrQuery.fq = 'lat:1';
solrQueryData.push('lat:{0 TO *}');
}
var solrUrl = SOLRDR+'solr/products/select';
var solrUrl = SOLRDR+'solr/products/select/?facet.field=catId&facet.field=mainCatId&facet.field=shoId';
if (solrQueryData.length) solrQuery.q = solrQueryData.join(' AND ');
solrQuery.q = solrQueryData.join(' AND ');
solrQuery.q = '('+solrQueryData.join(' AND ')+') OR (productType:extradeal AND order_'+SIT_ID+':[1 TO 100000] AND startdate:[* TO NOW] AND enddate:[NOW TO *])';
solrQuery['json.nl'] = 'map';
$.ajax({
url: solrUrl,
data: solrQuery,
dataType: 'jsonp',
jsonp: 'json.wrf',
success: function(data) {
var productData = data.response.docs;
if (!dealSorter.facetInitiated && site.updateFilterFacetFields) site.updateFilterFacetFields(data.facet_counts);
//console.log(data.facet_counts);
dealSorter.totalDealCount = data.response.numFound;
$('#filter-result-total').text(dealSorter.totalDealCount);
$('#filter-result').show();
dealSorter.productData = {};
//this.productData = data;
var initData = false;
if (!this.ready) {
var initData = true;
var o = 1;
$('.deal-container').each(function(){
$(this).attr('data-order', o++);
})
}
var addMarkers = false;
if (this.hasMap && !Object.keys(dealSorter.markers).length)
addMarkers=true;
var maxPrice = 0;
for (var i in productData) {
/*
if (!dealSorter.containers[productData.id] && !this.hasMap) {
continue;
}
*/
var data = productData[i];
dealSorter.productData[productData[i].id] = data;
//if (data.newprice_raw>maxPrice) maxPrice = data.newprice_raw;
if (dealSorter.containers[i]) {
var lastChange = dealSorter.containers[i].main.data('update');
//var productType = dealSorter.containers[i].main.data('type');
}
/*
if (initData && dealSorter.containers[i]) {
if (data.holland==1) dealSorter.containers[i].main.addClass('filter-holland');
if (data.belgium==1) dealSorter.containers[i].main.addClass('filter-belgium');
}
*/
if (lastChange!=undefined && lastChange!= data.update) {
//tools.log(lastChange+' | '+data.update+' | '+data.productId);
if (dealSorter.containers[i]) {
tools.changeText(dealSorter.containers[i].tc, data.title);
tools.changeText(dealSorter.containers[i].opc, data.oldprice);
tools.changeText(dealSorter.containers[i].npc, data.newprice);
var splitPrice = data.newprice.split(PRICE_DELIMETER);
tools.changeText(dealSorter.containers[i].npc_pc, (splitPrice[0]+PRICE_DELIMETER).replace(/\u20ac/g,'€'));
tools.changeText(dealSorter.containers[i].npc_ac, (splitPrice[1]?splitPrice[1]:'00'));
tools.changeText(dealSorter.containers[i].scc, data.shippingcosts);
tools.changeText(dealSorter.containers[i].dc, data.description);
if (dealSorter.containers[i].imc[0] && dealSorter.containers[i].imc[0].data('lastchange')!=data.imageEdit) {
tools.changeImage(dealSorter.containers[i].imc, data.productId, lastChange);
}
//if (productType=='local') {
if (data.productType=='localdeal') {
tools.changeText(dealSorter.containers[i].ac, data.address);
}
site.setIconStates(data);
dealSorter.containers[i].main.data('update', data.update);
}
}
if (addMarkers && data.lat && data.lng) {
//console.log('add marker'); this.addMarker(data.lat, data.lng, data)
}
}
if (addMarkers && this.filterMarkerTries==0) {
this.filterMarkers({});
}
if (!this.timersInitiated) {
site.initVisualTimers();
/*
for (var i in this.productData) {
updateCountdownTimer(i, true);
}
*/
for (var i in this.filterData) {
updateCountdownTimer(i, true);
}
this.timersInitiated = true;
}
dealSorter.ready = true;
tools.log('refreshing data '+new Date());
/*
if (filter.types && filter.types.prices.max && !filter.types.prices.initiated) {
filter.types.prices.initiated = true;
filter.types.prices.max = Math.ceil(maxPrice/100);
filter.initSlider(true);
}
*/
if (this.refreshTimeOut)
setTimeout('dealSorter.reloadProductData("'+fType+'")', (this.refreshTimeOut*1000));
}
});
},
reloadProductData: function(fType) {
if (this.hasMap && !dealSorter.mapsInitialized) {
google.maps.event.addDomListener(window, 'load', dealSorter.initializeMap);
tools.log('load map');
fType='map';
}
if (!dealSorter.containers) {
dealSorter.cacheContainers();
setTimeout(function(){dealSorter.reloadProductData(fType)}, 250);
return;
}
this.productType = fType;
if (tools.getIdleState()=='idle') return;
switch(fType) {
case 'daily':
var url = DR+'shared/ajax/productdata/'+fType+'.js?u='+tools.time();
dealSorter.initProductData('dailydeal');
return;
break;
case 'map':
var url = DR+'shared/ajax/productdata/'+fType+'.js?u='+tools.time();
dealSorter.initProductData('localdeal');
return;
break;
default:
var url = DR+'shared/ajax/productdata/'+fType+'.js?u='+tools.time();
break;
}
$.ajax({
url: url,
dataType: "json",
context:this,
success: function(data){
this.productData = data;
var initData = false;
if (!this.ready) {
var initData = true;
var o = 1;
$('.deal-container').each(function(){
$(this).attr('data-order', o++);
})
}
var addMarkers = false;
if (this.hasMap && !Object.keys(dealSorter.markers).length)
addMarkers=true;
var maxPrice = 0;
for (var i in this.productData) {
if (!dealSorter.containers[i] && !this.hasMap) {
continue;
}
var data = this.productData[i];
if (data.newprice_raw>maxPrice) maxPrice = data.newprice_raw;
if (dealSorter.containers[i]) {
var lastChange = dealSorter.containers[i].main.data('update');
//var productType = dealSorter.containers[i].main.data('type');
}
/*
if (initData && dealSorter.containers[i]) {
if (data.holland==1) dealSorter.containers[i].main.addClass('filter-holland');
if (data.belgium==1) dealSorter.containers[i].main.addClass('filter-belgium');
}
*/
if (lastChange!=undefined && lastChange!= data.update) {
//tools.log(lastChange+' | '+data.update+' | '+data.productId);
if (dealSorter.containers[i]) {
tools.changeText(dealSorter.containers[i].tc, data.title);
tools.changeText(dealSorter.containers[i].opc, data.oldprice);
tools.changeText(dealSorter.containers[i].npc, data.newprice);
var splitPrice = data.newprice.split(PRICE_DELIMETER);
tools.changeText(dealSorter.containers[i].npc_pc, (splitPrice[0]+PRICE_DELIMETER).replace(/\u20ac/g,'€'));
tools.changeText(dealSorter.containers[i].npc_ac, (splitPrice[1]?splitPrice[1]:'00'));
tools.changeText(dealSorter.containers[i].scc, data.shippingcosts);
tools.changeText(dealSorter.containers[i].dc, data.description);
if (dealSorter.containers[i].imc[0] && dealSorter.containers[i].imc[0].data('lastchange')!=data.imageEdit) {
tools.changeImage(dealSorter.containers[i].imc, data.productId, lastChange);
}
//if (productType=='local') {
if (data.productType=='localdeal') {
tools.changeText(dealSorter.containers[i].ac, data.address);
}
site.setIconStates(data);
dealSorter.containers[i].main.data('update', data.update);
}
}
if (addMarkers && data.lat && data.lng) {
//console.log('add marker'); this.addMarker(data.lat, data.lng, data)
}
}
if (addMarkers && this.filterMarkerTries==0) {
this.filterMarkers({});
}
if (!this.timersInitiated) {
site.initVisualTimers();
/*
for (var i in this.productData) {
updateCountdownTimer(i, true);
}
*/
for (var i in this.filterData) {
updateCountdownTimer(i, true);
}
this.timersInitiated = true;
}
this.ready = true;
tools.log('refreshing data '+new Date());
/*
if (filter.types && filter.types.prices.max && !filter.types.prices.initiated) {
filter.types.prices.initiated = true;
filter.types.prices.max = Math.ceil(maxPrice/100);
filter.initSlider(true);
}
*/
if (this.refreshTimeOut)
setTimeout('dealSorter.reloadProductData("'+fType+'")', (this.refreshTimeOut*1000));
}
})
},
setView: function(fType, fScrollToElementId) {
site.closePreview();
if (filter.closeFilter) filter.closeFilter();
if (!fType) {
fType = $.cookie(PAGE_SECTION+'_viewType')
if (!fType) fType = 'compact';
}
var types = ['compact', 'large', 'table'];
$.each(types, function(index, value) {
if (value==fType) {
$('.'+value+'Frame').show();
$('.'+value+'Viewsorter').addClass('active');
$('.'+value+'Viewsorter:radio').attr('checked', 'checked');
}
else {
$('.'+value+'Frame').hide();
$('.'+value+'Viewsorter').removeClass('active');
$('.'+value+'Viewsorter:radio').attr('checked', null);
}
});
if (this.reloadData)
dealSorter.initSort();
site.viewType = fType;
$.cookie(PAGE_SECTION+'_viewType', fType);
if (fScrollToElementId) {
$("html, body").animate({ scrollTop: $('#'+fScrollToElementId).offset().top-30 }, 1000);
}
$("html, body").scroll();
},
filterMarkerTries:0,
mapsInitialized: false,
closeInfoBoxes: function() {
$.each(dealSorter.infoClickBoxes, function(i,infobox){
infobox.close();
});
},
initializeMap: function() {
//console.log('init map')
/*
console.log('init map')
dealSorter.mapLoaded = true;
*/
var myCenter = new google.maps.LatLng(52.212992,5.27937);
var mapOptions = {
scrollwheel: false,
zoom: 8,
center: myCenter,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
dealSorter.map = new google.maps.Map(document.getElementById('maps-container'), mapOptions);
dealSorter.oms = new OverlappingMarkerSpiderfier(dealSorter.map);
dealSorter.oms.addListener('click', function(marker, event) {
if (!dealSorter.customInfoWindow) {
site.locationPopup(marker.productId);
}
else {
dealSorter.closeInfoBoxes();
dealSorter.infoClickBoxes[marker.productId].open(dealSorter.map, marker);
dealSorter.map.panTo(marker.position);
}
});
google.maps.event.addListenerOnce(dealSorter.map, 'idle', function(){
dealSorter.mapsInitialized = true;
});
google.maps.event.addListener(dealSorter.map, 'idle', function(){
dealSorter.loadMarkers(dealSorter.map.getBounds()); return;
/*
var bounds = dealSorter.map.getBounds();
dealSorter.loadMarkers(dealSorter.map.getBounds()); return;
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var b = {
minLat: sw.nb,
maxLat: ne.nb,
minLng: sw.ob,
maxLng: ne.ob
}
dealSorter.loadMarkers(b);
*/
});
},
zoomMap: function(fConfig) {
//console.log(fConfig);
if (!fConfig.id) {
return;
}
//if (lastCircle!='undefined') lastCircle.setMap(null);
while(dealSorter.mapShapes[0]) {
dealSorter.mapShapes.pop().setMap(null);
}
var radiusKm = 15;
var latlng = new google.maps.LatLng(fConfig.lat, fConfig.lng);
centerPosition = latlng;
var circleOptions = {
strokeColor: dealSorter.strokeColor,
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: dealSorter.fillColor,
fillOpacity: 0.35,
map: dealSorter.map,
center: centerPosition,
radius: (radiusKm*1000)
};
dealSorter.mapShapes.push(new google.maps.Circle(circleOptions));
//lastCircle = regionCircle;
dealSorter.map.panTo(centerPosition);
dealSorter.map.setZoom(11);
},
loadMarkers: function(fBounds) {
var ne = fBounds.getNorthEast();
var sw = fBounds.getSouthWest();
var center = fBounds.getCenter();
var b = {
centerLat: center.lat(),
centerLng: center.lng(),
minLat: sw.lat(),
maxLat: ne.lat(),
minLng: sw.lng(),
maxLng: ne.lng()
}
var d1 = (b.maxLat-b.minLat)/2;
var d2 = (b.maxLng-b.minLng)/2;
if (d2>d1) var d = d2;
else var d = d1;
var width = $('#maps-container').width();
var height = $('#maps-container').height();
if (height>width) {
var p1 = new google.maps.LatLng(b.minLat,b.minLng);
var p2 = new google.maps.LatLng(b.maxLat,b.minLng);
}
else {
var p1 = new google.maps.LatLng(b.minLat,b.minLng);
var p2 = new google.maps.LatLng(b.minLat,b.maxLng);
}
var radius = google.maps.geometry.spherical.computeDistanceBetween(p1,p2)/1000;
/*
console.log(b);
console.log(radius);
*/
var solrQuery = {
wt:'json',
rows:10000000,
fq:'{!bbox}',
sfield:'latlng',
pt:b.centerLat+','+b.centerLng,
d:radius
}
var solrQueryData = [];
solrQueryData.push('active:1');
solrQueryData.push('productType:localdeal');
var solrUrl = SOLRDR+'solr/products/select/';
solrQuery.q = solrQueryData.join(' AND ');
$.ajax({
url: solrUrl,
data: solrQuery,
dataType: 'jsonp',
jsonp: 'json.wrf',
success: function(data) {
//console.log(data);
var productData = data.response.docs;
var uniqueMarkersIds = {};
$.each(productData, function(k,data){
data.productId=data.id;
var key = data.lat+'-'+data.lng+'-'+data.title;
key = key.replace(/\W/g, '');
//console.log(key);
if (dealSorter.uniqueMarkers && !uniqueMarkersIds[key]) {
dealSorter.addMarker(data.lat, data.lng, data);
}
uniqueMarkersIds[key] = true;
});
}
})
},
addMarker: function(fLat,fLng,fData) {
if (this.infoClickBoxes[fData.productId]) return;
if (!dealSorter.mapsInitialized) {
setTimeout(function(){
dealSorter.addMarker(fLat,fLng,fData);
}, 200);
return;
}
var latLng = new google.maps.LatLng(fLat, fLng);
//console.log(44);
if (dealSorter.customInfoWindow) {
/*
var marker = new google.maps.Marker({
position: latLng,
map: dealSorter.map,
title: 'test'
});
*/
if (markerSpriteDefinition[fData.catId] && markerSpriteDefinition[fData.catId].parent) fData.catId=markerSpriteDefinition[fData.catId].parent;
if (!fData.catId || fData.catId=='undefined') fData.catId=0;
//console.log('*'+fData.catId+'*');
var icon = new google.maps.MarkerImage(
markerSpriteDefinition.src,
new google.maps.Size(markerSpriteDefinition.width, markerSpriteDefinition.height),
new google.maps.Point(markerSpriteDefinition[fData.catId].x, markerSpriteDefinition[fData.catId].y)
);
var marker = new google.maps.Marker({
productId: fData.productId,
position: latLng,
map: dealSorter.map,
icon: icon
});
var o = {
marker:marker,
ssId:2
}
var html = dealSorter.customInfoWindow(fData);
//if (fData.productId.toString()=='290720') console.log("id:290720")
this.infoClickBoxes[fData.productId] = new InfoBox({
content: html,
disableAutoPan: false,
maxWidth: 150,
pixelOffset: new google.maps.Size(-120, -180),
zIndex: null,
boxStyle: {
background: "url('http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/examples/tipbox.gif') no-repeat",
opacity: 1.00,
width: "240px"
},
closeBoxMargin: "12px 4px 2px 2px",
closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif",
infoBoxClearance: new google.maps.Size(1, 1)
});
/*
google.maps.event.addListener(marker, 'click', function() {
$.each(dealSorter.infoClickBoxes, function(i,infobox){
infobox.close();
})
dealSorter.infoClickBoxes[fData.productId].open(dealSorter.map, this);
dealSorter.map.panTo(latLng);
});
*/
//var iw = new google.maps.InfoWindow();
dealSorter.oms.addMarker(marker);
}
else {
var marker = new google.maps.Marker({
productId: fData.productId,
position: latLng,
map: dealSorter.map,
title: fData.title,
icon: '/img/marker.png'
});
var o = {
marker:marker,
ssId:2
}
this.infoClickBoxes[fData.productId] = true;
dealSorter.oms.addMarker(marker);
/*
google.maps.event.addListener(marker, 'click', function() {
site.locationPopup(fData.productId)
});
*/
}
this.markers[fData.productId] = o;
this.markerObjects[fData.productId] = marker;
},
filterMarkers: function(fOptions) {
//if (!fOptions.length) return;
if (!Object.keys(this.markers).length) return;
if (!Object.keys(this.markers).length && this.filterMarkerTries<5) {
this.filterMarkerTries++;
delay(function(){
dealSorter.filterMarkers(fOptions);
}, 200);
return;
}
var options = {};
$.each(fOptions, function(name,val){
if (val && val!="0") options[name] = val;
});
//console.log(options);
var dealFound = false;
$.each(this.productData, function(ssId,data){
//console.log(data);
if (dealSorter.markers[data.id]) {
var show = true;
var thisMarker = dealSorter.markers[data.id].marker;
dealSorter.markers[data.id].marker.setMap(null);
$.each(options, function(name,val){
if (typeof val=='object') {
if (!val[data[name]] && Object.keys(val).length) {
show=false;
}
}
else if (data[name]!=val) {
show = false;
//console.log('hide');
//dealSorter.markers[data.productId].marker.setMap(null);
}
});
if (show) {
thisMarker.setMap(dealSorter.map);
dealFound = true;
}
else thisMarker.setMap(null);
}
});
if (!dealFound) dealSorter.noDealsFoundMessage();
}
};
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
var waitForFinalEvent = (function () {
var timers = {};
return function (callback, ms, uniqueId) {
if (!uniqueId) {
uniqueId = "Don't call this twice without a uniqueId";
}
if (timers[uniqueId]) {
clearTimeout (timers[uniqueId]);
}
timers[uniqueId] = setTimeout(callback, ms);
};
})();
$(document).ready(function() {
$('#deals-container').addClass('deals-container');
});
/*! viewportSize | Author: Tyson Matanich, 2013 | License: MIT */
(function(n){n.viewportSize={},n.viewportSize.getHeight=function(){return t("Height")},n.viewportSize.getWidth=function(){return t("Width")};var t=function(t){var f,o=t.toLowerCase(),e=n.document,i=e.documentElement,r,u;return n["inner"+t]===undefined?f=i["client"+t]:n["inner"+t]!=i["client"+t]?(r=e.createElement("body"),r.id="vpw-test-b",r.style.cssText="overflow:scroll",u=e.createElement("div"),u.id="vpw-test-d",u.style.cssText="position:absolute;top:-1000px",u.innerHTML="