var RegFormController=function() {
    
	var _self=this;var _messages;this.setMessages=function(messages){
        _messages=messages;
    }
    
    this.isFormOpened=function() {
        return!$("#divLoginForm").hasClass("hide");
    }
    
    this.registerFormOpenEvent=function() {
        $("#divRegForm input[type=button]").bind("click",_submitEvent);
    }
    
    var _submitEvent=function(event) {
        $("#divRegForm .error").remove();var errors=_validate();if(errors.length) {
            _drawErrors(errors);return false;
        }
        else{
            return _checkReg();
        }
    }
    
    var _validate=function() {
        var errors=[];
        _email=$("#divRegForm input[name=email]").attr("value");
        re=new RegExp("^([a-zA-Z0-9_!\"\#\$\%\&\'\*\.\+\/\=\?\{\|\}\~\`-]+?)@([a-zA-Z0-9_-]+\.){1,3}([a-zA-Z]){2,4}$");
        if(!re.test(_email)){
            errors.push("illegal_email");
        }
        _login=$("#divRegForm input[name=login]").attr("value");
        if(!_login||!_login.match(/^[-a-z0-9_@\.]{4,30}$/i)) {
            errors.push("illegal_login");
        }
        _password=$("#divRegForm input[name=password]").attr("value");if(!_password||!_password.match(/^.{4,20}$/i)){
            errors.push("illegal_password");
        }
        else{
            _repeatpassword=$("#divRegForm input[name=password_confirm]").attr("value");if(_repeatpassword!=_password){
                errors.push("illegal_repeatpassword");
            }
        }
        return errors;
    }
    
    var _checkReg=function(){
        $("#divRegForm input[type=button]").attr('value','Подождите...');
        $("#divRegForm input[type=button]").attr("disabled",true);
        $.post("/ajaxcheckreg/","login="+_login+"&email="+_email,_callbackCheckReg,"json");
    }
    
    var _callbackCheckReg=function(js){
        if(js.success==0){
            $("#divRegForm input[type=button]").attr('value','Зарегистрироваться...');
            $("#divRegForm input[type=button]").attr("disabled",false);
            $("#divRegForm form").before('<p class="error">'+js.errors+'</p>');
        }else{
            $("#divRegForm input[type=button]").attr("disabled",true);
            $("#divRegForm form").submit();
        }
    }
    
    var _drawErrors=function(errors) {
        _translate(errors);
        errorStr='';
        $.each(errors,function(idx,error){
            errorStr+=error+'<br/>';
        });
        $("#divRegForm form").before('<p class="error">'+errorStr+'</p>');
    }
    
    var _translate=function(errors) {
        for(var i=0;i<errors.length;i++) {
            if(_messages.regErrors[errors[i]]!='') {
                errors[i]=_messages.regErrors[errors[i]];
            }
         }
    }
}

var LoginFormController=function() {
    var _self=this;var _messages;this.setMessages=function(messages){
        _messages=messages;
    }
    this.loginFormOpenEvent=function(){
        $("#divLoginForm input[type=button]").bind("click",_submitEvent);
    }
    var _submitEvent=function(event){
        $("#divLoginForm .error").remove();
        var errors=_validate();
        if(errors.length){
            _drawErrors(errors);return false;
        }
        else{
            return _checkLogin();
        }
    }
    var _validate=function(){
        var errors=[];
        _login=$("#divLoginForm input[name=login]").attr("value");
        if(!_login||!_login.match(/^[-a-z0-9_@\.]{4,30}$/i)){
            errors.push("illegal_login");
        }
        _password=$("#divLoginForm input[name=password]").attr("value");
        if(!_password||!_password.match(/^.{4,20}$/i)){
            errors.push("illegal_password");
        }
        return errors;
    }
    var _checkLogin=function(){
        $("#divLoginForm input[type=button]").attr('value','Подождите...');
        $("#divLoginForm input[type=button]").css('margin-right','10px');
        $("#divLoginForm input[type=button]").attr("disabled",true);
        $.post("/ajaxlogin/","login="+encodeURIComponent(_login)+"&password="+encodeURIComponent(_password),_callbackCheckLogin,"json");
    }
    var _callbackCheckLogin=function(js){
        if(js.success==0){
            $("#divLoginForm input[type=button]").attr('value','Войти');
            $("#divLoginForm input[type=button]").css('margin-right','40px');
            $("#divLoginForm input[type=button]").attr("disabled",false);
            $("#divLoginForm form").before('<p class="error">Неверные логин или пароль</p>');
        }else{
            $("#divLoginForm input[type=button]").attr("disabled",true);$("#divLoginForm form").submit();
        }
    }
    var _drawErrors=function(errors){
        _translate(errors);errorStr='';
        $.each(errors,function(idx,error){
            errorStr+=error+'<br/>';
        });
        $("#divLoginForm form").before('<p class="error">'+errorStr+'</p>');
    }
    
    var _translate=function(errors){
        for(var i=0;i<errors.length;i++){
            if(_messages.loginErrors[errors[i]]!=''){
                errors[i]=_messages.loginErrors[errors[i]];
        	}
    	}
	}
}

//***************************************************************************

$(document).ready(function() {
	$('#open-reg-form').hover(function(event) {
	    $('#open-reg-form-over').addClass('block2-over');
	},function() {
	    $('#open-reg-form-over').removeClass('block2-over');
	});
	
	$('#open-reg-form-over a').hover(function(event) {
	    $('#open-reg-form-over').addClass('block2-over');_dr=$('#aboutcalend');$('#aboutcalend').show();
	},function(){
	    $('#open-reg-form-over').removeClass('block2-over');$('#aboutcalend').hide();
	});
	
	$('#open-reg-form, #open-reg-form-over > a').bind('click',function() {
	    $('#aboutcalend').hide();
	    $('#open-reg-form-over, #menu-3').hide();
	    var regText=$('#open-reg-form').text();
	    var loginText=$('#open-login-form').text();
	    $('#open-login-form').empty().text(loginText).removeAttr('style');
	    $(this).css('border','none').wrapInner('<span></span>');
	    if($('#menu-2').is(':visible')){
	        $('#menu-2').fadeOut('fast');
	        $('#open-reg-form-over').show();
	        $('#open-reg-form').empty().text(regText).removeAttr('style');
	        $('#open-login-form').empty().text(loginText).removeAttr('style');
	    }
	    else {
	        var docHeight=$(document).height();
	        $('#close-layer').show().css('height',docHeight+'px');
	        $('#menu-2').fadeIn('fast');
	        $('#reg-email').focus();
	        $('#close-layer').bind('click',function(){
	            $('#menu-2').hide();
	            $('#open-reg-form-over').show();
	            $('#open-reg-form').empty().text(regText).removeAttr('style');
	            $('#open-login-form').empty().text(loginText).removeAttr('style');
	            $('#close-layer').hide();
	            $('#close-layer').unbind('click');
	            $('#menu-2').unbind('mouseenter mouseleave');
	        });
	    }
	    return false;
	});
	
	$('#open-login-form').live('click',function() {
	    $('#open-reg-form-over, #menu-2').hide();
        var regText=$('#open-reg-form').text();
        var loginText=$('#open-login-form').text();
        $('#open-reg-form').empty().text(regText).removeAttr('style');
        $(this).css('border','none').wrapInner('<span></span>');
        if($('#menu-3').is(':visible')) {
            $('#menu-3').fadeOut('fast');
            $('#open-reg-form-over').show();
            $('#open-reg-form').empty().text(regText).removeAttr('style');
            $('#open-login-form').empty().text(loginText).removeAttr('style');
        }
        else {
        	var docHeight=$(document).height();
        	$('#close-layer').show().css('height',docHeight+'px');
        	$('#menu-3').fadeIn('fast');
        	$('#fieldLoginReal').focus();
        	$('#close-layer').bind('click',function()
        	{
            	$('#menu-3').hide();
            	$('#open-reg-form-over').show();
            	$('#open-reg-form').empty().text(regText).removeAttr('style');
            	$('#open-login-form').empty().text(loginText).removeAttr('style');
            	$('#close-layer').hide();
            	$('#close-layer').unbind('click');
            	$('#menu-3').unbind('mouseenter mouseleave');
        	});
      	}
        return false;
    });

    var lfc=new LoginFormController();
    lfc.setMessages(messages);
    lfc.loginFormOpenEvent();
    
    var rfc=new RegFormController();
    rfc.setMessages(messages);
    rfc.registerFormOpenEvent();

});	
