var mid = ['treemenu1', 'treemenu2'];

var sliderinfo = {'max' : 7}

function maketreemenu(){
  for (var i=0; i<mid.length; i++){
  if (!$('ul#' + mid[i]).length) continue;
  var ul=document.getElementById(mid[i]).getElementsByTagName("ul")
    for (var t=0; t<ul.length; t++){
      ul[t].parentNode.getElementsByTagName('a')[0].className = 'subfolder';   
      ul[t].style.left = ul[t].parentNode.parentNode.id==mid[i] ? ul[t].parentNode.offsetWidth + 'px' : ul[t-1].getElementsByTagName('a')[0].offsetWidth + 'px'
      ul[t].parentNode.onmouseover = function(){this.getElementsByTagName('ul')[0].style.display = 'block';}
      ul[t].parentNode.onmouseout = function(){this.getElementsByTagName('ul')[0].style.display = 'none'}
    }		
    for (var t=ul.length-1; t>-1; t--){
      ul[t].style.visibility = 'visible';
      ul[t].style.display = 'none';
    }
  }
}

function getresult(xml){
    //alert('xml = ' + xml);
    var info = {};
    var tag = Array('flag', 'error', 'id');
    for (var i=0; i <tag.length; i++){
        var node = xml.documentElement.getElementsByTagName(tag[i]);
        info[tag[i]] = node[0].textContent ? node[0].textContent : node[0].text;
    }
    return info;
}

function isvalidemail(email){
 return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i).test(email);
}

var info = {'checkcaptcha' : false, 'progressbar' : '<img src="/images/progressbar.gif" width="24" height="24" />'};

$(document).ready(function(){
  maketreemenu();
  $('.treemenu ul li a').hover(
      function(){
        if (!$(this).hasClass('aitem')){
         var content = $(this).hasClass('subfolder') ? linkbkg['in'] + ' url("/images/menu-arrow.png") no-repeat right -13px' : linkbkg['in'];
         $(this).css('background', content);
         $(this).css('color', linkcolor['in']);
        }
      },
      function(){
        if (!$(this).hasClass('aitem')){
         var content = $(this).hasClass('subfolder') ? linkbkg['out'] + ' url("/images/menu-arrow.png") no-repeat right 3px' : linkbkg['out']; //5px
         $(this).css('background', content);
         $(this).css('color', linkcolor['out']);               
        }
      }
   );    
   var mid = $.cookie('mid');
   if (mid){
     var id = '#' + mid;
     $(id).addClass('aitem')     
     var content = $(id).hasClass('subfolder') ? linkbkg['in'] + ' url("/images/menu-arrow.png") no-repeat right -13px' : linkbkg['in']; //-11px
     $(id).css('background', content);
     $(id).css('color', linkcolor['in']);
   }

   var url = document.URL;   
   if (url.match(/http:\/\/(?:[^\/]+?)\/(.+?)\/(\d+)/i)){ //[a-z0-9_]
     var path = RegExp.$1;
     var id = RegExp.$2;
     if (path.match(/^(?:topic|qa\/view|test)$/)){
       url =  '/bookmark/' + path + '/' + id + '.html';
       putblist(url); 
       url = '/commentform.php?id=' + id;
       //getcommentform(url);
     }     
   }

   if (url.match(/http:\/\/(?:[^\/]+?)\/topic_([a-z0-9_-]+)/i)){ 
     var a = RegExp.$1;     
     url =  '/bookmark/topic/' + a + '.html';
     putblist(url); 
   }
   

   function getcommentform(url){ // загружаем код формы
     $.ajax({
       type     : 'POST',
       url      : url,
       dataType : 'html',
       timeout  : 5000,
       success  : function(data){$('#comment').html(data); setcommentform();},
       error    : function(XMLHttpRequest, textStatus, errorThrown){}
     })
   }

   // поворот фигруки и установка скрытого поля
   function setico(obj, id){
     var v = -obj.getValue()*50 - obj.getValue();
     $('#captchaico' + id).css('margin-left', v);     
     $('#c' + id).val(obj.getValue());
   }

   // проверка кода
   function checkcaptcha(list){
       if (!list['msgid']) list['msgid'] = 'captchamsg'; 
       var url = '/notcaptcha/check.php?cw=' + $('#cw').val() + '&c1=' + $('#c1').val() + '&c2=' + $('#c2').val() + '&c3=' + $('#c3').val(); // + '&sid=' + Math.round(Math.random()*1000);
       //alert('url= ' + url);
       var flag = false;
       $.ajax({
           'type' : 'POST', 'url' : url, 'dataType' : 'text', 'cache' : false,
           'timeout' : 5000,
           'success' : function(data){
              if (data!=1){
                 $('#' + list['msgid']).html('неверный код, попробуйте еше раз'); 
              } else {
                 info.checkcaptcha = true;
                 reg();
                 //$('#' + list['formid']).submit();
              }
           },
           'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#' + list['msgid']).html('ошибка выполнения');}
      }) 
   }   
   function setcommentform(){      // создаем элементы и задем им обработчики
     $('#commentform').submit( // обработки формы отправки, делаем ajax-запрос для проверки
       function(){
         var list = {'msgid' : 'commentmsg', 'formid' : 'commentform'};
         if (info.checkcaptcha != true) checkcaptcha(list);
         return info.checkcaptcha;
       }
     );

     var s = []; // элементы управления
     for (i=1; i<4; i++){
       s[i] = new Slider(document.getElementById('slider-' + i), document.getElementById('slider-input-' + i));
       s[i].setMaximum(sliderinfo['max']);       
     }         
     // задаем обработчики
     s[1].onchange = function(){setico(this, 1)};
     s[2].onchange = function(){setico(this, 2)};
     s[3].onchange = function(){setico(this, 3)};
   }
   function putblist(url){
     $.ajax({
       'type' : 'GET', 'url' : url, 'dataType' : 'html', 'timeout'  : 5000,
       'success' : function(data){$('#hbookmark').html(data); $('#fbookmark').prepend($('#hbookmark').clone());},
       'error' : function(XMLHttpRequest, textStatus, errorThrown){}
     })
   }
   $('#ntlist').load('/new.html');
   $('#ptlist').load('/popular.html');

   function setmsgstatus(msgid, status){
     if (status == 'err'){
       $('#' + msgid).removeClass('okmsg');
       $('#' + msgid).addClass('errmsg');
     } else if (status == 'ok'){
       $('#' + msgid).removeClass('errmsg');
       $('#' + msgid).addClass('okmsg');
     }
   }

   function checklogin(data){
     var msg;
     if (data==1){
       msg = 'Логин свободен';
       setmsgstatus('regmsg', 'ok');
     } else {
       msg = 'Логин занят';
       setmsgstatus('regmsg', 'err');
     }
     $('#checklogin').attr('disabled', '');
     $('#regmsg').html(msg);
   }

   $('#checklogin').click(function(){
     var re = /^[a-z0-9_]+$/; 
     if (!re.test($('#rlogin').val())){
       $('#rlogin').focus();
       setmsgstatus('regmsg', 'err');
       $('#regmsg').html('Недопустимый логин');
       return false;
     }
     $('#checklogin').attr('disabled', 'disabled');
     $('#regmsg').html(info['progressbar']);
     var url = '/reg';
     var data = 'step=isfree&login=' + $('#rlogin').val(); //+ '&sid=' + Math.round(Math.random()*1000);
     $.ajax({ 'data' : data,
       'type' : 'POST', 'url' : url, 'dataType' : 'text', 'timeout'  : 5000, 'cache' : false, 
       'success' : function(r){checklogin(r);},                     
       'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#regmsg').html('');}
     })
   })

   // результат регистрации
   function checkreg(data){
     //alert('data = ' + data);
     var info = getresult(data);
     //alert('info = ' + info['flag']);
     if (info['flag'] == 1){
       $('#regformplace').html('<p>Поздравляем! Вы успешно зарегистрировались. На указанный вами почтовый адрес отправлено письмо со ссылкой подтверждения регистрации.</p>');
     } else {
       setmsgstatus('regmsg', 'err');
       $('#regmsg').html(info['error']);
     }
     $('#regbtn').attr('disabled', '');
   }

  function checkconfirm(data){
     //alert('checkconfirm');
     var info = getresult(data);
     if (info['flag'] == 1){
       $('#confirmformplace').html('<p>Поздравляем! Вы подтвердили регистрацию</p>');
       setuserinfo();
     } else {
       setmsgstatus('confirmmsg', 'err');
       $('#confirmmsg').html(info['error']);
     }
     $('#confirmbtn').attr('disabled', '');
   }
 
  function confirm(){
     //alert('confirm');
     $('#confirmbtn').attr('disabled', 'disabled'); // выключаем кнопку регистрации
     var url = '/confirm'; //step=confirm&
     var data = 'x=1&login=' + $('#rlogin').val() + '&ccode=' + $('#ccode').val();
     //alert('data = ' + data);
     $.ajax({ 'data' : data, 'cache' : false, 
       'type' : 'POST', 'url' : url, 'dataType' : 'xml', 'timeout'  : 5000,
       'success' : function(r){checkconfirm(r);},                     
       'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#confirmmsg').html(''); $('#confirmbtn').attr('disabled', '');}
     })
   }

   $('#confirmform').submit(
     function(){
       //alert('confirmform');
       confirm();
       return false;
     }
   );


   function reg(){
     $('#regbtn').attr('disabled', 'disabled'); // выключаем кнопку регистрации
     var url = '/reg';
     var data = 'x=1&step=reg&login=' + $('#rlogin').val() + '&pwd=' + $('#rpwd').val() + '&repwd=' + $('#rrepwd').val() + '&email=' + $('#remail').val();
     $.ajax({ 'data' : data, 'cache' : false, 
       'type' : 'POST', 'url' : url, 'dataType' : 'xml', 'timeout'  : 5000,
       'success' : function(r){checkreg(r);},                     
       'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#regmsg').html(''); $('#regbtn').attr('disabled', '');}
     })
   }
   
   $('#regform').submit( // обработки формы отправки, делаем ajax-запрос для проверки
       function(){         
         setmsgstatus('regmsg', 'err');
         var id = ['captchamsg', 'regmsg'];    
         for (var i in id) $('#' + id[i]).html(''); 
         if (!isvalidemail($('#remail').val())){
           $('#remail').focus();
           $('#regmsg').html('Неправильный email-адрес ' + $('#remail').val());
           return false;
         }
         var re = /^[a-z0-9_]+$/; 
         if (!re.test($('#rlogin').val())){
           $('#rlogin').focus();
           $('#regmsg').html('Недопустимый логин');
           return false;
         }
         if ($('#rlogin').val().length < 3 || $('#rlogin').val().length > 25){
           $('#rlogin').focus();
           $('#regmsg').html('Длина логина должна составлять от 3 до 25 символов включительно');
           return false;  
         }
         if (!re.test($('#rpwd').val())){
           $('#rpwd').focus();
           $('#regmsg').html('Недопустимый пароль');
           return false;
         }
         if ($('#rpwd').val().length < 6 || $('#rpwd').val().length > 12){
           $('#rpwd').focus();
           $('#regmsg').html('Длина пароля должна составлять от 6 до 12 символов включительно');
           return false;  
         }
         if ($('#rpwd').val() != $('#rrepwd').val()){
           $('#rrepwd').focus();
           $('#regmsg').html('Пароль и подтверждение пароля не совпадают');
           return false;
         }
         var list = {'msgid' : '', 'formid' : 'regform'};
         //if (info.checkcaptcha != true) checkcaptcha(list);         
         //return info.checkcaptcha;
         if (info.checkcaptcha != true){ 
           checkcaptcha(list);
         } else {
           reg();
         }
         return false;
       }
   );


// вывод блокирующий доступ к сайту формы авторизации
function authform(){$('#authmsg').html(''); $.blockUI({ message: $('#authform') });
}
// по клику ссылки 
$('#auth').live('click', function(){authform();});

// выход
$('#logout').live('click', function(){logout();});

$('#authbtn').live('click', function(){

/*
  $(this).attr('disabled', 'disabled'); // выключаем кнопку авторизации
  var url = '/auth';
  var data = 'x=1&step=auth&login=' + $('#alogin').val() + '&pwd=' + $('#apwd').val();
  $.ajax({ 
     'data' : data, 'cache' : false, 
     'type' : 'POST', 'url' : url, 'dataType' : 'xml', 'timeout'  : 5000,
     'success' : function(r){checkauth(r);},                     
     'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#authmsg').html(''); $(this).attr('disabled', '');}
  })
*/

auth();
})



function logout(){
  $.cookie('userinfo', null, {path: '/'}); 
  setuserinfo();
}


$("#authform").live('keydown', function(event){
  switch (event.keyCode) {    
    case 13: auth(); break;
    case 27: $.unblockUI({message: ''}); break;
    default:;
  }
});


// результат авторизации
function checkauth(data){
  var info = getresult(data);
  if (info['flag'] == 1){
    //$('#regformplace').html('<p>Поздравляем! Вы успешно зарегистрировались. На указанный вами почтовый адрес отправлено письмо со ссылкой подтверждения регистрации.</p>');
    $.unblockUI({message: ''});
    setuserinfo();
  } else {
    setmsgstatus('authmsg', 'err');
    $('#authmsg').html(info['error']);
  }
  $('#authbtn').attr('disabled', '');
}

function auth(){
     $('#authbtn').attr('disabled', 'disabled'); // выключаем кнопку авторизации
     var url = '/auth';
     var data = 'x=1&step=auth&login=' + $('#alogin').val() + '&pwd=' + $('#apwd').val();
     $.ajax({ 'data' : data, 'cache' : false, 
       'type' : 'POST', 'url' : url, 'dataType' : 'xml', 'timeout'  : 5000,
       'success' : function(r){checkauth(r);},                     
       'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#authmsg').html(''); $('#authbtn').attr('disabled', '');}
     })
   }

function setuserinfo(){
  var userinfo = $.cookie('userinfo'); 
  var p = document.getElementById('supmenu');
  p.innerHTML = '';
  if (userinfo != null && userinfo !=''){
    var d = document.createElement('div');
    d.className = 'supmenuitem';
    d.innerHTML = 'Вошли как: <b id="profile">' + userinfo.split('|')[0] + '</b>';
    p.appendChild(d);

    d = document.createElement('div');
    d.id = 'logout';
    d.className = 'supmenuitem';
    d.innerHTML = 'Выйти';
    p.appendChild(d);
  } else {
    d = document.createElement('div');
    d.id = 'auth';
    d.className = 'supmenuitem';
    d.innerHTML = 'Войти';
    p.appendChild(d);

    d = document.createElement('div');
    d.className = 'supmenuitem';
    d.innerHTML = '<a href="/reg">Зарегистрироваться</a>';
    p.appendChild(d);
    //alert('no user!');
  }
}


function setpage(r){
  $('#box').append(r);
  setuserinfo();
}

function initpage(){  


/*
<div class="supmenuitem" id="auth">Войти</div>
<div class="supmenuitem">Вошли как: <b>Мария</b></div>
<div class="supmenuitem" id="logout">Выйти</div>
*/
  $.blockUI.defaults.css = {}; // сброс настроек css для блокиратора
  $.blockUI.defaults.css.border = 0;
  $.blockUI.defaults.css.left = '35%';
  var list = getPageSize();
  $.blockUI.defaults.css.top = list[3]/2 - 50;
  var url = '/html/authform.html';
  $.ajax({  
    'type' : 'GET', 'url' : url, 'dataType' : 'html', 'timeout'  : 5000,
    'success' : function(r){setpage(r)},                     
    'error' : function(XMLHttpRequest, textStatus, errorThrown){$('#box').html('');}
  })
}


$('.fx').live('click', function(){ 
  $('#' + $(this).attr('win')).hide();
  $.unblockUI({message: ''});
})

/*
  $('.fxb').hover(
    function(){$(this).css('background-color', '#ff0000');},
    function(){$(this).css('background-color', 'transparent');}
  )
*/

  $('.fxb').live('mouseover',  function(){$(this).css('background-color', '#ff0000');})
  $('.fxb').live('mouseout',  function(){$(this).css('background-color', 'transparent');})
  

  $('.fxb').live('click', function(){$(this).css('background-color', 'transparent');})



initpage();

});


function getPageSize(){
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else if (document.documentElement && document.documentElement.scrollHeight > document.documentElement.offsetHeight){ // Explorer 6 strict mode
		xScroll = document.documentElement.scrollWidth;
		yScroll = document.documentElement.scrollHeight;
	} else { // Explorer Mac...would also work in Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) { // all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	return [pageWidth,pageHeight,windowWidth,windowHeight];
}
