d = document; Net = new Object(); Page = new Object(); Setting = new Object(); Client = new Object(); Admin = new Object(); Dialog = new Object(); IMG = new Object;


//Заранее загружаемые картинки
//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 = 'wait2.gif'; IMG.wait1 = '<br><img src="wait2.gif" width="220" height="19">';
IMG.wait2img = new Image(); IMG.wait2img.src = 'wait2.gif'; IMG.wait2 = '<br><img src="wait2.gif" width="220" height="19">';

//Настройки
Page.newWin=true;//Открытие всех внешних ссылок в отдельном окне
Page.ajax=true;//Использование по умолчанию режима web-приложения 
Page.cash=false;//Кеширование загружаемых страниц (при отладке лучше не включать)
Page.StartPage='/index.html';//Страница по умолчанию (будет выделена в меню, если указан только адрес сайта)


onload=function(){
 
	d.body.onmouseup=function(){d.body.onmousemove=null}//Для функции перемещения формы
	//Создание всплывающего диалогового окна
	Page.dialog=d.createElement('DIV');
	Page.dialog.className ='dialog';
	d.body.appendChild(Page.dialog);
	
	status="Страница сформирована";
}

//************************************************************************
//************      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 - функция вызываемая после выполнения загруженного кода, dbg - режим отладки - ответ сервера выдается в окне отладки
Net.Eval=function(href,params,OnEval,dbg){
    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();
	        }
	        else DBG('******* eval ОШИБКА ******* <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.CookFormShow = function() {Dialog.Show('Cookies', Admin.CookForm, 800); d.getElementById('ShowCookies').innerHTML = DBG.ShowProperty(Setting.Cookie) }
//Форма для запросов к серверу
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.ServerQueryAnsver=function(ServerAnsver){Admin.consol.document.body.innerHTML=ServerAnsver;} 
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.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=new Object();
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.WordEN = /^[A-z\.,& \-]{2,} *$/;
rex.WordRU = /^[А-яёЁ\.,& \-]{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;    
}
//************************************************************************
//*************************** РЕГИСТРАЦИЯ ПАР ****************************
//************************************************************************
REGISTRATION = new Object();
REGISTRATION.StartUserEnter = function(btn) {
    v = Dialog.TestFormData(btn.form); //Получаем ассоциативный масссив данных из формы
    mesBox = d.getElementById('FormMessag');
    var error = ''; //DBG.ShowProperty(v);

    if (v['m_name'].match(rex.WordRU) || v['w_name'].match(rex.WordRU) || v['country'].match(rex.WordRU) || v['trainer'].match(rex.WordRU) || v['STK'].match(rex.WordRU)) error += 'Поля формы должны быть заполнены на англиском языке!<br>';
    else {
        if (!v['m_name'].match(rex.WordEN)) error += 'Error in Name of Men<br>';
        if (!v['w_name'].match(rex.WordEN)) error += 'Error in Name of Women<br>';
        if (!v['m_date'].match(/^\d\d.\d\d.\d\d\d\d$/)) error += 'Error in Date of birth of Men<br>';
        if (!v['w_date'].match(/^\d\d.\d\d.\d\d\d\d$/)) error += 'Error in Date of birth of Women<br>';

        if (!v['country'].match(rex.WordEN)) error += 'Error in Country<br>';
        if (!v['sity'].match(rex.WordEN)) error += 'Error in Sity<br>';
        if (!v['trainer'].match(rex.WordEN)) error += 'Error in Trainer<br>';
        if (!v['STK'].match(rex.WordEN)) error += 'Error in STK<br>';
        if (v['dclass'] == "Select class") error += 'Error! You must choose class<br>';
        if (v['group'] == "Select Age" || v['group'] == "Select class") error += 'Error! You must choose аge group<br>';
        if (v['LA'].length < 1 && v['ST'].length < 1) error += 'Error! You should choose LA or/and ST<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.Eval('registration.php', Dialog.ReadFormData(btn.form) + "&ContestDate=" + REGISTRATION.ContestDate, null);
    }
}
REGISTRATION.ShowAnsver = function(ansver) {
    box = d.getElementById('FormMessag'); 
    if (box) box.innerHTML = ansver; else alert("");
}

REGISTRATION.FillAgeList = function(dclass) {
    REGISTRATION.AgeList = d.getElementById("group");
    REGISTRATION.AgeList.innerHTML = "";
    for (var i in REGISTRATION.AgeClassList[dclass]) {
        REGISTRATION.AgeList.options.add(new Option(REGISTRATION.AgeClassList[dclass][i], REGISTRATION.AgeClassList[dclass][i]));
    }
    
}
REGISTRATION.LoadPairsTable = function() {
    Net.Eval('show.php', "ContestDate=" + REGISTRATION.ContestDate, null);
}

REGISTRATION.ShowTable = function() {
    d.getElementById("regform").style.display = "none";
    if (!REGISTRATION.PairsHeaderST) { REGISTRATION.LoadPairsTable(); return; }

    REGISTRATION.PairsHeaderST.shift();
    HTMLtabHeader = "<tr><th>№</th><th>" + REGISTRATION.PairsHeaderST.join("</th><th>") + "</th></tr>";

    HTML = "<h2 style='color:white'>Registered couples</h2><a style='color:white' href='javascript:REGISTRATION.ShowForm();'>Fill form again. Вернуться к заполнению формы</a><br><br><table align='center' class='pairsTable'><tr><th style='padding-top:30px;background:#2e8b57;color:white' colspan=" + (REGISTRATION.PairsHeaderST.length + 1) + "><h2> ST </h2></th></tr>";
    AgeGroup = "";
    n = 1;
    for (var i in REGISTRATION.PairsST) {
        if (!REGISTRATION.PairsST[i]) continue;
        if (REGISTRATION.PairsST[i][0] != AgeGroup) { n = 1; AgeGroup = REGISTRATION.PairsST[i][0]; HTML += "<tr><th class='ST' colspan=" + (REGISTRATION.PairsHeaderST.length + 1) + ">" + AgeGroup + "</th></tr>" + HTMLtabHeader; }
        REGISTRATION.PairsST[i].shift();
        HTML += "<tr class='ST'><td>" + n + "</td><td>" + REGISTRATION.PairsST[i].join("</td><td>") + "</td></tr>";
        n++;
    }

    REGISTRATION.PairsHeaderLA.shift();
    HTMLtabHeader = "<tr><th>№</th><th>" + REGISTRATION.PairsHeaderLA.join("</th><th>") + "</th></tr>";

    HTML += "<tr><th style='padding-top:30px;background:#ff7f50;color:white' colspan=" + (REGISTRATION.PairsHeaderLA.length + 1) + "><h2> LA </h2></th></tr>"
    AgeGroup = "";
    n = 1;
    for (var i in REGISTRATION.PairsLA) {
        if (!REGISTRATION.PairsLA[i]) continue;
        if (REGISTRATION.PairsLA[i][0] != AgeGroup) { n = 1; AgeGroup = REGISTRATION.PairsLA[i][0]; HTML += "<tr><th class='LA' colspan=" + (REGISTRATION.PairsHeaderLA.length + 1) + ">" + AgeGroup + "</th></tr>" + HTMLtabHeader; }
        REGISTRATION.PairsLA[i].shift();
        HTML += "<tr class='LA'><td>" + n + "</td><td>" + REGISTRATION.PairsLA[i].join("</td><td>") + "</td></tr>";
        n++;
    }


    d.getElementById("PairList").innerHTML = HTML + "</table><br><br><a style='color:white' href='javascript:REGISTRATION.ShowForm();'>Fill form again. Вернуться к заполнению формы</a>";
}
REGISTRATION.ShowForm = function() {
    d.getElementById("regform").style.display = "block";
    d.getElementById("PairList").innerHTML = "";
}