PageSourceSearch

http://tihram.ru/wp-content/plugins/bg-orthodox-calendar/js/bg_ortcal_days.js?ver=0.13.10

js tihram.ru collected 2026-10-03 18:58:12 UTC 19,315 bytes, 444 lines download raw bytes

1var bg_ortcal_events;
2var bg_ortcal_curMD = [];
3var bg_ortcal_curYear;
4
5function bg_ortcal_OldStyle(od, nd){
6var Y, dd;
7
8	Y=nd.getFullYear();
9	dd = (Y-Y%100)/100 - (Y-Y%400)/400 - 2;
10	od.setTime(nd.getTime());
11	od.setDate(nd.getDate()-dd);
12
13}
14	
15function bg_ortcal_easter(ed, Y) {
16// Определяем день Пасхи на заданный год
17var a, b, dd, D, M;
18	
19	a = ((19*(Y %19) + 15) % 30);
20	b = ((2*(Y %4) + 4*(Y %7) + 6*a + 6) % 7);
21	if (a+b>9) {
22		D=a+b-9; M=3;
23	}
24	else {
25		D=22+a+b; M=2;
26	}
27	ed.setFullYear(Y,M,D);
28	dd = (Y-Y%100)/100 - (Y-Y%400)/400 - 2;
29	ed.setDate(ed.getDate()+dd);
30}
31
32function bg_ortcal_MemoryDay () {
33	this.start = new Date(0);
34	this.finish = new Date(0);
35	this.name = "";
36	this.link = "";
37	this.type = -999;
38	this.discription = "";
39	this.setMemoryDay = function (s, f, n, l, t, d){
40		this.start.setTime(s.getTime());
41		this.finish.setTime(f.getTime());
42		this.name = n;
43		this.link = l;
44		this.type = t;
45		this.discription = d;
46	}
47}
48
49// Возвращает название Седмицы (Недели) по годичному кругу богослужений.
50function bg_ortcal_Sedmica (d) {											// d - текущая дата
51	var nw;
52	var one_day=1000*60*60*24;									//1 день в милисекундах
53	var wd = d.getDay();
54	var easter_day = new Date(0);
55	year = d.getFullYear();
56	bg_ortcal_easter(easter_day, year);
57	var cd = Math.floor(d.getTime()/one_day);
58	var ed = Math.floor(easter_day.getTime()/one_day)-1;
59	if (cd < ed-70) {				// До Недели о мытаре и фарисее идут седмицы по Пятидесятнице прошлого года
60		bg_ortcal_easter(easter_day, (year-1));
61		ed = Math.floor(easter_day.getTime()/one_day)-1;
62		nw = Math.ceil((cd - (ed+49))/7);
63		if (wd == 0) return bg_ortcal_lang.nedela+" "+nw+bg_ortcal_lang.po50;
64		else return bg_ortcal_lang.sedmica+" "+nw+bg_ortcal_lang.po50;
65	}
66	else if (cd == ed-70) return bg_ortcal_lang.n1pred;	// Седмицы подготовительные
67	else if (cd < ed-63) return bg_ortcal_lang.s1pred;	
68	else if (cd == ed-63) return bg_ortcal_lang.n2pred;	
69	else if (cd < ed-56) return bg_ortcal_lang.s2pred;	
70	else if (cd == ed-56) return bg_ortcal_lang.n3pred;	
71	else if (cd < ed-49) return bg_ortcal_lang.s3pred;						
72	else if (cd == ed-49) return bg_ortcal_lang.n4pred;						
73	else if (cd < ed-13) {										// Седмицы Великого поста
74		nw = Math.ceil((cd - (ed-49))/7);
75		if (wd == 0) return bg_ortcal_lang.nedela+" "+nw+bg_ortcal_lang.posta;
76		else return bg_ortcal_lang.sedmica+" "+nw+bg_ortcal_lang.posta;
77	}
78	else if (cd < ed-7) return bg_ortcal_lang.s6post;
79	else if (cd == ed-7) return bg_ortcal_lang.n6post;
80	else if (cd < ed) return bg_ortcal_lang.s7post;
81	else if (cd == ed) return "";
82	else if (cd < ed+7) return bg_ortcal_lang.spascha;
83	else if (cd < ed+50) {										// Седмицы по Пасхе
84		nw = Math.ceil((cd - ed)/7);
85		if (wd == 0) return bg_ortcal_lang.nedela+" "+(nw+1)+bg_ortcal_lang.popasche;
86		else return bg_ortcal_lang.sedmica+" "+nw+bg_ortcal_lang.popasche;
87	}
88	else  {														// Седмицы по Пятидесятнице
89		nw = Math.ceil((cd - (ed+49))/7);
90		if (wd == 0) return bg_ortcal_lang.nedela+" "+nw+bg_ortcal_lang.po50;
91		else {
92			if (nw==1) return bg_ortcal_lang.s1po50;
93			else return bg_ortcal_lang.sedmica+" "+nw+bg_ortcal_lang.po50;
94		}
95	}
96
97	return "";
98}
99function bg_ortcal_getLink(d, type) {
100	var omonth, odate, l = "";
101	var od= new Date(0);
102	var now = new Date();
103	var mon = new Array("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
104
105	bg_ortcal_OldStyle(od, d);
106	switch (type) {
107	case 1: 								// Официальный календарь РПЦ
108		if (d.getFullYear()!=now.getFullYear()) break;	// Если не текущий год, то на выход
109		
110		var start = new Date(now.getFullYear(), 0, 0);
111		var diff = d - start;
112		var day = Math.floor(diff / (1000 * 60 * 60 * 24) );
113		l = "http://calendar.rop.ru/?idd="+day;
114		break;
115	case 2: 								// Страница дня на Православие.Ru
116		if (d.getFullYear()!=now.getFullYear()) break;	// Если не текущий год, то на выход
117		omonth=od.getMonth()+1;
118		if (omonth<10) {omonth="0"+omonth}
119		odate=od.getDate();
120		if (odate<10) {odate="0"+odate}
121		l = "http://days.pravoslavie.ru/Days/"+od.getFullYear()+""+omonth+""+odate+".html";
122		break;
123	case 3: 								// Богослужебные указания
124		if (d.getFullYear()!=now.getFullYear()) break;	// Если не текущий год, то на выход
125		omonth=d.getMonth()+1;
126		if (omonth<10) {omonth="0"+omonth}
127		odate=d.getDate();
128		if (odate<10) {odate="0"+odate}
129		l = "http://www.patriarchia.ru/bu/"+od.getFullYear()+"-"+omonth+"-"+odate;
130		break;
131	case 4: 								// Страница дня на Azbyka.Ru
132		if (d.getFullYear()!=now.getFullYear()) break;	// Если не текущий год, то на выход
133		omonth=d.getMonth()+1;
134		if (omonth<10) {omonth="0"+omonth}
135		odate=d.getDate();
136		if (odate<10) {odate="0"+odate}
137		l = "https://azbyka.ru/days/"+od.getFullYear()+"-"+omonth+"-"+odate;
138		break;
139	case 101: 								// Страница на сайте
140		omonth=d.getMonth()+1;
141		if (omonth<10) {omonth="0"+omonth}
142		odate=d.getDate();
143		if (odate<10) {odate="0"+odate}
144		if (bg_ortcal_page) l = bg_ortcal_page;
145		else l = bg_ortcal_baseUrl;
146		l += "?date="+d.getFullYear()+"-"+omonth+"-"+odate;
147		break;
148	}
149
150	return l;
151}
152
153function bg_ortcal_memory_days(year) {
154	if (year == bg_ortcal_curYear) return bg_ortcal_curMD;
155	
156//	var md = [];
157
158	var easter_day= new Date(0);
159	var d= new Date(0);
160	var sd= new Date(0);
161	var fd= new Date(0);
162	var bufer = new bg_ortcal_MemoryDay();
163	var iw, im, ddd, wd;
164	var dd; 
165//	var daysY = bg_ortcal_isLeap(year) ? 366 : 365;
166	var one_day=1000*60*60*24;	//1 день в милисекундах
167					
168//	Светлое Христово Воскресение. Пасха. 
169	bg_ortcal_easter(easter_day, year);
170
171	var j=0;
172	if(bg_ortcal_events) {
173		for(var i=0; i<bg_ortcal_events.length; i++)
174		{
175			name=bg_ortcal_events[i].name;
176			link=bg_ortcal_events[i].link;
177			type=bg_ortcal_events[i].type;
178			discription=bg_ortcal_events[i].discription;
179					
180			s_date=parseInt(bg_ortcal_events[i].s_date);
181			s_month=parseInt(bg_ortcal_events[i].s_month);
182			f_date=parseInt(bg_ortcal_events[i].f_date);
183			f_month=parseInt(bg_ortcal_events[i].f_month);
184			
185			for (var y = year-1; y <= year+1; y++) { 
186				dd = (y-y%100)/100 - (y-y%400)/400 - 2; 
187			//	Светлое Христово Воскресение. Пасха. 
188				bg_ortcal_easter(easter_day, y);
189			
190			
191				// Если не високосный год, то праздники, приходящиеся на 29 февраля, отмечаются 28 февраля
192				if (!bg_ortcal_isLeap(y)) {
193					if (s_month == 2 && s_date == 29) s_date = 28;
194					if (f_month == 2 && f_date == 29) f_date = 28;
195				}	
196				if (s_month < 0) {
197					if (s_month == -4) f_date = f_date +3;
198					sd.setFullYear(y, f_month-1, f_date+dd);		// Сб./Вс. перед/после праздника = -1, Праздник в Сб./Вс. перед/после даты = -2 Праздник в указанный день недели = -3
199					we = sd.getDay();
200					wd = s_date-we;
201					if (s_month == -1 && wd == 0) continue;			// Если праздник приходится на Сб./Вс. перед/после праздника = -1, то игнорируем событие
202					if (s_month == -3 && we != s_date) continue;	// Если праздник не совпадает с указанным днем недели, то не отмечается
203					sd.setDate(sd.getDate()+wd);
204					fd.setTime(sd.getTime());
205					if (s_month == -4) f_date = f_date -3;
206				}
207				else {
208					if (s_month == 0) {						// Переходящие даты
209						sd.setTime(easter_day.getTime());
210						sd.setDate(sd.getDate()+s_date);
211					}
212					else {
213						sd.setFullYear(y, s_month-1, s_date);
214						sd.setDate(sd.getDate()+dd);
215					}
216
217					if (f_month == 0) {						// Переходящие даты
218						fd.setTime(easter_day.getTime());
219						fd.setDate(fd.getDate()+f_date);
220					}
221					else {
222						if (s_month > f_month) fd.setFullYear(y+1, f_month-1, f_date);		// Cедмицы на рубеже года(напр., Святки)
223						else fd.setFullYear(y, f_month-1, f_date);
224						fd.setDate(fd.getDate()+dd);
225					}
226				}
227								
228				if (name == "") continue;													// Если наименование события не задано, то игнорируем это событие
229				if ((sd.getFullYear() != year) && (fd.getFullYear() != year))  continue; 	// Если начальная и конечная даты события не в текущем году, то игнорируем событие
230		// Сохраняем это событие в памяти 
231				bg_ortcal_curMD[j]=new bg_ortcal_MemoryDay();
232				bg_ortcal_curMD[j].setMemoryDay (sd, fd, name, link, type, discription);
233								
234				j++;
235			}
236		}
237	}
238//	else alert ("Нет XML-данных.");
239	
240// Если Начало великого поста совпадает со Сретением, Праздник переносится на ближайшее воскесение.???
241// Согласно греческого типикона празднование Благовещения, если оно приходится на Великую пятницу или субботу, переносится на первый день Пасхи.
242
243// Сортируем массив памятных дат	
244	t = true;
245	while (t == true) {
246	t = false;
247		for (i=0; i<bg_ortcal_curMD.length-1; i++) {
248			if (bg_ortcal_curMD[i].start.getTime() > bg_ortcal_curMD[i+1].start.getTime()){
249				bufer.setMemoryDay(bg_ortcal_curMD[i].start, bg_ortcal_curMD[i].finish, bg_ortcal_curMD[i].name, bg_ortcal_curMD[i].link,  bg_ortcal_curMD[i].type, bg_ortcal_curMD[i].discription);
250				bg_ortcal_curMD[i].setMemoryDay (bg_ortcal_curMD[i+1].start, bg_ortcal_curMD[i+1].finish, bg_ortcal_curMD[i+1].name, bg_ortcal_curMD[i+1].link,  bg_ortcal_curMD[i+1].type, bg_ortcal_curMD[i+1].discription);
251				bg_ortcal_curMD[i+1].setMemoryDay (bufer.start, bufer.finish, bufer.name, bufer.link,  bufer.type, bufer.discription);
252				t = true;
253			}
254		}
255	}
256	bg_ortcal_curYear = year;
257	return bg_ortcal_curMD;
258}
259
260function bg_ortcal_setLink(t) {
261	var d = new Date(0);
262	d.setTime(t);
263	var link = bg_ortcal_getLink(d, dayLink);
264	if (link) {
265		window.open(link);
266	}
267}
268
269function bg_ortcal_getDayInfo(d) {
270
271    var mnr = bg_ortcal_lang.mnr;
272	var cwd = bg_ortcal_lang.cwd;
273	var typicon = bg_ortcal_lang.typicon;
274
275	var curD = d.getDate();
276	var curM = d.getMonth()+1;
277	var curY = d.getFullYear();
278	var curW = d.getDay();
279	var name;
280	var yCh;
281	
282	var md = bg_ortcal_memory_days(curY);
283	var beginY=new Date(0);
284	var nowY=beginY.getFullYear();
285	beginY.setFullYear(curY-1, 11, 31);
286	var one_day=1000*60*60*24;	//1 день в милисекундах
287	var sd, fd;
288	var num_day = Math.round((d.getTime()-beginY.getTime())/(one_day));	
289
290// Дата по новому и старому стилю, Седмица, Памятные дни
291	var od = new Date(0);
292	bg_ortcal_OldStyle(od, d);
293	if (curY == 0) yCh = bg_ortcal_lang.bc;
294	else if (curY < 0) yCh = (-curY) + ' '+bg_ortcal_lang.b_bc;
295	else yCh = curY + ' '+bg_ortcal_lang.a_bc;
296		
297	var t = curD+" "+mnr[curM-1]+" "+yCh+" ("+od.getDate()+" "+mnr[od.getMonth()]+" ст.ст.), "+cwd[curW];
298	if (curY == nowY) t = "<span class='bg_ortcal_curDate' style='cursor:pointer' onclick=\'bg_ortcal_setLink("+d.getTime()+")\'>" + t + "</span><br>";
299	else t = "<span class='bg_ortcal_curDate' style='cursor:auto' onclick=\'bg_ortcal_setLink("+d.getTime()+")\'>" + t + "</span><br>";		// Если не текущий год, то курсор обыкновенный
300	var tt = bg_ortcal_Sedmica(d);																			// Седмица
301	if (tt !="") t += "<b>" + tt + "</b><br>";
302		
303	tt = "";
304	for (k = 0; k < md.length; k++) {
305		if (md[k].name == "") continue;	
306		if (md[k].type == 8 || md[k].type == 9) {													// Памятные дни. (Тип 8 и 9)
307			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
308				tt += "<b>"+md[k].name+"</b><br>";
309			} 	
310		}
311	}
312	if (tt !="") t += tt;
313	t = "<div id='dateID' align='center'>"+t+"</div>";
314
315	tt = "";
316	for (k = 0; k < md.length; k++) {
317		if (md[k].name == "") continue;	
318		if (md[k].type == 0) {																		// Светлое Христово Воскресение. Пасха. (Тип 0)
319			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
320				tt += "<img src='"+bg_ortcal_baseUrl+"js/S"+md[k].type+".gif' title='"+typicon[md[k].type]+"' /><span class='bg_ortcal_holiday'>"+md[k].name+"</span><br>";
321			} 	
322		}
323	}
324	for (k = 0; k < md.length; k++) {
325		if (md[k].name == "") continue;	
326		if (md[k].type == 1 || md[k].type == 2) {													// ДВУНАДЕСЯТЫЕ И ВЕЛИКИЕ ПРАЗДНИКИ (Тип 1 и 2)
327			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
328				tt += "<img src='"+bg_ortcal_baseUrl+"js/S"+md[k].type+".gif' title='"+typicon[md[k].type]+"' /><span class='bg_ortcal_holiday'>"+md[k].name+"</span><br>";
329			} 	
330		}
331	}
332	if (tt !="" || curW == 0) t=t.replace("bg_ortcal_curDate","bg_ortcal_holDate");										// Если Великий праздник или воскресный день, меняем цвет даты на красный
333		
334	for (k = 0; k < md.length; k++) {
335		if (md[k].name == "") continue;	
336		if (md[k].type >= 3 && md[k].type <= 7) {													// СРЕДНИЕ, МАЛЫЕ и другие ПРАЗДНИКИ (Типы 3-7)
337			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
338				tt += "<img src='"+bg_ortcal_baseUrl+"js/S"+md[k].type+".gif' title='"+typicon[md[k].type]+"' />"+md[k].name+"<br>";
339			} 	
340		}
341	}
342	if (tt !="") t += "<b>"+bg_ortcal_lang.t07+"</b><br>" + tt;
343		
344		
345	tt = "";
346	for (k = 0; k < md.length; k++) {
347		if (md[k].name == "") continue;	
348		if (md[k].type == 16) {																		// Соборы святых. (Тип 16)
349			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
350				tt += md[k].name+"<br>";
351			} 	
352		}
353	}
354	if (tt !="") t += "<b>"+bg_ortcal_lang.t16+"</b><br>" + tt;
355		
356	tt = "";
357	for (k = 0; k < md.length; k++) {
358		if (md[k].name == "") continue;	
359		if (md[k].type == 18) {																		// Святые. (Тип 18)
360			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
361				tt += md[k].name+"<br>";
362			} 	
363		}
364	}
365	if (tt !="") t += "<b>"+bg_ortcal_lang.t18+"</b><br>" + tt;
366		
367	tt = "";
368	for (k = 0; k < md.length; k++) {
369		if (md[k].name == "" || curY < 2001) continue;	
370		if (md[k].type == 19) {																		// Исповедники и новомученики российские. (Тип 19)
371			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
372				tt += md[k].name+"<br>";
373			} 	
374		}
375	}
376	if (tt !="") t += "<b>"+bg_ortcal_lang.t19+"</b><br>" + tt;
377		
378	tt = "";
379	for (k = 0; k < md.length; k++) {
380		if (md[k].name == "") continue;	
381		if (md[k].type == 17) {																		// Дни почитания местночтимых икон Божией Матери. (Тип 17)
382			if (md[k].start.getDate() == curD && md[k].start.getMonth() == curM-1) {				
383				tt += md[k].name+"<br>";
384			} 	
385		}
386	}
387	if (tt !="") t += "<b>"+bg_ortcal_lang.t17+"</b><br>" + tt;
388		
389	tt = "";
390	for (k = 0; k < md.length; k++) {													// Сплошные седмицы. (Тип 100)												
391		if (md[k].name == "") continue;												
392		if (md[k].type == 100) {														
393			sd = Math.round((md[k].start.getTime()-beginY.getTime())/(one_day));	
394			fd = Math.round((md[k].finish.getTime()-beginY.getTime())/(one_day));	
395																						
396			if (num_day >= sd && num_day <= fd) {									
397				tt +=  "<i>"+md[k].name+"</i>";
398				break;
399			}
400		}
401	}
402	for (k = 0; k < md.length; k++) {													// Многодневные и однодневные посты.  (Тип 10) && Не забываем про окончание Филлипова поста в начале года												
403		if (md[k].name == "") continue;												
404		if (md[k].type == 10) {														
405			sd = Math.round((md[k].start.getTime()-beginY.getTime())/(one_day));	
406			fd = Math.round((md[k].finish.getTime()-beginY.getTime())/(one_day));	
407																						
408			if (num_day >= sd && num_day <= fd) {									
409				if (tt !="") tt += ". ";
410				tt +=  "<i>"+md[k].name+"</i>";
411				break;
412			}
413		}
414	}
415	if ((tt =="") && (curW == 3 || curW == 5)) {tt +=  "<i>"+bg_ortcal_lang.post+"</i>";}			// Среда и пятница - постные дни	 						
416
417// Браковенчание не совершается
418	var nowedding = "<i>"+bg_ortcal_lang.nowedding+"</i>";
419	if (curW == 2 || curW == 4 || curW == 6) {											// Не совершается браковенчание накануне среды и пятницы всего года (вторник и четверг), и воскресных дней (суббота)
420		if (tt !="") tt += ". ";
421		tt +=  nowedding;
422	}	 						
423	else {
424		for (k = 0; k < md.length; k++) {												// А также не совершается браковенчание накануне двунадесятых, храмовых и великих праздников
425			if (md[k].name == "") continue;												// в продолжение постов Великого, Петрова, Успенского и Рождественского; 
426			if (md[k].type == 20) {														// в продолжение Святок с 7 января (25 декабря) по 19 (6) января; сырной седмицы (масленицы),
427				sd = Math.round((md[k].start.getTime()-beginY.getTime())/(one_day));
427	// начиная с Недели мясопустной и в Неделю сыропустную; в течение Пасхальной (Светлой) седмицы;
428				fd = Math.round((md[k].finish.getTime()-beginY.getTime())/(one_day));	// в дни (и накануне) Усекновения главы Иоана Предтечи - 11 сентября (29 августа) и 
429																						// Воздвижения Креста Господня - 27 (12) сентября.
430				if (num_day >= sd && num_day <= fd) {									// Тип 20 && Не забываем про окончание Филлипова поста в начале года
431					if (tt !="") tt += ". ";
432					tt +=  nowedding;
433					break;
434				}
435			}
436		}
437	}
438	if (tt !="") t += "<hr>" + tt;
439	
440	return t;
441}
442
443function bg_ortcal_isLeap(year) {
444		return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)) ? true : false }

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.