  var winFormLogin=false;
  var msgErrorBox=new Roar({
        position: 'upperRight',
        className: 'roar-error',
        margin: {x: 30, y: 10}
      });	
  var msgNoticeBox=new Roar({
        position: 'upperRight',
        className: 'roar-notice',
        margin: {x: 30, y: 10}
      });
  
  var reino = {
    toggle: function(item) {
      $(item).toggle();
    },
    change: function(from, to) {
      $(from+'a').removeClass('current');
      $(from+'a').getChildren('span').addClass('ajaxs');
          $(from).setStyle('display', 'none');
          $(to+'a').addClass('current');
          $(to+'a').getChildren('span').removeClass('ajaxs');
          $(to).setStyle('display', 'block');
    },
    select: function(from, to) {
      $$('span.'+from).removeClass('selected');
      $$('div.'+from).setStyle('display', 'none');
      $('n'+to).addClass('selected');
      $$('.c'+to).setStyle('display', 'block');
    },
    dashboard: function(id, vars) {
      var op = $(id).getStyle( 'width' );
      var size = $(document.body).getSize();
      var myFx = new Fx.Morph(id);
      if ( op == '1px' ) {
        myFx.start({
          'opacity': [0,0.95],
          'width': [1,size.x],
          'height': [1,size.y]
        });
        reino.ajaxset( id, vars );
      } else {
        myFx.start({
          'opacity': [0.8,0],
          'width': [size.x,1],
          'height': [size.y,1]
        });      
      }
    },
    showForm: function(name) {
      if(!name) var name = 'login-form-content';
      if (!winFormLogin) {
        winFormLogin=new StickyWinModal({content: $(name).get('html'), closeClassName: 'close-block'});
      }
      winFormLogin.show();
      winFormLogin.pin(true);	
    },
    hideForm: function() {
      winFormLogin.hide();
    },
    notice: function(type, title, msg) {
      if(!type) {
        msgNoticeBox.alert(title,msg);
      } else {
        msgErrorBox.alert(title,msg);
      }
    },
    ajax: function(name,vars) {
      JsHttpRequest.query(
        '/index2.php',
        vars,
        function(result, errors) {
        	if (!result) {
            msgErrorBox.alert('Ошибка','Сервис временно недоступен');           
        	}
          if (result.bStateError) {
            if ( name ) {
              var element = document.getElementById(name);
              element.name = 'error';
              element.addClass( 'error' );
            }
            if ( result.sMsg ) {
              reino.notice(1,result.sMsgTitle,result.sMsg);
            }
          } else {
            if ( name ) {
              var element = document.getElementById(name);
              element.name = name;
              element.removeClass( 'error' );
            }
            if ( result.sMsg ) {
              reino.notice(0,result.sMsgTitle,result.sMsg);
            }
          }
        },
        false  // do not disable caching
      );
    },
    ajaxset: function(name,vars) {
      JsHttpRequest.query(
        '/index2.php',
        vars,
        function(result, errors) {
        	if (!result) {
            msgErrorBox.alert('Ошибка','Сервис временно недоступен');           
        	}
          if (result.bStateError) {
            if ( result.sMsg ) {
              reino.notice(1,result.sMsgTitle,result.sMsg);
            }
          } else {
            if ( name ) {
              var element = $(name);
              element.set( 'html', result.sMsg );
            }
          }
        },
        false  // do not disable caching
      );
    },
    ajaxlist: function(name,vars) {
      var container = $(name+'-dd');
      if ( container ) container.destroy();
      JsHttpRequest.query(
        '/index2.php',
        vars,
        function(result, errors) {
        	if (!result) {
            msgErrorBox.alert('Ошибка','Сервис временно недоступен');           
        	}
          if ( !result.bStateError ) {
            $(name).removeClass( 'error' );
          } else {
            $(name).addClass( 'error' );
          }
          if ( result.sMsg ) {
            var myValues = $(name).getCoordinates();
            var container = new Element('div', { 'id': name+'-dd', 'class': 'dd', 'styles': { 'position': 'absolute', 'left': myValues.left, 'top': myValues.top + myValues.height } } ).inject('container');
            result.sMsg.each(function(results, i) {
              var link = new Element('a', {'href': '#', 'onclick': 'reino.fill("'+name+'","'+results.name+'")','html': results.title } ).inject(container);
            });
          }
        },
        false  // do not disable caching
      );
    },
    fill: function(name,el){
      var container = $(name);
      container.setProperty('value',el);
      $$( '.dd' ).destroy();
      container.focus();
    },
    check_form: function(id) {
      var idRegex = /^([0-9]{1,})+$/;
      var loginRegex = /^([a-zA-Z0-9]{3,20})+$/;
      var passRegex = /^([a-zA-Z0-9]{5,})+$/;
      var emailRegex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
      var md5Regex = /^([0-9a-f]{32,})+$/;
      var errors = 0;
      $$( '#' + id + ' input' ).each(function(el) {
        var name = el.get('id');
        var value = el.get('value');
        if ( !value ) {
          el.addClass( 'error' );
          errors++;
        } else {
          el.removeClass( 'error' );
          switch( name )
          {
            case 'id':
              if ( !idRegex.test( value ) ) {
                reino.notice( 1, 'Ошибка', 'Значение введено неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
            case 'hash':
              if ( !md5Regex.test( value ) ) {
                reino.notice( 1, 'Ошибка', 'Значение введено неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
            case 'login':
              if ( !loginRegex.test( value ) ) {
                reino.notice( 1, 'Ошибка', 'Имя введено неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
            case 'passn':
              if ( !reino.check_password_strong( value ) ) {
                reino.notice( 1, 'Ошибка', 'Пароль введен неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
            case 'pass':
              if (!passRegex.test( value ) ) {
                reino.notice( 1, 'Ошибка', 'Пароль введен неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
            case 'repass':
              var passn = document.getElementById('passn');
              if( value != passn.value ) {
                reino.notice( 1, 'Ошибка', 'Пароль введен неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
            case 'email':
              if (!emailRegex.test( value ) ) {
                reino.notice( 1, 'Ошибка', 'E-mail введен неверно!' );
                errors++;
                el.addClass( 'error' );
              }
              break;
          }
        }
      });
      
      if( errors!=0 ) {
        return false;
      } else {
        return true;
      }
    },
    check_password_strong: function( value ) {
      var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
      var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
      var enoughRegex = new RegExp("(?=.{5,}).*", "g");
      if ( value.length == 0 ) {
        reino.notice(1,'Ошибка','Введите пароль!');
        return false;
      } else if ( false == enoughRegex.test( value ) ) {
        reino.notice(1,'Ошибка','Пароль слишком короткий!');
        return false;
      } else if ( strongRegex.test( value ) ) {
        reino.notice(0,'Успешно','Надежный пароль');
        return true;
      } else if ( mediumRegex.test( value ) ) {
        reino.notice(1,'Успешно','Средний пароль');
        return true;
      } else {
        reino.notice(1,'Успешно','Слабый пароль');
        return true;
      }
    }
  }
  
 function addField(btn){
        tr = btn;
        while (tr.tagName != 'TR') tr = tr.parentNode;
        var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
        checkFieldForLast();
  }
  function checkFieldForLast(){	
          btns = document.getElementsByName('drop_answer');      
          for (i = 0; i < btns.length; i++){
            btns[i].disabled = false;            
          }
          if (btns.length<=2) {
            btns[0].disabled = true;
            btns[1].disabled = true;
          }
  }
  function dropField(btn){	
          tr = btn;
          while (tr.tagName != 'TR') tr = tr.parentNode;
          tr.parentNode.removeChild(tr);
          checkFieldForLast();
  }
