
/*KONDR*/
d=document;Net={};Page={}; Setting={}; Client={}; Admin={}; Dialog={};IMG={};

//Счетчик рамблера
cnt1 = new Image(); cnt1.src="http://counter.rambler.ru/top100.cnt?319721";

//Заранее загружаемые картинки
//IMG.wait1img=new Image();IMG.wait1img.src='/img/wait1.gif';IMG.wait1='<br><img src="/img/wait1.gif" width="150" height="7">';
IMG.wait1img=new Image();IMG.wait1img.src='/img/wait2.gif';IMG.wait1='<br><img src="/img/wait2.gif" width="40" height="40">';
IMG.wait2img=new Image();IMG.wait2img.src='/img/wait2.gif';IMG.wait2='<br><img src="/img/wait2.gif" width="40" height="40">';
IMG.menu2img=new Image();IMG.menu2img.src='/img/menu1.png';IMG.menu2='<img src="/img/menu2.png" width="176" height="6">';

//Настройки
Page.newWin=true;//Открытие всех внешних ссылок в отдельном окне
Page.ajax=true;//Использование по умолчанию режима web-приложения 
Page.cash=false;//Кеширование загружаемых страниц (при отладке лучше не включать)
Page.StartPage='/html/documents/ustav.html';//Страница по умолчанию (будет выделена в меню, если указан только адрес сайта)

//Настройки форума
FMpart=['Выберите раздел','Срочные сообщения','Документы и правила','Объявления о мероприятиях','Техника, выразительность, философия танца','Поздравления','Обсуждение соревнований','Продажа Б/У вещей','О работе сайта','Прочее','Распечатки результатов и др. файлы','Термины'];//Разделы
FMcolor=['black','#FF0033','#008056','#D9740E','#239A97','#C500AD','#524FAE','#9E9E9E','#8B84BD','#9FAC7E','#0051D8','#007a85'];//Цвет раздела
FMset={formline:15,formwidth:700,TmPerPage:15,FilterPlusOne:false,MyTxtColor:'#00008b',AdvCtrl:false,part:'1,2,3,4,5,6,7,8,9,10,11,12,13,14'};//Пользовательские настройки форума по умолчанию
FMmaxLen=400;//Максимальное число отображаемых символов в теме
FMMaxCmplt=2;//Максимальное количество жалоб для блокировки

onload=function(){
	d.body.style.cursor="wait";
	Page.MainMenu = new MI(1,'Основное меню',null,'',

/// Cодержание меню ///
[
	new MI(0x1,'Документы',null,'Документы ',
	[
		new MI(0x1,'<b>Устав МФСТ</b>','/html/documents/ustav.html','Устав МФСТ'),
		new MI(0x1,'<b>Решения МФСТ</b>','/html/presidium/presidium.html','Решения МФСТ'),
		new MI(0x1,'<b>Правила МФСТ</b>',null,'Правила МФСТ',
		[
			new MI(0x1,'Справочник','/html/documents/referencebook.html','Правила МФСТ (справочник)'),
			new MI(0x1,'Классификация фигур','/html/documents/ClassificationFigure.html','Классификация фигур Британского Танцевального Совета')
		]),
		new MI(0x1,'Московское отделение РТС',null,'Документы Московского отделения РТС',	
		[
			new MI(0x1,'Единая классификация танцоров Московского отделения РТС','/html/documents/ligarts_class.html','Единая классификация танцоров Московского отделения РТС'),
			new MI(0x1,'Положение о рейтинге Московского отделения РТС','/html/documents/ligarts_rate.html','Положение о рейтинге Московского отделения РТС'),
			new MI(0x1,'Положение о судьях по спортивным бальным танцам РТС','/html/documents/ligarts_judge.html','Положение о квалификационных категориях представителей жюри (спортивных судьях) по бальным спортивным танцам Российского Танцевального Союза')
		]),
		new MI(0x1, 'IDU & IDSA', null, 'Документы, касающиеся IDU & IDSA',
		[
			new MI(0x1, 'Договор о сотрудничестве IDSA и IDU', '/html/documents/iduidsa.html', 'Договор о сотрудничестве IDSA и IDU')
		]),
		new MI(0x1,'Танцы в сольном исполнении',null,'Документы, касающиеся танцев в сольном исполнении',	
		[
			new MI(0x1,'Положение о конкурсах танца в сольном исполнении','/html/medallist/medallist.html','Положение о конкурсах танца в сольном исполнении')
		]),
		new MI(0x1,'Современные танцы',null,'Документы, касающиеся современных танцев Хип-Хоп, Диско, Техно, Электрик-буги',	
		[
			new MI(0x1,'Спортивно-танцевальные дисциплины и виды соревнований','/html/documents/hiphop01.html','Спортивно-танцевальные дисциплины и виды соревнований')
		])
	]),
	new MI(0x1,'Регистрация на соревнования, результаты','/html/registration/index.html','Регистрация на соревнования, результаты',null,"Net.Eval('/html/registration/DirAndGetFile.php', 'filetype=true&evalJSfile=regFunction.js');"),
	new MI(0x1,'Календарь соревнований',null,'Календарь соревнований ',
	[
		new MI(0x1, '<b>Предварительный перспективный календарь МФСТ/РТС 2011–2012</b>', '/html/calendar/plan2012.html', 'ПЕРСПЕКТИВНЫЙ КАЛЕНДАРНЫЙ ПЛАН ОФИЦИАЛЬНЫХ ОТКРЫТЫХ ТУРНИРОВ, ИДУЩИХ В ЗАЧЁТ КУБКА СЕЗОНА 2010-2011 г.г. МОСКОВСКОЙ ФЕДЕРАЦИИ СПОРТИВНОГО ТАНЦА МГКС ДСО ПРОФСОЮЗОВ и ГЛАВНЫЕ СОРЕВНОВАНИЯ СЕЗОНА 2010-2011'),
		new MI(0x1,'Календарь 2011-2012',null,'Календарь соревнований 2011-2012',	
		[
			new MI(0x1, 'Февраль', '/html/calendar/0212.html', 'Февраль'),
			new MI(0x1, 'Январь', '/html/calendar/0112.html', 'Январь'),
			new MI(0x1, 'Декабрь', '/html/calendar/1211.html', 'Декабрь'),
			new MI(0x1, 'Ноябрь', '/html/calendar/1111.html', 'Ноябрь'),
			new MI(0x1, 'Октярь', '/html/calendar/1011.html', 'Октярь'),
			new MI(0x1, 'Сентябрь', '/html/calendar/0911.html', 'Сентябрь')
		]),
	]),
	new MI(0x1,'Кубок МФСТ 2012, <br>Рейтинг МО РТС 2012',null,'Кубок МФСТ 2012<br>Рейтинг Московского отделения РТС 2012',	
	[
		new MI(0x1,'<b>Рейтинг Московского отделения РТС </b>',null,'Классификационные группы',	
		[
			new MI(0x1,'Взрослые (21 и старше)','/cup/2012/g101.html','',null,'LoadCup(101,2012)'),
			new MI(0x1,'Молодежь-2 (19-20)','/cup/2012/g102.html','',null,'LoadCup(102,2012)'),
			new MI(0x1,'Молодежь-1 (16-18)','/cup/2012/g103.html','',null,'LoadCup(103,2012)'),
			new MI(0x1,'Юниоры-2 (14-15)','/cup/2012/g104.html','',null,'LoadCup(104,2012)'),
			new MI(0x1,'Юниоры-1 (12-13)','/cup/2012/g105.html','',null,'LoadCup(106,2012)'),
			new MI(0x1,'Ювеналы-2 (10-11)','/cup/2012/g106.html','',null,'LoadCup(105,2012)')
			//new MI(0x1,'Ювеналы-1 (9 и младше)','/cup/2012/g107.html','',null,'LoadCup(107,2012)')
		]),
		new MI(0x1,'<b>Кубок МФСТ Классификационные группы</b>',null,'Классификационные группы',	
		[
			new MI(0x1,'A16 и ст.','/cup/2012/g10.html','',null,'LoadCup(10,2012)'),
			new MI(0x1,'A+B15 и мл.','/cup/2012/g25.html','',null,'LoadCup(25,2012)'),
			new MI(0x1,'B16 и ст.','/cup/2012/g20.html','',null,'LoadCup(20,2012)'),
			new MI(0x1,'C16 и ст.','/cup/2012/g30.html','',null,'LoadCup(30,2012)'),
			new MI(0x1,'C14-15','/cup/2012/g31.html','',null,'LoadCup(31,2012)'),
			new MI(0x1,'C13 и мл.','/cup/2012/g32.html','',null,'LoadCup(32,2012)'),
			new MI(0x1,'D16 и ст.','/cup/2012/g40.html','',null,'LoadCup(40,2012)'),
			new MI(0x1,'D14-15','/cup/2012/g41.html','',null,'LoadCup(41,2012)'),
			new MI(0x1,'D12-13','/cup/2012/g42.html','',null,'LoadCup(42,2012)'),
			new MI(0x1,'D11 и мл.','/cup/2012/g43.html','',null,'LoadCup(43,2012)'),
			new MI(0x1,'E16 и ст.','/cup/2012/g50.html','',null,'LoadCup(50,2012)'),
			new MI(0x1,'E14-15','/cup/2012/g51.html','',null,'LoadCup(51,2012)'),
			new MI(0x1,'E12-13','/cup/2012/g52.html','',null,'LoadCup(52,2012)'),
			new MI(0x1,'E10-11','/cup/2012/g53.html','',null,'LoadCup(53,2012)'),
			new MI(0x1,'E9 и мл.','/cup/2012/g53.html','',null,'LoadCup(54,2012)'),
			new MI(0x1,'N16 и ст.','/cup/2012/g60.html','',null,'LoadCup(60,2012)'),
			new MI(0x1,'N12-15','/cup/2012/g61.html','',null,'LoadCup(61,2012)'),
			new MI(0x1,'N10-11','/cup/2012/g62.html','',null,'LoadCup(62,2012)'),
			new MI(0x1,'N9 и мл.','/cup/2012/g63.html','',null,'LoadCup(63,2012)')
		])
		//*/
	]),
	new MI(0x1,'Медальная система —<br>танцы в сольном исполнении',null,'Медальная система - правила и результаты соревнования',
	[
		new MI(0x1,'Положение о конкурсах танца в сольном исполнении','/html/medallist/medallist.html','Положение о конкурсах танца в сольном исполнении'),	
		new MI(0x1,'<b>Результаты соревнований</b>',null,'Результаты соревнований',	
		[
			new MI(0x1,'2012','/html/medallist/2012.html','Результаты соревнований 2012'),
			new MI(0x1,'2011','/html/medallist/2011.html','Результаты соревнований 2011'),
			new MI(0x1,'2010','/html/medallist/2010.html','Результаты соревнований 2010'),
			new MI(0x1,'2009','/html/medallist/2009.html','Результаты соревнований 2009'),
			new MI(0x1,'2008','/html/medallist/2008.html','Результаты соревнований 2008'),
			new MI(0x1,'2007','/html/medallist/2007.html','Результаты соревнований 2007')
		]),
	]),
	new MI(0x1,'Современные танцы',null,'Документы, касающиеся современных танцев Хип-Хоп, Диско, Техно, Электрик-буги',	
	[
		new MI(0x1,'Спортивно-танцевальные дисциплины и виды соревнований','/html/documents/hiphop01.html','Спортивно-танцевальные дисциплины и виды соревнований')
	]),
	new MI(0x1,'Форум',null,'Форум для активного общения',
	[
		new MI(0x2,'<i><b>Только новое</b></i>','/html/forum/AFnew.html','Форум МФСТ - только новые реплики',null,'FM.Load("time=0&part="+FMset["part"]);'),
		new MI(0x1,'<i><b>Новое за 3 дня</b></i>','/html/forum/AFnew3.html','Форум МФСТ - новые реплики за 3 дня',null,'FM.Load("time=3&part="+FMset["part"]);'),
		new MI(0x1,'<i><b>Новое за 10 дней</b></i>','/html/forum/AFnew10.html','Форум МФСТ - новые реплики за 10 дней',null,'FM.Load("time=10&part="+FMset["part"]);'),
		new MI(0x1,'<i>Новое за месяц</i>','/html/forum/AFnew31.html','Форум МФСТ - новые реплики за месяц',null,'FM.Load("time=31&part="+FMset["part"]);'),
		new MI(0x1,'<i>Новое за 3 месяца</i>','/html/forum/AFnew92.html','Форум МФСТ - новые реплики за 3 месяца',null,'FM.Load("time=92&part="+FMset["part"]);'),
		new MI(0x1,FMpart[1],'/html/forum/AF1.html','Форум МФСТ. '+FMpart[1],null,'FM.Load("part=1");'),
		new MI(0x1,FMpart[2],'/html/forum/AF2.html','Форум МФСТ. '+FMpart[2],null,'FM.Load("part=2");'),
		new MI(0x1,FMpart[3],'/html/forum/AF3.html','Форум МФСТ. '+FMpart[3],null,'FM.Load("part=3");'),
		new MI(0x1,FMpart[4],'/html/forum/AF4.html','Форум МФСТ. '+FMpart[4],null,'FM.Load("part=4");'),
		new MI(0x1,FMpart[5],'/html/forum/AF5.html','Форум МФСТ. '+FMpart[5],null,'FM.Load("part=5");'),
		new MI(0x1,FMpart[6],'/html/forum/AF6.html','Форум МФСТ. '+FMpart[6],null,'FM.Load("part=6");'),
		new MI(0x1,FMpart[7],'/html/forum/AF7.html','Форум МФСТ. '+FMpart[7],null,'FM.Load("part=7");'),
		new MI(0x1,FMpart[8],'/html/forum/AF8.html','Форум МФСТ. '+FMpart[8],null,'FM.Load("part=8");'),
		new MI(0x1,FMpart[10],'/html/forum/AF10.html','Форум МФСТ. '+FMpart[10],null,'FM.Load("part=10");'),
		new MI(0x1,FMpart[11],'/html/forum/AF11.html','Форум МФСТ. '+FMpart[11],null,'FM.Load("part=11");'),
		new MI(0x1,FMpart[9],'/html/forum/AF9.html','Форум МФСТ. '+FMpart[9],null,'FM.Load("part=9");'),
		new MI(0x1,'<i>Реплики за год</i>','/html/forum/AFnew365.html','Форум МФСТ - все реплики',null,'FM.Load("time=365&part="+FMset["part"]);'),
		new MI(0x2,'Настройка форума',null,'Настройка форума для зарегистрированных посетителей',null,'FM.FMsetDialog();')
	]),
	new MI(0x1,'Танцевальные клубы *',null,'Форум',null,'location="/mfst/stk_serch.html"'),
	new MI(0x1,'Поиск партнеров *',null,'Поиск партнеров',
	[
		new MI(0x1,'Партнеры',null,'Партнеры',null,'location="/mfst/serch_partner.html"'),
		new MI(0x1,'Партнерши',null,'Партнерши',null,'location="/mfst/serch_partnerw.html"'),
		new MI(0x1,'Заполнение анкеты',null,'Ноябрь',null,'location="/mfst//serch_form.html"')
	]),
	new MI(0x1,'Кубок МФСТ 2011, <br>Рейтинг МО РТС 2011',null,'Кубок МФСТ 2011<br>Рейтинг Московского отделения РТС',	
	[
		//new MI(0x1,'Положение об открытом рейтинге Московского отделения PTC','/html/documents/ligarts_rate.html','Положение о рейтинге Московского отделения РТС'),
		new MI(0x1,'<b>Рейтинг Московского отделения РТС </b>',null,'Классификационные группы',	
		[
			new MI(0x1,'Взрослые, 21 год и ст','/html/cup11/cup101.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(101,2011)'),
			new MI(0x1,'Молодежь-2, 18-20 лет','/html/cup11/cup102.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(102,2011)'),
			new MI(0x1,'Молодежь-1,16-18 лет','/html/cup11/cup103.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(103,2011)'),
			new MI(0x1,'Юниоры 2, 14-15 лет','/html/cup11/cup104.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(104,2011)'),
			new MI(0x1,'Юниоры 1, 12-13 лет','/html/cup11/cup106.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(106,2011)'),
			new MI(0x1,'Ювеналы 2, 11 лет и мл.','/html/cup11/cup105.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(105,2011)'),
			new MI(0x1,'Ювеналы 1, 9 лет и мл.','/html/cup11/cup107.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(107,2011)')
		]),
		
		//new MI(0x1,'Положение о кубке МФСТ','/html/cup11/index.html','Положение о кубке МФСТ'),
		new MI(0x1,'<b>Кубок МФСТ Классификационные группы</b>',null,'Классификационные группы',	
		[
			new MI(0x1,'А+S 16 лет и ст.','/html/cup11/cup11.html','Малолетнев Юрий Ильич, 237-41-86, maloletnev@mtu-net.ru',null,'CUP.Load(11,2011)'),
			new MI(0x1,'В 16 лет и ст.','/html/cup11/cup31.html','Алексеев Михаил Борисович, 618-30-55, 8-916-528-23-93, danceboy@rambler.ru',null,'CUP.Load(31,2011)'),
			new MI(0x1,'В+А 15 лет и мл.','/html/cup11/cup21.html','Секретов Дмитрий, sekretov.dmitry@yandex.ru',null,'CUP.Load(32,2011)'),
			new MI(0x1,'С 16 лет и ст.','/html/cup11/cup41.html','Сивкович Сергей, Interprize@yandex.ru',null,'CUP.Load(41,2011)'),
			new MI(0x1,'С 14-15 лет','/html/cup11/cup42.html','Сивкович Сергей, Interprize@yandex.ru',null,'CUP.Load(42,2011)'),
			new MI(0x1,'С 13 лет и мл.','/html/cup11/cup43.html','Михайлов Илья Александрович, (495)3937029, (926)5468287, mb-mia@yandex.ru',null,'CUP.Load(43,2011)'),
			new MI(0x1,'D 16 лет и ст.','/html/cup11/cup51.html','Широков Алексей Георгиевич, 932-55-64',null,'CUP.Load(51,2011)'),
			new MI(0x1,'D 14-15 лет','/html/cup11/cup52.html','Титова Анна, annatitovav@mail.ru',null,'CUP.Load(52,2011)'),
			new MI(0x1,'D 12-13 лет','/html/cup11/cup53.html','Ганеева Марина Анатольевна, 583-42-83, ganeeva@rambler.ru',null,'CUP.Load(53,2011)'),
			new MI(0x1,'D 11 лет и мл.','/html/cup11/cup54.html','Алексеев Михаил Борисович, 618-30-55, 8-916-528-23-93, danceboy@rambler.ru',null,'CUP.Load(54,2011)'),
			new MI(0x1,'Е 14 лет и ст.', '/html/cup11/cup61.html','Золотаревский Алексей, zolotoaleks@yandex.ru, 8(903)577-53-74', null, 'CUP.Load(61,2011)'),
			new MI(0x1,'Е 12-15 лет','/html/cup11/cup63.html','Родин Сергей, maestro1@bk.ru',null,'CUP.Load(63,2011)'),
			new MI(0x1,'Е 10-11 лет','/html/cup11/cup64.html','Голубков Виктор, victorgolubkov@gmail.com',null,'CUP.Load(64,2011)'),
			new MI(0x1,'Е 9 лет и мл.','/html/cup11/cup65.html','Тарасов Вячеслав Юрьевич, 614-01-88, supertim2004@mail.ru',null,'CUP.Load(65,2011)'),
			new MI(0x1,'N 14 лет и ст.','/html/cup11/cup71.html','Секретов Дмитрий, sekretov.dmitry@yandex.ru',null,'CUP.Load(72,2011)'),
			new MI(0x1,'N 12-15 лет.','/html/cup11/cup73.html','Секретов Дмитрий, sekretov.dmitry@yandex.ru',null,'CUP.Load(73,2011)'),
			new MI(0x1,'N 10-11 лет','/html/cup11/cup74.html','Секретов Дмитрий, sekretov.dmitry@yandex.ru',null,'CUP.Load(74,2011)'),
			new MI(0x1,'N 9 лет и мл.','/html/cup11/cup75.html','Секретов Дмитрий, sekretov.dmitry@yandex.ru',null,'CUP.Load(75,2011)')
		])
		//*/
	]),
	new MI(0x1,'Кубок МФСТ 2010, <br>Рейтинг МО РТС 2010',null,'Кубок МФСТ 2010<br>Рейтинг Московского отделения РТС',	
	[
		new MI(0x1,'Положение об открытом рейтинге Московского отделения PTC','/html/documents/ligarts_rate.html','Положение о рейтинге Московского отделения РТС'),
		new MI(0x1,'<b>Рейтинг Московского отделения РТС </b>',null,'Классификационные группы',	
		[
			new MI(0x1,'Взрослые, 21 год и ст','/html/cup10/cup101.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(101,2010)'),
			new MI(0x1,'Молодежь-2, 18-20 лет','/html/cup10/cup102.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(102,2010)'),
			new MI(0x1,'Молодежь-1,16-18 лет','/html/cup10/cup103.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(103,2010)'),
			new MI(0x1,'Юниоры 2, 14-15 лет','/html/cup10/cup104.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(104,2010)'),
			new MI(0x1,'Юниоры 1, 12-13 лет','/html/cup10/cup106.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(106,2010)'),
			new MI(0x1,'Ювеналы 2, 11 лет и мл.','/html/cup10/cup105.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(105,2010)'),
			new MI(0x1,'Ювеналы 1, 9 лет и мл.','/html/cup10/cup107.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(107,2010)')
		]),
		new MI(0x1,'Положение о кубке МФСТ','/html/cup10/index.html','Положение о кубке МФСТ'),
		new MI(0x1,'<b>Кубок МФСТ Классификационные группы</b>',null,'Классификационные группы',	
		[
			new MI(0x1,'А+S 16 лет и ст.','/html/cup10/cup11.html','Малолетнев Юрий Ильич, 237-41-86, maloletnev@mtu-net.ru',null,'CUP.Load(11,2010)'),
			new MI(0x1,'В 16 лет и ст.','/html/cup10/cup31.html','Алексеев Михаил Борисович, 618-30-55, 8-916-528-23-93, danceboy@rambler.ru',null,'CUP.Load(31,2010)'),
			new MI(0x1,'В+А 15 лет и мл.','/html/cup10/cup21.html','Михайлов Илья Александрович, (495)3937029, (926)5468287, mb-mia@yandex.ru',null,'CUP.Load(32,2010)'),
			new MI(0x1,'С 16 лет и ст.','/html/cup10/cup41.html','Сивкович Сергей, Interprize@yandex.ru',null,'CUP.Load(41,2010)'),
			new MI(0x1,'С 14-15 лет','/html/cup10/cup42.html','Шароватова Вера Анатольевна, 527-16-27, sharovatova@bk.ru',null,'CUP.Load(42,2010)'),
			new MI(0x1,'С 13 лет и мл.','/html/cup10/cup43.html','Михайлов Илья Александрович, (495)3937029, (926)5468287, mb-mia@yandex.ru',null,'CUP.Load(43,2010)'),
			new MI(0x1,'D 16 лет и ст.','/html/cup10/cup51.html','Широков Алексей Георгиевич, 932-55-64',null,'CUP.Load(51,2010)'),
			new MI(0x1,'D 14-15 лет','/html/cup10/cup52.html','Титова Анна, annatitovav@mail.ru',null,'CUP.Load(52,2010)'),
			new MI(0x1,'D 12-13 лет','/html/cup10/cup53.html','Ганеева Марина Анатольевна, 583-42-83, ganeeva@rambler.ru',null,'CUP.Load(53,2010)'),
			new MI(0x1,'D 11 лет и мл.','/html/cup10/cup54.html','Алексеев Михаил Борисович, 618-30-55, 8-916-528-23-93, danceboy@rambler.ru',null,'CUP.Load(54,2010)'),
			new MI(0x1,'Е 14 лет и ст.', '/html/cup10/cup61.html','Сивкович Сергей, Interprize@yandex.ru', null, 'CUP.Load(61,2010)'),
			new MI(0x1,'Е 12-15 лет','/html/cup10/cup63.html','Родин Сергей, maestro1@bk.ru',null,'CUP.Load(63,2010)'),
			new MI(0x1,'Е 10-11 лет','/html/cup10/cup64.html','Голубков Виктор, victorgolubkov@gmail.com',null,'CUP.Load(64,2010)'),
			new MI(0x1,'Е 9 лет и мл.','/html/cup10/cup65.html','Тарасов Вячеслав Юрьевич, 614-01-88, supertim2004@mail.ru',null,'CUP.Load(65,2010)'),
			new MI(0x1,'N 14 лет и ст.','/html/cup10/cup71.html','Кравец Алена, kravez_alena@mail.ru',null,'CUP.Load(72,2010)'),
			new MI(0x1,'N 12-15 лет.','/html/cup10/cup73.html','Кравец Дмитрий, dmitrii-kravez@mail.ru',null,'CUP.Load(73,2010)'),
			new MI(0x1,'N 10-11 лет','/html/cup10/cup74.html','Кравец Алена, kravez_alena@mail.ru',null,'CUP.Load(74,2010)'),
			new MI(0x1,'N 9 лет и мл.','/html/cup10/cup75.html','Кравец Дмитрий, dmitrii-kravez@mail.ru',null,'CUP.Load(75,2010)')
		]),
	]),
	new MI(0x1,'Кубок МФСТ 2009,<br> Рейтинг МО РТС 2009',null,'Кубок МФСТ 2009<br>Рейтинг Московского отделения РТС',	
	[
		new MI(0x1,'Положение об открытом рейтинге Московского отделения PTC','/html/documents/ligarts_rate.html','Положение о рейтинге Московского отделения РТС'),
		new MI(0x1,'<b>Рейтинг Московского отделения РТС </b>',null,'Классификационные группы',	
		[
			new MI(0x1,'Взрослые, 21 год и ст','/html/cup09/cup101.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(101,2009)'),
			new MI(0x1,'Молодежь-2, 18-20 лет','/html/cup09/cup102.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(102,2009)'),
			new MI(0x1,'Молодежь-1,16-18 лет','/html/cup09/cup103.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(103,2009)'),
			new MI(0x1,'Юниоры 2, 14-15 лет','/html/cup09/cup104.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(104,2009)'),
			new MI(0x1,'Юниоры 1, 12-13 лет','/html/cup09/cup106.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(106,2009)'),
			new MI(0x1,'Ювеналы 2, 11 лет и мл.','/html/cup09/cup105.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(105,2009)'),
			new MI(0x1,'Ювеналы 1, 9 лет и мл.','/html/cup09/cup107.html','Машков Александр Викторович, Машкова Анна Михайловна, 166-47-58',null,'CUP.Load(107,2009)')
		]),
		new MI(0x1,'Положение о кубке МФСТ','/html/cup09/index.html','Положение о кубке МФСТ'),
		new MI(0x1,'<b>Кубок МФСТ Классификационные группы</b>',null,'Классификационные группы',	
		[
			new MI(0x1,'А+S 16 лет и ст.','/html/cup09/cup11.html','Малолетнев Юрий Ильич, 237-41-86, maloletnev@mtu-net.ru',null,'CUP.Load(11,2009)'),
			new MI(0x1,'В 16 лет и ст.','/html/cup09/cup31.html','Алексеев Михаил Борисович, 618-30-55, 8-916-528-23-93, danceboy@rambler.ru',null,'CUP.Load(31,2009)'),
			new MI(0x1,'В+А 15 лет и мл.','/html/cup09/cup21.html','Малолетнев Юрий Ильич, тел. 237-41-86, maloletnev@mtu-net.ru',null,'CUP.Load(21,2009)'),
			new MI(0x1,'С 16 лет и ст.','/html/cup09/cup41.html','Сивкович Сергей, Interprize@yandex.ru',null,'CUP.Load(41,2009)'),
			new MI(0x1,'С 14-15 лет','/html/cup09/cup42.html','Шароватова Вера Анатольевна, 527-16-27, sharovatova@bk.ru',null,'CUP.Load(42,2009)'),
			new MI(0x1,'С 13 лет и мл.','/html/cup09/cup43.html','Михайлов Илья Александрович, (495)3937029, (926)5468287, mb-mia@yandex.ru',null,'CUP.Load(43,2009)'),
			new MI(0x1,'D 16 лет и ст.','/html/cup09/cup51.html','Широков Алексей Георгиевич, 932-55-64',null,'CUP.Load(51,2009)'),
			new MI(0x1,'D 14-15 лет','/html/cup09/cup52.html','Семёнова Валентина Ивановна, 8 (499) 256-69-45, semenov_a_b@mail.ru',null,'CUP.Load(52,2009)'),
			new MI(0x1,'D 12-13 лет','/html/cup09/cup53.html','Ганеева Марина Анатольевна, 583-42-83, ganeeva@rambler.ru',null,'CUP.Load(53,2009)'),
			new MI(0x1,'D 11 лет и мл.','/html/cup09/cup54.html','Золотаревский Алексей, Zolotoaleks@yandex.ru',null,'CUP.Load(54,2009)'),
			new MI(0x1,'Е 14 лет и ст.','/html/cup09/cup61.html','Дина Ходос, master@machaon-dance.ru',null,'CUP.Load(61,2009)'),
			new MI(0x1,'Е 12-15 лет','/html/cup09/cup63.html','Анна Титова, annatitovav@mail.ru',null,'CUP.Load(63,2009)'),
			new MI(0x1,'Е 10-11 лет','/html/cup09/cup64.html','Михайлов Илья Александрович, (495)3937029, (926)5468287, mb-mia@yandex.ru',null,'CUP.Load(64,2009)'),
			new MI(0x1,'Е 9 лет и мл.','/html/cup09/cup65.html','Тарасов Вячеслав Юрьевич, 614-01-88, supertim2004@mail.ru',null,'CUP.Load(65,2009)'),
			new MI(0x1,'N 14 лет и ст.','/html/cup09/cup71.html','Кравец Алена, kravez_alena@mail.ru',null,'CUP.Load(71,2009)'),
			new MI(0x1,'N 12-15 лет,','/html/cup09/cup73.html','Кравец Дмитрий, dmitrii-kravez@mail.ru',null,'CUP.Load(73,2009)'),
			new MI(0x1,'N 10-11 лет','/html/cup09/cup74.html','Кравец Алена, kravez_alena@mail.ru',null,'CUP.Load(74,2009)'),
			new MI(0x1,'N 9 лет и мл.,','/html/cup09/cup75.html','Кравец Дмитрий, dmitrii-kravez@mail.ru',null,'CUP.Load(75,2009)')
		]),
	]),
	new MI(0x1,'* Старый сайт МФСТ',null,'Старый сайт МФСТ',null,'location="/mfst/rate2005.html"'),
	new MI(0x40000000,'Администрирование',null,'Администрирование ',
	[
		new MI(0x40000000,'Запросы к серверу',null,'Запросы к серверу',null,'Dialog.Show("SQL & md5 &  sh1",Admin.DBForm,800);'),
		new MI(0x40000000,'Запуск JavaScript',null,'Запросы к серверу',null,'Dialog.Show("Eval JavaScript",Admin.EvalForm,800);'),
		new MI(0x40000000,'Управление cookies',null,'Управление cookies',null,'Dialog.Show("Cookies",Admin.CookForm,800);d.getElementById(\'ShowCookies\').innerHTML=DBG.ShowProperty(Setting.Cookie);')
	]),
	new MI(0x1,'Необработанные протоколы','/html/raw.html','Необработанные протоколы соревнований')
]);
	
	//раздвижка сайта
	aw=' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ';
	
	PageContent=d.body.innerHTML;
	d.body.innerHTML=
	// ---------- Каркасная таблица ---------------------------------------------------------
	
	'<table cellspacing="1" id="carcas" align="center">'+
	 	'<tr><td colspan="3" id="tdtop"><table cellspacing="0"><tr><td><img src="/img/top1.jpg" align=left></td><td>'+
			'<map name="ptrlogo">'+
				'<area shape="rect" coords="0,25,70,100" target="_blank" href="http://www.sportedu.ru" title="Российский Государственный Университет Физической Культуры Спорта и туризма">'+
				'<area shape="rect" coords="77,25,135,100" target="_blank" href="http://www.rdu.ru" title="Российский танцевальный союз">'+
				'<area shape="rect" coords="145,25,230,100" target="_blank" href="http://www.wdcdance.com/" title="Всемирный совет по танцам">'+
				'<area shape="rect" coords="235,25,323,100" target="_blank" href="http://www.interdanceunion.org" title="Международный танцевальный союз">'+
				'<area shape="rect" coords="327,25,391,100" target="_blank" href="http://www.udsa.com.ua" title="Ассоциация спортивного танца Украины">'+
				'<area shape="rect" coords="396,25,460,100" target="_blank" href="http://idsa.com.ua/edsf/" title="Европейская федерация спортивного танца"></map>'+
				'<img src="/img/top2a.jpg" border=0 align=right width="467" height="129" usemap="#ptrlogo">'+
			'</td></tr></table></td></tr>'+
		'<tr><td id="tdmenu1"></td><td id="tdtreeMenu">&nbsp;</td><td id="tdreg">Аутентификация...</td></tr><tr>'+
			'<td valign="top" id="tdmenu" rowspan=2></td>'+//правая колонка
			'<td valign="top" id="tdtext">&nbsp;</td>'+//текст
			'<td valign="top" id="tdnews" rowspan=2></td>'+//меню
			'<tr><td id="aw">'+aw+aw+aw+'</td></tr>'+//раздвижка сайта
		'</tr><tr><td style="background:white"><a href="http://top100.rambler.ru/top100/"><img src="http://top100-images.rambler.ru/top100/w1.gif" alt="Rambler\'s Top100" width=88 height=31 border=0></a></td><td id="tdlink">tdtop</td><td style="background:white">&nbsp;</td></tr>'+//нижний банер
	'</table>';	

	//------- Дополнительный контроль для меню-----------------
	var mctrl='<label style="display:none" for="AJAX" title="Режим работы web-приложения, \nзагрузка только полезной информации"><input id="AJAX" name="AJAX" type="radio"  onclick="Page.ctrl(this)">Прил.</label>'+
	          '<label style="display:none" title="Режим работы web-сайта, \nполная перезагрузка всей информации\nна каждой странице" for="noAJAX"><input id="noAJAX" name="AJAX" type="radio" onclick="if (confirm(\'Для браузеров: Internet Explorer, Opera, Firefox и др.\\nподдерживающих общепринятые стандарты\\nнаилучший режим работы «web-приложение».\\n\\n В этом режиме наименьший расход трафика\\n и наилучшие функциональные возможности нашего сайта.\\n\\nВы уверены что хотите переключиться в режим «web-сайта»? \')) Page.ctrl(this); else Page.AJAX.checked=true">Сайт</label>'+
	          '<a id="mCollaps" title="Свернуть меню" onclick="Page.ctrl(this);return false" href=""> - </a><a id="mExpand" title="Раскрыть все пункты меню" onclick="Page.ctrl(this);return false" href=""> + </a>';
	// -------------------------------------------------------------------
	//Если контейнер, указанный ниже, не присутствует  - назначить вместо него пустой объект, например, Page.tdnews={};
	
	Page.tdtop=d.getElementById('tdtop');
	Page.tdtext=d.getElementById('tdtext');//Контейнер для текста страницы
	Page.tdmenu=d.getElementById('tdmenu');//Контейнер для иерархического меню
	Page.tdmenu1=d.getElementById('tdmenu1');//Контейнер для элементов управления меню
	Page.tdtreeMenu=d.getElementById('tdtreeMenu');//Контейнер для древовидного меню (в одну строку)
	Page.tdnews=d.getElementById('tdnews');
	Page.tdLink=d.getElementById('tdlink');//Контейнер для прямой ссылки на страницу
	Page.tdreg=d.getElementById('tdreg');//Контейнер регистрации пользователя

	// ------------- Наполнение содержимым  --------------------------
	Page.tdtext.innerHTML=PageContent;
	Page.tdmenu1.innerHTML=mctrl;
	MI.Show(Page.MainMenu,Page.tdmenu);//Создание меню
	// ------------- Реклама  --------------------------
	if (Page.publ) Page.publ.innerHTML=
		//'<a href="http://www.lotosdance.ru/camp/summer-2011.html" target=_blank  onclick="return true"><img width="174" height="264" border="0" src="/rkl/saturn.jpg" ></a><br>'+
		'<a href="http://lotosdance.ru/camp/winter2012.html" target=_blank  onclick="return true"><img width="174" height="264" border="0" src="/rkl/winter.jpg" ></a><br>'
		+'<a href="http://www.excentrika.ru" target=_blank  onclick="return true"><img width="174" height="264" border="0" src="/rkl/excentrika.gif" ></a><br>';
		//'<img src="/rkl/prestig.gif" width="174" height="264" border="1">'+

	
	d.body.style.cursor="auto";	
	d.body.style.display='block';
	d.body.onmouseup=function(){d.body.onmousemove=null}//Для функции перемещения формы
	
	//Создание всплывающего диалогового окна
	Page.dialog=d.createElement('DIV');
	Page.dialog.className ='dialog';
	d.body.appendChild(Page.dialog);
	
	status="Страница сформирована";
	
	//Привязка функций к ссылкам, для перехвата нажатий на любой ссылке
	//MI.SetDefClick();
	
	// Восстановление установок
	Page.AJAX=d.getElementById('AJAX');Page.noAJAX=d.getElementById('noAJAX');
	if (Setting.Cookie['AJAX'])Page.ajax=(Setting.Cookie['AJAX']=='1');
	if (Page.ajax) Page.AJAX.checked=true; else Page.noAJAX.checked=true;
	
	//Запуск загрузки данных пользователя
	if (Client.GetUserRun) Client.GetUserRun();
	
	//Секретный вход для администрирования
	Page.tdmenu1.onmouseover=Admin.Security;
	Page.tdmenu1.onmouseleave=Admin.Security;
	Page.tdmenu1.onkeyup=Admin.Security;
	
	//Запуск скрипта указанного в пункте меню (например, форума)
    if (Page.ActiveMI.func) eval(Page.ActiveMI.func);    
}

//************************************************************************
//****************ФУНКЦИИ ДЛЯ РАБОТЫ МЕНЮ*********************************
//************************************************************************
Page.ActiveMI=null;//Пунк меню активной страницы
Page.NewActiveMI=null;//Пунк меню загружаемой страницы
Page.NewHREF='';//URL новой загружаемой страницы
Page.AllMI=new Array();//Массив всех пунктов меню
Page.TreeMI=null;//Массив древовидного меню (в одну строку)
Page.TimeLoadStart=new Date();//Врямя начала загрузки страницы
Page.BuckUp;//Текст предыдущей страницы (для возврата)
Page.host=d.location.protocol+'//'+d.location.host;//Адрес сайта
Page.publ='';//Рекламма

function MI(status,text,href,title,submenu, func){//Конструктор пунктов меню
	this.status=status;//Определяет видимость пункта меню в зависимости от статуса пользователя
	this.text=text;//Текст пункта меню
	this.func=func;//Функция, выполняемая после загрузки страницы. Если страница не указана, и функция не возвращает true - пункт меню не становится активным.
	this.href=href;//Адрес страницы или null (если должно раскрыться подменю без загрузки страницы)
	this.title=title;//Текст при наведении мыши
	this.activePage=false;// пункт меню активной страницы
	this.BOX=d.createElement('a');//Визуальное представление пункта меню - тег <a>
	this.BOX.href=href;//Установка <a href='href'>
	this.BOX.innerHTML=text;
	this.BOX.title=title;
	this.BOX.onclick=this.Click;//подключение функции, заданной прототипом MI.prototype.Click
	this.BOX.MI=this;//Привязка к тегу <a> объекта MI
	if (!(this.status&1)) this.BOX.style.display='none';//Пункты меню со статусом в котором установлен первый бит видны всем
	this.submenu=submenu;//Массив вложенных элементов меню MI
	if (submenu) this.SBOX=d.createElement('DIV'); else this.SBOX=null;//Контейнер для подменю
	if (d.location.protocol+"//"+d.location.host+href==d.location.href) {this.activePage=true;}//определение активной страницы
	this.parentMI=null;//Родительский элемент меню
	Page.AllMI[Page.AllMI.length]=this;
}

//************ отображение элементов меню в иерархич. порядке - рекурсивная функция ************ 
MI.Show=function(mainMI,box,level){
	var sm; if (!level) level=0;
	for (i in mainMI.submenu){
		sm=mainMI.submenu[i];
		sm.parentMI=mainMI;
		if (sm.activePage) {sm.BOX.className='activeMI';Page.ActiveMI=sm;}
		box.appendChild(sm.BOX);
		if (sm.SBOX) {
			box.appendChild(sm.SBOX);
			MI.Show(sm,sm.SBOX,level+1);
		}
	}
	//Далее рекурсия не выполняется
	if (!level) {
		if (!Page.ActiveMI) {//Поиск активной страницы по умолчанию, когда указан только адресс сайта
				for (i in Page.AllMI) if (Page.AllMI[i].href==Page.StartPage){
				Page.ActiveMI=Page.AllMI[i];
				Page.ActiveMI.activePage=true;
				Page.ActiveMI.BOX.className='activeMI';
			}
			if (!Page.ActiveMI) alert("Ваш браузер сейчас использует файл данных, загруженный и сохраненный\nна Вашем компьютере при предыдущем посещении нашего сайта.\n\nВ данный момент некоторые новые пункты меню у Вас не отображаются.\n\nПожалуйста, нажмите кнопку Обновить в Вашем браузере.");
		}
		MI.ExpandActive(Page.ActiveMI);
		MI.CreateTreeMenu();
		d.title=Page.ActiveMI.title;
		if (Page.tdLink) Page.tdLink.innerHTML=MI.GetLinkThisPage();
		Page.publ=d.createElement('DIV');
		Page.publ.className='publish';
		box.appendChild(Page.publ);
	}
}
//Получение прямой ссылки на активную страницу
MI.GetLinkThisPage=function(){
	return 'Добавить страницу в избранное или копировать ссылку (нажмите правой кнопкой мыши на ссылке) <br>'+
		'<a onclick="return true;" href="'+d.location.protocol+"//"+d.location.host+Page.ActiveMI.href+'">'+
		Page.ActiveMI.title+': '+d.location.protocol+"//"+d.location.host+Page.ActiveMI.href+'</a>';
}
//************ Формирование древовидного меню в контейнере Page.tdtreeMenu ************ 
MI.CreateTreeMenu=function(){
	if (!Page.tdtreeMenu) return;
	Page.tdtreeMenu.innerHTML='';
	var i=0;
	Page.TreeMI=[Page.ActiveMI];
	while (Page.TreeMI[i].parentMI){Page.TreeMI[i+1]=Page.TreeMI[i].parentMI;i++;}
	Page.TreeMI.reverse();
	var a;
	for (i in Page.TreeMI){
		if (i==0) continue;
		a=d.createElement('a');
		a.MI=Page.TreeMI[i];
		a.href=a.MI.href;
		a.innerHTML= " > " +a.MI.text.replace(/<br>/,' ');
		a.onclick=a.MI.Click;
		Page.tdtreeMenu.appendChild(a);
	}
}

//************ Расскрытие контейнеров активного пункта меню ************ 
MI.ExpandActive=function(ActiveMI){
	if (ActiveMI.parentMI) {
		ActiveMI.parentMI.SBOX.style.display="block";
		MI.ExpandActive(ActiveMI.parentMI);
	}
}

//************ Расскрытие или свертывание всех пунктов меню ************ 
MI.ExpandAll=function(mainMI, ExpOrColaps){
	if (!mainMI.submenu) return;
	mainMI.SBOX.style.display=(ExpOrColaps)?"block":"none";
	for (i in mainMI.submenu){
		MI.ExpandAll(mainMI.submenu[i],ExpOrColaps);
	}
}
//Раскрытие пунктов меню в соответствии со статусом пользователя
MI.ExpandStatusItem=function(status){
	for (i in Page.AllMI) if (Page.AllMI[i].status & status) Page.AllMI[i].BOX.style.display='block';
}
//************** Действия при щелчке на пункте меню *************** 
MI.prototype.Click=function (){
	var rnd;
	Page.NewActiveMI=this.MI;
	Page.NewHREF=this.href;
	if (this.MI.href) {//Загрузка HTML
		if (!Page.ajax && !this.MI.submenu) return true;//Обычная загрузка - браузер по умолчанию сделает все сам
		if (Page.NewActiveMI.href.match(/http:/)) return true;//Переход к странице на другом сайте, если указано http:
		//AJAX загрузка

		status='Загрузка страницы '+this.MI.href;
		d.body.style.cursor="wait";
		Page.TimeLoadStart=(new Date()).getTime();
		if (Net.LoadHTML.readyState!=4) {Net.LoadHTML.abort();}
		if (Page.cash) rnd=''; else rnd='?RND='+Math.round(Math.random()*1000);//Чтобы страницы не кешировались - используем случайное число
		Net.LoadHTML.open("GET", Page.NewHREF+rnd, true);
		Net.LoadHTML.onreadystatechange=function(){
			if (Net.LoadHTML.readyState!=4) return;
			if (Net.LoadHTML.status ==200 || Net.LoadHTML.status ==0){
				Page.tdtext.innerHTML=Net.LoadHTML.responseText.split(/<\/*body[^>]*>/i)[1];//*/
				Page.ActiveMI.BOX.className='';
				Page.NewActiveMI.BOX.className='activeMI';
				Page.ActiveMI=Page.NewActiveMI;
				MI.CreateTreeMenu();
				status='Страница загружена за '+((new Date()).getTime()-Page.TimeLoadStart)+' мс';
				d.body.style.cursor="auto";
				d.title=Page.ActiveMI.title;
				if (Page.tdLink) Page.tdLink.innerHTML=MI.GetLinkThisPage();
				//MI.SetDefClick();
				if (Page.NewActiveMI.func) eval(Page.NewActiveMI.func);//Запуск скрипта, указанного в пункте меню для загруженной с помощью AJAX страницы
			}else {
				Page.BuckUp=Page.tdtext.innerHTML;
				Page.tdtext.innerHTML="Извините, запрашиваемая страница<br><b>"+Page.NewHREF+"</b><br> не доступна<br><br><a href='' onclick='MI.RestoreBuckUpPage();return false;'>[ ВЕРНУТЬСЯ НА ПРЕДЫДУЩУЮ СТРАНИЦУ ]</a>";
				d.body.style.cursor="auto";
				status='Страница не найдена';
			}
		}
		Net.LoadHTML.send('');
	}else {
		if (Page.NewActiveMI.func) {
			eval(Page.NewActiveMI.func);//Запуск скрипта, указанного в пункте меню
			Page.ActiveMI.BOX.className='';
			Page.NewActiveMI.BOX.className='activeMI';
			Page.ActiveMI=Page.NewActiveMI;
			MI.CreateTreeMenu();
		}
	}
	if (this.MI.submenu){//Раскрытие подменю
		if (this.MI.SBOX.style.display!="block") this.MI.SBOX.style.display="block";
		else this.MI.SBOX.style.display="none";
	}
	return false;//Запрещаем браузеру прямой переход по нажатой сылке
}
//Восстановление предыдущей страницы
MI.RestoreBuckUpPage=function(){Page.tdtext.innerHTML=Page.BuckUp;}

//Щелчек на ссылке по умолчанию
MI.DefClick=function(e){
	//href=(e)?e.target.href:event.srcElement.href;
	href=e.href;
	if (href.match(Page.host)) {
		for (i in Page.AllMI) if (Page.host+Page.AllMI[i].href==href) {Page.AllMI[i].BOX.onclick();MI.ExpandActive(Page.AllMI[i]);return false}
		d.body.style.cursor="wait";
		Net.Load(href,MI.PageShow);
	}
	else {open(href);}
	return false;
}
MI.PageShow=function(html){Page.tdtext.innerHTML=html;d.body.style.cursor="auto";}
//Привязка фунций onclick к ссылкам на странице, которые не имеют таких функций. Для перехвата любых нажатий на ссылке
//MI.SetDefClick=function(){for (i in d.links) try {if (!d.links[i].onclick && !d.links[i].MI && d.links[i].href.match(/\.html|\.php/i)) d.links[i].onclick="return MI.DefClick(this)";}catch(e){}}

//*** Раскрытие / свертывание меню, установка режима сайт / приложение ***
Page.ctrl=function(obj){
	switch (obj.id)
	{
		case 'AJAX':if (obj.checked) Setting.SetCookie('AJAX',1);Page.ajax=true;break;
		case 'noAJAX':if (obj.checked) Setting.SetCookie('AJAX',0);Page.ajax=false;break;
		case 'mExpand':MI.ExpandAll(Page.MainMenu,true);break;
		case 'mCollaps':MI.ExpandAll(Page.MainMenu,false);break;
	}
}
//************************************************************************
//************      AJAX      ********************************************
//************************************************************************

//Функция для создания объектов XMLHttpRequest для AJAX-загрузки разных данных
Net.newHTTPreq=function(){if (window.XMLHttpRequest)return new XMLHttpRequest();else if (window.ActiveXObject)return new ActiveXObject("Microsoft.XMLHTTP");}
Net.LoadHTML=Net.newHTTPreq();// для загрузки HTML страниц

//Запуск скриптов на сервере, отправка и загрузка информации
//func - это функция func(html_text), которой передается ответ сервера для его обработки
Net.Load=function(href,func,params,metod,contentType){
	//Установка параметров запроса по умоляанию
	if (params && !contentType && !metod) {
		contentType='application/x-www-form-urlencoded';
		metod='POST';
	}else {
		if (!metod) metod='GET';
	}
	if (!params) params='';
	//DBG(href,func,params,metod,contentType);//
	//*******
	var req=Net.newHTTPreq();
	if (req.readyState!=4) {req.abort();}
	req.open(metod, href, true);
	if (contentType) req.setRequestHeader("Content-Type", contentType);
	req.onreadystatechange=function(){
		if (req.readyState!=4) return;
		if (req.status ==200 || req.status ==0){
			func(req.responseText);
		}else {alert('Ошибка загрузки данных \n\nПопробуйте повторить попытку');for (i in d.forms) Dialog.EnableButton(d.forms[i],true);}
		}
		req.send(params);
	}
//Загрузкаи выполнение JS - OnEval и JSscript- функция или скрипт запускаемые после выполнения загруженного кода, 
//dbg - режим отладки - ответ сервера выдается в окне отладки OnEval и JSscript не выполняются
Net.Eval=function(href,params,OnEval,dbg,JSscript){
	var req=Net.newHTTPreq();
	if (req.readyState!=4) {req.abort();}
	req.open('POST', href, true);
	req.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded');
	req.onreadystatechange=function(){
		if (req.readyState!=4) return;
		if (req.status ==200 || req.status ==0){
			if (DBG.servans) DBG(req.responseText);
			if (!dbg) {
				try{eval(req.responseText);}
				catch(e){DBG(e,req.responseText);return}
				if (OnEval) OnEval();
				if (JSscript) eval(JSscript);
			}
			else DBG('Ответ сервера:<br>\n'+req.responseText);
		}else {alert('Ошибка загрузки данных \n\nПопробуйте повторить попытку');for (i in d.forms) Dialog.EnableButton(d.forms[i],true);}
		}
		req.send((params)?params:'');
	}
//************************************************************************
//************      Cookie      ******************************************
//************************************************************************
Setting.Cookie;//Ассоциативный массив Cookie
Setting.GetCookie= function(){
	Setting.Cookie=[];
	var cs = d.cookie.split("; ");
	var pair;
	for (i in cs){
		pair = cs[i].split("=");
		if (pair[1]) Setting.Cookie[pair[0]]=pair[1];
	}
}
Setting.SetCookie=function (sName, sValue, SaveDay){
	if (!SaveDay) SaveDay=3650;//Хранить 3650 дней
	var expires = new Date(((new Date()).getTime()+SaveDay*86400000));//86452000 - примерное число мс в году
	document.cookie = sName + "=" + escape(sValue)+ "; path=/; expires=" + expires.toGMTString() ;
	Setting.GetCookie();
}
Setting.GetCookie();//Чтение всех ранее установленных Cookie
//************************************************************************
//*********************** ДЛЯ ОТЛАДКИ СКРИПТОВ JS и PHP ******************
//************************************************************************
DBG.consol;//Окно для выдачи сообщений 
DBG.html=(Setting.Cookie['DBGhtml'])?true:false;//Вывод в окно textaria - для посмотра тегов
DBG.mode=(Setting.Cookie['DBGmode'])?true:false;//Режим отладки
DBG.servans=(Setting.Cookie['DBGservans'])?true:false;//Отображать ответ сервера в отладочном окне

function DBG(){//Функция выводит любое количество переданных аргументов в окно отладки
	if (!DBG.mode) return;
	if (!DBG.consol || DBG.consol.closed) {
		if (navigator.appName=="Microsoft Internet Explorer") DBG.consol=open('','DBG');
		else DBG.consol=open('','DBG',"top=0");
		DBG.consol.document.title="DBG";
		DBG.consol.moveTo(0,0);DBG.consol.resizeTo(500,700);
		DBG.consol.document.body.style.fontFamily='Arial';
		DBG.count=1;
	}
	if (DBG.consol.closed) {
		if (navigator.appName=="Microsoft Internet Explorer") DBG.consol=open('','DBG');
		else DBG.consol=open('','DBG',"top=0");
	}
	DBG.consol.focus();
	mes=''; for (var i = 0; i < arguments.length; i++) mes+=" -> "+arguments[i]+"<br>";
	if (DBG.html) {
		mes=''; for (var i = 0; i < arguments.length; i++) mes+=" -> "+arguments[i]+"<br>";
		DBG.consol.document.body.innerHTML+=(DBG.count++)+'. '+mes+'<hr>';
	}
	else {
		mes=''; for (var i = 0; i < arguments.length; i++) mes+=arguments[i]+"\n";
		DBG.consol.document.body.innerHTML+='<textarea style="width:100%" rows=10>'+mes+'</textarea>';
	}
}
//Вывод всех свойств объекта
DBG.ShowProperty=function(obj,separ,showfunc){
    if (!separ) separ='<br>';pr=''; for (i in obj) if (typeof(obj[i])!='function' || showfunc) pr+=i+' = '+obj[i]+separ; return pr;
}
//************************************************************************
//************************** АДМИНИСТИРОВАНИЕ   **************************
//************************************************************************
Admin.consol;//Окно для выдачи данных
//Форма для управления cookies
Admin.CookForm='<form >Cookies<input id=CookFormName type=text value=UserCook> = <input id=CookFormVal type=text ><br /> хранить дней: <input id=CookFormDay type=text value=-1><br /><br />'+
	'<input id="btnSetCoocies" type="button" value="Установить cookies" onclick="Setting.SetCookie(this.form.CookFormName.value,this.form.CookFormVal.value,this.form.CookFormDay.value);d.getElementById(\'ShowCookies\').innerHTML=DBG.ShowProperty(Setting.Cookie)"/>'+
	'<input id="btnShowCoocies" type="button" value="Показать все coocies" onclick="Setting.GetCookie();d.getElementById(\'ShowCookies\').innerHTML=DBG.ShowProperty(Setting.Cookie);"/><br />'+
	'<input id="DBGmode" type="checkbox" '+((DBG.mode)?'checked=checked':'')+' onclick="DBG.mode=this.checked;Setting.SetCookie(\'DBGmode\',\'true\',(this.checked)?100:-1);Setting.GetCookie();d.getElementById(\'ShowCookies\').innerHTML=DBG.ShowProperty(Setting.Cookie);"><label for=DBGmode>DBGmode</label>'+
	'<input id="DBGhtml" type="checkbox" '+((DBG.html)?'checked=checked':'')+' onclick="DBG.html=this.checked;Setting.SetCookie(\'DBGhtml\',\'true\',(this.checked)?100:-1);Setting.GetCookie();d.getElementById(\'ShowCookies\').innerHTML=DBG.ShowProperty(Setting.Cookie);"><label for=DBGhtml>DBGhtml</label>'+
	'<input id="DBGservans" type="checkbox" '+((DBG.servans)?'checked=checked':'')+' onclick="DBG.servans=this.checked;Setting.SetCookie(\'DBGservans\',\'true\',(this.checked)?100:-1);Setting.GetCookie();d.getElementById(\'ShowCookies\').innerHTML=DBG.ShowProperty(Setting.Cookie);"><label for=DBGservans>DBGservans</label>'+
	'</form></div><hr /><div id="ShowCookies"></div>';
//Форма для запросов к серверу
Admin.DBForm='<a href="/php/logs/User.txt" target=_blank>Показать User.Log</a><form onsubmit="return false">Пароль <input id="AdminDBFormPW" type="password" /><input type=button value="Вычислить MD5" onclick="d.getElementById(\'AdminDBFormAction\').value=\'MD5\';Admin.StartServerQuery(this);"/><br /><br />Команда <br />'+
	'<textarea id="AdminDBFormSQL" cols="40" rows="6" style="width:95%">SELECT idvip, email, name, sname, nike, city, status, complaint, id, FROM_UNIXTIME(firstvis) as first, FROM_UNIXTIME(lastvis) as last, visits FROM user_reg ORDER BY idvip LIMIT 200</textarea><br /><input id="AdminDBFormAction" type="hidden" /><br />'+
	//'<input type=button value="Вычислить MD5" onclick="d.getElementById(\'AdminDBFormAction\').value=\'MD5\';Admin.StartServerQuery(this);"/>'+
	'<input type=button value="Выполнить SQL"  onclick="d.getElementById(\'AdminDBFormAction\').value=\'SQL\';Admin.StartServerQuery(this)"/>'+
	'<input type=button value="Передать и вернуть параметры"  onclick="d.getElementById(\'AdminDBFormAction\').value=\'ShowParams\';Admin.StartServerQuery(this)"/>'+
	'</form><div id="AdminDBAnsver"><span style="color:blue;font-weight: 900">Примеры команд:</span> <BR>SELECT * FROM user_reg ORDER BY nike LIMIT 5<BR>INSERT user_reg SET email=\'mail@yandex.ru\', name=\'Петя\'<BR>UPDATE user_reg SET status=0 WHERE idvip=10<BR>DELETE FROM user_reg WHERE idvip=10<br><span style="color:darkgreen;font-weight:900">Поля таблицы user_reg</span><br>idvip, email, name, sname, nike, city, pwh, pwhnew, passwdate, passwerr, forumset, userset, status, complaint, id, firstvis, lastvis, visits</div>';
Admin.EvalForm= 'Выполнение JavaScript<br><form onsubmit="return false">'+
	'<textarea id="AdminDBFormEval" cols="40" rows="6" style="width:95%">AdminConsol.innerHTML=DBG.ShowProperty(User)+"<hr>"+DBG.ShowProperty(User.Cook);\nAdminConsol.innerHTML+=document.location;\n//DBG(DBG.ShowProperty(User));</textarea><br />'+
	'<input type=button value="Выполнить скрипт"  onclick="try{AdminConsol=d.getElementById(\'AdminConsolDiv\');eval(this.form[\'AdminDBFormEval\'].value)}catch(e){AdminConsol.innerHTML=\'Ошибка в скрипте:\'+e;}"/>'+
	'</form><br>AdminConsol.innerHTML:<br><hr><div id="AdminConsolDiv"></div>';DBG.ShowProperty
	'</form>';
//Запрос к серверу и отображение данных в отдельном окне
Admin.StartServerQuery=function(btn){
	if (!Admin.consol || Admin.consol.closed){
		if (navigator.appName=="Microsoft Internet Explorer") Admin.consol=open('','Admin');
		else Admin.consol=open('','Admin',"top=0");
		Admin.consol.moveTo(0,0);Admin.consol.resizeTo(1000,1000);
		Admin.consol.document.title=d.getElementById('AdminDBFormSQL').value;
		Admin.consol.document.body.style.fontFamily='Arial';
	}else Admin.consol.focus();
	Net.Load('/php/admin/query.php',function(ServerAnsver){Admin.consol.document.body.innerHTML=ServerAnsver;},Dialog.ReadFormData(btn.form));
}
Admin.OnMouse=false;
Admin.pw=[];
Admin.Security=function(e){
	if (!e) e=event;
	switch (e.type){
		case 'mouseleave':Admin.OnMouse=false;Admin.pw=[];break;
		case 'mouseover':if (e.ctrlKey && e.shiftLeft && e.altKey) Admin.OnMouse=true;break;
		case 'keyup':if (Admin.OnMouse)Admin.pw.push(e.keyCode);if (Admin.pw.length==4) if (Admin.pw.join('')=='101102102105') MI.ExpandStatusItem(0x4fffffff);break;
	}
}

//************************************************************************
//*************************** РАБОТА С ФОРМАМИ  **************************
//************************************************************************
Dialog.NewWindow=function(Title,href,FrameName){//Создает новое окно
	var WinName;
	if (!FrameName) FrameName="FRM"+Math.round(Math.random()*1000);
	if (navigator.appName=="Microsoft Internet Explorer") WinName=open('',FrameName);
	else WinName=open('',FrameName);
	WinName.document.title=Title;
	WinName.document.body.style.fontFamily='Arial';
	DBG.count=1;
	if (href) WinName.document.location=href;
	WinName.focus();
}
Dialog.id;//Необязательный идентифокатор объекта формы
Dialog.onClose;//Необязательная функция при закрытии формы
Dialog.Show=function(title,html,Width,Height,Top,Left,id,onClose){
	Dialog.id=(id)?id:null;
	Dialog.onClose=(onClose)?onClose:null;
	if (!Width) Width=400;
	if (!Top) Top=150+d.documentElement.scrollTop;
	if (!Left) Left=(d.body.clientWidth-Width)/2;
	with (Page.dialog.style){
		top=Top+'px';
		width=Width+'px';
		left=Left+'px';
		if (Height) height=Height+'px';
		else height='auto';
		display='block';
	}
	Page.dialog.innerHTML='<table class="header" onmousedown="Dialog.StartMove(event)" ondrag="return false"><tr><td>'+title+'</td><td width="80px"><a href="" onclick="if(Dialog.onClose)Dialog.onClose(Dialog.id);Dialog.onClose=null;Dialog.id=null;Dialog.Hide();return false">ЗАКРЫТЬ</a></td></tr></table>'+html;
}
//Закрытие панели диалога
Dialog.Hide=function(){Page.dialog.style.display='none';}

//Закрытие панели диалога
Dialog.Restore=function(){Page.dialog.style.display='block';}

//Чтение значений из элементов формы для отправки
Dialog.ReadFormData=function(frm){
	var arr=[];
	for (i=0;i< frm.elements.length; i++){
		if (frm.elements[i].type) {
			switch (frm.elements[i].type){
				case 'textarea':arr.push(frm.elements[i].id+'='+frm.elements[i].value.EncodeRU());continue;
				case 'password':arr.push(frm.elements[i].id+'='+frm.elements[i].value.EncodeRU());continue;
				case 'text':arr.push(frm.elements[i].id+'='+frm.elements[i].value.EncodeRU());continue;
				case 'hidden':arr.push(frm.elements[i].id+'='+frm.elements[i].value.EncodeRU());continue;
				case 'radio':if (frm.elements[i].checked) arr.push(frm.elements[i].name+'='+frm.elements[i].value);continue;
				case 'checkbox':arr.push(frm.elements[i].id+'='+((frm.elements[i].checked)?frm.elements[i].value:''));continue;
				case 'select-one':arr.push(frm.elements[i].id+'='+frm.elements[i].value);continue;
			}
		}
	}
	return arr.join('&');
}
//Чтение значений из элементов формы для проверки
Dialog.TestFormData = function(frm) {
	var test = [];
	for (i = 0; i < frm.elements.length; i++) if (frm.elements[i].type && frm.elements[i].type != 'button') {
		if (frm.elements[i].type != 'checkbox') test[frm.elements[i].id] = frm.elements[i].value;
		else test[frm.elements[i].id] = (frm.elements[i].checked) ? frm.elements[i].value : '';
	}
	return test;
}
//Очистка полей формы
Dialog.ClearFormData=function(frm){
	for (i=0;i< frm.elements.length; i++) if (frm.elements[i].type) if (frm.elements[i].type=='text' || frm.elements[i].type=='password') frm.elements[i].value='';
}
// Включение / выключение кнопок формы
Dialog.EnableButton=function(frm,Enable){
	if (frm.elements) for (i=0;i< frm.elements.length; i++) if (frm.elements[i].type && frm.elements[i].type=='button') frm.elements[i].disabled=!Enable;
}
//Перемещение формы - 2 функции
Dialog.StartMove=function(e){
	mf.x=e.clientX;
	mf.y=e.clientY;
	mf.fx=parseInt(Page.dialog.style.left);
	mf.fy=parseInt(Page.dialog.style.top);
	d.body.onmousemove=mf;
	return false
}
function mf(e){
	if (!e) e=event;
	Page.dialog.style.left=(mf.fx+e.clientX-mf.x)+'px';
	Page.dialog.style.top=(mf.fy+e.clientY-mf.y)+'px';
}

//************************************************************************
//*************************** РАБОТА СО СТРОКАМИ  ************************
//************************************************************************
// Кодирование русских букв и спец символов - таблица и функция
CT={А:'%C0',Б:'%C1',В:'%C2',Г:'%C3',Д:'%C4',Е:'%C5',Ж:'%C6',З:'%C7',И:'%C8',Й:'%C9',К:'%CA',Л:'%CB',М:'%CC',Н:'%CD',О:'%CE',П:'%CF',Р:'%D0',С:'%D1',Т:'%D2',У:'%D3',Ф:'%D4',Х:'%D5',Ц:'%D6',Ч:'%D7',Ш:'%D8',Щ:'%D9',Ъ:'%DA',Ы:'%DB',Ь:'%DC',Э:'%DD',Ю:'%DE',Я:'%DF','Ё':'%A8',
	а:'%E0',б:'%E1',в:'%E2',г:'%E3',д:'%E4',е:'%E5',ж:'%E6',з:'%E7',и:'%E8',й:'%E9',к:'%EA',л:'%EB',м:'%EC',н:'%ED',о:'%EE',п:'%EF',р:'%F0',с:'%F1',т:'%F2',у:'%F3',ф:'%F4',х:'%F5',ц:'%F6',ч:'%F7',ш:'%F8',щ:'%F9',ъ:'%FA',ы:'%FB',ь:'%FC',э:'%FD',ю:'%FE',я:'%FF','ё':'%B8',
	1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',0:'0','@':'@','.':'.','-':'-','*':'*',
	A:'A',B:'B',C:'C',D:'D',E:'E',F:'F',G:'G',H:'H',I:'I',J:'J',K:'K',L:'L',M:'M',N:'N',O:'O',P:'P',Q:'Q',R:'R',S:'S',T:'T',U:'U',V:'V',W:'W',X:'X',Y:'Y',Z:'Z',
	a:'a',b:'b',c:'c',d:'d',e:'e',f:'f',g:'g',h:'h',i:'i',j:'j',k:'k',l:'l',m:'m',n:'n',o:'o',p:'p',q:'q',r:'r',s:'s',t:'t',u:'u',v:'v',w:'w',x:'x',y:'y',z:'z',
	' ':'%20','_':'_','"':'%22','=':'%3D','…':'%85','•':'%95','–':'%96','—':'%97','`':'%60','~':'%7E','!':'%21','#':'%23','$':'%24','%':'%25','^':'%5E','&':'%26','(':'%28',')':'%29','+':'%2B','{':'%7B','}':'%7D',
	'«':'%AB','»':'%BB','[':'%5B',']':'%5D',';':'%3B',':':'%3A',"'":'%27','?':'%3F',',':'%2C','<':'%3C','>':'%3E','№':'%B9','\\':'%5C','/':'%2F','|':'%7C','\n':'%0A','\r':'%0D'}
String.prototype.EncodeRU=function(){L=this.length;A=[];for (var i = 0; i < L; i++){ch=this.charAt(i);A[i]=(CT[ch])?CT[ch]:'';}return A.join('');}

//Типовые шаблоны для проверки
rex={};
rex.Mail=/^[A-z0-9_\.\-]+@[A-z0-9_\.\-]+\.[A-z]{1,3} *$/;//Шаблон для проверки электронного адреса и других данных
rex.Nick=/^[А-яA-zёЁ][А-яA-z \d]{2,28}[А-яA-z\d] *$/;
rex.Word=/^[А-яA-zёЁ \-]{2,} *$/;
rex.Digit=/^[\d]{1,} *$/;

//Декодирование строки данных в ассоциативный массив
String.prototype.SplitData=function(sep,eqv){
	eqv=(eqv)?eqv:'=';
	tmp=this.split((sep)?sep:'&');
	a=[];
	for (i in tmp) {p=tmp[i].split(eqv); a[p[0]]=p[1];}
	return a;
}
//Встречаются ли в тексте сразу все RgEx из массива RgExArr
String.prototype.WordsExist=function(RgExArr){for (var i in RgExArr) if (this.search(RgExArr[i])<0) return false; return true;}

//************************************************************************
//************************ УЧЕТ ПОЛЬЗОВАТЕЛЕЙ   **************************
//************************************************************************

var User=new Object;//Информация о пользователе
User.Cook=null;//Информация о пользователе сохраняемая на компьютере клиента
User.ready=false;//Получена ли информация о пользователе
User.h24=true;//Незарегистрированный пользователь, которому менее 24 часов

//******* Получение информации о пользователе и персональных новостей ********
Client.GetUserRun=function(){Net.Load('/php/GetUser.php',Client.GetUser,'dref='+((d.referrer.length>0)?decodeURI(d.referrer).EncodeRU():'0'))}
Client.GetUser=function(ServerAnsver) {
	//DBG(ServerAnsver);
	data=ServerAnsver.split('|');//Разделение двух частей информации - 1. Инфо о пользователе 2. Новости
	try {
		eval(data[0]);//Извлечение данных о пользователе в формате JSON, например, User.Cook={Name:"Олег Романов", Email:"rrr@uyt.tu"}
		u=[];for (i in User.Cook) u.push(i+'_'+User.Cook[i]);Setting.SetCookie('UserCook',u.join('@')); //Запись информации User в cookies
		Setting.SetCookie('UserHash',UserHash);//Хеш данных пользователя для защиты от подмены
	}catch(e){
		Page.tdtreeMenu.innerHTML='Ошибка при загрузке данных пользователя. Возможно на сайте проводятся технические работы.';
	}
	if (User.VIP) {
		MI.ExpandStatusItem(User.status);
		if (User.status>0) Page.tdreg.innerHTML=User.nike;else Page.tdreg.innerHTML=User.nike+'<br>ЗАБЛОКИРОВАН';
		if (User.forumset.length>0) eval(User.forumset);
	}
	else {
		User.status=1;
		User.nike='User-'+User.id;
		Page.tdreg.innerHTML='<a href="" onclick="Client.Registration();return false">Войти / зарегистрироваться</a>';
	}
	//Page.tdnews.innerHTML='<br><small>Предыдущий визит:<br>'+(new Date(User.previs*1000)).toLocaleString()+
	//    '<br><br>Текущий визит:<br>'+(new Date(User.lastvis*1000)).toLocaleString()+'<br></small>'+data[1];
	Page.tdnews.innerHTML=data[1];
	//MI.SetDefClick();
	User.ready=true;
	User.h24=((User.lastvis-User.firstvis)<86400);
}

//********** Вход на сайт **********
Client.StartUserEnter=function(btn){
	v=Dialog.TestFormData(btn.form);//Получаем ассоциативный масссив данных из формы для проверки
	mesBox=d.getElementById('FormMessag');
	var error='';
	if (!v['RegForm_login'].match(rex.Mail)) error+='Неверно задан адрес электронной почты<br>';
	if (v['RegForm_pw'].length<7) error+='Ошибка в пароле<br>';
	if (error.length) {mesBox.innerHTML=error;mesBox.style.color='red';}
	else {
		Dialog.EnableButton(btn.form,false);
		mesBox.innerHTML='Отправка данных на сервер...'+IMG.wait1;
		mesBox.style.color='black';
		Net.Load('/php/UserEnter.php',Client.UserEnterAnsver,Dialog.ReadFormData(btn.form));
	}
}
Client.UserEnterAnsver=function(ServerAnsver){//Разбор ответа сервера о входе пользователя
	try{
		data=ServerAnsver.split('|');
		eval(data[0]);//Извлечение данных о пользователе в формате JSON, например, User={Name:"Олег Романов", Email:"rrr@uyt.tu"}
		mesbox=d.getElementById('FormMessag');
		mesbox.innerHTML=data[1];
		if (User.VIP){
			Setting.SetCookie('login', d.getElementById('RegForm_login').value);
			MI.ExpandStatusItem(User.status);
			Page.tdreg.innerHTML=User.nike;
			Dialog.Hide();
			Page.tdnews.innerHTML='<br><small>Предыдущий визит:<br>'+(new Date(User.previs*1000)).toLocaleString()+
			'<br><br>Текущий визит:<br>'+(new Date(User.lastvis*1000)).toLocaleString()+'<br></small>';
		}else{
			d.getElementById('RegFormBtnEnter').disabled=false;
		}
	}catch(e){status='Ошибка при разборе ответа сервера';}
		User.ready=true;
	}

//*************** Регистрация пользователей   *******************
	
//Форма для регистрации пользователя
Client.Registration=function(){Dialog.Show('Регистрация на сайте '+d.location.host.toUpperCase(),Client.RegUserForm,640);}
Client.RegUserFormComment='<span style="color:dimgray">* Ник используется вместо имени для анонимного общения.<br>Email требуется вводить строчными буквами (не прописными!)'+
     '<br>** Ввод контрольных цифр необходим для защиты от программ-роботов, которые вводят данные в автоматическом режиме. Цифры появятся после ввода Email.'+
     '<hr><b>Если Вы забыли пароль</b>, введите Ваш Email и контрольные цифры,<br>нажмите кнопку «Выслать пароль».<span>';
Client.RegUserForm=
	'<form id="RegForm" onsubmit="return false"><div style="width: 620px" id="UserRegForm">'+
	    '<fieldset style="width: 285px; height: 220px;"><legend>Вы не зарегистрированы или забыли пароль</legend>'+
	        '<label for="RegForm_email">Email: </label><input maxlength="64" type=text id="RegForm_email" style="width: 150px"  '+
	            'onkeydown="this.style.color=\'black\'" onblur="imgS=d.getElementById(\'imgSCode\');if (this.value.match(rex.Mail)) {imgS.src=\'/php/SeqCode.php?mail=\'+this.value+\'&rnd=\'+Math.round(Math.random()*1000)}else this.style.color=\'red\'"/><br>'+
	        '<label for="RegForm_nike">Ник*: </label><input maxlength="32" type=text id="RegForm_nike" style="width: 150px" /><br>'+
	        '<label for="RegForm_name">Имя: </label><input maxlength="32" type=text id="RegForm_name" style="width: 150px" /><br>'+
	        '<label for="RegForm_sname">Фамилия: </label><input maxlength="32" type=text id="RegForm_sname" style="width: 150px" /><br>'+
	        '<label for="RegForm_city">Город: </label><input maxlength="32" type=text id="RegForm_city" style="width: 150px" /><br>'+
	        '<label for="RegForm_SeqCode">Введите цифры**: <img id=imgSCode maxlength="6" style="vertical-align: bottom" src="/php/SeqCode.png"></label><input type=text id="RegForm_SeqCode" style="width: 50px"/><br>'+
	        '<input type=button value="Выслать пароль" id="RegFormBtnSend" onclick="Client.StartUserReg(this)" onblur="d.getElementById(\'FormMessag\').innerHTML=Client.RegUserFormComment">'+
	    '</fieldset> '+
	    '<fieldset style="width: 285px; height: 220px;"><legend>Вход на сайт</legend>'+
	        '<label for="RegForm_login">Email: </label><input maxlength="64" type=text id="RegForm_login" style="width: 150px" value=\''+((Setting.Cookie['login'])?Setting.Cookie['login']:'')+'\' /><br>'+
	        '<label for="RegForm_pw">Пароль: </label><input maxlength="16" type=password id="RegForm_pw" style="width: 150px" /><br>'+
	        '<label for="RegForm_savetime">Хранить пароль: </label><select id="RegForm_savetime" style="width: 150px"/><option value="0">Не хранить</option><option value="1">День</option><option value="7">Неделю</option><option value="31">Месяц</option><option value="365">Год</option><option value="3650">10 лет</option></select><br>'+
	        '<input type=button value="Войти" id="RegFormBtnEnter" onclick="Client.StartUserEnter(this)" onblur="d.getElementById(\'FormMessag\').innerHTML=Client.RegUserFormComment">'+
	    '</fieldset> '+
	 '<br><br><div id="FormMessag" style="color : dimgray; font-size: 11px; text-align : center">'+Client.RegUserFormComment+'</div></div></form>';

//********** Проверка и отправка данных для регистрации //**********
Client.StartUserReg=function(btn){
	v=Dialog.TestFormData(btn.form);//Получаем ассоциативный масссив данных из формы
	mesBox=d.getElementById('FormMessag');
	var error='';
	if (!v['RegForm_email'].match(rex.Mail)) error+='Неверно задан адрес электронной почты<br>';
	if (v['RegForm_nike'].length>0 && !v['RegForm_nike'].match(rex.Nick)) error+='Недопустимые символы в Нике, длина менее 4 или более 30 символов, лишние пробелы в Нике<br>';
	if (!v['RegForm_SeqCode'].match(rex.Digit)) error+='Неверно введены контрольные цифры<br>';
	if (v['RegForm_name'].length>0 && !v['RegForm_name'].match(rex.Word)) error+='Недопустимые символы в Имени или длина менее 2 символов<br>';
	if (v['RegForm_sname'].length>0 && !v['RegForm_sname'].match(rex.Word)) error+='Недопустимые символы в Фамилии или длина менее 2 символов<br>';
	if (v['RegForm_city'].length>0 && !v['RegForm_city'].match(rex.Word)) error+='Недопустимые символы в названии Города или длина менее 2 символов<br>';

	if (error.length) {mesBox.innerHTML=error;mesBox.style.color='red';}
	else {
		Dialog.EnableButton(btn.form,false);
		mesBox.innerHTML='Отправка данных на сервер...'+IMG.wait1;
		mesBox.style.color='black';
		Net.Load('/php/RegUser.php',Client.UserRegAnsver,Dialog.ReadFormData(btn.form));
	}
}
Client.UserRegAnsver=function(ServerAnsver) {//Разбор ответа сервера о регистрации
	try{
		frm=d.getElementById('RegForm');
		data=ServerAnsver.split('|');
		d.getElementById('FormMessag').innerHTML=data[1];
		if (data[0] && data[0]=='OK') {
			d.getElementById('RegFormBtnEnter').disabled=false;
			email=d.getElementById('RegForm_email').value;
			Dialog.ClearFormData(frm);
			d.getElementById('RegForm_login').value=email;
			Setting.SetCookie('login', email);
		}
		else Dialog.EnableButton(frm,true);
	}catch(e){status='Ошибка при разборе ответа сервера'}
	}

//---------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------- Форум -----------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
FMs=[];//Массив сообщений форума FM загружаемый с сервера
FMAll={};//Ассоциативный массив содержащий все сообщения в виде свойств (для ускорения доступа)
FMroot=[];//Массив тем форума FM (корневые реплики)

//Конструктор сообщений форума
function FM(idfm,idvip,part,teme,parid,status,cmplt,text,fmtime,nike,pubtime,voit1,voit0){
	this.idfm=idfm;//id
	this.idvip=idvip;//id пользователя
	this.part=part;//Раздел форума
	this.teme=teme;//idfm темы

	this.parid=parid;//родительское idfm, для корневого = 0
	this.parfm=null;//ссыдка на родительский объект FM, для корневого = null
	this.fmArr=new Array();//Массив вложенных объектов FM (ответы на данное сообщение)
	this.fmArrAll=new Array();//Массив всех вложенных объектов FM (все обсуждение) для корневой реплики

	this.status=status;//статус сообщения
	this.cmplt=cmplt;//жалобы
	this.voit1=voit1;//количество голосов ЗА
	this.voit0=voit0;//количество голосов ПРОТИВ

	this.text=text;
	this.info='';
	this.pubtime=pubtime;
	this.fmtime=fmtime;
	this.chdtime=fmtime;//Время обновления для темы
	this.nike=nike;
	this.my=(User.idvip==this.idvip);

	this.level=0;
	this.fmnew=0;//Степень новизны 0,1,2
	this.newchild=0;//Новых сообщений (только для корневой реплики)

	this.hidden=false;
	this.block=false;

	this.fmc=false;//Раскрыт ли контейнер fmc вложенных реплик
	this.lng=this.parid==0 && this.text.length>=FMmaxLen;//Если длина корневой реплики превышает FMmaxLen
	this.showlng=!this.lng;//Показана ли корневая реплика во всю длину true=показана false=укорочена
}
FM.search="";FM.rgExp=null;FM.UseRegExp=false;//строка поиска
FM.nikes={};//Ассоциативный массив всех ников  
FM.nikesList=[];//массив всех ников
FM.nikesSelected="";//Выбранный пользователем ник автора
FM.nikesOption=function(){//Вывод списка ников в виде <option value="nike">nike (count)</option>
	var opt='<option value="" style="color:gray">Все пользователи</option>';
	if (FM.nikes[User.nike]) opt+='<option style="color:blue" value="'+User.nike+'">'+User.nike+' = '+FM.nikes[User.nike]+'</option>';
	for (var i in FM.nikesList){opt+='<option value="'+FM.nikesList[i]+'" '+((FM.nikesList[i]==FM.nikesSelected)?'selected':'')+'>'+FM.nikesList[i]+' = '+FM.nikes[FM.nikesList[i]]+'</option>';}
	return opt;
}
FM.NewCount=0;//Количество новых сообщений
FM.PageNum=1;//Текущая страница
FM.NCol=['white','#ffffe0','#e3fff3'];//Разделение новых и старых сообщений цветом
FM.LCol=['white','red','blue','cyan','black','yellow','green','magenta'];//Разделение уровней цветом
FM.prototype.LevColor=function(){return FM.LCol[this.level%FM.LCol.length];}
FM.prototype.ShowText=function(){
	if (FM.rgExp) {return this.info + this.text.replace(FM.rgExp, "<u class='s'>$1</u>")};
	return this.info+((this.showlng)?this.text:this.text.substr(0,FMmaxLen)+'.....<b style="color:red"> ==></b></li></ul></h4>');
}
FM.prototype.chdtimeStr=function(){return (new Date(this.chdtime*1000)).toLocaleString();}
FM.prototype.timeStr=function(){return (new Date(this.fmtime*1000)).toLocaleString();}
//Права пользователя в зависимости от статуса
FM.URights={'del':0x40008000,'edit':0x40008000,'publ':0x40004000,'blk':0x40002000,'exp':0x00000001,'expAll':0x00000001,'expNew':0x00000001,
		'expBranch':0x00000001,'ansver':0x00000001,'nike':0x00000001,'lng':0x00000001,'cmplt':0x00000002,'admin':0x00000002}
FM.prototype.Update=function(){
	if (!this.hidden){var b=d.getElementById('fmbox'+this.idfm);if (b) b.innerHTML=this.toHTML(true);}
	else {var b=d.getElementById('fmbox'+this.teme); if (b) b.innerHTML=FMAll[this.teme].toHTML(true);}
}

//Раскрываем ответы к реплике
FM.prototype.exp=function(){var fmc=!this.fmc;for (var i in this.fmArr) if (this.fmArr[i].hidden) {fmc=true;this.fmArr[i].hidden=false;} this.fmc=fmc; for (var i in this.fmArr) this.fmArr[i].fmc=false;}
//Раскрываем/закрываем все реплики в теме
FM.prototype.expAll=function(action){this.fmc=action;for (var i in this.fmArrAll) {this.fmArrAll[i].hidden=false;this.fmArrAll[i].fmc=action;}}
//Раскрываем скрытые реплики в ветви 
FM.prototype.expBranch=function(){var prt=this.parfm;while (prt){prt.hidden=false;prt=prt.parfm;}}
//Скрываем старые темы, открываем новые
FM.HideOld=function(){for (var i in FMroot) if (FMroot[i].newchild>0) {FMroot[i].hidden=false;FMroot[i].expNew();} else FMroot[i].hidden=true;}
//Восстанавливает исходный режим отображения
FM.Restore=function(){for (var i in FMroot) {FMroot[i].fmc=false;FMroot[i].hidden=false; }FM.rgExp=null;FM.search="";}
//"Укорачивание" длинной реплики
FM.prototype.TrimTextSwitch=function(btn){
	this.showlng=!this.showlng;
	box=d.getElementById('fmt'+this.idfm);if (box) box.innerHTML=this.ShowText();
	btn.innerHTML=(this.showlng)?'ТОЛЬКО НАЧАЛО':'ВЕСЬ ТЕКСТ';
}
//Скрываем старые реплики, отмечаем новые 
FM.prototype.expNew=function(){
	this.expAll(true);
	for (var i in this.fmArrAll) this.fmArrAll[i].hidden=(this.fmArrAll[i].fmnew==0)
	if (FMset['FilterPlusOne']) for (var i in this.fmArrAll) if (!this.fmArrAll[i].hidden) this.fmArrAll[i].parfm.hidden=false;
}

//Поиск по форуму
FM.StartSerch=function(search){
	if (search.length>=1){
		FM.search=search;
		if (FM.UseRegExp) {
			try{FM.rgExp=new RegExp("("+search+")","gi");}catch(e){alert("Ошибка при выражении RegExp");return;}
			for (var i in FMroot) FMroot[i].expByRegExp(FM.rgExp);
		}else{
			str=search.replace(/[^A-zА-я0-9]+/g,"|").replace(/^\||\|$/g,"");
			try{FM.rgExp=new RegExp("("+str+")","gi");}catch(e){alert("Ошибка в выражении для поиска");return;}
			//alert(str);
			words=str.split("|");
			RgExArr=[];
			//alert(words.length);
			//alert(words);
			for (var j in words){RgExArr[j]=new RegExp(words[j],"i");}
			//alert ("Плавный — означает, что не должно быть рывков, т.е. резких изменений скорости движения.".WordsExist(RgExArr));
			//return;
			for (var i in FMroot) FMroot[i].expByRgExArr(RgExArr);
		}
		FM.PageNum=1;FM.Show();
	}else{FM.search="";FM.rgExp=null;FM.Restore();FM.PageNum=1;FM.Show();}
	}
FM.prototype.expByRegExp=function(rgExp){
	this.hidden=this.text.search(rgExp)<0;
	for (var i in this.fmArrAll) {this.fmArrAll[i].fmc=true;var t=this.fmArrAll[i].text.search(rgExp)>0;if (t) {this.hidden=false; this.fmc=true;} this.fmArrAll[i].hidden=!t;}
	if (FMset['FilterPlusOne']) for (var i in this.fmArrAll) if (!this.fmArrAll[i].hidden) this.fmArrAll[i].parfm.hidden=false;
}
FM.prototype.expByRgExArr=function(RgExArr){
	this.hidden=!this.text.WordsExist(RgExArr);
	for (var i in this.fmArrAll) {this.fmArrAll[i].fmc=true;var t=this.fmArrAll[i].text.WordsExist(RgExArr);if (t) {this.hidden=false; this.fmc=true;} this.fmArrAll[i].hidden=!t;}
	if (FMset['FilterPlusOne']) for (var i in this.fmArrAll) if (!this.fmArrAll[i].hidden) this.fmArrAll[i].parfm.hidden=false;	
}

//Скрываем чужие реплики, открываем свои
FM.FilterByNike=function(nike){for (i in FMroot) FMroot[i].expByNike((nike)?nike:null);}

FM.prototype.expByNike=function(nike){
	if (!User.VIP && !nike) nike=User.nike;
	this.hidden=true;
	if (nike) {
		for (var i in this.fmArrAll) {this.fmArrAll[i].fmc=true;if (!(this.fmArrAll[i].hidden=(this.fmArrAll[i].nike!=nike))) {this.hidden=false; this.fmc=true;}}
		if (this.nike==nike) this.hidden=false;
	}
	else {
		for (var i in this.fmArrAll) {this.fmArrAll[i].fmc=true;if (!(this.fmArrAll[i].hidden=(this.fmArrAll[i].idvip!=User.idvip))) {this.hidden=false; this.fmc=true;}}
		if (this.idvip==User.idvip) this.hidden=false;
	}
	if (FMset['FilterPlusOne']) {for (var i in this.fmArrAll)  if (!this.fmArrAll[i].hidden) this.fmArrAll[i].parfm.hidden=false;}
}
FM.Admin=function(nike){for (i in FMroot) FMroot[i].expAdmin();}
FM.prototype.expAdmin=function(){
	this.hidden=true;
	for (var i in this.fmArrAll) {this.fmArrAll[i].fmc=true;if (!(this.fmArrAll[i].hidden=(this.fmArrAll[i].status>=255 && this.fmArrAll[i].cmplt==0))) {this.hidden=false; this.fmc=true;}}
	if (this.status<255 || this.cmplt>0) this.hidden=false;
	if (FMset['FilterPlusOne']) {for (var i in this.fmArrAll)  if (!this.fmArrAll[i].hidden) this.fmArrAll[i].parfm.hidden=false;}
}
//**************  КНОПКИ ДЛЯ РЕПЛИК и РЕАКЦИЯ НА ИХ НАЖАТИЕ ********************
FM.btnDemo=false;//Если true-кнопки будут неактивны 
FM.btnPre=false;//Если true-только кнопка предыдущая будет активна
FM.btn=function(cnd,lbl,id,action,cls){if (FM.btnPre&&(action!='showPre')) return ''; else return (cnd)?'<a href="" '+((cls)?'class='+cls:'')+' onclick="'+((FM.btnDemo)?'':'FM.btnClick('+id+',event,\''+action+'\',this);')+'return false"><b>'+lbl+'</b></a>':'';}

//Нажатие кнопок
FM.btnClick=function(id,e,type,a){
	waitmes='<div style="padding:15px;background:white">Передача данных...<br>'+IMG.wait1+'<br><a href="" onclick="Dialog.Hide();return false">Закрыть</a></div>';
	var fm=FMAll[id];
	switch (type){
		case 'ansver':FM.ShowMesForm(id,e);break;
		case 'lng':fm.TrimTextSwitch(a);break;
		case 'exp':fm.exp();fm.Update();break;
		case 'expAll':fm.expAll(!fm.fmc);if (fm.lng) fm.showlng=fm.fmc;fm.Update();break;
		case 'expNew':fm.expNew();fm.Update();break;
		case 'expBranch':fm.expBranch();FMAll[fm.teme].Update();break;
		case 'showPre':
		if (fm.parfm.parfm)fm.parfm.parfm.hidden=true;
		fm.parfm.hidden=false;
		fm.parfm.fmc=true;
		for (var i in fm.parfm.fmArr) {fm.parfm.fmArr[i].hidden=true;fm.parfm.fmArr[i].fmc=false}
		fm.fmc=true;
		fm.hidden=false;
		FM.btnPre=true;Dialog.Show('Предыдущая реплика','<DIV class=ForumBOX>'+fm.parfm.toHTML(false)+'</DIV>',800,null,e.clientY+d.documentElement.scrollTop-50);FM.btnPre=false;
		FMAll[fm.teme].hidden=false;
		break;
		case 'admin':FM.MenuDialog(fm,e);break;
		case 'cmplt0':if (confirm('Очистить счетчик жалоб у № R'+fm.idfm+' / '+fm.level+'?')) {FM.Action('action=cmplt0','idfm='+fm.idfm);Page.dialog.innerHTML=waitmes;}break;
		case 'del':if (confirm('Вы действительно хотите удалить реплику № R'+fm.idfm+' / '+fm.level+'?')) {FM.Action('action=del','idfm='+fm.idfm);Page.dialog.innerHTML=waitmes;}break;
		case 'blk':if (confirm('Вы действительно хотите заблокировать реплику № R'+fm.idfm+' / '+fm.level+'?')) {FM.Action('action=blk','idfm='+fm.idfm);Page.dialog.innerHTML=waitmes;}break;
		case 'edt':FM.ShowMesForm(fm.parid,e,fm.idfm,FM.TextForEdit(fm.text));break;
		case 'publ':a.innerHTML='ЗАГРУЗКА...';a.onclick=function(){alert("Запрос уже отправлен, ожидаем ответа...");return false;};FM.Action('action=publ','idfm='+fm.idfm,'teme='+fm.teme);break;
		case 'cmplt':if (confirm('Вы считаете что реплика № R'+fm.idfm+' / '+fm.level+' нарушает правила форума и должна быть заблокирована и удалена?')) {FM.Action('action=cmplt','idfm='+fm.idfm);Page.dialog.innerHTML=waitmes;}break;
		case 'voit1':if (confirm('ВНИМАНИЕ! Не допускаюттся виды голосования:\n\nСравнение личностей (судей, танцоров, и т.п.)\nСравнение танцевальных клубов\n"Кто поедет на соревнование или мероприятие МФСТ" \n\n\nВы действительно хотите прогролосовать «ЗА»?')) {FM.Action('action=voit1','idfm='+fm.idfm);Page.dialog.innerHTML=waitmes;}break;
		case 'voit0':if (confirm('ВНИМАНИЕ! Не допускаюттся виды голосования:\n\nСравнение личностей (судей, танцоров, и т.п.)\nСравнение танцевальных клубов\n"Кто поедет на соревнование или мероприятие МФСТ" \n\n\nВы действительно хотите прогролосовать «ПРОТИВ»?')) {FM.Action('action=voit0','idfm='+fm.idfm);Page.dialog.innerHTML=waitmes;}break;
	}
}
FM.TextForEdit=function(txt){
	txt=txt.replace(/<b>/g,"!");
	txt=txt.replace(/<br>/g,"\n");
	txt=txt.replace(/<p class=cit>/g,"\n\n&gt;");
	txt=txt.replace(/<li>/g,"-");
	txt=txt.replace(/<h.>/g,"%");

	txt=txt.replace(/<\/li><p>/g,"\n\n");
	txt=txt.replace(/<\/li>/g,"\n");
	txt=txt.replace(/<\/p>/g,"\n\n");
	txt=txt.replace(/<\/h.>/g,"\n\n");

	txt=txt.replace(/<[^>]+>/g,"");
	txt=txt.replace(/\n{2,}/g,"\n\n");

	return txt;
}
FM.Action=function(){
	var arr=[];for (var i = 0; i < arguments.length; i++) arr.push(arguments[i]);
	Net.Eval('/php/forum/forumAction.php',arr.join('&'));
}

//**************  ОТОБРАЖЕНИЕ РЕПЛИК   ************************
//Если контейнер fmc открыт - происходит рекурсия для вложенных реплик.
//Если сообщение hidden - возвращаются НТМЛ вложений
FM.prototype.toHTML=function(rpl){//rpl=true происходит замена внутреннего содержого реплики и вложенных реплик
	if (!this.parfm && this.hidden) return '';//Скрытая тема
	var ans=this.fmArr.length>0;//al=есть ли вложенные ответы
	var noh=0;//Счетчик не hidden вложений
	var ar=[];if (this.fmc && ans) {for (var i in this.fmArr) {ar.push(this.fmArr[i].toHTML(false));if (!this.fmArr[i].hidden)noh++;}}//Рекурсия вложенных FM
	//var NSty;switch (this.status){case 0:NSty=FM.USty[0];case 1:NSty=FM.USty[0];break;case 255:NSty=FM.USty[1];break;default:NSty=FM.USty[2];break;}//Стиль ника
	var NSty;if (this.idvip<0) NSty='low'; else if (this.idvip>1000) NSty='norm'; else NSty='vip';
	if (this.hidden) return ar.join('');
	else return ((rpl)?'':'<DIV class=fmbox id=fmbox'+this.idfm+'>')+
	((!this.parfm)?'<DIV class=fmh style="background:'+FMcolor[this.part]+'">'+
	FM.btn(ans,(this.fmc)?'СКРЫТЬ ВСЁ':'РАСКРЫТЬ ВСЁ',this.idfm,'expAll')+
	FM.btn(ans && this.newchild>0,'НОВЫХ РЕПЛИК '+this.newchild,this.idfm,'expNew')+
	FMpart[this.part]+' &nbsp; &nbsp; Реплик: '+this.fmArrAll.length+' &nbsp; Обновлено: '+this.chdtimeStr()+
	'</DIV>':((this.parfm.hidden)?'<DIV class=fmh>'+FM.btn(true,'РАСКРЫТЬ',this.idfm,'expBranch')+FM.btn(true,'ПРЕДЫДУЩАЯ',this.idfm,'showPre')+'При отборе нужных Вам реплик, некоторые предыдущие были скрыты</DIV>':''))+
	'<DIV style="'+((this.my)?'color:'+FMset['MyTxtColor']+';':'')+'background:'+FM.NCol[this.fmnew]+'" class=fmt id=fmt'+this.idfm+'>'+
	((this.voit0>0)?'<span class=voit0'+((this.voit0>1)?'1':'')+'>голосовало<br><big> '+this.voit0+'</big><br>«ПРОТИВ»</span>':'')+
	((this.voit1>0)?'<span class=voit1'+((this.voit1>2)?'1':'')+'>голосовало<br><big> '+this.voit1+'</big><br>«ЗА»</span>':'')+
	this.ShowText()+
	'</DIV><DIV class=fmf>'+
	FM.btn((this.status<255)&&(User.status&FM.URights['publ']),'ОПУБЛИКОВАТЬ',this.idfm,'publ')+
	FM.btn(this.status>1,'ОТВЕТИТЬ',this.idfm,'ansver')+
	FM.btn(ans&&(this.status>0),(noh==this.fmArr.length)?'СКРЫТЬ ОТВЕТЫ':'ОТВЕТОВ: '+noh+' из '+this.fmArr.length,this.idfm,'exp',(noh>0&&noh<this.fmArr.length)?'warn':null)+
	FM.btn(this.lng,(this.showlng)?'ТОЛЬКО НАЧАЛО':'ВЕСЬ ТЕКСТ',this.idfm,'lng')+
	((this.cmplt>0 && (User.status&FM.URights['publ']))?' <span style="background:red;color:white">&nbsp; '+this.cmplt+' &nbsp;</span> ':'')+
	FM.btn(User.VIP,'&nbsp;МЕНЮ&nbsp;',this.idfm,'admin','menu')+
	'<nobr>№ R'+this.idfm+' / '+this.level+'</nobr> '+
	' <span class='+NSty+'> &nbsp;'+this.nike+'&nbsp; </span> &nbsp; '+
	' '+this.timeStr()+
	'</DIV>'+
	'<DIV style="border-left-color:'+this.LevColor()+';display:'+((this.fmc && ans)?'block':'none')+'" class=fmc>'+ar.join('')+'</DIV>'+
	((rpl)?'':'</DIV>');
}
//Создает НTML страницы форума
FM.Show=function(OrderBy){
	if (OrderBy){switch (OrderBy)
		{
			case 'part':FMroot.sort(function(x,y){if (!x && !y) return 0; if (!x) return -1; if (!y) return -1; if (x.part<y.part) return -1; else if (x.part===y.part) return 0; else return 1;});break;
			case 'rate':FMroot.sort(function(x,y){if (!x && !y) return 0; if (!x) return -1; if (!y) return -1; if (x.fmArrAll.length<y.fmArrAll.length) return 1; else if (x.fmArrAll.length===y.fmArrAll.length) return 0; else return -1;});break;
			case 'tnews':FMroot.sort(function(x,y){if (!x && !y) return 0; if (!x) return -1; if (!y) return -1; if (x.fmtime<y.fmtime) return 1; else if (x.fmtime===y.fmtime) return 0; else return -1;});break;
			case 'rnews':FMroot.sort(function(x,y){if (!x && !y) return 0; if (!x) return -1; if (!y) return -1; if (x.chdtime<y.chdtime) return 1; else if (x.chdtime===y.chdtime) return 0; else return -1;});break;
		}
	}
	count=FMset['TmPerPage'];
	page=FM.PageNum-1;//Отсчет с первой страницы а не с нулевой
	var FMvsbl=[]; for (i in FMroot) if (!FMroot[i].hidden) FMvsbl.push(FMroot[i]);//Создание массива не скрытых тем
	//Заголовок страницы
	pages=FMvsbl.length/count;//Количество страниц
	links=[];//Ссылки на страницы
	for (i=1; i<= pages+1;i++) links.push((i==page+1)?'<a style="background:#c5bdb9" >'+i+'</a>':'<a href="" onclick="FM.PageNum='+i+';FM.Show();return false;">'+i+'</a>');
	//Содержание страницы
	var arr=[];
	for (i=page*count; i< (page+1)*count;i++) if (FMvsbl[i]) arr.push(FMvsbl[i].toHTML(false));
	box=d.getElementById("ForumBOX");
	if (box) box.innerHTML= '<div class=pagesset>'+
		'<select onchange="FM.nikesSelected=this.value;(this.value.length!=0)?FM.FilterByNike(this.value):FM.Restore();FM.PageNum=1;FM.Show();" style="width: 240px">'+FM.nikesOption()+'</select>'+
		'<input id="FMSearch" type="text" style="width: 240px" value="'+FM.search+'"><input id="FMSearchStart" type="button" value="Найти" onclick="FM.StartSerch(d.getElementById(\'FMSearch\').value)" title="Поиск только в загруженных репликах"><br>'+
		((!User.h24)?'<a href="" onclick="FM.HideOld();FM.PageNum=1;FM.Show();return false">ОТОБРАТЬ ТОЛЬКО НОВОЕ</a> ':'')+
		((User.status&FM.URights['publ'])?'<a href="" onclick="FM.PageNum=1;FM.Admin();FM.Show();return false">ADMIN</a> ':'')+
		'<a href="" onclick="FM.PageNum=1;FM.Restore();FM.Show();return false">ВОССТАНОВИТЬ</a>'+
		'<a href="" onclick="FMset[\'AdvCtrl\']=!FMset[\'AdvCtrl\'];FM.Show.AdvCtrl;d.getElementById(\'FMAdvacedControl\').style.display=((FMset[\'AdvCtrl\'])?\'block\':\'none\');return false">ДОПОЛНИТЕЛЬНО ...</a>'+
		'<a href="" onclick="FM.ShowMesForm(0);return false" style="font-weight:bolder;font-size:11px;background: #ffdead"> &nbsp; НОВАЯ ТЕМА или ВОПРОС  &nbsp;</a>'+
		'<br><input id="FMHFilterPlusOne" class="pssetcheck" type="checkbox" '+((FMset['FilterPlusOne'])?'checked=checked':'')+' onclick="FMset[\'FilterPlusOne\']=this.checked"><label for=FMHFilterPlusOne> При отборе, для каждой искомой реплики показывать одну предыдущую.</label><br>'+
		'<div id=FMAdvacedControl style="display:'+((FMset['AdvCtrl'])?'block':'none')+'">'+
			'Сортировать по:' +
			'<a href="" onclick="FM.PageNum=1;FM.Show(\'rate\');return false;">ПОПУЛЯРНОСТИ</a> '+
			'<a href="" onclick="FM.PageNum=1;FM.Show(\'part\');return false;">РАЗДЕЛАМ</a> '+
			'<a href="" onclick="FM.PageNum=1;FM.Show(\'rnews\');return false;">НОВИЗНЕ РЕПЛИК В ТЕМЕ</a> '+
			'<a href="" onclick="FM.PageNum=1;FM.Show(\'tnews\');return false;">НОВИЗНЕ ТЕМ (По умолчанию)</a> '+
			'<hr style="color:white">Тем на странице: '+
			'<a href="" onclick="FM.PageNum=1;FMset[\'TmPerPage\']=1;FM.Show();return false;">1</a> '+
			'<a href="" onclick="FM.PageNum=1;FMset[\'TmPerPage\']=5;FM.Show();return false;">5</a> '+
			'<a href="" onclick="FM.PageNum=1;FMset[\'TmPerPage\']=15;FM.Show();return false;">15</a> '+
			'<a href="" onclick="FM.PageNum=1;FMset[\'TmPerPage\']=30;FM.Show();return false;">30</a> '+
			'<a href="" onclick="FM.PageNum=1;FMset[\'TmPerPage\']=50;FM.Show();return false;">100</a> '+
			//'Отобрано тем: '+FMvsbl.length+' из '+FMroot.length+' Новых реплик: '+FM.NewCount+
			'<input id="FMUseRegExp" class="pssetcheck" type="checkbox" onclick="FM.UseRegExp=this.checked " '+((FM.UseRegExp)?'checked=checked>':'>')+'<label for=FMUseRegExp> Использовать при поиске RegExp</label>'+
			((User.VIP)?'. <a href="" onclick="FM.FMsetDialog();return false;"> НАСТРОЙКА ФОРУМА..</a> ':'')+
		'</div>'+
		'<span style="color:white;font-size:12px;">'+' Активных пользователей: '+FM.nikesList.length+'  &nbsp; Отобрано тем: '+FMvsbl.length+' из '+FMroot.length+'  &nbsp; Новых реплик: '+FM.NewCount+'</span><br>'+
		'</div><div class=pages>'+links.join('')+'</div>'+arr.join('')+'<div class=pages>'+links.join('')+
		'</div><div style="height:600px;background: transparent;border:none"></div>';
}


//**************  ДИАЛОГИ и КОНТЕКСТНОЕ МЕНЮ   ************************
FM.MenuDialog=function(fm,e){
	Dialog.Show('№ R'+fm.idfm+' / '+fm.level,
		FM.btn(fm.parfm,'Голосовать «ЗА»...',fm.idfm,'voit1','cmenu')+
		FM.btn(fm.parfm,'Голосовать «ПРОТИВ»...',fm.idfm,'voit0','cmenu')+
		FM.btn(!fm.my&&User.VIP,'Реплика нарушает правила форума?...',fm.idfm,'cmplt','cmenu')+
		FM.btn((fm.my||(User.status&FM.URights['del']))&&(fm.fmArr.length==0),'Удалить...',fm.idfm,'del','cmenu')+
		FM.btn(fm.cmplt>0&&(User.status&FM.URights['del']),'Сброс жалоб',fm.idfm,'cmplt0','cmenu')+
		FM.btn((fm.my&&(fm.fmArr.length==0))||(User.status&FM.URights['edit']),'Изменить',fm.idfm,'edt','cmenu')+
		//FM.btn((fm.status==0)&&!fm.my&&(User.status&FM.URights['publ']),'Опубликовать',this.idfm,'publ','cmenu')+
		FM.btn(fm.my||(User.status&FM.URights['blk']),'Заблокировать',fm.idfm,'blk','cmenu'),
		280,null,e.clientY+d.documentElement.scrollTop,e.clientX,fm.idfm);
}
//Настройка форума
FM.FMsetDialog=function(){
	Dialog.Show('Настройка форума',
	'<form id="FMsetForm" onsubmit="return false">'+
		'<fieldset style="text-align:left;margin:10px"><legend>Форма для ввода сообщения</legend>'+
			'<input maxlength="4" type=text id="FMsetForm_width" value='+FMset['formwidth']+' style="width: 40px"><label for="FMsetForm_width">Ширина формы от 400 до 1000 px</label><br> '+
			'<input maxlength="4" type=text id="FMsetForm_row"  value='+FMset['formline']+' style="width: 40px"><label for="FMsetForm_row">Высота формы от 5 до 50 строк</label><br> '+
		'</fieldset><br>'+
		'<fieldset  style="text-align:left;margin:10px"><legend>Разделы при загрузке новых реплик</legend>'+
			FM.FMsetPartHTML()+
		'</fieldset>'+
			'<br>Также будут сохранены другие текущие настройки: число тем на странице и т.п.<br><br>'+
			'<input type=button value="Сохранить" id="FMsetForm_btn" onclick="FM.FMsetSave(this)">'+
		'</form><div id="FormMessag" style="color:dimgray; font-size: 11px; text-align:center;"></div>',400);
}

FM.FMsetPartHTML=function(){
	var part=FMset['part'].split(',');
	var chk=[];for (i in part) chk[parseInt(part[i])]=true;
	var arr=[]; for (var i in FMpart) if (i>0)
	arr.push('<input type=checkbox '+((chk[i])?'checked=checked':'')+' id="FMsetForm_part'+i+'">'+
	'<label for="FMsetForm_part'+i+'">'+FMpart[i]+'</label>');
	return arr.join('<br>')
}
FM.FMsetSave=function(btn){
	v=Dialog.TestFormData(btn.form);//Получаем ассоциативный масссив данных из формы для проверки
	mesBox=d.getElementById('FormMessag');
	var error='';
	var x=parseInt(v['FMsetForm_width']); if (!(x>300 && x<1200)) error+=x+typeof(x)+' Неправильное значение ширины формы<br>';
	var y=parseInt(v['FMsetForm_row']); if (!(y>3 && y<51)) error+=y+typeof(y)+' Неправильное значение высоты формы<br>';
	if (error.length) {mesBox.innerHTML=error;mesBox.style.color='red';}
	else {
		Dialog.EnableButton(btn.form,false);
		mesBox.innerHTML='Отправка данных на сервер...<br>'+IMG.wait1;
		mesBox.style.color='black';
		Net.Eval('/php/forum/forumAction.php',Dialog.ReadFormData(btn.form)+
			'&FMsetFilterPlusOne='+FMset['FilterPlusOne']+
			'&FMsetAdvCtrl='+FMset['AdvCtrl']+
			'&FMsetMyTxtColor='+FMset['MyTxtColor']+
			'&FMsetTmPerPage='+FMset['TmPerPage']);
	}
}


//************************************************************************
//***************************  ОТПРАВКА РЕПЛИКИ   ************************
//************************************************************************
FM.ShowMesFormHelp="<div class=ForumBOX style='background:#ffffe0;font-size:14px;text-align:left;padding:10px 10px 0px 20px'>"+
	"<b>ПРИМЕРЫ ОФОРМЛЕНИЯ ТЕКСТА</b><br><br>"+
	"%Этот текст до 100 символов станет заголовком<br>"+
	'Это !слово получится полужирным<br>&gt;Это будет цитирование<br>-Это станет перечислением'+
	'<div class=fmbox><div class=fmt><h5>Этот текст до 100 символов станет заголовком</h5>'+
	'<p>Это <b>слово</b> получится полужирным</p>'+
	'<p class=cit>Это будет цитирование</p>'+
	'<ul><li>Это станет перечислением</li></ul>'+
	'</div></div></div>'
FM.ShowMesForm=function(parid,e,idfmReplace,txt){
	html='<form id="FMMesForm" onsubmit="return false">'+
		((parid==0 && !idfmReplace)?'<div style="text-align:right;width:97%;padding-top:5px"><label for="fmfrm_Part">Раздел: </label><select id="fmfrm_Part" style="width:400px;"></select></div>':'')+
		'<fieldset style="margin-bottom:7px;margin-top:5px"><legend>Текст Вашего сообщения\n</legend>'+
			'<textarea rows="'+FMset.formline+'" id="fmfrm_text" onkeyup="v=4000-this.value.length;b=this.form[\'fmfrm_free\'];b.value=v;if (v<1) b.style.color=\'red\';else b.style.color=\'black\'" style="width:98%">'+((txt)?txt:'')+'</textarea>'+
			'<label for="fmfrm_free">Осталось символов: </label><input type=text readonly="readonly" id="fmfrm_free" style="width: 50px;text-align:center"> '+
			((!User.VIP)?'<label for="fmfrm_SeqCode">Введите цифры: <img id=imgSCode maxlength="6" style="vertical-align: bottom" src="/php/SeqCode.php?rnd='+Math.round(Math.random()*1000)+'"></label><input type=text id="fmfrm_SeqCode" style="width: 50px"/>':'')+
			'<input type=hidden id="fmfrm_parent" value='+parid+'> '+
			'<input type=hidden id="fmfrm_rpl" value='+((idfmReplace)?idfmReplace:0)+'> '+
		'</fieldset> '+
		'<input type=button value="?" id="fmfrm_help" onclick="b=d.getElementById(\'FormMessag\'); if (b.innerHTML.length<1) b.innerHTML=FM.ShowMesFormHelp;else b.innerHTML=\'\'" style="width:30px"> '+
		'<input type=button value="Просмотр" id="fmfrm_preview" onclick="FM.SendMes(this,false)" style="width:200px"> '+
		'<input type=button value="Отправить" id="fmfrm_submit" onclick="FM.SendMes(this,true)" style="width:200px"> '+
		'<div id="FormMessag" style="color:dimgray; font-size: 11px; text-align:center;"></div></div></form>';
	if (e) Dialog.Show((idfmReplace)?'Изменение реплики № R'+idfmReplace:((parid==0)?'НОВАЯ ТЕМА':'Ответ на реплику № R'+parid),html,FMset.formwidth,null,e.clientY+d.documentElement.scrollTop);
	else Dialog.Show((idfmReplace)?'Изменение реплики № R'+idfmReplace:((parid==0)?'НОВАЯ ТЕМА':'Ответ на реплику № R'+parid),html,FMset.formwidth);

	if (parid==0 && !idfmReplace){
		temeList=d.getElementById('fmfrm_Part');
		for (i in FMpart) temeList.options.add(new Option(FMpart[i],i));
		temeList.options[0].style.color='red';
	}
}
FM.SendMes=function(btn,write){
	v=Dialog.TestFormData(btn.form);
	mesBox=d.getElementById('FormMessag');
	var error='';
	if (v['fmfrm_Part']==0) error+='Не выбран раздел форума<br>';
	if (v['fmfrm_text'].length>4000) error+='Текст сообщения содержит более 2500 символов. Пожалуйста сократите текст сообщения.<br>';
	if (v['fmfrm_text'].length<2) error+='Сообщение должно содержать не менее 2 символов.<br>';
	if (!User.VIP && (v['fmfrm_SeqCode'].length<5 || !v['fmfrm_SeqCode'].match(rex.Digit))) error+='Неверно введены контрольные цифры.<br>';
	if (error.length) {mesBox.innerHTML=error;mesBox.style.color='red';}
	else {
		//Dialog.EnableButton(btn.form,false);
		mesBox.innerHTML='Отправка данных на сервер...<br>'+IMG.wait1;
		mesBox.style.color='black';
		Net.Eval('/php/forum/forumInsert.php',Dialog.ReadFormData(btn.form)+'&write='+write,null);
	}
}
FM.ShowInsertAnsver=function(ansver){box=d.getElementById('FormMessag');if (box) box.innerHTML=ansver;}

//************************************************************************
//***************  ЗАГРУЗКА РЕПЛИК и СОЗДАНИЕ ИЕРАРХИИ  ******************
//************************************************************************
FM.LoadInterval=null;
FM.LoadArg='';
FM.Load=function(action){
	FM.PageNum=1;
	if (action) FM.LoadArg=action;
	var box=d.getElementById('ForumBOX');
	if (box) box.innerHTML='Авторизация пользователя...<br>'+IMG.wait1;
	if (!User.ready) {FM.LoadInterval=setInterval('clearInterval(FM.LoadInterval);FM.LoadStart()',100);return;}
	else FM.LoadStart();
}
FM.LoadStart=function(){
	var box=d.getElementById('ForumBOX');
	if (box) box.innerHTML='Загрузка данных...<br>'+IMG.wait1;
	Net.Eval('/php/forum/forumSelect.php','previs='+User.previs+((FM.LoadArg.length>0)?'&'+FM.LoadArg:''),FM.CreateHierarchy);
}
//Создание иерархии сообщений
FM.CreateHierarchy=function(){
	FM.nikes={};
	FM.NewCount=0;
	FMroot.length=0;
	for (var i in FMs) {
		var fm=FMs[i];
		if (!FM.TestStatus(fm)) continue;

		if  (FM.nikes[fm.nike]) FM.nikes[fm.nike]++;//Создание перечны всех ников и подстчет реплик для каждого ника
		else FM.nikes[fm.nike]=1;

		id=fm.idfm;
		if (fm.pubtime>User.previs) {fm.fmnew++;FM.NewCount++}
		if (fm.pubtime>User.lastvis) fm.fmnew++;
		FMAll[id]=fm;//Наполнение ассоциативного массива FMAll репликами принятыми через FMs
		if (fm.parid==0) {
			FMroot.push(fm);//Создание массива корневых реплик=тем
			fm.newchild=(fm.fmnew>0)?1:0;//Счетчик новых сообщений в теме
		}
		else {
			if (prt=FMAll[fm.parid]) {//Если существует родительский объект prt
				prt.fmArr.push(fm);//Присоединение реплики к родителю
				fm.parfm=prt;//Ссылка на родителя
				fm.level=prt.level+1;//Вычисление уровня
			}else DBG('(a)Потeрянная реплика '+ DBG.ShowProperty(fm,', '));//Если родительская реплика не существует
			if (tm=FMAll[fm.teme]) {
				tm.fmArrAll.push(fm);//Присоединение реплики к теме
				tm.newchild+=(fm.fmnew>0)?1:0;
				tm.chdtime=Math.max(tm.chdtime,fm.fmtime);
			}
			else DBG('(b)Потeрянная реплика '+ DBG.ShowProperty(fm,', '));//Если корневая реплика не существует
		}
	}
	FMroot.reverse();//Вывод ответов в порядке поступления
	//Создание списка всех ников
	FM.nikesList=[];
	for (var i in FM.nikes) FM.nikesList.push(i);
	FM.nikesList.sort();
	FM.Show();
}
//Добавление реплик к форуму
FM.Add=function(show,fmArr){
	if (fmArr.length>1) show=false;
	for (i in fmArr){
		var fm=fmArr[i];
		if (!FM.TestStatus(fm)) return;
		FM.NewCount++;
		FMAll[fm.idfm]=fm;
		fm.fmnew=2;
		if (fm.parid==0) {
			FMroot.unshift(fm);
			if (show) FM.Show();
		}else{
			if (tm=FMAll[fm.teme]) {
				tm.fmArrAll.push(fm);//Присоединение реплики к теме
				tm.newchild++;
				tm.chdtime=fm.fmtime;
			}
			if (prt=FMAll[fm.parid]) {//Если существует родительский объект prt
				if (show) for (var i in prt.fmArr) {prt.fmArr[i].hidden=true;prt.fmArr[i].fmc=false;}//Скрытие других реплик родителе
				prt.fmArr.push(fm);//Присоединение реплики к родителю
				fm.parfm=prt;//Ссылка на родителя
				fm.level=prt.level+1;//Вычисление уровня
			}
			if (show){
				prt.fmc=true;
				prt.Update();
			}
		}
	}
}
//Обновление реплики
FM.Update=function(show,fm){
	if (!FM.TestStatus(fm)) return;
	oldfm=FMAll[fm.idfm];
	oldfm.text=fm.text;
	oldfm.part=fm.part;
	oldfm.status=fm.status;
	oldfm.cmplt=fm.cmplt;
	oldfm.pubtime=fm.pubtime;
	oldfm.fmtime=fm.fmtime;
	oldfm.info=fm.info;
	oldfm.voit1=fm.voit1;
	oldfm.voit0=fm.voit0;
	oldfm.info=fm.info;
	oldfm.fmnew=2;
	if (show){
		if (oldfm.parid==0) FM.Show();
		else {
			prt=oldfm.parfm;
			while (prt){
				if (!prt.hidden) {prt.Update();break;}
				else prt=prt.parfm;
			}
		}
	}
}
//Удаление реплики
FM.Delete=function(show,idfm){
	fm=FMAll[idfm];
	//Создаем новые массивы без удаленного элемента
	if (tm=FMAll[fm.teme]) {
		newArr=[];
		for (var i in tm.fmArrAll) if (tm.fmArrAll[i]!=fm) newArr.push(tm.fmArrAll[i]);
		tm.fmArrAll=newArr;
	}
	if (prt=fm.parfm) {
		newArr=[];
		for (var i in prt.fmArr) if (prt.fmArr[i]!=fm) newArr.push(prt.fmArr[i]);
		fm.parfm.fmArr=newArr;
		prt.Update();
	}else{
		newArr=[];
		for (var i in FMroot) if (FMroot[i]!=fm) newArr.push(FMroot[i]);
		FMroot=newArr;
		if (show) FM.Show();
	}
	delete FMAll[idfm];
}
//Анализ статуса сообщения
FM.NoPublMes='<span style="background:white;color:red">Реплика не видна для других пользователей до ее проверки модератором. См. ИНСТРУКЦИЮ К ФОРУМУ</span><br> ';
FM.BlockedMes='<span style="background:gray;color:white">Реплика заблокирована автором или пользователями. См. ИНСТРУКЦИЮ К ФОРУМУ</span><br> ';
FM.TestStatus=function(fm){
	if (fm.status==0){
		if (fm.nike==User.nike) fm.info=FM.NoPublMes;
		else if (!(User.status&FM.URights['publ'])) return false;
		else fm.info=FM.NoPublMes;
	}else if (fm.status==1 || fm.cmplt>=FMMaxCmplt) {
		if (User.status&FM.URights['publ']) fm.info=FM.BlockedMes;
		else {fm.text='';fm.info=FM.BlockedMes;fm.lng=false;}
	}
	return true;
}


//---------------------------------------------------------------------------------------------------------------------
//------------------------------ Функции индивидуальные для каждого сайта ---------------------------------------------
//---------------------------------------------------------------------------------------------------------------------

//************************************************************************
//*************************** КУБОК МФСТ  ********************************
//************************************************************************
CUP={};
CUP.Load=function(GroupID,year){
	if (GroupID>100) title='<div class=header><h1>Рейтинг Московского отделения РТС. Сезон '+(year-1)+'-'+year+' <br><span>'+Page.ActiveMI.text+'</span></h1>';
	else title='<div class=header><h1>Кубок сезона '+(year-1)+'-'+year+' МФСТ ДСО Профсоюзов<br><span>'+Page.ActiveMI.text+'</span></h1>';
	html=title+
		'<p class=center>Куратор группы: '+Page.ActiveMI.title+'</p>'+
		'<p style="font-size:11px" class=center><b><a href="" style="font-size:12px;color:green" onclick="Dialog.Show(\'Нашли ошибку?\',\'<div style=\\\'background:white;padding:10px;line-height: 180%;color:#098347\\\'><br>Ваш куратор:<br><b>'+Page.ActiveMI.title+'</b><br>Обратитесь к Вашему куратору или к главному куратору — Вице-президенту МФСТ<br><b> Алексееву Михаилу Борисовичу - 618-30-55, 8-916-528-23-93, danceboy@rambler.ru</b><br><br>Все данные вводятся и публикуются лично Вашим куратором. <br>Администратор сайта не принимает участие в подготовке и публикации данных,<br>поэтому он не сможет помочь Вам в исправлении ошибок или в публикации отсутсвующих данных.<br><br><div>\',700);return false">Нашли ошибку в таблице данных или не нашли нужного соревнования?</a></b><br>Значение данных можно узнать задержав мышь над клеткой таблицы.</p>'+        
		'<form class="serch" onsubmit="return false"><fieldset><legend>Поиск танцоров или СТК. Введите не менее 3 букв. Неизвестную букву можно заменить точкой. </legend>'+
				'<label for="CupResult_men">СТК: </label><input value="'+CUP.serchStk+'" maxlength="32" type=text style="width: 90px" onkeyup="CUP.Filter(this.value,\'stk\')">&nbsp;&nbsp;'+
				'<label for="CupResult_men">Партнер: </label><input value="'+CUP.serchMen+'" maxlength="32" type=text style="width: 90px" onkeyup="CUP.Filter(this.value,\'men\')">&nbsp;&nbsp;'+
				'<label for="CupResult_men">Партнерша: </label><input value="'+CUP.serchWom+'" maxlength="32" type=text style="width: 90px" onkeyup="CUP.Filter(this.value,\'wom\')">&nbsp;&nbsp;'+
				'<input type="reset" value="Очистить" onclick="this.form.reset();CUP.FilterReset();CUP.ShowResult();return false;">'+               
			'</fieldset></form>'+
		'<a href="" onclick="CUP.ShowResult(-1);return false">Список соревнований</a> '+
		'<a href="" onclick="CUP.ShowResult(1);return false">Латиноамериканские танцы (LA)</a> '+
		'<a href="" onclick="CUP.ShowResult(2);return false">Бальные танцы (ST)</a> '+
		'<a href="" onclick="CUP.ShowResult(10);return false">10 танцев </a> '+
			'</div><div class=CupResult id=CupWelcom></div><div class=CupResult id=CupResult><br>Загрузка данных...<br>'+IMG.wait1+'</div>';
	
	if (box=d.getElementById('CupmfstBOX')) box.innerHTML=html;
	Net.Eval('/php/cupReader'+year+'.php?IDgr='+GroupID+'&year='+year);
}
CUP.ReportCreation;
CUP.ReportPublication;
CUP.Welcom;
CUP.ShowResult=function(IDpr){
	d.body.style.cursor="wait";
	if (box=d.getElementById('CupWelcom')) box.innerHTML='<span style="font-size:11px">Данные обновлены: '+CUP.ReportCreation+"</span>"; if (CUP.Welcom.length>1) box.innerHTML+='<br><span style="color:#61947b">Информация от куратора:</span><br>'+CUP.Welcom;
	if (!IDpr && !this.preIDpr) this.preIDpr=0;
	if (IDpr) this.preIDpr=IDpr;
	else IDpr=this.preIDpr;
	if (IDpr!=-2){
		if (IDpr>0){
			Dialog.Hide();
			html=[];for (var i in CPs[IDpr]) html.push(CPs[IDpr][i].toTRow());
			if (box=d.getElementById('CupResult')) box.innerHTML='<table class=res'+IDpr+'>'+CP.THeader+html.join('')+'</table>';
		}else {
			Dialog.Hide();
			html=[];for (var i in CCs) html.push(CCs[i].toTRow());
			if (box=d.getElementById('CupResult')) box.innerHTML='<table>'+CC.THeader+html.join('')+'</table>';
		}
	}else{
		html=[];
		for (var j in CPs) if (CPs[j] && CPs[j].length>0) {
			exist=false;
			html.push('<table class=res'+j+'>'+CP.THeader); for (var i in CPs[j]) if (a=CPs[j][i].toTRow()) {html.push(a);exist=true;};
			if (exist) html.push('</table>');
			else html.pop();
		}
		if (box=d.getElementById('CupResult')) if (html.length>1) box.innerHTML=html.join(''); else box.innerHTML='<br><br><br><span style="color:#098347"><b>Записей, удовлетворяющих условиям поиска, не найдено.</b></span>';
	}
	d.body.style.cursor="auto";

}
CUP.FilterReset=function(){
	CUP.FilterStk=null;CUP.serchStk='';
	CUP.FilterMen=null;CUP.serchMen='';
	CUP.FilterWom=null;CUP.serchWom='';
}
CUP.FilterReset();
CUP.Filter=function(serch,what){
	switch (what)
	{
		case 'stk':if (serch.length<3) {CUP.FilterStk=null;CUP.serchStk='';} else {try{CUP.serchStk=serch;CUP.FilterStk=new RegExp(serch,'i');}catch(e){CUP.FilterStk=null;CUP.serchStk='';}}break;
		case 'men':if (serch.length<3) {CUP.FilterMen=null;CUP.serchMen='';} else {try{CUP.serchMen=serch;CUP.FilterMen=new RegExp(serch,'i');}catch(e){CUP.FilterMen=null;CUP.serchMen='';}}break;
		case 'wom':if (serch.length<3) {CUP.FilterWom=null;CUP.serchWom='';} else {try{CUP.serchWom=serch;CUP.FilterWom=new RegExp(serch,'i');}catch(e){CUP.FilterWom=null;CUP.serchWom='';}}break;
	}
	if (serch.length>2) CUP.ShowResult(-2);
	if (serch.length==0) CUP.ShowResult();
}

//Объект соревнования
function CC(IDgr,IDpr,IDCont,CName,Cdate,IDSTKOrg,CType,RFact,pair,Main,cntr,Arbt,group,prog){
	this.IDgr=IDgr;
	this.IDpr=IDpr;
	this.IDCont=IDCont;
	this.CName=CName;
	this.IDSTKOrg=IDSTKOrg;
	this.CType=CType;
	this.RFact=RFact;
	this.pair=pair;
	this.Main=Main;
	this.cntr=cntr;
	this.Arbt=Arbt;
	this.group=group;
	this.prog=prog;

	var dt=Cdate.split('.');
	this.date=new Date(dt[2],dt[1],dt[0]);
	this.Cdate=Cdate;
}

CC.prototype.toTRow=function(){
	return '<tr>'+
			'<td rowspan=2 class=plc title="Номер протокола">'+this.IDCont+'</td>'+
			'<td title="Дата проведения соревнованя">&nbsp; <a href="" onclick="CC.ShowProtocol('+this.IDCont+','+this.IDpr+',event);return false">'+this.Cdate+'</a> &nbsp;</td>'+
			'<td title="Название соревнования">'+this.CName+'</td>'+
			'<td title="Подгруппа">'+this.group+'</td>'+
			'<td class=prg'+this.IDpr+' title="Программа">'+this.prog+'</td>'+
			'<td title="Организатор">'+this.IDSTKOrg+'</td>'+
			'<td title="Ранг соревнования">'+this.CType+'</td>'+
			'<td title="Коэффициент, используемый для рассчета ОКР">'+this.RFact+'</td>'+
			'<td title="Участвовало пар">'+this.pair+'</td>'+
			'<td title="Номер главного соревнования сезона">'+this.Main+'</td>'+
			'<td title="Число стран-участников">'+this.cntr+'</td>'+
		'</tr>'+
		'<tr><td colspan=10 class=btm title="Список судей">'+this.Arbt+'</td></tr>';
}
CC.THeader='<tr><th colspan=11><b>Список соревнований</b></th></tr><tr>'+
		'<th rowspan=2 width=20><nobr><a href="" onclick="CC.Sort(\'IDCont\');CUP.ShowResult();return false">&nbsp; № &nbsp;</a></nobr></th>'+
		'<th><a href="" onclick="CC.Sort(\'date\');CUP.ShowResult();return false">Дата</a></th>'+
		'<th>Название</th>'+
		'<th>Группа</th>'+
		'<th><a href="" onclick="CC.Sort(\'prog\');CUP.ShowResult();return false">Вид</a></th>'+
		'<th><a href="" onclick="CC.Sort(\'IDSTKOrg\');CUP.ShowResult();return false">Организатор</a></th>'+
		'<th>Тип</th>'+
		'<th><a href="" onclick="CC.Sort(\'RFact\');CUP.ShowResult();return false">Коэфф</a></th>'+
		'<th><a href="" onclick="CC.Sort(\'pair\');CUP.ShowResult();return false">Пар</a></th>'+
		'<th><a href="" onclick="CC.Sort(\'Main\');CUP.ShowResult();return false">Основное</a></th>'+
		'<th><a href="" onclick="CC.Sort(\'cntr\');CUP.ShowResult();return false">Стран</a></th>'+
	'</tr>'+
	'<tr><th colspan=10>Судьи</th></tr>';

CC.Sort=function(by){
	switch (by)
	{
		case 'IDCont':CCs.sort(function(x,y){if (x.IDCont<y.IDCont) return -1; else if (x.IDCont===y.IDContIDCont) return 0; else return 1;});break;
		case 'date':CCs.sort(function(x,y){if (x.date>y.date) return -1; else if (x.date===y.date) return 0; else return 1;});break;
		case 'prog':CCs.sort(function(x,y){if (x.IDpr>y.IDpr) return -1; else if (x.IDpr===y.IDpr) return 0; else return 1;});break;
		case 'RFact':CCs.sort(function(x,y){if (x.RFact>y.RFact) return -1; else if (x.RFact===y.RFact) return 0; else return 1;});break;
		case 'pair':CCs.sort(function(x,y){if (x.pair>y.pair) return -1; else if (x.pair===y.pair) return 0; else return 1;});break;
		case 'cntr':CCs.sort(function(x,y){if (x.cntr>y.cntr) return -1; else if (x.cntr===y.cntr) return 0; else return 1;});break;
		case 'Main':CCs.sort(function(x,y){return x.Main.localeCompare(y.Main)});break;
		case 'IDSTKOrg':CCs.sort(function(x,y){return x.IDSTKOrg.localeCompare(y.IDSTKOrg)});break;
	}
}

CC.PopInfo=function(a,e){
	IDCont=a.innerHTML.split(' / ')[0];
	for (i in CCs) if (IDCont==CCs[i].IDCont) Dialog.Show('Информация о соревновании из протокола № '+IDCont,'<div class=CupResult><table style="width:100%">'+CCs[i].toTRow()+'</table></div>',800,null,12+e.clientY+d.documentElement.scrollTop);
}

CC.ShowProtocol=function(IDCont,IDpr,e){
	var prtk=[];
	for (var i in CPs[IDpr]) if (index=CPs[IDpr][i].isInProtocol(IDCont)) prtk.push(new PR(CPs[IDpr][i],index));
	prtk.sort(function(x,y){if (x.place()<y.place()) return -1; else if (x.place()===y.place()) return 0; else return 1;})
	var html=['<div class=CupResult><table style="width:100%">'];
	for (i in CCs) if (IDCont==CCs[i].IDCont) html.push(CCs[i].toTRow()+'</table><table class="res'+IDpr+'" >'+PR.THeader);
	for (var i in prtk) html.push(prtk[i].toTRow());
	html.push('</table></div>');


	Dialog.Show('Протокол № '+IDCont+'. Результаты соревнования, входящие в 10 лучших каждой танцевальной пары.',html.join(''),800,null,12+e.clientY+d.documentElement.scrollTop);
}
//Объект пары
function CP(IDgr,IDpr,num,Goup,Prog,men,wom,mbd,wbd,stk,city,boss,main,OKRnum,skr,sum,points,okr,inf,ido,period){
	this.IDgr=IDgr;
	this.IDpr=IDpr;
	this.num=num;
	this.men=men;
	this.wom=wom;
	this.mbd=mbd.substr(0,10);
	this.wbd=wbd.substr(0,10);
	this.stk=stk;
	this.city=city;
	this.boss=boss;
	this.main=main;
	this.OKRnum=OKRnum;
	this.skr=skr;
	this.sum=sum;
	this.points=points;
	this.okr=okr;
	this.inf=inf;
	this.ido=ido;
	this.period=period;
	this.places=[];for (var i in this.inf) this.places.push(parseInt(this.inf[i]));
	if (this.IDgr>=60&&this.IDgr<100) for(var i in inf)
	{
		s=inf[i].split('/');
		if (s.length<2) continue;
		m=s[0].split('-');
		p=Math.round((1-((m.length==2)?m[0]/2+m[1]/2:m[0]/1)/s[1])*1000)/1000;
		this.okr[i]+=" / "+p;
	}
	
}
CP.prototype.isInProtocol=function(IDCont){
    for (var i in this.ido) if (parseInt(this.ido[i])==IDCont) return i;
    return null;
}
CP.prototype.toTRow=function(){
	if (CUP.FilterStk && !CUP.FilterStk.test(this.stk)) return;
	if (CUP.FilterMen && !CUP.FilterMen.test(this.men)) return;
	if (CUP.FilterWom && !CUP.FilterWom.test(this.wom)) return;
	return '<tr>'+
		'<td rowspan=4 class=plc title="Номер протокола соревнования">'+this.num+'</td>'+
		'<td title="Очки за участие в главных соревнованиях">'+this.main+'</td>'+
		'<td class=nm >'+this.men+'</td>'+
		'<td title="Дата рождения">'+this.mbd+'</td>'+
		'<td title="'+((this.IDgr<60||this.IDgr>100)?'ОКР':'ОЧКИ / ОКР')+'">'+this.okr.join('</td><td title="'+((this.IDgr<60||this.IDgr>100)?'ОКР':'ОЧКИ / ОКР')+'">')+'</td>'+
	'</tr><tr>'+
		'<td title="'+((this.IDgr<60||this.IDgr>100)?'СКР':'СУММА ОЧКОВ')+'" class=skr>'+((this.IDgr<60||this.IDgr>100)?this.skr:this.points)+'</td>'+
		'<td class=nm>'+this.wom+'</td>'+
		'<td title="Дата рождения">'+this.wbd+'</td>'+
		'<td title="место / количество пар">'+this.inf.join('</td><td title="место / количество пар">')+'</td>'+
	'</tr><tr>'+
		'<td title="Сумма 7 лучших ОКР">'+this.sum+'</td>'+
		'<td class=sml title="Дата начала-окончания выступлений в данном классе" colspan=2>'+this.period+'</td>'+
		'<td class=sml title="номер протокола / дата выступления"><a href="" onclick="CC.PopInfo(this,event);return false;">'+this.ido.join('</a></td><td class=sml title="номер протокола / дата выступления"><a href="" onclick="CC.PopInfo(this,event);return false;">')+'</a></td>'+
	'</tr><tr>'+
		'<td class=btm title="Учтено ОКР / Общее количество ОКР">'+this.OKRnum+'</td>'+
		'<td colspan=2 class=btm>'+this.stk+'</td>'+
		'<td colspan=4 class=btm>'+this.city+'</td>'+
		'<td colspan=6 class=btm>'+this.boss+'</td></tr>';
}
CP.THead=function(lbl){a=[];for(i=1;i<=10;i++)a.push(lbl+((lbl=='Рез-')?i:''));return a;}
CP.THeader='<tr>'+
		'<th title="Занимаемое в рейтинге место" rowspan=4> № </th>'+
		'<th title="Очки за участие в главных соревнованиях">Гл.</th>'+
		'<th>Партнер</th>'+
		'<th>д/р</th>'+
		'<th title="Результат, полученный на соревновании.\nДля старших классов - ОКР\nДля классов D,Е - очки и ОКР">'+CP.THead('Рез-').join('</th><th  title="Результат, полученный на соревновании.\nДля классов D,Е - очки\nДля старших классов - ОКР">')+'</th>'+
'</tr><tr>'+
		'<th title="Итоговый результат в рейтинге\nСумма очков для N и E классов\nСКР для D, C, B, A, S, I классов">Итог</th>'+
		'<th>Партнерша</th>'+
		'<th title="Дата рождения">д/р</th>'+
		'<th>'+CP.THead('м / п').join('</th><th>')+'</th>'+
'</tr><tr>'+
		'<th title="Сумма 7 лучших ОКР">Сум.</th>'+
		'<th title="Дата начала и окончания выступления в данном классе и возрастной подгруппе" colspan=2>период</th>'+
		'<th title="Дата рождения">'+CP.THead('пр-л').join('</th><th>')+'</th>'+
'</tr><tr>'+
		'<th title="Количество учтенных соревнований для старших классов / общее количество выступлений"><nobr>Кол-во</nobr></th>'+
		'<th colspan=2>СТК</th>'+
		'<th colspan=4>Город</th>'+
		'<th colspan=6>Тренер</th></tr>';

//Объект результата пары
function PR(CP,index){
	this.CP=CP;
	this.index=index;
}
PR.prototype.prtk=function(){return parseInt(this.CP.ido[this.index]);}
PR.prototype.FullPlace=function(){return this.CP.inf[this.index].split('/')[0];}
PR.prototype.place=function(){return this.CP.places[this.index];}
PR.prototype.toTRow=function(){
	return '<tr><td style="font-weight: bold">'+
	this.FullPlace()+
	'</td><td class=nm>'+this.CP.men+
	'</td><td class=nm>'+this.CP.wom+
	'</td><td>'+this.CP.stk+
	'</td><td>'+this.CP.boss+
	'</td></tr>';
}
PR.THeader='<tr><th>&nbsp;&nbsp;Место&nbsp;&nbsp;</th><th class=nm>Партнер'+
	'</th><th class=nm>Партнерша'+
	'</th><th>СТК (Клуб)'+
	'</th><th>Тренеры'+
	'</th></tr>';

//************************************************************************
//*************************** КУБОК МФСТ 2012 ****************************
//************************************************************************

cRT={}//Рейтинг пар по группам - асс. массив с ключем типа "2-101", где первое число id программы, второе - id группы
cCM={}//Список сор-й по группам...
cCI=[]//Список сор-й по id
cHD={}//Заголовок страницы по группам...
var curCupGroup=0;
var curCupProg=1;
var curSerchText="";
var curSerchType=3;//Поиск 1 по партнеру, 2 - партнерше, 3 - СТК,  4 - Тренеру
var curSerchRX=null;
var cAllPr=true;
var cAllPrGr=false;
var cMaxCoupl=10;

cHeaderR1="<h2>Рейтинг Московского отделения РТС<br><span style='font-size:18px'>Сезон 2011-2012</span></h2>";
cHeaderR2="Кураторы:<br> Машков Александр Викторович, <br>Машкова Анна Михайловна,<br> 166-47-58";
cHeaderC1="<h2>Классификационный Кубок МФСТ<br><span style='font-size:18px'>Сезон 2011-2012</span></h2>";
cHeaderC2="Куратор<br> Алексеев Михаил Борисович, <br>618-30-55, 8-916-528-23-93,<br> danceboy@rambler.ru";
cMes1="Для получения дополнительной информации задержите мышь над клеткой таблицы";
cMes2="Рейтинг рассчитывается на основе правил <a onclick='return MI.DefClick(this);' href='/html/documents/ligarts_class.html'><b>Единой классификации танцоров любительской лиги РТС</b></a></b><br> при условии посещения танцорами определенного количества <b>главных</b> и <b>основных</b> соревнований. Для расчета СКР используется ОКР в количестве половины учтеных соревнований, но не более 5. <b>Количество главных и основных соревнований</b>, в которых должна принять участие танцевальная пара, чтобы претендовать на первые места в рейтинге, определяется как <b>половина от проведенных</b> главных и основных соревнований. При нечетном количестве округление производится в меньшую сторонe, т.е. 1 из 3, 2 из 5 и т.п. Список главных и основных соревнований приведен в <a onclick='return MI.DefClick(this);' href='/html/calendar/plan2012.html'><b>Перспективном календаре</b></a>";

function cTitul()
{
	return '<form class="search" onsubmit="return false">'+
			'<table class="cLinks">'+
				'<tr><th colspan=3 class="cHead">'+(curCupGroup>99?cHeaderR1:cHeaderC1)+'</th></tr>'+
				'<tr><td colspan=3 class="sm">'+cMes2+'</td></tr>'+
				'<tr><th style="width:33%"><a href="#" onclick="сBest(10);return false;" title="Лучшая десятка"><img src="/ico/trophy10.png"></a><a href="#" onclick="сBest(20);return false;" title="Лучшая двадцатка"><img src="/ico/trophy20.png"></a><a href="#" onclick="сBest(30);return false;" title="Лучшая тридцатка"><img src="/ico/trophy30.png"></a></th>'+
				'<th style="width:33%">'+(curCupGroup>99?cHeaderR2:cHeaderC2)+'</th>'+
				'<th style="width:33%">Рейтинг обновлен<br> '+cUpdate+'</th>'+
				'</tr><tr><th>Бальные танцы (СТ)<br><a href="#" onclick="showRateOfProg(1);return false;"><img src="/ico/rate.png"></a><a href="#" onclick="showCompListOfProg(1);return false;"><img src="/ico/cm_ok.png"></a><a href="#" onclick="printCupOfProg(1);return false;"><img src="/ico/prn1.png"></a></th>'+
				'<th>Латина (ЛА)<br><a href="#" onclick="showRateOfProg(2);return false;"><img src="/ico/rate.png"></a><a href="#" onclick="showCompListOfProg(2);return false;"><img src="/ico/cm_ok.png"></a><a href="#" onclick="printCupOfProg(2);return false;"><img src="/ico/prn1.png"></a></th>'+
				'<th>10 танцев<br><a href="#" onclick="showRateOfProg(4);return false;"><img src="/ico/rate.png"></a><a href="#" onclick="showCompListOfProg(4);return false;"><img src="/ico/cm_ok.png"></a><a href="#" onclick="printCupOfProg(4);return false;"><img src="/ico/prn1.png"></a></th>'+
			'</tr><tr><td colspan=3><fieldset><legend>Для поиска введите не менее 3 букв. Неизвестный символ можно заменить точкой.</legend>'+
				'<label>Искать: </label><input id="cSearchTx" value="'+curSerchText+'" maxlength="128" type=text style="width: 120px" onkeyup="сSearch(this.value)">&nbsp;&nbsp;'+
				'<input type="radio" id="cSearchClub" onclick="сSearchSetType(3);" name="сSearchChk" '+((curSerchType==3)?'checked':'')+'><label for=cSearchClub>&nbsp;клуб/регион </label>'+
				'<input type="radio" id="cSearchMen" onclick="сSearchSetType(1);" name="сSearchChk" '+((curSerchType==1)?'checked':'')+'><label for=cSearchMen>&nbsp;партнера </label>'+
				'<input type="radio" id="cSearchWomen" onclick="сSearchSetType(2);" name="сSearchChk" '+((curSerchType==2)?'checked':'')+'><label for=cSearchWomen>&nbsp;партнершу </label>'+
				'<input type="radio" id="cSearchTrener" onclick="сSearchSetType(4);" name="сSearchChk" '+((curSerchType==4)?'checked':'')+'><label for=cSearchTrener>&nbsp;тренеров </label>'+
				' &nbsp;&nbsp;<input type="reset" value="Сброс" onclick="d.getElementById(\'cSearchTx\').value=\'\';сSearch(\'\');return false;"> '+
				'<br><input type="checkbox" id="cSearchAllPr" onclick="cAllPr=this.checked;сShowSearch()" '+(cAllPr?'checked':'')+'><label for=cSearchAllPr> во всех танцевальных программах </label>'+
				'<input type="checkbox" id="cSearchAllPrGr" onclick="cMaxCoupl=10000;cAllPrGr=this.checked;сShowSearch()" '+(cAllPrGr?'checked':'')+'><label for=cSearchAllPrGr> по всем просмотренным группам </label>'+
			'</fieldset></td></tr><tr><td colspan=3 class="sm">'+cMes1+'</td></tr></table></form><br>';
}

//Учтеные соревнования
function cM(iD,dt,nm,fr,rn,tp,gr,pr,arb)
{
	this.iD=iD;	//ID
	this.dt=dt;	//Дата
	this.nm=nm;//name
	this.fr=fr;//form
	this.rn=rn;//rang
	this.tp=tp;//type
	this.gr=gr;//group
	this.pr=pr;//prog
	this.arb=arb;//prog
}
//Создание ряда таблицы учтеные соревнования
cM.prototype.tr=function(i,pr)
{
	var a='&nbsp;';
	for(var j in this.arb) a+=this.arb[j][2]+'&nbsp;'+this.arb[j][0]+', ';
	return '<tr>'+
		'<td class="C" rowspan=2 width="50px">'+this.dt+
		'</td><td class="C B">«'+this.nm+
		'»</td><td class="C">'+this.fr+
		'</td><td class="C">'+this.rn+
		'</td><td class="C">'+this.tp+
		'</td><td class="C">'+this.gr+
		'</td><td class="C">'+this.pr+
		'</td></tr>'+
		'<tr><td class="C arb" colspan=6>'+a+'</td></tr>';
}


//Оценка результата (ОКР и информация соревновании)
function oR(okr,dt,tt)
{
	this.okr=okr;
	this.dt=dt;	//Дата соревнования
	this.tt=tt;//toolTip (доп информация)
}

//Рейтинг пары (rate Couple)
function rC(pl,mn,skr,sum,men,md,wmn,wd,cl,trn,org,ctr,oRs,cls){
	this.pl=pl;//Место
	this.mn=mn;//main - количества соревнований (главные-основные-все)
	this.skr=skr;//СКР или очки
	this.sum=sum;
	this.men=men;//Man
	this.md=md;//д/р	
	this.wmn=wmn;//Women
	this.wd=wd;//д/р
	this.cl=cl;//Clubs
	this.trn=trn;//Trainers
	this.org=org;//Организация
	this.ctr=ctr;//Country
	this.oRs=oRs;//Массив oR (результатов) =  [[okr,dt,tt1,tt2],...] = ОКР Date TillTip1 TillTip2 
	this.cls=cls;//Класс пары
}
//Создание HTML кода ряда таблицы рейтинга пары
rC.prototype.tr=function(p_g)
{
	pr=p_g.substr(0,1);
	o=parseInt(p_g.substr(2))>100?5:5;
	var s1="";
	var s2="";
	var c;
	var i;
	for(i in this.oRs) //[0-СКР или (очки), 1-дата, 2-id, 3-пар, 4-стран, 5-коэфф, 6-место,7-всего пар]
	{
		if (i>=10) break;
		r=this.oRs[i];
		c=cCI[r[2]];
		s1+='</td><td class="R '+(i<o?"Z":"X")+'" title="'+c.dt+' * '+c.tp+' * «'+c.nm+'»  '+c.rn+' * '+c.gr+'">'+r[1];
		s2+='</td><td class="R '+(i<o?"Z":"X")+'" title="Место: '+r[6]+' из '+r[3]+' Стран: '+r[4]+' Коэфф: '+r[5]+'">'+r[0];
	}
	while(i<9)
	{
		s1+='</td><td class="R">&nbsp;&nbsp;&nbsp;&nbsp;';
		s2+='</td><td class="R">&nbsp;&nbsp;&nbsp;&nbsp;';
		i++;
	}

if (curSerchRX)
{
	switch(curSerchType)
	{
		case 1:
				if (curSerchRX.test(this.men))	break;
				else return '';
		case 2:
				if (curSerchRX.test(this.wmn))	break;
				else return '';
		case 3:
				if (curSerchRX.test(this.cl))	break;
				else return '';
		case 4:
				if (curSerchRX.test(this.trn))	break;
				else return '';
	}
}
else if (this.pl > cMaxCoupl) return '';

return '<tr><td rowspan="3" class="P'+pr+' C"  title="Место в рейтинге">'+this.pl+
	'</td><td class="C B" title="СКР или (Очки)">'+this.skr+
	'&nbsp;</td><td class="L B">'+this.men+
	'</td><td class="D C" title="Дата рождения">'+this.md+s1+'</td><td class="D C" rowspan=2><a href="#" onclick="return cInf(event,'+this.pl+',\''+p_g+'\')"><img src="/ico/cinf.png"></a></td></tr>'+
	
	'<tr><td class="C" title="Сумма лучших ОКР">'+this.sum+
	'&nbsp;</td><td class="L B">'+this.wmn+
	'</td><td class="D C" title="Дата рождения">'+this.wd+s2+'</td></tr>'+
	
	'<tr><td class="C B tr3'+pr+'" title="Участие в соревнваниях: Главные-Основные-Все">'+this.mn+
	'&nbsp;</td><td td colspan=8 class="C S tr3'+pr+'"" title="Тренер(ы), коллектив(ы)"><b>'+this.cl+"</b> * <i> "+this.trn+
	'</i></td><td td colspan=2 class="L S tr3'+pr+'" title="Организация">'+this.org+
	'</td><td td colspan=3 class="L S tr3'+pr+'" title="Страна">'+this.ctr+
	'</td></tr>';
}
//Создание HTML кода таблицы результатов пары
rC.prototype.tbl=function(p_g)
{
	o=parseInt(p_g.substr(2))>100?5:5;
	var t='';
	p=(this.skr.substr(0,1)=='(');
	for(i in this.oRs) 
	{
		r=this.oRs[i];
		c=cCI[r[2]];
		a='';for(var j in c.arb) a+=c.arb[j][0]+', ';
		t+='<tr><td>'+(++i)+'</td><td class="o'+(!p&&i>o?'2':'1')+'" title="'+(p?'Очки':'OКР=('+r[5]+' + '+r[4]+' – 1)(1 - '+r[6]+'/'+r[3]+')')+'">'+r[0]+'</td><td title="'+c.fr+'">'+c.dt+' * '+c.tp+'<br><b>«'+c.nm+'»</b><br><b class="sm">'+a+'</b></td>'+(p?'':'<td title="'+c.rn+' — Коэфф ранга='+r[5]+',  Кол-во стран='+r[4]+'">'+r[5]+'+'+r[4]+'</td>')+'<td title="'+c.gr+'">'+r[6]+'&nbsp;/&nbsp;'+r[3]+((r[3]==r[7])?'':' ('+r[7]+')')+'</td></tr>';
	}
	return '<table class="cInfo" cellpadding="0" cellspacing="1"><tr><th colspan=2 title="' +(p?'Сумма очков всех соревнований':'СКР = Среднее арифметическое лучших ОКР') + '"><b>'
		+this.skr+'</b></th><th colspan=4><span>'+this.men+', '+this.wmn+'</span>,<br><b>'+this.cl+'</b><i> * '+this.trn+'</i></th></tr>'
		+'<tr><th class="H">№</th><th title="Оценка Качества Результата" class="H">'+(p?'Очки':'ОКР')+'</th><th class="H">Соревнование, судьи</th>'+(p?'':'<th title="Коэфф. ранга +  Количество стран" class="H">Р+С</th>')+'<th title="Место / Зачетное количество пар (общее число пар для кл/рейт соревнований)" class="H">M/K</th></tr>'
		+t+'<tr><th colspan=5><b>'+(p?'ОЧКИ = К - М, но не более 20 <br>где - К - кол-во пар, М - место':'ОКР=(P + C – 1)(1 - M/K)<br> где - P - ранг, С - кол-во стран, М - место, К - кол-во пар')+'</b></tr></table>';
}


//Создание таблицы рейтинга
function cGetRateTabl(pr_goup,prn)
{
	if (pr_goup==null) pr_goup=curCupProg+'-'+curCupGroup;

	t='<table '+(prn?'border=1 style="font-size:8pt"':' style="width:95%"')+' cellpadding="0" cellspacing="1"><tr><th colspan=15 class="cProg'+curCupProg+'">'+cHD[pr_goup]+'</th></tr>';
	ar=cRT[pr_goup];
	var l=t.length;
	for(var i in ar) t+=ar[i].tr(pr_goup);
	return l==t.length?'':t+='</table>';

}
//Создание таблицы списка соревнований
function cGetCompTabl(pr_goup)
{
	if (pr_goup==null) pr_goup=curCupProg+'-'+curCupGroup;
		
	t='<table cellpadding="0" cellspacing="1" style="width:95%" class="cCmp'+curCupProg+'"><tr><th colspan=20 class="cProg'+curCupProg+'">Список учтенных соревнований<br>'+cHD[pr_goup]+'</th></tr>';
	ar=cCM[pr_goup];
	for(var i in ar) t+=ar[i].tr(i,curCupProg);
	return t+='</table>';
}

function showRateOfProg(prog_id)
{
	cMaxCoupl=10000;
	if (cAllPrGr && curSerchRX){
		document.getElementById('cSearchAllPr').checked=false;
		cAllPr=false;
	}
	curCupProg=prog_id;
	сShowSearch();
}

function showCompListOfProg(prog_id)
{
	curCupProg=prog_id;
	document.getElementById('DM6_RT').innerHTML=cGetCompTabl();
}

function cInf(e,pl,p_g){
	Dialog.Show('Список всех учтенных результатов пары',cRT[p_g][pl-1].tbl(p_g),600,null,17+e.clientY+d.documentElement.scrollTop);
	return false;
}
/*ЗАГРУЗКА*/

function LoadCup(group_id,year)
{
	curCupGroup=group_id;
	if (cHD['1-'+group_id]) cReady(false);
	else Net.Eval('/cup/'+year+'/c.php?gr='+group_id);
}
function cReady(l)
{
	if (l) for (var i in cCM){var a=cCM[i];for(var c in a) cCI[a[c].iD]=a[c];}
	document.getElementById('DMBox').innerHTML=cTitul()+'<div id="DM6_RT"></div>';
	сShowSearch();
}

/*ПОИСК*/

function сBest(n)
{
	document.getElementById('cSearchAllPr').checked=true;
	document.getElementById('cSearchAllPrGr').checked=false;
	d.getElementById('cSearchTx').value='';
	curSerchText='';
	curSerchRX=null;
	cAllPr=true;
	cAllPrGr=false;
	cMaxCoupl=n;
	сShowSearch();
}

function сSearch(txt)
{
	cMaxCoupl=10000;
	curSerchText=txt;
	if (txt.length==0) {
		curSerchRX=null;
		showRateOfProg(curCupProg);
	}
	сShowSearch();
}
function сSearchSetType(t)
{
	curSerchType=t;
	сShowSearch();
}
function сShowSearch()
{
	curSerchRX=(curSerchText.length>2)?new RegExp(curSerchText,'i'):null;
	if ((cMaxCoupl >= 10000 && curSerchRX==null ) || (!cAllPr && !cAllPrGr && curSerchRX==null)) 
					document.getElementById('DM6_RT').innerHTML=cGetRateTabl();
	else
	{
		var oldPr=curCupProg;
		var t=''
		if (cAllPrGr)
		{
			for(var p in cRT)
			{
				curCupProg=p.substr(0,1);
				if (cAllPr || curCupProg==oldPr) t+=cGetRateTabl(p);
			} 
		}
		else
		{
			curCupProg=1;
			t+=cGetRateTabl();
			curCupProg=2;
			t+=cGetRateTabl();
			curCupProg=4;
			t+=cGetRateTabl();
		}
		document.getElementById('DM6_RT').innerHTML=t;
		curCupProg=oldPr;
	}
}

/*ВЕРСИЯ ДЛЯ ПЕЧАТИ*/

function printCupOfProg(prog_id)
{
	curCupProg=prog_id;
	var t=(curCupGroup>99?cHeaderR1:cHeaderC1) 
			+'Рейтинг обновлен '+cUpdate
			+'<h5>RUSSIANMASTER.RU, MFST.SU</h5>'
			+(curCupGroup>99?cHeaderR2:cHeaderC2)
			+'<div id="DM6_RT">'
			+cGetRateTabl(null,true)
			+'</div>';
	prnWin("prn1",t);
}

var prnWindow=null;
function prnWin(wName,inHTML){//Создание отдельного окна и вывод в него информации
	if (!prnWindow || !prnWindow.closed) {
		if (navigator.appName=="Microsoft Internet Explorer") prnWindow=open('',wName);
		else prnWindow=open('',wName,"top=0");
		prnWindow.document.title="Версия для печати";
		prnWindow.document.body.style.fontFamily='Arial';
	}
	if (prnWindow.closed) {
		if (navigator.appName=="Microsoft Internet Explorer") prnWindow=open('',wName);
		else prnWindow=open('',wName,"top=0");
	}
	prnWindow.focus();
	prnWindow.document.body.innerHTML="<h3 style='color:#FFA43E;font-size:12px'>Извините, сервис находится в разработке.<br> Нажмите Ctrl+P для печати страницы.</h3>"+inHTML;
}
