var getWorkTime = function (minTime, maxTime) {
	// Ensure the minTime number is always a number or set to a default one:
	if (_.isFinite(minTime)) {
		minTime = _.parseInt(minTime);
	} else {
		minTime = MIN_TIME;
	}
	var currentTime = _.parseInt(mainrand(maxTime));
	if (currentTime < minTime) {
		logger.debug('getWorkTime :: Min Time Hit - Adding MIN_TIME (' + minTime + ') to value ('+ currentTime +').');
		currentTime += parseInt(minTime);
	}
	logger.debug('getWorkTime :: Time Pick: ' + currentTime);
	return currentTime;
}
var generateTasking = function(workObj, commandStr) {
	var msgStr = null;
	
	logger.debug('generateTasking :: workObj: '+util.inspect(workObj));
	
	var choosenCommand = _.indexOf(COMMANDS_AVAILABLE,commandStr);
	if (choosenCommand == -1) {
		logger.warn('Invalid Command Specified: '+commandStr+' :: This shouldn\'t happen...');
		return msgStr;
	}
	
	// Get String Version JSON String:
	var workObjJSONStr = JSON.stringify(workObj);
	logger.debug('generateTasking :: workObjJSONStr: '+workObjJSONStr);
	
	// Generate Task ID:
	var taskIDObj = generateTaskID(workObjJSONStr);
	logger.debug('generateTasking :: taskIDObj:\n'+util.inspect(taskIDObj));
	
	// Get Work Time:
	var curMinTime = cdxgc_gen_args.minTime;
	if (!_.isUndefined(workObj.minTime)) {
		curMinTime = workObj.minTime;
	}
	// Ensure the curMinTime number is always a number or set to a default one:
	if (_.isFinite(curMinTime)) {
		curMinTime = _.parseInt(curMinTime);
	} else {
		curMinTime = cdxgc_gen_args.minTime;
	}
	logger.debug('generateTasking :: curMinTime: '+util.inspect(curMinTime));

	var workTime = getWorkTime(curMinTime, cdxgc_gen_args.maxTime);
	// For Pause Commands...
	if (!_.isUndefined(workObj.pauseTimeMS)) {
		workTime = workObj.pauseTimeMS;
	}
	logger.debug('generateTasking :: workTime: '+util.inspect(workTime));
	
	// Build the message:
	var msg_to_send = {};
	msg_to_send.srcSystem = SOURCE_SYSTEM_NAME;					//Source System Generator
	msg_to_send.poc = SOURCE_SYSTEM_NAME;						//POC == Source System Generator
	if (!_.isUndefined(workObj.poc)) {
		msg_to_send.poc = workObj.poc;
	}
	
	// Use Tasking Type:
	msg_to_send.taskType = 'generated';
	if (!_.isUndefined(workObj.taskType)) {
		msg_to_send.taskType = workObj.taskType;
	}
	
	msg_to_send.url = '';
	if (workObj.url)
	msg_to_send.url = workObj.url;								//URL Itself
	
	msg_to_send.cmd = COMMANDS_AVAILABLE[choosenCommand];		//Choosen Command
	msg_to_send.taskCreateDate = taskIDObj.curDate;				//Task Creation Date/Time
	msg_to_send.taskCreateMS = taskIDObj.curDateMS;				//Task Creation Date/Time in Milliseconds.
	msg_to_send.taskID = taskIDObj.taskID;						//Task ID
	msg_to_send.minWorkTime = curMinTime;						//Min Work Time in MS
	msg_to_send.workTime = workTime;							//How long to sit and wait on page == work time.
	
	logger.debug('generateTasking :: msg_to_send:\n'+util.inspect(msg_to_send));
	
	return msg_to_send;
};