PluginProbe ʕ •ᴥ•ʔ
Appointment Booking Calendar / 1.3.75
Appointment Booking Calendar v1.3.75
1.4.04 1.4.03 1.4.02 trunk 1.3.51 1.3.52 1.3.53 1.3.54 1.3.55 1.3.56 1.3.57 1.3.58 1.3.59 1.3.60 1.3.61 1.3.62 1.3.63 1.3.64 1.3.65 1.3.66 1.3.67 1.3.68 1.3.69 1.3.70 1.3.71 1.3.72 1.3.73 1.3.74 1.3.75 1.3.76 1.3.77 1.3.78 1.3.79 1.3.80 1.3.81 1.3.82 1.3.83 1.3.84 1.3.85 1.3.86 1.3.87 1.3.88 1.3.89 1.3.90 1.3.91 1.3.92 1.3.93 1.3.94 1.3.95 1.3.96 1.3.97 1.3.98 1.3.99 1.4.01
appointment-booking-calendar / js / repeat.js
appointment-booking-calendar / js Last commit date
block.js 3 years ago repeat.js 3 years ago rrule.js 3 years ago
repeat.js
427 lines
1 jQuery(function(){
2 (function($) {
3 var weekDays = new Array("SU","MO","TU","WE","TH","FR","SA");
4 var weekDaysLarge = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday","Friday", "Saturday");
5 var monthsName = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
6 var prefixes = new Array("first", "second", "third", "fourth", "last");
7 var recurring = {"startDate":new Date(),"endDate":new Date(),format:"",dateFormat:"mm/dd/yy"};
8 if (!DateAdd || typeof (DateDiff) != "function") {
9 var DateAdd = function(interval, number, idate) {
10 number = parseInt(number);
11 var date;
12 if (typeof (idate) == "string") {
13 date = idate.split(/\D/);
14 eval("var date = new Date(" + date.join(",") + ")");
15 }
16
17 if (typeof (idate) == "object") {
18 date = new Date(idate.toString());
19 }
20 switch (interval) {
21 case "y": date.setFullYear(date.getFullYear() + number); break;
22 case "m": date.setMonth(date.getMonth() + number); break;
23 case "d": date.setDate(date.getDate() + number); break;
24 case "w": date.setDate(date.getDate() + 7 * number); break;
25 case "h": date.setHours(date.getHours() + number); break;
26 case "n": date.setMinutes(date.getMinutes() + number); break;
27 case "s": date.setSeconds(date.getSeconds() + number); break;
28 case "l": date.setMilliseconds(date.getMilliseconds() + number); break;
29 }
30 return date;
31 }
32 }
33 function weekAndDay(date) {
34 return (0 | (date.getDate()-1) / 7);
35 }
36 timeToUntilString= function(time) {
37 var date = new Date(time);
38 var comp, comps = [
39 date.getUTCFullYear(),
40 date.getUTCMonth() + 1,
41 date.getUTCDate(),
42 'T',
43 date.getUTCHours(),
44 date.getUTCMinutes(),
45 date.getUTCSeconds(),
46 'Z'
47 ];
48 for (var i = 0; i < comps.length; i++) {
49 comp = comps[i];
50 if (!/[TZ]/.test(comp) && comp < 10) {
51 comps[i] = '0' + String(comp);
52 }
53 }
54 return comps.join('');
55 }
56 loadRepeatData = function()
57 {
58 var data = recurring.format;
59 var startdate = recurring.startDate;
60 var enddate = recurring.endDate;
61 for (var i=1;i<=30;i++)
62 $("#interval").append('<option value="'+i+'">'+i+'</option>');
63 for (var i=2;i<100;i++)
64 $("#end_after").append('<option value="'+i+'">'+i+'</option>');
65 $("#end_after").val(5);
66 var currentDate = startdate;
67 $("#starts").html($.datepicker.formatDate(recurring.dateFormat,startdate)+" "+startdate.getHours()+":"+((startdate.getMinutes()<10)?"0":"")+startdate.getMinutes());
68 $("#end_until_input").datepicker({dateFormat:recurring.dateFormat,onSelect: function(date) {
69 $("#end_until").prop( "checked", true );
70 $("#end_until").trigger( "change" );
71 }})
72 $("#end_until_input").val($.datepicker.formatDate(recurring.dateFormat,enddate));
73 if (data == "")
74 data = "FREQ=WEEKLY;BYDAY="+weekDays[currentDate.getDay()]+"";
75 var v_freq = 10;
76 var d = data.split(";");
77 for (var i=0;i<d.length;i++)
78 {
79 var dd = d[i].split("=");
80 d[i] = {k:dd[0],v:dd[1]};
81 }
82 for (var i=0;i<d.length;i++)
83 {
84 switch(d[i].k)
85 {
86 case "FREQ":
87 switch(d[i].v)
88 {
89 case "DAILY":
90 v_freq = 0;
91 break;
92 case "WEEKLY":
93 v_freq = 4;
94 break;
95 case "MONTHLY":
96 v_freq = 5;
97 break;
98 case "YEARLY":
99 v_freq = 6;
100 break;
101 }
102 break;
103 case "INTERVAL":
104 $("#interval").val(d[i].v);
105 break;
106 case "BYDAY":
107 var dd = d[i].v.split(",");
108 var sample1 = ["MO","TU","WE","TH","FR"]; //Every weekday (Monday to Friday) // ["MO","TU","WE","TH","FR"];
109 if ($(dd).not(sample1).length == 0 && $(sample1).not(dd).length == 0)
110 v_freq = 1;
111 var sample2 = ["MO","WE","FR"]; //Every Monday, Wednesday, and Friday // ["MO","WE","FR"];
112 if ($(dd).not(sample2).length == 0 && $(sample2).not(dd).length == 0)
113 v_freq = 2;
114 var sample3 = ["TU","TH"]; //Every Tuesday, and Thursday // ["TU","TH"];
115 if ($(dd).not(sample3).length == 0 && $(sample3).not(dd).length == 0)
116 v_freq = 3;
117 for (j = 0; j < dd.length; j++) {
118 day = dd[j];
119 if (day.length == 2) { // MO, TU, ... instanceof Weekday
120 $("#byday"+dd[j]).attr("checked","checked");
121 } else { // -1MO, +3FR, 1SO, ... instanceof MONTHLY, YEARLY
122 day = day.match(/^([+-]?\d)([A-Z]{2})$/);
123 n = Number(day[1]);
124 wday = day[2];
125 $("#byday_w").attr("checked","checked");
126 }
127 }
128 for (var j=0;j<dd.length;j++)
129 $("#byday"+dd[j]).attr("checked","checked");
130 break;
131 case "COUNT":
132 $("#end_count").attr("checked","checked");
133 $("#end_after").val(d[i].v);
134 break;
135 case "UNTIL":
136 var day = /(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z/.exec(d[i].v);
137 var until = new Date(Date.UTC(day[1], day[2] - 1,day[3], day[4], day[5], day[6]));
138 $("#end_until").attr("checked","checked");
139 $("#end_until_input").val((until.getMonth()+1)+"/"+until.getDate()+"/"+until.getFullYear());
140 break;
141 case "BYMONTHDAY":
142 case "BYMONTH":
143 $("#byday_m").attr("checked","checked");
144 break;
145 }
146 }
147 summaryDisplay = function()
148 {
149 var v = parseInt($("#freq").val());
150 var summary = "";
151 var format = "";
152 switch(v)
153 {
154 case 0:
155 format += "FREQ=DAILY";
156 if ($("#interval").val()==1)
157 summary += "Daily";
158 else
159 {
160 summary += "Every "+$("#interval").val()+" days" ;
161 format += ";INTERVAL="+$("#interval").val();
162 }
163 break;
164 case 1:
165 format += "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR";
166 summary += "Weekly on weekdays";
167 break;
168 case 2:
169 format += "FREQ=WEEKLY;BYDAY=MO,WE,FR";
170 summary += "Weekly on Monday, Wednesday, Friday";
171 break;
172 case 3:
173 format += "FREQ=WEEKLY;BYDAY=TU,TH";
174 summary += "Weekly on Tuesday, Thursday";
175 break;
176 case 4:
177 format += "FREQ=WEEKLY";
178 for (var i=0;i<weekDays.length;i++)
179 {
180 if ($("#byday"+weekDays[i]).is(":checked"))
181 {
182 if (summary =="")
183 {
184 summary += " on ";
185 format += ";BYDAY=";
186 }
187 else
188 {
189 summary += ", ";
190 format += ",";
191 }
192 summary += weekDaysLarge[i];
193 format += weekDays[i];
194 }
195 }
196 if ($("#interval").val()==1)
197 summary = "Weekly"+summary;
198 else
199 {
200 summary = "Every "+$("#interval").val()+" weeks"+summary;
201 format += ";INTERVAL="+$("#interval").val();
202 }
203 break;
204 case 5:
205 format += "FREQ=MONTHLY";
206 if ($("#byday_m").is(":checked"))
207 {
208 summary += " on day "+currentDate.getDate();
209 format += ";BYMONTHDAY="+currentDate.getDate();
210 }
211 else
212 {
213 summary += " on the "+prefixes[weekAndDay(currentDate)]+ " " +weekDaysLarge[currentDate.getDay()];
214 format += ";BYDAY="+(weekAndDay(currentDate)==4?-1:(weekAndDay(currentDate)+1))+weekDays[currentDate.getDay()];
215 }
216 if ($("#interval").val()==1)
217 summary = "Monthly"+summary;
218 else
219 {
220 summary = "Every "+$("#interval").val()+" months"+summary;
221 format += ";INTERVAL="+$("#interval").val();
222 }
223 break;
224 case 6:
225 format += "FREQ=YEARLY;BYMONTH="+(currentDate.getMonth()+1);
226 if ($("#byday_m").is(":checked"))
227 {
228 summary += " on " + monthsName[currentDate.getMonth()] + " " + currentDate.getDate();
229 }
230 else
231 {
232 summary += " on " + monthsName[currentDate.getMonth()] + ", "+prefixes[weekAndDay(currentDate)]+ " " +weekDaysLarge[currentDate.getDay()];
233 format += ";BYDAY="+(weekAndDay(currentDate)+1)+weekDays[currentDate.getDay()];
234 }
235 if ($("#interval").val()==1)
236 summary = "Annually"+summary;
237 else
238 {
239 summary = "Every "+$("#interval").val()+" years"+summary;
240 format += ";INTERVAL="+$("#interval").val();
241 }
242 break;
243 }
244 if ($("#end_count").is(":checked"))
245 {
246 if (parseInt($("#end_after").val())==1)
247 summary = "Once";
248 else
249 {
250 summary += ", "+$("#end_after").val()+" times";
251 format += ";COUNT="+$("#end_after").val();
252 }
253 }
254 else if ($("#end_until").is(":checked"))
255 {
256 if ($("#end_until_input").val()!="")
257 {
258 var endDate = $("#end_until_input").datepicker( "getDate" );
259 endDate = new Date(endDate.getTime()+24*60*60*1000-1000)
260 recurring.endDate = endDate;
261 summary += ", until " + monthsName[endDate.getMonth()] + " " + endDate.getDate() + ", " + endDate.getFullYear();
262 format += ";UNTIL="+timeToUntilString(endDate);
263 }
264 }
265 $("#summary").html(summary);
266 $("#format").val(format);
267 if ($("#format").val()=="")
268 {
269 $("#repeatspan").html("");
270 $("#repeatcheckbox").attr("checked","");
271 }
272 else
273 {
274 $("#repeatspan").html(summary);
275 $("#repeatcheckbox").attr("checked","checked");
276 }
277
278 var list = getRepeatList();
279 if (!$("#end_count").is(":checked"))
280 {
281 $("#end_after").val(list.length+1);
282 }
283 else
284 {
285 $("#end_until_input").val($.datepicker.formatDate(recurring.dateFormat,list[list.length-1]));
286 }
287
288 }
289 changeDisplay = function(v)
290 {
291 if (v==10)
292 {
293 $("#repeatOptions").css("display","none");
294 return;
295 }
296 else
297 $("#repeatOptions").css("display","block");
298 if (v==1 || v==2 || v==3)
299 $("#intervaldiv").css("display","none");
300 else
301 {
302 $("#intervaldiv").css("display","block");
303 if (v==0) $("#interval_label").html("days");
304 else if (v==4) $("#interval_label").html("weeks");
305 else if (v==5) $("#interval_label").html("months");
306 else if (v==6) $("#interval_label").html("years");
307 }
308 if (v==4)
309 $("#bydayweek").css("display","block");
310 else
311 $("#bydayweek").css("display","none"); //none
312 if (v==5 || v==6)
313 $("#bydaymonth").css("display","block");
314 else
315 $("#bydaymonth").css("display","none");
316 summaryDisplay();
317
318 }
319 getRepeatList = function()
320 {
321 var options = RRule.parseString($("#format").val());
322 options.dtstart = recurring.startDate;
323 var r = new RRule(options);
324 var ne = r.between( recurring.startDate,new Date(3000, 0, 1));
325 var str = "";
326 for (var i=0;i<ne.length;i++)
327 {
328 var hour = ne[i].getHours();
329 var timead = '';
330 if (cpabc_global_military_time == '0')
331 {
332 if (parseInt(hour) > 12)
333 {
334 timead = " pm";
335 hour = parseInt(hour)-12;
336 }
337 else
338 timead = " am";
339 }
340 var minutes = ne[i].getMinutes();
341 if (minutes < 10)
342 minutes = "0"+minutes;
343 sel_fdate = " "+hour+":"+minutes+timead;
344 if (cpabc_global_date_format == '1')
345 sel_fdate = ne[i].getDate() + "/" + (ne[i].getMonth()+ 1) +"/" + ne[i].getFullYear() + sel_fdate;
346 else if (cpabc_global_date_format == '2')
347 sel_fdate = ne[i].getDate() + "." + (ne[i].getMonth()+ 1) +"." + ne[i].getFullYear() + sel_fdate;
348 else
349 sel_fdate = (ne[i].getMonth()+ 1) + "/" + ne[i].getDate() +"/" + ne[i].getFullYear() + sel_fdate;
350 str += "<div>"+(i+1)+". " + sel_fdate+"</div>";
351 }
352 $("#repeatList").html(str);
353 var str = "";
354 for (var i=0;i<ne.length;i++)
355 {
356 str += ";"+ne[i].getFullYear() + "," + (ne[i].getMonth()+ 1) +"," + ne[i].getDate() + " " + ne[i].getHours() + ":" + ((ne[i].getMinutes()<10)?"0":"")+ne[i].getMinutes();
357 }
358 $("#selMonthcal"+cpabc_current_calendar_item).val(str);
359 return ne;
360
361 }
362
363 //$("#freq").val(v_freq);
364 //changeDisplay(v_freq);
365
366 $("#freq").change(function(){
367 if ($(this).val()==10)
368 {
369 $("#repeatOptions").css("display","none");
370 $("#repeatList").html("");
371 }
372 else
373 {
374 $("#repeatOptions").css("display","block");
375 changeDisplay($(this).val());
376 }
377
378 });
379 $("#interval").change(function(){
380 summaryDisplay();
381 });
382 $("#end_never").change(function(){
383 summaryDisplay();
384 });
385 $("#end_count").change(function(){
386 summaryDisplay();
387 });
388 $("#end_until").change(function(){
389 summaryDisplay();
390 });
391 $("#end_after").change(function(){
392 summaryDisplay();
393 });
394 $("#end_until_input").change(function(){
395 summaryDisplay();
396 });
397 $(".bydayw").change(function(){
398 summaryDisplay();
399 });
400 $(".bydaym").click(function(){
401 summaryDisplay();
402 });
403 }
404 $("#selDaycal"+cpabc_current_calendar_item).change(function(){
405 if ($(this).val()!="")
406 {
407 var v = $(this).val();
408 v = v.split(";");
409 if (v.length>1)
410 {
411 var d0 = v[1].split(",");
412 var d1 = d0[2].split(" ");
413 var d2 = d1[1].split(":");
414 var d = new Date(parseInt(d0[0]),parseInt(d0[1])-1,parseInt(d1[0]),parseInt(d2[0]),parseInt(d2[1]));
415 $("#repeat").css("display","block");
416 recurring = {"startDate":d,"endDate":DateAdd("m", 1, d),format:$("#format").val(),dateFormat:recurring.dateFormat};
417 loadRepeatData();
418 summaryDisplay();
419 return;
420 }
421 }
422 $("#repeat").css("display","none");
423 $("#selMonthcal"+cpabc_current_calendar_item).val("");
424
425 });
426 })(jQuery);
427 });