﻿/*
 * EN-Addons
 * календарь
 *
 * Created by Tucker http://56.en.cx/UserDetails.aspx?uid=19577
 *
 * http://56.en.cx/Addons.aspx?aid=3646
 *
 * 2.0
 *
 * Adapted by TOXA http://zhodino.en.cx/UserDetails.aspx?uid=82510
 */

var games_data = [];
var holidays = [];

$('<link href="http://cdn.endata.cx/images/personal/82510/calendar1.css" type="text/css" rel="stylesheet" />').appendTo('head');

function init_popup(){
	$(".ul-tr ul").hide(); // Opera Fix
	$(".ul-tr li").hover(
		function(){$(this).find('ul:first').show("fast").attr("style","z-index:10000");},
		function(){$(this).find('ul:first').hide("fast").attr("style","z-index:auto");});
}

function en_addon(){
	var g_init=0;
	var g_init=0;
	var games = [];
	var games_id = [];

	var it_num = [];
	var lv_sid = -1;
	this.pv_sid = -1;

	var gc_game_unknown = 99; // номер типа игры "Неизвестно"
	var gc_game_planning = 100; // сдвиг для "Запланированная"
	var gc_length_with_type = 6; // кол-во данных по игре вместе с типом игры

	//****************************************************
	// КАЛЕНДАРЬ
	// взято с http://omsk.en.cx
	// модифицировано Tucker http://56.en.cx/UserDetails.aspx?uid=19577
	//do_calendar(1,"#0d3b00"); // small=1, color="#0d3b00"
	//
	//var today = new Date();
	//my_en.do_calendar(1,3,2,"#000000",today.getYear(),today.getMonth()+1); 
	////small=1, cnt=3, col=2, color="#000000", year, month
	//****************************************************


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++  calendar
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	function do_calendar_proc(p_small,p_cnt,p_col,p_color,p_yy,p_mm){
		var clndr_data = [];
		var lv_result = "";
		var gc_length_with_type = 6;
		var holidays_data = [];
		var today = new Date();
		var this_day = today.getDate();
		var this_month = today.getMonth()+1;
		var this_year = today.getYear();
		if (this_year < 2000) {
			this_year = this_year + 1900;
		}

		//+++ Объявляем разновидности игр и картинки +++//
		var game_titles = [];
		game_titles[0] = ["Cхватка","/Addons.aspx?aid=336","СХ"];
		game_titles[1] = ["Мозговой штурм","/Addons.aspx?aid=342","МШ"];
		game_titles[2] = ["Фотоэкстрим", "/Addons.aspx?aid=340","ФЭ"];
		game_titles[3] = ["Мокрые войны","/Addons.aspx?aid=338","МВ"];
		game_titles[4] = ["Кешинг","/Addons.aspx?aid=341","КШ"];
		game_titles[5] = ["Фотоохота","/Addons.aspx?aid=337","ФО"];
		game_titles[6] = ["Пешеходка","#","ПШ"];
		game_titles[7] = ["Точки","/HowTo.aspx?about=PointsDescription","ТЧК"];
		game_titles[8] = ["Видеоохота","/HowTo.aspx?about=VideoHuntDescription","ВО"];
		game_titles[9] = ["Брифинг&frasl;награждение","#","БН"];

		//+++ Константы для календаря +++//
		var lt_dnm = ["","Пн","Вт","Ср","Чт","Пт","Сб","Вс"];
		var lt_dnmf = ["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота","воскресенье"];
		var lt_mnm = ["","Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"];
		var lt_mnmr = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'];
		var lt_ml = [0,31,28,31,30,31,30,31,31,30,31,30,31]; // ниже перееопределение длины февраля
		if (p_yy < 1500) {p_yy = p_yy + 1900;} // Opera и иже
		lt_ml[2] = (((p_yy % 4 == 0) && (p_yy % 100 != 0)) || (p_yy % 400 == 0)) ? 29 : 28; // февраль

		//+++ Праздники. Формат: [День, "Стиль CSS", "Комментарий"], ... +++//
		// если праздники отдельно не определены, то по-умолчанию
		if (holidays.length == 0) {
			// !!!!! ВАЖНО нули в начале дат НЕ ПИСАТЬ !!!!!
			holidays[holidays.length] = [     101,"holiday","Новый год!"];
			holidays[holidays.length] = [     106,"holiday","Рождество Христово"];


			holidays[holidays.length] = [     223,"holiday","День защитника Отечества"];
			holidays[holidays.length] = [     308,"holiday","Международный женский день"];
			holidays[holidays.length] = [     424,"holiday","Пасха"];
			holidays[holidays.length] = [     501,"holiday","Праздник Весны и Труда"];
			holidays[holidays.length] = [     502,"holiday","Праздник Весны и Труда"];
			holidays[holidays.length] = [     509,"holiday","День Победы"];
			holidays[holidays.length] = [     612,"holiday","Троица"];
			holidays[holidays.length] = [     613,"holiday","Троица"];
			holidays[holidays.length] = [     628,"holiday","День Конституции"];
			holidays[holidays.length] = [    824,"holiday","День Независимости"];
			holidays[holidays.length] = [    1225,"holiday","Рождество Христово"];

			holidays[holidays.length] = [20111231,"holiday","Укороченный день"];

		}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++ clndr_init (выборка событий для периода вывода календаря)
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		function clndr_init(){
		var i, j, lv_pos;
		var lv_date_from = 0, lv_date_to=0;
		var lv_dom = "", lv_dom2 = "", lv_reg = "";
		var lv_yy1 = 0; 				// год первой даты интервала для дат без года
		var lv_holiday = 0; 				// дата для дат без года
		var lv_result = '';

			if (p_small == 1){
				lv_date_from = p_yy*10000+p_mm*100+1;
				if (p_mm+p_cnt-1>12) {
					lv_date_to = (p_yy+1)*10000+(p_mm+p_cnt-1-12)*100+31;
				} else {
					lv_date_to = p_yy*10000+(p_mm+p_cnt-1)*100+31;
				}
			} else {
				lv_date_from = p_yy*10000+1*100+1;
				lv_date_to = p_yy*10000+12*100+31;
			}

			// games +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			for (i=0;i<games_data.length;i++){
				if ((games_data[i][0]>=lv_date_from) && (games_data[i][0]<=lv_date_to)) {
					lv_pos = clndr_data.length;
					clndr_data[lv_pos]=[0,0,""];
					// дата
					clndr_data[lv_pos][0]=games_data[i][0];
					// тип
					if (games_data[i].length==gc_length_with_type) {
						clndr_data[lv_pos][1]=games_data[i][2];
						j=1;
					} else {
						clndr_data[lv_pos][1]=gc_game_unknown;
						j=0;
					}
					// домен
					lv_dom = (games_data[i][j+2]!="")?"http://"+games_data[i][j+2]+".en.cx/":"/";
					lv_dom2_url = (games_data[i][j+2]!="")?" [<a class='lm' href='http://"+games_data[i][j+2]+".en.cx]'>"+games_data[i][j+2]+".en.cx</a>]":"";
					lv_dom2 = (games_data[i][j+2]!="")?" ["+games_data[i][j+2]+".en.cx]":"";
					// игра зарегистрирована
					lv_reg = (games_data[i][1]>0)?"GameDetails.aspx?gid=" + games_data[i][1]:"";
					// url
					clndr_data[lv_pos][2]='['+game_titles[clndr_data[lv_pos][1]][2]+"] <a class='lm' href='"+lv_dom+lv_reg+"'>"+games_data[i][j+3]+"</a>"+lv_dom2_url;
					// текст
					clndr_data[lv_pos][3]='['+game_titles[clndr_data[lv_pos][1]][2]+"] "+games_data[i][j+3]+""+lv_dom2;
					// url
					clndr_data[lv_pos][4]=lv_dom+lv_reg;

					// не зарегистрированные игры
					if (games_data[i][1] == 0){clndr_data[lv_pos][1]+=gc_game_planning;};
				} // только в периоде
			} // по всем играм

			// holidays ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			lv_yy1 = lv_date_from - (lv_date_from % 10000);
			for (i=0;i<holidays.length;i++){
				if (holidays[i][0]<10000) {
					lv_holiday = holidays[i][0]+lv_yy1;
					while (lv_holiday <= lv_date_to){
						if ((lv_holiday>=lv_date_from) && (lv_holiday<=lv_date_to)) {
							holidays_data[holidays_data.length]=[lv_holiday,holidays[i][1],holidays[i][2],holidays[i][3]];
						}
						lv_holiday+=10000;
					}
				} else if ((holidays[i][0]>=lv_date_from) && (holidays[i][0]<=lv_date_to)) {
					holidays_data[holidays_data.length]=holidays[i];
				}
			}
		}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++ fill_day
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//clndr_data[date,type,text]
		function fill_day(p_date, p_day, today){
			var st_url = "";
			var found_day = 0;
			var out_text="";
			var today_modifier = "t";
			if(today < 0){ today_modifier = "b" }
			if(today > 0){ today_modifier = "b" }
			// игры
			for (i=0;i<clndr_data.length;i++){
				if (clndr_data[i][0] == p_date) {
					 
					if (found_day) {
						url = 'utype.10';
						wa_menu = '';
						for (ii=0;ii<clndr_data.length;ii++){
							if (clndr_data[ii][0] == p_date) {
								if (clndr_data[ii][1] < gc_game_planning) {url = ((today == 0) ? 't' : '' )+'type.10';}
								wa_menu += "<li>" + clndr_data[ii][2] + "</li>";
							}
						}
						url = "http://cdn.endata.cx/data/games/7338/"+url+".gif";
						cell_content = "<ul class='ul-tr'><li><a href='' class='box-tr' onClick='return false;'><img border='0' width='30' height='30' src='"+url+"' title='Несколько игр' alt='&infin;'></a><ul align='left'>" + wa_menu + "</ul></li></ul>";
						cell_class = "game_calendar";
						break;
					} else {
						if (clndr_data[i][1] < gc_game_planning) {
							url = today_modifier +'type.' + (clndr_data[i][1]);
							lv_gtype = game_titles[clndr_data[i][1]][2];
						} else {
							url = ((today == 0) ? today_modifier : today_modifier + 'u' )+'type.' + (clndr_data[i][1] - gc_game_planning);
							lv_gtype = game_titles[clndr_data[i][1] - gc_game_planning][2];
						}
						url = "http://cdn.endata.cx/images/personal/4327/"+url+".gif";
						wa_menu = "<li>" + clndr_data[i][2] + "</li>";
// с меню
//						cell_content = "<ul class='ul-tr'><li><a href='"+clndr_data[i][4]+"' class='box-tr'><img border='0' width='28' height='28' src='"+url+"' title='"+clndr_data[i][3]+"' alt='"+lv_gtype+"'></a><ul align='left'>" + wa_menu + "</ul></li></ul>";
// без меню
						cell_content = "<a href='"+clndr_data[i][4]+"'><img border='0' width='30' height='30' src='"+url+"' title='"+clndr_data[i][3]+"' alt='"+lv_gtype+"'></a>";
						cell_class = "game_calendar";
						found_day = 1;
					}
				}
			}

			// праздники
			lv_day = p_date%100;
			if (found_day == 0) {
				for (i=0;i<holidays_data.length;i++){
					if (holidays_data[i][0] == p_date) {
						//if (holidays_data[i][2] != "") {
		    			//		cell_content = "<a href='http://spb.en.cx/UserDetails.aspx?uid="+holidays_data[i][2]+"' title='"+holidays_data[i][3]+"'>"+lv_day+"</a>";
   						//	cell_class = holidays_data[i][1];
						//} else {
		    				cell_content = "<a href='' onclick='return false;' title='"+holidays_data[i][2]+"' alt='"+holidays_data[i][2]+"'>"+lv_day+"</a>";;
   							cell_class = holidays_data[i][1];
						//}
						found_day = 1;
					}
				}
			}

			if (found_day == 0) {
                		if (today == 0) {
		                       cell_content = lv_day;
		                       cell_class = "currentday";
				} else if (p_day < 6) {
    					cell_content = lv_day;
    					cell_class = "wd";
				} else {
    					cell_content = lv_day;
    					cell_class = "def_holiday";
    				}
			}
			out_text = "<td class='"+cell_class+"'>"+cell_content+"</td>";
			return out_text;
		} //end of fill_day()
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++  fill_table
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		function fill_table(p_mname,p_mlength,p_year,p_month) {
			var lv_today=0;
			var lv_cell=0;
			var lv_day_pos=0;
			var lv_res='';
			lv_res += "<table class='reiting' cellpadding='0' cellspacing='0' border='0' align='center'>";

			var tt_date = new Date(p_year, p_month-1, 1,0,0,0,0);
			// определение дня недели 1 числа месяца
			var start_day = tt_date.getDay();
				if (start_day == 0) {
				start_day = 7;
			}
			var m_length = p_mlength + start_day - 1;
			var col = Math.ceil(m_length / 7);
			var max_col = col * 7;
			lv_res += "<tr><td class='cal_v_l'></td><td class='month' colspan='"+(col)+"' align='center' nowrap><center><nobr>"+p_mname+"</nobr></center></td><td class='cal_v_r'></td></tr>";
			// по дням недели
			for (var y=1;y<=7;y++) {
				// по столбцам
				for (var x=1;x<=col;x++) {
					// первая колонка - названия дней недели
					if (x == 1) { lv_res += "<tr><td class='dw"+y+"'>&nbsp;&nbsp;"+lt_dnm[y]+"</td>"; }
					lv_cell = y + ((x-1) * 7);
					if (lv_cell >= start_day) {
						lv_day_pos = lv_cell - start_day + 1;
					} else {
						lv_day_pos = 0;
					}
					if (lv_cell > m_length) {
						lv_day_pos = 0;
					}
					lv_today = determine_today(p_year, this_year, p_month, this_month, lv_day_pos, this_day);//((p_year == this_year) && (p_month == this_month) && (lv_day_pos == this_day));
					if (lv_day_pos != 0) {
						lv_res += fill_day(p_year*10000+p_month*100+lv_day_pos, y, lv_today);
					} else {
						// пустые дни - до 1 и после последнего
						lv_res += "<td class='cell_basic'>&nbsp;</td>";
					}
					if (x == col) { lv_res += "<td class='cal_r'></td>";}
				} // конец строки
				lv_res += "</tr>";
			} // конец таблицы

			lv_res += "<tr><td class='cal_n_l'></td><td colspan='"+(col)+"' class='cal_n_c'></td><td class='cal_n_r'></td></tr></table>";
			return lv_res;
		} // end of fill_table()


		// если полный год {
		//	вывод в цикле месяцев по текущему году
		// } иначе {
		//	вывод в столбик p_cnt месяцев
		// }
		
		function determine_today(p_year, this_year, p_month, this_month, p_day, this_day) {
			if(this_day < 10) {
				this_day = "0" + this_day;
			}
			if(p_day < 10) {
				p_day = "0" + p_day;
			}
			p_date = "" + p_year + p_month + p_day;
			this_date = "" + this_year + this_month + this_day;
			
			if(p_date == this_date){ return 0;}
			if(p_date < this_date){return -1;}
			else{return 1;}
		}

		// инициализация данных
		clndr_init();
		//today.getYear(),today.getMonth(),today.getDate()
		if (p_small != 1) {
		lv_result += '<table cellspacing="0" cellpadding="0" border="0"><tr><td class="cal_v_l"></td><td class="cal_v_c" align="center">календарь игр</td><td class="cal_v_r"></td></tr><tr><td class="cal_l"></td><td style="background-color: #000000; color:#ffffff;"><nobr>cегодня: <font color="#00ff00">'+today.getDate()+' '+lt_mnmr[today.getMonth()]+', '+lt_dnmf[today.getDay()]+'</font></nobr></td><td class="cal_r"></td></tr><tr><td class="cal_n_l"></td><td class="cal_n_c"></td><td class="cal_n_r"></td></tr></table><br><br>';
		}
		lv_result += "<table cellspacing='0' cellpadding='0' border='0'>";
		if (p_small == 1){
			var m, k = parseInt (p_mm,10);
			lv_result += '<tr>';
			for (m=0; m<p_cnt; m++){
				if (k==13) {
					k = 1; 
					p_yy+=1;
					lt_ml[2] = (((p_yy % 4 == 0) && (p_yy % 100 != 0)) || (p_yy % 400 == 0)) ? 29 : 28; // февраль
				}
				lv_result += '<td><br>'+fill_table(lt_mnm[k], lt_ml[k], p_yy, k)+'</td><td>&nbsp;</td>';
				if (((m+1)%p_col==0) && (m!=p_cnt)){
					lv_result += '</tr><tr>';
				}
				k++;
			}
			lv_result += '</tr>';
		} else {
			var jj = 1;
			for (var m = 1;m<=12;m++){
				if (jj == 1) {
					if (m>1){
						lv_result += "<tr><td><br></td><td><br></td><td><br></td></tr>";
					}
					lv_result += "<tr>";
				}
				lv_result += '<td><br>'+fill_table(lt_mnm[m], lt_ml[m], p_yy, m)+'</td><td>&nbsp;</td>';
				if (jj == 3) {
					lv_result += "</tr>";
					jj = 0;
				}
				jj++;
			}
		}

		lv_result += "</table><br />";
		//lv_result += "<table cellspacing='0' cellpadding='0' border='0' align='center'><tr><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_V_l.png);' width='28' height='28'></td><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_V_c.png);' height='28'></td><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_V_r.png);' width='28' height='28'></td></tr><tr><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_l.png);' width='28'></td><td>";
			if (p_small!=1){
			lv_result += "<table cellspacing='2' cellpadding='0' border='0' style='background-color: #000000; color:#ffffff'>";
			for (var g = 0;g<game_titles.length;g++){
				if (game_titles[g] == undefined) {continue;}
				lv_result += "<tr><td><img src='http://cdn.endata.cx/data/games/16291/type." + g + ".gif' title='"+game_titles[g][0]+"' width='28' height='28' style='border: 1px solid #1B7C00'></td><td>&nbsp;-&nbsp;"+game_titles[g][0]+" <sup>(<a href='"+game_titles[g][1]+"'>?</a>)</sup></td></tr>";
			}


			lv_result += "</table><div style='color: white; text-align: center; font-size: 8pt;'><br />&copy; Разработка: <a href='http://56.en.cx/UserDetails.aspx?uid=19577'>Tucker</a>+<a href='http://spb.en.cx/UserDetails.aspx?uid=61556'>FuckIR</a> Дизайн: <a href='http://spb.en.cx/UserDetails.aspx?uid=32441'>Jimis</a></div>";
			//lv_result += "</td><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_r.png);' width='28'></td></tr><tr><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_n_l.png);' width='28' height='28'></td><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_n_c.png);' height='28'></td><td style='background-image: url(http://cdn.endata.cx/data/games/18840/Kal_n_r.png);' width='28' height='28'></td></tr></table>";
		}
		return lv_result;
	} // end of do_calendar_proc()

	this.do_calendar = function(p_small,p_cnt,p_col,p_color,p_yy,p_mm,p_class){
		var lv_clndr_html = do_calendar_proc(p_small,p_cnt,p_col,p_color,p_yy,p_mm);
		if (p_class!=null){
			$(function(){
				$(p_class).html(lv_clndr_html);
				init_popup();
			});
		} else {
			document.write(lv_clndr_html);
			init_popup();
		}
	}

}

