docs: function () {
  	if (status.enabled !== true) {
  		return;
  	}
  	//~ console.log("l_callbackPool: ", l_callbackPool);
  	//~ console.log("l_schedulePool: ", l_schedulePool);
  	//console.log(l_schedulePool);
  	var resolutionTS = 1000 * 60; // one minute support; 最小解析度(目前每分鐘) 
  	var cycleTShourly = 1000 * 60 * 60; // 每小時有 60 分鐘 (60*60秒)
  	var cycleTSdaily = cycleTShourly * 24; // 每天有 24 小時 
  	var cycleTSweekly = cycleTSdaily * 7; // 每周有 7 天 
  	var cycleTSmonthly = cycleTSdaily * 30;
  	// 因為推導時間的演算法還未想完整，有些變數還沒有用到，暫時先留著
  	var now = getDateTime();
  	var currentTS = new Date()
  		.valueOf(); // current date and time
  	//console.log("current: " + current + " " +  typeof current);
  	//~ LOG.debug("now: " + now.hour + ":" + now.minute + " || " +  typeof now);
  	//~ LOG.debug("currentTS: " + currentTS + " || " +  typeof currentTS);
  	for (var i in l_schedulePool) {
  		//~ console.log("IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII:::::::::::::::: ", i);
  		var latestExecutedTS = new Date(l_schedulePool[i].latestExecuted)
  			.valueOf(); // latest executed date and time
  		var createdTS = new Date(l_schedulePool[i].created)
  			.valueOf(); // created date and time
  		//~ console.log("latestExecutedTS - createdTS: " + Math.abs(latestExecutedTS - createdTS)); 
  		var deltaTS = (currentTS - latestExecutedTS); //現在時間減最後執行過的時間
  		//~ console.log("delta: " + deltaTS );
  		if (l_schedulePool[i].suspend === true) {
  			//LOG.warn('SR.Schedule', "returned");
  			return;
  		}
  
  		//LOG.warn('SR.Schedule', "l_schedulePool[i]: %j", l_schedulePool[i]);
  		//LOG.warn('SR.Schedule', "now: %j", now);
  
  		var trigger = false;
  		//~ console.log("l_schedulePool[i].cycle: ", l_schedulePool[i].cycle);
  		switch (l_schedulePool[i].cycle) {
  			case 'hourly':
  				if (l_schedulePool[i].minute === now.minute) {
  					if (deltaTS > resolutionTS) {
  						trigger = true;
  					}
  				}
  				break;
  
  			case 'daily':
  				if (l_schedulePool[i].hour === now.hour && l_schedulePool[i].minute === now.minute) {
  					if (deltaTS > resolutionTS) {
  						trigger = true;
  					}
  				}
  				break;
  
  			case 'weekly':
  				//~ console.log(" " + typeof l_schedulePool[i].minute + " " + typeof now.minute );
  				//~ console.log("Weekdays: " + l_schedulePool[i].weekday + " " + now.weekDay );
  				//~ console.log("hours: " + l_schedulePool[i].hour + " " + now.hour );
  				//~ console.log("minutes: " + l_schedulePool[i].minute + " " + now.minute );
  				//~ console.log("DELTA and RESOLUTION: ",deltaTS + " " + resolutionTS);
  				if (l_schedulePool[i].weekday === now.weekDay && l_schedulePool[i].hour === now.hour && l_schedulePool[i].minute === now.minute) {
  					if (deltaTS > resolutionTS) {
  						trigger = true;
  					}
  				}
  				break;
  
  			case 'monthly':
  				if (l_schedulePool[i].monthday === now.monthday && l_schedulePool[i].hour === now.hour && l_schedulePool[i].minute === now.minute) {
  					if (deltaTS > resolutionTS) {
  						trigger = true;
  					}
  				}
  				break;
  
  			default:
  				LOG.warn("The period is out of scope. please debug: " + l_schedulePool[i], l_cat);
  				break;
  		}
  
  		//LOG.sys("trigger---: " + trigger, l_cat);
  
  		if (trigger === true) {
  			LOG.warn("schedule: task is triggered: " + l_schedulePool[i].id + " " + l_schedulePool[i].action, l_cat);
  			//~ l_callbackPool[l_schedulePool[i].action](l_schedulePool[i].do);
  
  			var key, param;
  
  			if (l_schedulePool[i].action && typeof l_callbackPool[l_schedulePool[i].action] === 'function') {
  				key = l_schedulePool[i].action.toString();
  			}
  			else if (l_schedulePool[i].id && typeof l_callbackPool[l_schedulePool[i].id] === 'function') {
  				key = l_schedulePool[i].id;
  			}
  			else {
  				LOG.warn("Scheduled But No Callback Provided!\nYou must set either action=startRecord|stopRecord or a callback", l_cat);
  			}
  
  			if (l_schedulePool[i].do) {
  				param = l_schedulePool[i].do;
  			}
  			else if (l_schedulePool[i].argument) {
  				param = l_schedulePool[i].argument
  			}
  
  			if (key) {
  				l_callbackPool[key](param);
  			}
  			else {
  				LOG.warn("Triggered but can do nothing.", l_cat);
  			}
  
  			l_schedulePool[i].latestExecuted = new Date();
  			SR.DB.updateData(dbName_schedule, {
  					id: l_schedulePool[i].id
  				}, l_schedulePool[i],
  				function (msg) {
  					LOG.warn("success: ", l_cat);
  					LOG.warn(msg, l_cat);
  				},
  				function (msg) {
  					LOG.warn("failure: ", l_cat);
  					LOG.warn(msg, l_cat);
  				});
  		}
  		else {
  			//~ console.log("trigger is false ---------");
  		}
  	}
  }