/// /************************************************************************** *------------------------ COMINGSOON COUNTER 1.1 ------------------------ * ======================================================================== * Copyright 2014 Bruno Milgiaretti * Licensed under MIT http://opensource.org/licenses/MIT * ======================================================================== Usage: Constructor: $(selector).mbComingsoon(expiryDate Date or String) Expiry date of counter $(selector).mbComingsoon(options plain Object) options: { expiryDate: Date, //Expiry Date required interval: Number, //Update interval in milliseconds (default = 1000)) localization: { days: "days", //Localize labels of counter hours: "hours", minutes: "minutes", seconds: "seconds" } callBack: Function //Function executed on expiry or if espired } Methds: .mbComingSoon('start') // start counter .mbComingSoon('stop') // stop counter .mbComingSoon(options) // change options Note: Max time that the counter can display is 999 days 23h 59' 59". If time is greater hours, minutes and seconds will be displayed correctly, but days will be 999 until decrease under this quota. */ (function ($) { // Class Definition var MbComingsoon; MbComingsoon = function (date, element, localization, speed, callBack) { this.$el = $(element); this.end = date; this.active = false; this.interval = 1000; this.speed = speed; if (jQuery.isFunction(callBack)) this.callBack = callBack; else this.callBack = null; this.localization = {days:"days", hours: "hours", minutes: "minutes", seconds: "seconds"}; $.extend(this.localization, this.localization, localization); } MbComingsoon.prototype = { // Returns an object containing counter data getCounterNumbers: function () { var result = { days: { tens: 0, units: 0, hundreds: 0 }, hours: { tens: 0, units: 0 }, minutes: { tens: 0, units: 0 }, seconds: { tens: 0, units: 0 } }, millday = 1000 * 60 * 60 * 24, millhour = 1000 * 60 * 60, millminutes = 1000 * 60, millseconds = 1000, rest = 0 ; var now = new Date(); var offset = now.getTimezoneOffset()/60; var offsetHours = parseInt(offset); var offsetMinutes = (offset - offsetHours)*60; now.setHours(now.getHours() + offsetHours); now.setMinutes(now.getMinutes() + offsetMinutes); //now.setHours(now.getHours() + now.getTimezoneOffset()/60); offsetHours = parseInt(jQuery(this.$el).attr("offset-hours")); offsetMinutes = parseInt(jQuery(this.$el).attr("offset-minutes")); now.setHours(now.getHours() + offsetHours); now.setMinutes(now.getMinutes() + offsetMinutes); var diff = this.end.getTime() - now.getTime(); // CountDown expired !! if (diff <= 0) return result; // Max number of days is 99 (i will expand in future versions) var days = Math.min(Math.floor(diff / millday), 999); rest = diff % millday; result.days.hundreds = Math.floor(days / 100); var dayrest = days % 100; result.days.tens = Math.floor(dayrest / 10); result.days.units = dayrest % 10; var hours = Math.floor(rest / millhour); rest = rest % millhour; result.hours.tens = Math.floor(hours / 10); result.hours.units = hours % 10; var minutes = Math.floor(rest / millminutes); rest = rest % millminutes; result.minutes.tens = Math.floor(minutes / 10); result.minutes.units = minutes % 10; var seconds = Math.floor(rest / 1000); result.seconds.tens = Math.floor(seconds / 10); result.seconds.units = seconds % 10; return result; }, // If changed update a part (day, hours, minutes, seconds) of counter updatePart: function (part) { var cn = this.getCounterNumbers(); var $part = $('.' + part, this.$el); if (part == 'days') { this.setDayHundreds(cn.days.hundreds > 0); if ($part.find('.number.hundreds.show').html() != cn[part].hundreds) { var $n1 = $('.n1.hundreds', $part); var $n2 = $('.n2.hundreds', $part); this.scrollNumber($n1, $n2, cn[part].hundreds); } } if ($part.find('.number.tens.show').html() != cn[part].tens) { var $n1 = $('.n1.tens', $part); var $n2 = $('.n2.tens', $part); this.scrollNumber($n1, $n2, cn[part].tens); } if ($part.find('.number.units.show').html() != cn[part].units) { var $n1 = $('.n1.units', $part); var $n2 = $('.n2.units', $part); this.scrollNumber($n1, $n2, cn[part].units); } // Only forn day part update hundreds }, // True if countdown is expired timeOut: function () { var now = new Date(); var offset = now.getTimezoneOffset()/60; var offsetHours = parseInt(offset); var offsetMinutes = (offset - offsetHours)*60; now.setHours(now.getHours() + offsetHours); now.setMinutes(now.getMinutes() + offsetMinutes); //now.setHours(now.getHours() + now.getTimezoneOffset()/60); offsetHours = parseInt(jQuery(this.$el).attr("offset-hours")); offsetMinutes = parseInt(jQuery(this.$el).attr("offset-minutes")); now.setHours(now.getHours() + offsetHours); now.setMinutes(now.getMinutes() + offsetMinutes); var diff = this.end.getTime() - now.getTime(); if (diff <= 0) return true; return false; }, setDayHundreds: function (action) { if (action) $('.counter.days', this.$el).addClass('with-hundreds'); else $('.counter.days', this.$el).removeClass('with-hundreds'); }, // Update entire counter updateCounter: function () { this.updatePart('days'); this.updatePart('hours'); this.updatePart('minutes'); this.updatePart('seconds'); if (this.timeOut()) { this.active = false; if (this.callBack) this.callBack(this); } }, localize: function (localization) { if($.isPlainObject(localization)) $.extend(this.localization, this.localization, localization); $('.days', this.$el).siblings('.counter-caption').text(this.localization.days); $('.hours', this.$el).siblings('.counter-caption').text(this.localization.hours); $('.minutes', this.$el).siblings('.counter-caption').text(this.localization.minutes); $('.seconds', this.$el).siblings('.counter-caption').text(this.localization.seconds); }, // Start automatic update (interval in milliseconds) start: function (interval) { if (interval) this.interval = interval; var i = this.interval; this.active = true; var me = this; setTimeout(function () { me.updateCounter(); if (me.active) me.start(); }, i); }, // Stop automatic update stop: function () { this.active = false; }, // Animation of a single scrollNumber: function ($n1, $n2, value) { if ($n1.hasClass('show')) { $n2.removeClass('hidden-down') .css('top', '-100%') .text(value) .stop() .animate({ top: 0 }, this.speed, function () { $n2.addClass('show'); }); $n1.stop().animate({ top: "100%" }, this.speed, function () { $n1.removeClass('show') .addClass('hidden-down'); }); } else { $n1.removeClass('hidden-down') .css('top', '-100%') .text(value) .stop() .animate({ top: 0 }, this.speed, function () { $n1.addClass('show'); }); $n2.stop().animate({ top: "100%" }, this.speed, function () { $n2.removeClass('show') .addClass('hidden-down'); }); } } } // jQuery plugin jQuery.fn.mbComingsoon = function (opt) { var defaults = { interval: 1000, callBack: null, localization: { days: "days", hours: "hours", minutes: "minutes", seconds: "seconds" }, speed:500 } var options = {}; var content = '
' + '
' + '
' + '
0
' + '
0
' + '
0
' + '
0
' + '
0
' + '
0
' + '
' + '
days
' + '
' + '
' + '
' + '
0
' + '
0
' + '
0
' + '
0
' + '
' + '
hours
' + '
' + '
' + '
' + '
0
' + '
0
' + '
0
' + '
0
' + '
' + '
minutes
' + '
' + '
' + '
' + '
0
' + '
0
' + '
0
' + '
0
' + '
' + '
seconds
' + '
' + '
'; return this.each(function () { var $this = $(this); var data = $this.data('mbComingsoon'); if (!data) { if (opt instanceof Date) options.expiryDate = opt; else if ($.isPlainObject(opt)) $.extend(options, defaults, opt); else if (typeof opt == "string") options.expiryDate = new Date(opt); if (!options.expiryDate) throw new Error('Expiry date is required!'); data = new MbComingsoon(options.expiryDate, $this, options.localization, options.speed, options.callBack); $this.html(content); data.localize(); data.start(); } else if (opt == 'start') data.start(); else if (opt == 'stop') data.stop(); else if ($.isPlainObject(opt)) { if (opt.expiryDate instanceof Date) data.end = opt.expiryDate; if ($.isNumeric(opt.interval)) data.interval = opt.interval; if ($.isFunction(opt.callBack)) data.callBack = opt.callBack; if ($.isPlainObject(opt.localization)) this.localize(opt.localization); } }) } })(jQuery) /**************************************/ // Code added by Asim Ashraf - DevBatch // DateTime: 28 Jan 2015 // Code Edit Start /************************************/ function mbComingsoonResize() { jQuery(".lightfluid").each(function () { var $this = jQuery(this); var col_width = $this.width();//console.log(col_width); if (col_width > 546) { $this.find(".lightfluid_inner").css({'min-width': '460px', "width": ''}); $this.find(".lightfluid_inner .counter-block .counter").css({'height': '', "margin": '', "width": ''}); $this.find(".lightfluid_inner .counter-block .number").css({'font-size': '', "line-height": ''}); $this.find(".lightfluid_inner .counter-block .counter-caption").css({'font-size': ''}); $this.find(".lightfluid_inner .counter-block").css({'margin-right': ''}); } else { $this.find(".lightfluid_inner").css({'min-width': '', "width": col_width + 'px'}); $this.find(".lightfluid_inner .counter-block .counter").css({'height': '48px', "margin": '0 auto', "width": '50px'}); $this.find(".lightfluid_inner .counter-block .number").css({'font-size': '38px', "line-height": '49px'}); $this.find(".lightfluid_inner .counter-block .counter-caption").css({'font-size': '16px'}); $this.find(".lightfluid_inner .counter-block").css({'margin-right': '8px'}); } }); } /**************************************/ // Code added by Asim Ashraf - DevBatch // DateTime: 28 Jan 2015 // Code Edit End /************************************/