(function(n){n.fn.countdown=function(t,i){function u(n,t){return function(){return t.call(n)}}var r=["seconds","minutes","hours","days","weeks","daysLeft"];return this.each(function(){function a(){var t,n;for(f--,f<0&&(f=0),o={seconds:f%60,minutes:Math.floor(f/60)%60,hours:Math.floor(f/3600)%24,days:Math.floor(f/86400),weeks:Math.floor(f/604800),daysLeft:Math.floor(f/86400)%7},t=0;t<r.length;t++)n=r[t],s[n]!=o[n]&&(s[n]=o[n],c(n));f==0&&(l(),c("finished"))}function c(r){var u=n.Event(r);u.date=new Date((new Date).valueOf()+f);u.value=s[r]||"0";u.toDate=t;u.lasting=o;switch(r){case"seconds":case"minutes":case"hours":u.value=u.value<10?"0"+u.value.toString():u.value.toString();break;default:u.value&&(u.value=u.value.toString())}i.call(e,u)}function l(){clearInterval(h)}function y(){e.data("countdownInterval",setInterval(u(e,a),1e3));h=e.data("countdownInterval")}if(!(t instanceof Date))if(String(t).match(/^[0-9]*$/))t=new Date(t);else if(t.match(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})\s([0-9]{1,2})\:([0-9]{2})\:([0-9]{2})/)||t.match(/([0-9]{2,4})\/([0-9]{1,2})\/([0-9]{1,2})\s([0-9]{1,2})\:([0-9]{2})\:([0-9]{2})/))t=new Date(t);else if(t.match(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})/)||t.match(/([0-9]{2,4})\/([0-9]{1,2})\/([0-9]{1,2})/))t=new Date(t);else throw new Error("Doesn't seen to be a valid date object or string");var e=n(this),s={},o={},h=e.data("countdownInterval"),v=new Date,f=Math.floor((t.valueOf()-v.valueOf())/1e3);a();e.bind("remove",function(){l();c("removed")});h&&l();y()})};var t=new n.Event("remove"),i=n.fn.remove;n.fn.remove=function(){return n(this).trigger(t),i.apply(this,arguments)}})(jQuery)