916 meadowlands to 918 meadowlands... pathological case
[ottawa-travel-planner.git] / grabs / calendar2.js
blobec8e70b1f812fc33d476abb6ca85893d5959ff26
1 // Title: Tigra Calendar\r
2 // URL: http://www.softcomplex.com/products/tigra_calendar/\r
3 // Version: 3.2 (American date format)\r
4 // Date: 10/14/2002 (mm/dd/yyyy)\r
5 // Feedback: feedback@softcomplex.com (specify product title in the subject)\r
6 // Note: Permission given to use this script in ANY kind of applications if\r
7 //    header lines are left unchanged.\r
8 // Note: Script consists of two files: calendar?.js and calendar.html\r
9 // About us: Our company provides offshore IT consulting services.\r
10 //    Contact us at sales@softcomplex.com if you have any programming task you\r
11 //    want to be handled by professionals. Our typical hourly rate is $20.\r
13 // if two digit year input dates after this year considered 20 century.\r
14 var NUM_CENTYEAR = 30;\r
15 // is time input control required by default\r
16 var BUL_TIMECOMPONENT = false;\r
17 // are year scrolling buttons required by default\r
18 var BUL_YEARSCROLL = true;\r
20 var calendars = [];\r
21 var RE_NUM = /^\-?\d+$/;\r
23 function calendar2(obj_target) {\r
25         // assing methods\r
26         this.gen_date = cal_gen_date2;\r
27         this.gen_time = cal_gen_time2;\r
28         this.gen_tsmp = cal_gen_tsmp2;\r
29         this.prs_date = cal_prs_date2;\r
30         this.prs_time = cal_prs_time2;\r
31         this.prs_tsmp = cal_prs_tsmp2;\r
32         this.popup    = cal_popup2;\r
33         this.repopup    = cal_repopup;\r
35         // validate input parameters\r
36         if (!obj_target)\r
37                 return cal_error("Error calling the calendar: no target control specified");\r
38         if (obj_target.value == null)\r
39                 return cal_error("Error calling the calendar: parameter specified is not valid tardet control");\r
40         this.target = obj_target;\r
41         this.time_comp = BUL_TIMECOMPONENT;\r
42         this.year_scroll = BUL_YEARSCROLL;\r
43         \r
44         // register in global collections\r
45         this.id = calendars.length;\r
46         calendars[this.id] = this;\r
47 }\r
49 function cal_popup2 (str_datetime) {\r
50         this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);\r
51         if (!this.dt_current) return;\r
53         var obj_calwindow = window.open(\r
54                 'calendar.oci?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,\r
55                 'Calendar', 'width=200,height='+(this.time_comp ? 225 : 225)+\r
56                 ',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'\r
57         );\r
58         obj_calwindow.opener = window;\r
59         obj_calwindow.focus();\r
60 }\r
62 function cal_repopup (str_datetime) {\r
63         this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);\r
64         if (!this.dt_current) return;\r
66         var obj_calwindow = window.open(\r
67                 'calendar.oci?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,\r
68                 'Calendar', 'width=200,height='+(this.time_comp ? 225 : 225)+\r
69                 ',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'\r
70         );\r
71         obj_calwindow.opener = window;\r
72         obj_calwindow.focus();\r
73 }\r
75 // timestamp generating function\r
76 function cal_gen_tsmp2 (dt_datetime) {\r
77         return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));\r
78 }\r
80 // date generating function\r
81 function cal_gen_date2 (dt_datetime) {\r
82         return (\r
83                 dt_datetime.getFullYear() + "-"\r
84                 + (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"\r
85                 + (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate()\r
86         );\r
87 }\r
88 // time generating function\r
89 function cal_gen_time2 (dt_datetime) {\r
90         return (\r
91                 (dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"\r
92                 + (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"\r
93                 + (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())\r
94         );\r
95 }\r
97 // timestamp parsing function\r
98 function cal_prs_tsmp2 (str_datetime) {\r
99         // if no parameter specified return current timestamp\r
100         if (!str_datetime)\r
101                 return (new Date());\r
103         // if positive integer treat as milliseconds from epoch\r
104         if (RE_NUM.exec(str_datetime))\r
105                 return new Date(str_datetime);\r
106                 \r
107         // else treat as date in string format\r
108         var arr_datetime = str_datetime.split(' ');\r
109         return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));\r
112 // date parsing function\r
113 function cal_prs_date2 (str_date) {\r
115         var arr_date = str_date.split('-');\r
117         if (arr_date.length != 3) return alert ("Invalid date format: '" + str_date + "'.\nFormat accepted is yyyy-mm-dd.");\r
118         if (!arr_date[2]) return alert ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");\r
119         if (!RE_NUM.exec(arr_date[2])) return alert ("Invalid day of month value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");\r
120         if (!arr_date[1]) return alert ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");\r
121         if (!RE_NUM.exec(arr_date[1])) return alert ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");\r
122         if (!arr_date[0]) return alert ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");\r
123         if (!RE_NUM.exec(arr_date[0])) return alert ("Invalid year value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");\r
125         var dt_date = new Date();\r
126         dt_date.setDate(1);\r
128         if (arr_date[1] < 1 || arr_date[1] > 12) return alert ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");\r
129         dt_date.setMonth(arr_date[1]-1);\r
130          \r
131         if (arr_date[0] < 100) arr_date[0] = Number(arr_date[0]) + (arr_date[0] < NUM_CENTYEAR ? 2000 : 1900);\r
132         dt_date.setFullYear(arr_date[0]);\r
134         var dt_numdays = new Date(arr_date[0], arr_date[1], 0);\r
135         dt_date.setDate(arr_date[2]);\r
136         if (dt_date.getMonth() != (arr_date[1]-1)) return alert ("Invalid day of month value: '" + arr_date[2] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");\r
138         return (dt_date)\r
139 }  \r
141 // time parsing function\r
142 function cal_prs_time2 (str_time, dt_date) {\r
144         if (!dt_date) return null;\r
145         var arr_time = String(str_time ? str_time : '').split(':');\r
147         if (!arr_time[0]) dt_date.setHours(0);\r
148         else if (RE_NUM.exec(arr_time[0])) \r
149                 if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);\r
150                 else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");\r
151         else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");\r
152         \r
153         if (!arr_time[1]) dt_date.setMinutes(0);\r
154         else if (RE_NUM.exec(arr_time[1]))\r
155                 if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);\r
156                 else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");\r
157         else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");\r
159         if (!arr_time[2]) dt_date.setSeconds(0);\r
160         else if (RE_NUM.exec(arr_time[2]))\r
161                 if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);\r
162                 else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");\r
163         else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");\r
165         dt_date.setMilliseconds(0);\r
166         return dt_date;\r
169 function cal_error (str_message) {\r
170         alert (str_message);\r
171         return null;\r