1// Tigra Calendar v5.2 (11/20/2011) 2// http://www.softcomplex.com/products/tigra_calendar/ 3// License: Public Domain... You're welcome. 4 5// default settins - this structure can be moved in separate file in multilangual applications 6var A_TCALCONF = { 7 'cssprefix' : 'tcal', 8 'months' : ['ЯнваÑÑ', 'ФевÑалÑ', 'ÐаÑÑ', 'ÐпÑелÑ', 'Ðай', 'ÐÑнÑ', 'ÐÑлÑ', 'ÐвгÑÑÑ', 'СенÑÑбÑÑ', 'ÐкÑÑбÑÑ', 'ÐоÑбÑÑ', 'ÐекабÑÑ'], 9 'weekdays' : ['Ðн', 'ÐÑ', 'СÑ', 'ЧÑ', 'ÐÑ', 'Сб', 'ÐÑ'], 10 'longwdays' : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], 11 'yearscroll' : true, // show year scroller 12 'weekstart' : 0, // first day of week: 0-Su or 1-Mo 13 'prevyear' : 'ÐÑедÑдÑÑий год', 14 'nextyear' : 'СледÑÑÑий год', 15 'prevmonth' : 'ÐÑедÑдÑÑий меÑÑÑ', 16 'nextmonth' : 'СледÑÑÑий меÑÑÑ', 17 'format' : 'd.m.Y' // 'd-m-Y', Y-m-d', 'l, F jS Y' 18}; 19 20var A_TCALTOKENS = [ 21 // A full numeric representation of a year, 4 digits 22 {'t': 'Y', 'r': '19\\d{2}|20\\d{2}', 'p': function (d_date, n_value) { d_date.setFullYear(Number(n_value)); return d_date; }, 'g': function (d_date) { var n_year = d_date.getFullYear(); return n_year; }}, 23 // Numeric representation of a month, with leading zeros 24 {'t': 'm', 'r': '0?[1-9]|1[0-2]', 'p': function (d_date, n_value) { d_date.setMonth(Number(n_value) - 1); return d_date; }, 'g': function (d_date) { var n_month = d_date.getMonth() + 1; return (n_month < 10 ? '0' : '') + n_month }}, 25 // A full textual representation of a month, such as January or March 26 {'t': 'F', 'r': A_TCALCONF.months.join('|'), 'p': function (d_date, s_value) { for (var m = 0; m < 12; m++) if (A_TCALCONF.months[m] == s_value) { d_date.setMonth(m); return d_date; }}, 'g': function (d_date) { return A_TCALCONF.months[d_date.getMonth()]; }}, 27 // Day of the month, 2 digits with leading zeros 28 {'t': 'd', 'r': '0?[1-9]|[12][0-9]|3[01]', 'p': function (d_date, n_value) { d_date.setDate(Number(n_value)); if (d_date.getDate() != n_value) d_date.setDate(0); return d_date }, 'g': function (d_date) { var n_date = d_date.getDate(); return (n_date < 10 ? '0' : '') + n_date; }}, 29 // Day of the month without leading zeros 30 {'t': 'j', 'r': '0?[1-9]|[12][0-9]|3[01]', 'p': function (d_date, n_value) { d_date.setDate(Number(n_value)); if (d_date.getDate() != n_value) d_date.setDate(0); return d_date }, 'g': function (d_date) { var n_date = d_date.getDate(); return n_date; }}, 31 // A full textual representation of the day of the week 32 {'t': 'l', 'r': A_TCALCONF.longwdays.join('|'), 'p': function (d_date, s_value) { return d_date }, 'g': function (d_date) { return A_TCALCONF.longwdays[d_date.getDay()]; }}, 33 // English ordinal suffix for the day of the month, 2 characters 34 {'t': 'S', 'r': 'st|nd|rd|th', 'p': function (d_date, s_value) { return d_date }, 'g': function (d_date) { n_date = d_date.getDate(); if (n_date % 10 == 1 && n_date != 11) return 'st'; if (n_date % 10 == 2 && n_date != 12) return 'nd'; if (n_date % 10 == 3 && n_date != 13) return 'rd'; return 'th'; }} 35 36]; 37 38function f_tcalGetHTML (d_date) { 39 40 var e_input = f_tcalGetInputs(true); 41 if (!e_input) return; 42 43 var s_pfx = A_TCALCONF.cssprefix, 44 s_format = A_TCALCONF.format; 45 46 // today from config or client date 47 var d_today = f_tcalParseDate(A_TCALCONF.today, A_TCALCONF.format); 48 if (!d_today) 49 d_today = f_tcalResetTime(new Date()); 50 51 // selected date from input or config or today 52 var d_selected = f_tcalParseDate(e_input.value, s_format); 53 if (!d_selected) 54 d_selected = f_tcalParseDate(A_TCALCONF.selected, A_TCALCONF.format); 55 if (!d_selected) 56 d_selected = new Date(d_today); 57 58 // show calendar for passed or selected date 59 d_date = d_date ? f_tcalResetTime(d_date) : new Date(d_selected); 60 61 var d_firstDay = new Date(d_date); 62 d_firstDay.setDate(1); 63 d_firstDay.setDate(1 - (7 + d_firstDay.getDay() - A_TCALCONF.weekstart) % 7); 64 65 var a_class, s_html = '<table id="' + s_pfx + 'Controls"><tbody><tr><td class="title2">' 66 + A_TCALCONF.months[d_date.getMonth()] + ' ' + d_date.getFullYear() 67 + (A_TCALCONF.yearscroll ? '<span class="niz_22" onclick="f_niz_22()"></span></td>' : '') 68 + '<td class="n2" id="' + s_pfx + 'PrevMonth"' + f_tcalRelDate(d_date, -1) + ' title="' + A_TCALCONF.prevmonth + '"><span></span></td><td><img src="/images/calc22.png" /></td>' 69 70 + '<td class="n3" id="' + s_pfx + 'NextMonth"' + f_tcalRelDate(d_date, 1) + ' title="' + A_TCALCONF.nextmonth + '"><span></span></td>' 71 + (A_TCALCONF.yearscroll ? '' : '') 72 + '</tr></tbody></table><table id="' + s_pfx + 'Grid"><tbody><tr>'; 73 74 // print weekdays titles 75 for (var i = 0; i < 7; i++) 76 s_html += '<th class="nh">' + A_TCALCONF.weekdays[(A_TCALCONF.weekstart + i) % 7] + '</th>'; 77 s_html += '</tr>' ; 78 79 // print calendar table 80 var n_date, n_month, d_current = new Date(d_firstDay); 81 while (d_current.getMonth() == d_date.getMonth() || 82 d_current.getMonth() == d_firstDay.getMonth()) { 83 84 s_html +='<tr>'; 85 for (var n_wday = 0; n_wday < 7; n_wday++) { 86 87 a_class = []; 88 n_date = d_current.getDate(); 89 n_month = d_current.getMonth(); 90 91 if (d_current.getMonth() != d_date.getMonth()) 92 a_class[a_class.length] = s_pfx + 'OtherMonth'; 93 if (d_current.getDay() == 0 || d_current.getDay() == 6) 94 a_class[a_class.length] = s_pfx + 'Weekend'; 95 if (d_current.valueOf() == d_today.valueOf()) 96 a_class[a_class.length] = s_pfx + 'Today'; 97 if (d_current.valueOf() == d_selected.valueOf()) 98 a_class[a_class.length] = s_pfx + 'Selected'; 99 100 s_html += '<td' + f_tcalRelDate(d_current) + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>'; 101 d_current.setDate(++n_date); 102 } 103 s_html +='</tr>'; 104 } 105 s_html +='</tbody></table>'; 106 107 return s_html; 108} 109 110function f_tcalRelDate (d_date, d_diff, s_units) { 111 112 var s_units = (s_units == 'y' ? 'FullYear' : 'Month'); 113 var d_result = new Date(d_date); 114 if (d_diff) { 115 d_result['set' + s_units](d_date['get' + s_units]() + d_diff); 116 if (d_result.getDate() != d_date.getDate()) 117 d_result.setDate(0); 118 } 119 return ' onclick="f_tcalUpdate(' + d_result.valueOf() + (d_diff ? ',1' : '') + ')"'; 120} 121 122function f_tcalResetTime (d_date) { 123 d_date.setMilliseconds(0); 124 d_date.setSeconds(0); 125 d_date.setMinutes(0); 126 d_date.setHours(12); 127 return d_date; 128} 129 130// closes calendar and returns all inputs to default state 131function f_tcalCancel () { 132 133 var s_pfx = A_TCALCONF.cssprefix; 134 var e_cal = document.getElementById(s_pfx); 135 if (e_cal) 136 e_cal.style.visibility = ''; 137 var a_inputs = f_tcalGetInputs(); 138 for (var n = 0; n < a_inputs.length; n++) 139 f_tcalRemoveClass(a_inputs[n], s_pfx + 'Active'); 140} 141 142function f_tcalUpdate (n_date, b_keepOpen) { 143 144 var e_input = f_tcalGetInputs(true); 145 if (!e_input) return; 146 147 d_date = new Date(n_date); 148 var s_pfx = A_TCALCONF.cssprefix; 149 150 if (b_keepOpen) { 151 var e_cal = document.getElementById(s_pfx); 152 if (!e_cal || e_cal.style.visibility != 'visible') return; 153 e_cal.innerHTML = f_tcalGetHTML(d_date, e_input); 154 } 155 else { 156 e_input.value = f_tcalGenerateDate(d_date, A_TCALCONF.format); 157 f_tcalCancel(); 158 } 159} 160function f_niz_22 () { 161 $('#tcalNextMonth').click(); 162} 163 164 165 166 167 168 169function f_tcalOnClick () { 170 171 // see if already opened 172 var s_pfx = A_TCALCONF.cssprefix; 173 var s_activeClass = s_pfx + 'Active'; 174 var b_close = f_tcalHasClass(this, s_activeClass); 175 176 // close all clalendars 177 f_tcalCancel(); 178 if (b_close) return; 179 180 // get position of input 181 f_tcalAddClass(this, s_activeClass); 182 183 var n_left = f_getPosition (this, 'Left'), 184 n_top = f_getPosition (this, 'Top') + this.offsetHeight; 185 186 var e_cal = document.getElementById(s_pfx); 187 if (!e_cal) { 188 e_cal = document.createElement('div'); 189 e_cal.onselectstart = function () { return false }; 190 e_cal.id = s_pfx; 191 document.getElementsByTagName("body").item(0).appendChild(e_cal); 192 } 193 e_cal.innerHTML = f_tcalGetHTML(null); 194 e_cal.style.top = n_top + 'px'; 195 e_cal.style.left = (n_left + this.offsetWidth - e_cal.offsetWidth) + 'px'; 196 e_cal.style.visibility = 'visible'; 197} 198 199function f_tcalParseDate (s_date, s_format) { 200 201 if (!s_date) return; 202 203 var s_char, s_regexp = '^', a_tokens = {}, a_options, n_token = 0; 204 for (var n = 0; n < s_format.length; n++) { 205 s_char = s_format.charAt(n); 206 if (A_TCALTOKENS_IDX[s_char]) { 207 a_tokens[s_char] = ++n_token; 208 s_regexp += '(' + A_TCALTOKENS_IDX[s_char]['r'] + ')'; 209 } 210 else if (s_char == ' ') 211 s_regexp += '\\s'; 212 else 213 s_regexp += (s_char.match(/[\w\d]/) ? '' : '\\') + s_char; 214 } 215 var r_date = new RegExp(s_regexp + '$'); 216 if (!s_date.match(r_date)) return; 217 218 var s_val, d_date = f_tcalResetTime(new Date()); 219 d_date.setDate(1); 220 221 for (n = 0; n < A_TCALTOKENS.length; n++) { 222 s_char = A_TCALTOKENS[n]['t']; 223 if (!a_tokens[s_char]) 224 continue; 225 s_val = RegExp['$' + a_tokens[s_char]]; 226 d_date = A_TCALTOKENS[n]['p'](d_date, s_val); 227 } 228 229 return d_date; 230} 231 232function f_tcalGenerateDate (d_date, s_format) { 233 234 var s_char, s_date = ''; 235 for (var n = 0; n < s_format.length; n++) { 236 s_char = s_format.charAt(n); 237 s_date += A_TCALTOKENS_IDX[s_char] ? A_TCALTOKENS_IDX[s_char]['g'](d_date) : s_char; 238 } 239 return s_date; 240} 241 242function f_tcalGetInputs (b_active) { 243 244 var a_inputs = document.getElementsByTagName('input'), 245 e_input, s_rel, a_result = []; 246 247 for (n = 0; n < a_inputs.length; n++) { 248 249 e_input = a_inputs[n]; 250 if (!e_input.type || e_input.type != 'text') 251 continue; 252 253 if (!f_tcalHasClass(e_input, 'tcal')) 254 continue; 255 256 if (b_active && f_tcalHasClass(e_input, A_TCALCONF.cssprefix + 'Active')) 257 return e_input; 258 259 a_result[a_result.length] = e_input; 260 } 261 return b_active ? null : a_result; 262} 263 264function f_tcalHasClass (e_elem, s_class) { 265 var s_classes = e_elem.className; 266 if (!s_classes) 267 return false;
268 var a_classes = s_classes.split(' '); 269 for (var n = 0; n < a_classes.length; n++) 270 if (a_classes[n] == s_class) 271 return true; 272 return false; 273} 274 275function f_tcalAddClass (e_elem, s_class) { 276 if (f_tcalHasClass (e_elem, s_class)) 277 return; 278 279 var s_classes = e_elem.className; 280 e_elem.className = (s_classes ? s_classes + ' ' : '') + s_class; 281} 282 283function f_tcalRemoveClass (e_elem, s_class) { 284 var s_classes = e_elem.className; 285 if (!s_classes || s_classes.indexOf(s_class) == -1) 286 return false; 287 288 var a_classes = s_classes.split(' '), 289 a_newClasses = []; 290 291 for (var n = 0; n < a_classes.length; n++) { 292 if (a_classes[n] == s_class) 293 continue; 294 a_newClasses[a_newClasses.length] = a_classes[n]; 295 } 296 e_elem.className = a_newClasses.join(' '); 297 return true; 298} 299 300function f_getPosition (e_elemRef, s_coord) { 301 var n_pos = 0, n_offset, 302 e_elem = e_elemRef; 303 304 while (e_elem) { 305 n_offset = e_elem["offset" + s_coord]; 306 n_pos += n_offset; 307 e_elem = e_elem.offsetParent; 308 } 309 310 e_elem = e_elemRef; 311 while (e_elem != document.body) { 312 n_offset = e_elem["scroll" + s_coord]; 313 if (n_offset && e_elem.style.overflow == 'scroll') 314 n_pos -= n_offset; 315 e_elem = e_elem.parentNode; 316 } 317 return n_pos; 318} 319 320function f_tcalInit () { 321 322 if (!document.getElementsByTagName) 323 return; 324 325 var e_input, a_inputs = f_tcalGetInputs(); 326 for (var n = 0; n < a_inputs.length; n++) { 327 e_input = a_inputs[n]; 328 e_input.onclick = f_tcalOnClick; 329 f_tcalAddClass(e_input, A_TCALCONF.cssprefix + 'Input'); 330 } 331 332 window.A_TCALTOKENS_IDX = {}; 333 for (n = 0; n < A_TCALTOKENS.length; n++) 334 A_TCALTOKENS_IDX[A_TCALTOKENS[n]['t']] = A_TCALTOKENS[n]; 335} 336 337function f_tcalAddOnload (f_func) { 338 if (document.addEventListener) { 339 window.addEventListener('load', f_func, false); 340 } 341 else if (window.attachEvent) { 342 window.attachEvent('onload', f_func); 343 } 344 else { 345 var f_onLoad = window.onload; 346 if (typeof window.onload != 'function') { 347 window.onload = f_func; 348 } 349 else { 350 window.onload = function() { 351 f_onLoad(); 352 f_func(); 353 } 354 } 355 } 356} 357 358 359 360 361 362f_tcalAddOnload (f_tcalInit); 363 364
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.