if (typeof (itsmo) == 'undefined') { var itsmo = {}; } if (typeof (itsmo.calendar) == 'undefined') { itsmo.calendar = {}; } $(document).ready(function() { itsmo.calendar.createCalendar(); $('.fc-button').on('click', function () { itsmo.calendar.checkRestDays($(this)); }); }); itsmo.calendar.checkRestDays = function (el) { var calendarId = el.parent().parent().parent().attr('id'); var id = calendarId.substr(calendarId.length - 1, 1); var restDaysOri = itsmo.calendar.restDaysOri[id]; if (restDaysOri == '') { return false; } var restDaysOriArr = restDaysOri.split("、"); var restDaysFirstArr = restDaysOriArr[0].split("/"); var restDays = itsmo.calendar.createRestDaysArr(restDaysOriArr, restDaysFirstArr); for(z = 0; z < restDays.length; z++) { el.parent().parent().parent().find("td[data-date='" + restDays[z] + "']:first").append("
"); } }; itsmo.calendar.createCalendar = function () { for (i = 1; i <= itsmo.calendar.countCalendar; i++) { var schedule = []; var restDays = []; var period = itsmo.calendar.period[i]; var restDaysOri = itsmo.calendar.restDaysOri[i]; var periodArr = period.split("~"); var startDayArr = periodArr[0].split("/"); var endDayArr = periodArr[1].split("/"); startDayArr[1] = ('0' + startDayArr[1]).slice(-2); startDayArr[2] = ('0' + startDayArr[2]).slice(-2); if (endDayArr[1] == undefined) { endDayArr[1] = endDayArr[0]; endDayArr[0] = startDayArr[1]; } endDayArr[0] = ('0' + endDayArr[0]).slice(-2); endDayArr[1] = ('0' + endDayArr[1]).slice(-2); var startDayPeriod = startDayArr[0] + '-' + startDayArr[1] + '-' + startDayArr[2]; var endDayPeriod = startDayArr[0] + '-' + endDayArr[0] + '-' + endDayArr[1]; endDayPeriod = itsmo.calendar.getNextDay(endDayPeriod); if (restDaysOri != '') { var restDaysOriArr = restDaysOri.split("、"); var restDaysFirstArr = restDaysOriArr[0].split("/"); //create rest days array restDays = itsmo.calendar.createRestDaysArr(restDaysOriArr, restDaysFirstArr); //create shedule event array schedule = itsmo.calendar.createSheduleArr(restDays, startDayPeriod, endDayPeriod, endDayArr, restDaysFirstArr); } else { //create shedule event without rest days array schedule = itsmo.calendar.createSheduleArrWithoutRestDays(startDayPeriod, endDayPeriod); } //create calendar $("#calendar" + i).fullCalendar({ viewRender: function() { if (typeof restDays != 'undefined') { for(z = 0; z < restDays.length; z++) { $("#calendar" + i).find("td[data-date='" + restDays[z] + "']:first").append("
"); } } }, header: { left: '', center: 'title', right: '' }, fixedWeekCount: false, locale: 'ja', events: schedule, eventTextColor: '#ffffff', eventColor: '#5b9bd5', defaultDate: startDayPeriod, }); } }; itsmo.calendar.createRestDaysArr = function (restDaysOriArr, restDaysFirstArr) { var restDays = []; var restMonth = 0; for (j = 0; j < restDaysOriArr.length; j++) { if (j == 0) { restDaysFirstArr[1] = ('0' + restDaysFirstArr[1]).slice(-2); restDaysFirstArr[2] = ('0' + restDaysFirstArr[2]).slice(-2); restMonth = restDaysFirstArr[1]; restDays.push(restDaysFirstArr[0] + '-' + restMonth + '-' + restDaysFirstArr[2]); } else { var restDay = restDaysOriArr[j].split("/"); if (restDay.length == 1) { restDaysOriArr[j] = ('0' + restDaysOriArr[j]).slice(-2); restDays.push(restDaysFirstArr[0] + '-' + restMonth + '-' + restDaysOriArr[j]); } else { restDay[1] = ('0' + restDay[1]).slice(-2); restMonth = ('0' + restDay[0]).slice(-2); restDaysOriArr[j] = ('0' + restDaysOriArr[restDay[1]]).slice(-2); restDays.push(restDaysFirstArr[0] + '-' + restMonth + '-' + restDay[1]); } } } return restDays; }; itsmo.calendar.createSheduleArr = function (restDays, startDayPeriod, endDayPeriod, endDayArr, restDaysFirstArr) { var schedule = []; var result; for(k = 0; k < restDays.length; k++) { if (k == 0) { result = itsmo.calendar.execFirstElem(schedule, restDays, k, startDayPeriod, endDayPeriod); if (result == 'continue') { continue; } else { schedule = result; } } if (k != 0 && k != restDays.length - 1) { result = itsmo.calendar.execMiddleElem(schedule, restDays, k, endDayArr, endDayPeriod); if (result == 'continue') { continue; } else if (result == 'break') { break; } else { schedule = result; } } if (k != 0 && k == restDays.length - 1) { result = itsmo.calendar.execLastElem(schedule, restDays, k, endDayArr, endDayPeriod); if (result == 'continue') { continue; } else if (result == 'break') { break; } else { schedule = result; } } } return schedule; }; itsmo.calendar.createSheduleArrWithoutRestDays = function (startDayPeriod, endDayPeriod) { var schedule = []; schedule.push({start: startDayPeriod, end: endDayPeriod}); return schedule; }; itsmo.calendar.getNextDay = function (day) { var dt = new Date(day); dt.setDate(dt.getDate() + 1); dt = dt.toISOString().substring(0, 10); return dt; } itsmo.calendar.execFirstElem = function (schedule, restDays, k, startDayPeriod, endDayPeriod) { if (restDays[k] == startDayPeriod) { return 'continue'; } schedule.push({start: startDayPeriod, end: restDays[k]}); if (restDays.length == 1) { dt = itsmo.calendar.getNextDay(restDays[k]); schedule.push({start: dt, end: endDayPeriod}); } return schedule; } itsmo.calendar.execMiddleElem = function (schedule, restDays, k, endDayArr, endDayPeriod) { var dt = itsmo.calendar.getNextDay(restDays[k - 1]); if (parseInt(endDayArr[1]) < parseInt(restDays[k].split("-")[2]) && parseInt(endDayArr[0]) <= parseInt(restDays[k].split("-")[1])) { var dt = itsmo.calendar.getNextDay(restDays[k - 1]); if (dt == restDays[k]) { return 'continue'; } schedule.push({start: dt, end: endDayPeriod}); return 'break'; } if (parseInt(endDayArr[1]) == parseInt(restDays[k].split("-")[2]) && parseInt(endDayArr[0]) <= parseInt(restDays[k].split("-")[1])) { var dt = itsmo.calendar.getNextDay(restDays[k - 1]); if (dt == restDays[k]) { return 'continue'; } schedule.push({start: dt, end: restDays[k]}); return 'break'; } if (dt == restDays[k]) { return 'continue'; } schedule.push({start: dt, end: restDays[k]}); return schedule; } itsmo.calendar.execLastElem = function (schedule, restDays, k, endDayArr, endDayPeriod) { if (parseInt(endDayArr[1]) < parseInt(restDays[k].split("-")[2]) && parseInt(endDayArr[0]) <= parseInt(restDays[k].split("-")[1])) { var dt = itsmo.calendar.getNextDay(restDays[k - 1]); if (dt == restDays[k]) { return 'continue'; } schedule.push({start: dt, end: endDayPeriod}); return 'break'; } if (parseInt(endDayArr[1]) == parseInt(restDays[k].split("-")[2]) && parseInt(endDayArr[0]) <= parseInt(restDays[k].split("-")[1])) { var dt = itsmo.calendar.getNextDay(restDays[k - 1]); if (dt == restDays[k]) { return 'continue'; } schedule.push({start: dt, end: restDays[k]}); return 'break'; } var dt = itsmo.calendar.getNextDay(restDays[k - 1]); schedule.push({start: dt, end: restDays[k]}); dt = itsmo.calendar.getNextDay(restDays[k]); if (dt == endDayPeriod) { return 'continue'; } schedule.push({start: dt, end: endDayPeriod}); return schedule; }