//********************************************************
// Class LoginButton
// Display a button to login or logout
//
// use jQuery && librairies from TwitterLogin
// isNeededInscription : true if we need the part "inscription for a new user"
//********************************************************
var LoginButton = Class.create( {
initialize: function( param )
{
// Init
this.parent = param.parent ? param.parent : document.body;
this.anotherOnClickLogin = param.anotherOnClickLogin ? param.anotherOnClickLogin : false;
this.anotherOnClickLogout = param.anotherOnClickLogout ? param.anotherOnClickLogout : false;
this.jSONUser = param.jSONUser ? param.jSONUser : false;
this.urlLogin = param.urlLogin ? param.urlLogin : false;
this.urlLogout = param.urlLogout ? param.urlLogout : false;
this.classNameToAdd = param.classNameToAdd ? param.classNameToAdd : false;
this.isNeededInscription = param.isNeededInscription ? param.isNeededInscription : false;
this.callbackInscription = param.callbackInscription ? param.callbackInscription : false;
this.webmaster = param.webmaster ? param.webmaster : false;
// Texts
this.connexionText = param.connexionText ? param.connexionText : loginTexts["app.connexion"];
this.loginText = param.loginText ? param.loginText : loginTexts["login"];
this.pwdText = param.pwdText ? param.pwdText : loginTexts["login.password"];
this.submitText = param.submitText ? param.submitText : loginTexts["login.sign"];
this.forgotPText = param.forgotPText ? param.forgotPText : loginTexts["login.pwdForget"];
this.forgotUNPHelpText = param.forgotUNPHelpText ? param.forgotUNPHelpText : loginTexts["login.loginForget.help"];
this.forgotUNPText = param.forgotUNPText ? param.forgotUNPText : loginTexts["login.loginForget"];
this.inscriptionText = param.inscriptionText ? param.inscriptionText : loginTexts["login.inscription"];
this.errorText = param.errorText ? param.errorText : loginTexts[this.errors];
},
// GETTER / SETTER ********************************************************
setJSONUser: function( jSONUser )
{
this.jSONUser = jSONUser;
},
getJSONUser: function()
{
return this.jSONUser;
},
getJSONUserRole: function()
{
return this.jSONUser.role;
},
// ACTIONS ********************************************************
createLoginForm: function()
{
var containerLoginForm = $( document.createElement( "fieldset" ) );
containerLoginForm.attr( {id:"signin_menu"} );
this.parent.append( containerLoginForm );
var labelLogin = $( document.createElement( "label" ) );
labelLogin.attr( {for:"login"} );
labelLogin.html( this.loginText );
var inputLogin = $( document.createElement( "input" ) );
inputLogin.attr( {id:"login", name:"login", tabIndex:"4", type:"text"} );
containerLoginForm.append( labelLogin );
containerLoginForm.append( inputLogin );
var labelPwd = $( document.createElement( "label" ) );
labelPwd.attr( {for:"pwd"} );
labelPwd.html( this.pwdText );
var inputPwd = $( document.createElement( "input" ) );
inputPwd.attr( {id:"pwd", name:"pwd", tabIndex:"5", type:"password"} );
containerLoginForm.append( labelPwd );
containerLoginForm.append( inputPwd );
var inputSubmitP = $( document.createElement( "p" ) );
inputSubmitP.addClass( "remember" );
var inputSubmit = $( document.createElement( "input" ) );
inputSubmit.attr( {id:"signin_submit", value:this.submitText, tabIndex:"6", type:"submit"} );
inputSubmit.bind( "click", jQuery.proxy( this.onClickLogin, this ) );
inputSubmitP.append( inputSubmit );
containerLoginForm.append( inputSubmitP );
var inputForgotUNP = $( document.createElement( "p" ) );
inputForgotUNP.addClass( "username" );
var aForgotUNP = $( document.createElement( "a" ) );
aForgotUNP.attr( {id:"forgot_username_link", href:"mailto:" + this.webmaster + "?subject=login", title:this.forgotUNPHelpText} );
aForgotUNP.html( this.forgotUNPText );
inputForgotUNP.append( aForgotUNP );
containerLoginForm.append( inputForgotUNP );
var inputForgotP = $( document.createElement( "p" ) );
inputForgotP.addClass( "forgot" );
var aForgotP = $( document.createElement( "a" ) );
aForgotP.attr( {id:"resend_password_link", href:"mailto:" + this.webmaster + "?subject=password"} );
aForgotP.html( this.forgotPText );
inputForgotP.append( aForgotP );
containerLoginForm.append( inputForgotP );
if( this.isNeededInscription )
{
var inputInscription = $( document.createElement( "p" ) );
inputInscription.addClass( "inscription" );
var aInscription = $( document.createElement( "a" ) );
aInscription.attr( {id:"inscription_link", href:"#"} );
aInscription.html( this.inscriptionText );
aInscription.bind( "click", jQuery.proxy( this.onClickInscription, this ) );
inputInscription.append( aInscription );
containerLoginForm.append( inputInscription );
}
var divErrors = $( document.createElement( "div" ) );
divErrors.attr( {id:"errors", class:"containerErrors"} );
containerLoginForm.append( divErrors );
this.containerErrors = $( "#errors" );
},
display: function()
{
if( this.jSONUser )
{
var textLogin = this.jSONUser.name + " " + this.jSONUser.firstName + " (" + loginTexts[this.jSONUser.role] + ")";
var loginButton = new ComplexButton( {value:textLogin, parent:this.parent, id:"button_login", classNameToAdd: this.classNameToAdd} );
$( "#button_login #button_middle #button_text" ).addClass( "containerUserLogout" );
var loginMiddle = $( "#button_login #button_middle" );
var divImgLogout = $( document.createElement( "div" ) );
divImgLogout.addClass( "containerImgLogout" );
divImgLogout.append( "
" );
divImgLogout.bind( "click", jQuery.proxy( this.onClickLogout, this ) );
loginMiddle.append( divImgLogout );
}
else
{
this.createLoginForm();
var loginButton = new ComplexButton( {value:this.connexionText, parent:this.parent, id:"button_login", classNameToAdd: this.classNameToAdd} );
var loginMiddle = $( "#button_login #button_middle" );
loginMiddle.empty();
// loginMiddle.attr( {id:"topnav", class:"topnav complexButton_middle"} );
loginMiddle.attr( {id:"topnav"} );
var aLogin = $( document.createElement( "a" ) );
aLogin.attr( {id:"button_login_a", href:"login", class:"signin"} );
aLogin.html( "" + this.connexionText + "" );
loginMiddle.append( aLogin );
$( ".signin" ).click( function( e )
{
e.preventDefault();
$( "fieldset#signin_menu" ).toggle();
$( ".signin" ).toggleClass( "menu-open" );
} );
$( "fieldset#signin_menu" ).mouseup( function()
{
return false
} );
$( document ).mouseup( function( e )
{
if( 0 == $( e.target ).parent( "a.signin" ).length )
{
$( ".signin" ).removeClass( "menu-open" );
$( "fieldset#signin_menu" ).hide();
}
} );
}
},
updateLoginOrLogout: function()
{
this.parent.empty();
this.display();
},
displayLoginErrors: function ( text )
{
$( "#errors" ).show();
$( "#errors" ).html( text );
},
showLogin: function( text )
{
if( $( "fieldset#signin_menu" ) && $( ".signin" ) )
{
$( "fieldset#signin_menu" ).toggle();
$( ".signin" ).toggleClass( "menu-open" );
if( text )
this.displayLoginErrors( text );
}
else
alert( this.displayLoginErrors( text ) );
},
// REQUESTS ********************************************************
requestLogin: function()
{
if( !this.urlLogin )
return;
var login = $( "#login" ).val();
var pwd = $( "#pwd" ).val();
$.ajax( {
url: this.urlLogin + "&login=" + login + "&pwd=" + pwd,
success:jQuery.proxy( this.onHandleLogin, this )
} );
},
requestLogout: function()
{
if( !this.urlLogout )
return;
$.ajax( {
url: this.urlLogout,
success:jQuery.proxy( this.onHandleLogout, this )
} );
},
// HANDLES ********************************************************
onHandleLogin: function( result )
{
this.errors = jQuery.parseJSON( result ).errors;
this.setJSONUser( null != jQuery.parseJSON( result ).jSONUser ? jQuery.parseJSON( result ).jSONUser : false );
if( null == this.errors )
this.updateLoginOrLogout();
else
this.displayLoginErrors( loginTexts[this.errors] );
if( this.anotherOnClickLogin )
this.anotherOnClickLogin();
},
onHandleLogout: function( result )
{
this.errors = jQuery.parseJSON( result ).errors;
if( null == this.errors )
{
this.setJSONUser( false );
this.updateLoginOrLogout();
}
else
this.displayLoginErrors( loginTexts[this.errors] );
if( this.anotherOnClickLogout )
this.anotherOnClickLogout();
},
// EVENTS ********************************************************
onClickLogin: function()
{
this.containerErrors.hide();
this.requestLogin();
},
onClickLogout: function()
{
this.requestLogout();
},
onClickInscription: function()
{
this.containerErrors.hide();
if( this.callbackInscription )
this.callbackInscription();
}
} );