/*----------------------------- timer_switch_element -----------------------------*/ (function($){ var defaults = { irregular:[], time:{ start:{ weekDay:'mon', time:'0:00' }, end:{ weekDay:'fri', time:'23:59' } }, callbackExecuteDefault:function(el){ el.hide(); }, callbackExecutePeriod:function(el){ el.show(); } }, weekDayList = { 'sun':0, 'mon':1, 'tue':2, 'wed':3, 'thu':4, 'fri':5, 'sat':6 }; $.fn.timerSwitchElement = function(options){ var configs = {}, el = this, lenEl = el.length, funcInit = function(){ configs = $.extend({}, defaults, options); el.funcExecute(); }; if(lenEl === 0)return this; if(lenEl > 1){ el.each(function(){$(this).timerSwitchElement(options)}); return this; } el.funcExecute = function(){ var date = new Date(); weekDay = date.getDay(), hour = date.getHours(), minutes = date.getMinutes(), comparison = '2000/1/1 ', comparisonTimestamp = Date.parse(comparison + hour + ':' + minutes + ':00') / 1000, nowTimestamp = parseInt(date / 1000); for(var i = 0, l = configs.irregular.length;i < l;i++){ var startTimestamp = Date.parse(configs.irregular[i].start + ':00') / 1000, endTimestamp = Date.parse(configs.irregular[i].end + ':59') / 1000; if( startTimestamp <= nowTimestamp && nowTimestamp <= endTimestamp ){ configs.callbackExecutePeriod(el); return true; } } if(configs.time === false) return false; var startTimestamp = Date.parse(comparison + configs.time.start.time + ':00') / 1000, endTimestamp = Date.parse(comparison + configs.time.end.time + ':59') / 1000; if(weekDayList[configs.time.start.weekDay] <= weekDayList[configs.time.end.weekDay]){ if( weekDayList[configs.time.start.weekDay] > weekDay || weekDayList[configs.time.end.weekDay] < weekDay || ( weekDayList[configs.time.start.weekDay] === weekDay && startTimestamp > comparisonTimestamp ) || ( weekDayList[configs.time.end.weekDay] === weekDay && endTimestamp <= comparisonTimestamp ) ){ configs.callbackExecuteDefault(el); return false; } }else{ if( ( weekDayList[configs.time.start.weekDay] > weekDay && weekDayList[configs.time.end.weekDay] < weekDay ) || ( weekDayList[configs.time.start.weekDay] === weekDay && startTimestamp > comparisonTimestamp ) || ( weekDayList[configs.time.end.weekDay] === weekDay && endTimestamp <= comparisonTimestamp ) ){ configs.callbackExecuteDefault(el); return false; } } configs.callbackExecutePeriod(el); return true; }; funcInit(); }; })(jQuery); /*----------------------------- /timer_switch_element -----------------------------*/