
            GaasFactoryUser = function() {
                    
                    return {
                        
                       
                        login: function(username, password, successCallback, errorCallback){
                        
                            var beforeSend = null;
                            if (username != undefined && password != undefined) {
                                beforeSend = function(req){
                                    req.setRequestHeader('Authorization', 'Basic ' + Base64.encode(username + ':' + password));
                                }
                            }
                            
                            $.ajax({
                                'url': '/login/',
                                'dataType': 'json',
                                'method': 'GET',
                                "data": '',
                                'beforeSend': beforeSend,
                                'success': function(response){
                                    document.user = {
                                        'is_auth': true,
                                        'username': response.username,
                                        'nickname': response.nickname,
                                        'is_staff': response.is_staff,
                                        'email': response.email
                                    }
                                    if(successCallback!=undefined) {
                                        successCallback(response)
                                    }                                  
                                },
                                'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            });
                        },
                    logout: function(successCallback, errorCallback){
                        $.ajax({
                            'url': '/logout/',
                            'method': 'GET',
                            "data": '',
                            'success': function(response){
                                document.user = {
                                    'is_auth': false,
                                    'username': null,
                                    'nickname': null,
                                    'is_staff': false,
                                    'email': null
                                }
                                if(successCallback!=undefined) {
                                    successCallback(response)
                                } else {
                                    window.location.reload()
                                }
                                
                            },
                            'error': function(response){
                                if(errorCallback!=undefined) {
                                    errorCallback();
                                } else {
                                    alert(_('Can\'t logout'))
                                }
                            }
                        });
                    },
					
					getAccountStatus: function(mail, successCallback, errorCallback){
                        $.ajax({
                            'url': '/users/checkstatus/'+mail+'/',
                            'method': 'GET',
                            "data": '',
							'dataType': 'json',
                            'success': successCallback,
                             'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback(response);
                                    }
                                }
                        });
                    },
					
					
					sendActivationLink: function(mail, successCallback, errorCallback){
                        $.ajax({
                            'url': '/users/sendActivationLink/'+mail+'/',
                            'method': 'GET',
                            "data": '',
							'dataType': 'json',
                            'success': successCallback,
                            'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback(response);
                                    }
                                }
                        });
                    },
					
					isauth: function( successCallback, errorCallback){
                            
                            $.ajax({
                                'url': '/login/',
                                'dataType': 'json',
                                'method': 'GET',
                                "data": '',                                
                                'success': function(response){
                                    document.user = {
                                        'is_auth': true,
                                        'username': response.username,
                                        'nickname': response.nickname,
                                        'is_staff': response.is_staff,
                                        'email': response.email,
										'id' : response.id,
										'url' : response.url
                                    }
                                    if(successCallback!=undefined) {
                                        successCallback(response)
                                    }                                  
                                },
                                'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            });
                        },
					
					forgotPassword: function(username, successCallback, errorCallback){
                            
                            $.ajax({
                                'url': '/users/forgotPassword/',
                                'type' : 'POST',
                            	'dataType': 'json',
                                "data": {username : username},
                                
                                'success': function(response){
                                    if(successCallback!=undefined) {
                                        successCallback(response)
                                    }
                                    
                                },
                                'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                    
                                }
                            });
                        },
					
					toggleAccountActivation: function(userid, successCallback, errorCallback){
                            
                            $.ajax({
                                'url': '/users/toggleAccountActivation/',
                                'type' : 'POST',
                            	'dataType': 'json',
                                "data": {userid : userid},
                                
                                'success': function(response){
                                    if(successCallback!=undefined) {
                                        successCallback(response)
                                    }
                                    
                                },
                                'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                    
                                }
                            });
                        },
					
					disableAccount: function(userid, successCallback, errorCallback){
                            
                            $.ajax({
                                'url': '/users/disableAccount/',
                                'type' : 'POST',
                            	'dataType': 'json',
                                "data": {userid : userid},
                                
                                'success': function(response){
                                    if(successCallback!=undefined) {
                                        successCallback(response)
                                    }
                                    
                                },
                                'error': function(response){
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                    
                                }
                            });
                        },
				
					setLocation: function(userid, longitude,latitude, successCallback,errorCallback) {							
						this._setData(userid, {lon: longitude,lat: lat}, successCallback,errorCallback);
                    },
                    
					setData: function(userid, data, successCallback,errorCallback) {
                       this._setData(userid, data, successCallback,errorCallback);
                    },
					
					setComment : function (userid, data, successCallback,errorCallback) {
						this._setData(userid, data, successCallback,errorCallback, '/profile/setQuestionAnswers/');
					},
					
					removeMemberFromGroup : function (userid, groupid, successCallback,errorCallback) {
						this._setData(userid, {'action' : 'removeMember', 'groupid' : groupid}, successCallback,errorCallback, '/profile/manageGroups/');
					},
					
					addMemberToGroup : function (userid, groupid, successCallback,errorCallback) {
						this._setData(userid, {'action' : 'addMember', 'groupid' : groupid}, successCallback,errorCallback, '/profile/manageGroups/');
					},
					
					
					setEditorialEmailling : function (userid, groupid, successCallback,errorCallback) {
						this._setData(userid, { 'groupid' : groupid}, successCallback,errorCallback, '/profile/setEditorialEmailling/');
					},
					
					_setData: function(userid, data, successCallback,errorCallback, url) {
						
						if (url == undefined || url == null) {
							url = '/users/set/';
						}
						
						$.ajax({
                            'url' : url + userid+'/',
                            'type' : 'POST',
                            'dataType': 'json',
                            "data" : data,
                            'success': function(response) {	
                                if (response.success) {
									
                                     if(successCallback!=undefined) {
                                         successCallback(response)
                                     }
                                } else {
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            },
                            'error': function(response) {
                                if(errorCallback!=undefined) {
                                    errorCallback();
                                }
                          }
                        });
					},
					
					getNewslettersConfig : function (userid,  successCallback,errorCallback) {
						this._getData(
								userid, 
								{ fields: ''}, 
								successCallback,
								errorCallback, '/profile/getNewslettersList/')
					},
					
					getEditorialEmaillingConfig : function (userid,  successCallback,errorCallback) {
						this._getData(
								userid, 
								{ fields: ''}, 
								successCallback,
								errorCallback, '/profile/getEditorialEmaillingConfig/')
					},
					
					getData: function(userid, fields, successCallback,errorCallback) {
						this._getData(
								userid, 
								{ fields: fields.join(',')}, 
								successCallback,
								errorCallback)
					},
					
                    _getData: function(userid, data, successCallback,errorCallback, url) {
                       	if (url == undefined || url == null) {
							url = '/users/get/';
						}
					    $.ajax({
                            'url' : url + userid+'/',							
                            'type' : 'POST',
                            'dataType': 'json',
							'data' : data,                            
                            'success': function(response) {
                                if (response.success) {
                                     if(successCallback!=undefined) {
                                         successCallback(response)
                                     }
                                } else {
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            },
                            'error': function(response) {
                                if(errorCallback!=undefined) {
                                    errorCallback();
                                }
                          }
                        });
                    },
                    register : function(email, password, pseudo, successCallback,errorCallback) {
                        
                        $.ajax({
                            'url' : '/users/register/',
                            'type' : 'POST',
                            'dataType': 'json',
                            "data" : {
                                lang: document.site_lang,
                                email: email,
                                password: password,
                                pseudo: pseudo
                            },
                            'success': function(response) {
                                if (response.success) {
                                     if(successCallback!=undefined) {
                                         successCallback(response)
                                     }
                                } else {
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            },
                            'error': function(response) {
                                if(errorCallback!=undefined) {
                                    errorCallback();
                                }
                          }
                        });
                    },
                     changePassword : function(userid, oldPassword, newPassword, successCallback,errorCallback) {
                        
                        $.ajax({
                            'url' : '/users/changePassword/'+userid+'/',
                            'type' : 'POST',
                            'dataType': 'json',
                            "data" : {
                                oldPassword: oldPassword,
                                newPassword: newPassword
                            },
                            'success': function(response) {
                                if (response.success) {
                                     if(successCallback!=undefined) {
                                         successCallback(response)
                                     }
                                } else {
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            },
                            'error': function(response) {
                                if(errorCallback!=undefined) {
                                    errorCallback();
                                }
                          }
                        });
                    },
					
					changeEmail : function(userid, email, successCallback,errorCallback) {
                        
                        $.ajax({
                            'url' : '/users/changeEmail/'+userid+'/',
                            'type' : 'POST',
                            'dataType': 'json',
                            "data" : {
                                email: email                               
                            },
                            'success': function(response) {
                                if (response.success) {
                                     if(successCallback!=undefined) {
                                         successCallback(response)
                                     }
                                } else {
                                    if(errorCallback!=undefined) {
                                        errorCallback();
                                    }
                                }
                            },
                            'error': function(response) {
                                if(errorCallback!=undefined) {
                                    errorCallback();
                                }
                          }
                        });
                    },
					
                     popup_login: function() {
                       jQuery.facebox('\
                            <div id="login_popup" class="popedit"> \
                               <form id="login_popup_form"> \
                                    <h1>' + _('Login') + '</h1> \
                                    <p class="field classic-field clear"> \
                                        <label for="username">' +_('Email') +'</label> \
                                        <input class="text-input-huge" id="username" name="username" type="text" /> \
                                    </p> \
                                    <p class="small quiet">' +_('For a few weeks, you can also login with your old username') +'</p>\
                                    <p class="field classic-field clear"> \
                                        <label for="password">' +_('Password') +'</label> \
                                        <input class="text-input-huge" id="password" name="password" type="password" /> \
                                    </p> \
                                    <div id="login_error" ></div>\
                                    <p class="field submit-field clear"> \
                                        <strong> \
                                            <input type="submit" id="submit-text" value="' +_('Submit') +'" class="submit-input submit-green" name="submit-text" autocomplete="off" /> \
                                            <span class="submit-input submit-cancel" onClick="$.facebox.close(); return;" >' +_('Cancel') +'</span>\
                                        </strong> \
                                    </p>' + 
                                    //<p class="small quiet">'+_('CLick here if you <a href="/'+document.site_lang+'/profile/forgotpassword/">forgot your login</a>')+'.</p>\
                                '</form> \
                            </div>'
                       )
                       $("#login_popup_form").submit( function(param) {
                          username = $("#login_popup_form #username").val();
                          password = $("#login_popup_form #password").val();
						  
						 
						  
                          if (username!='' && password !='') {
                              GaasFactoryUser.login(username,password, function() {
                                  $("#login_error").empty();
                                  
                                  $("#login_popup").before('<div id="success" class="popedit" style="display:none">\
                                                <div class="success-smiley"><strong>:-)</strong><span>'+_("Welcome!")+'</span></div>\
                                            </div>');
                                  
                                  $("#login_popup").fadeOut("normal", function(){
                                      $("#success").fadeIn("normal", function(){
                                          window.location.reload();
                                      })
                                  })
                                  
                              }, function() {
							  	  GaasFactoryUser.getAccountStatus(
								  	username,
									function (response) {
										if (response.success == true && response.is_active == false) {											
											$("#login_error").html('<p class="field invalid clear">' + _("This account is disabled, click <a href='#'>here</a> to send an activation link.") + '</p>')
											
											$('#login_error a').click(
												function () {
													
													GaasFactoryUser.sendActivationLink(username,
														function (response) {
															if (response.success == true) {
																$("#login_error").html('<p class="field invalid clear">' + _("Mail sent ! Please check your mailbox and follow instructions.") + '</p>')
															} else {
																$("#login_error").html('<p class="field invalid clear">' + _('A server error occured') + ': ' + response.error + '.</p>');
															}
														},
														
														function (response) {
															$("#login_error").html('<p class="field invalid clear">' +_('A server error occured.') + '</p>');
														}
													);
													
													return false;
												}
											);
											
										} else {
											 $("#login_error").html('<p class="field invalid clear">' + _("An error occured. Please try again.") + '</p>')
										}
									},
									
									function () {
										 $("#login_error").html('<p class="field invalid clear">' + _("An error occured. Please try again.") + '</p>')
									}
								  	
								  );
								
                                 
                              })
                          }
                          return false; 
                       });
                    },
                     popup_forgotpassword: function() {
                       jQuery.facebox('\
                            <div id="forgotpassword_popup" class="popedit"> \
                               <form id="forgotpassword_popup_form"> \
                                    <h1>' + _('Forgot your password') + ' ?</h1> \
                                    <p class="form-intro">' + _('If you have lost your password, a new one will be sent to your e-mail. Please provide your e-mail or your old username in the field below :') + '</p>\
                                    <p class="field classic-field clear"> \
                                        <label for="username">' +_('Email') +'</label> \
                                        <input class="text-input" id="username" name="username" type="text" /> \
                                    </p> \
                                    <div id="login_error" ></div>\
                                    <p class="field submit-field clear"> \
                                        <strong> \
                                            <input type="submit" id="submit-text" value="' +_('Submit') +'" class="submit-input submit-green" name="submit-text" autocomplete="off" /> \
                                            <span class="submit-input submit-cancel" onClick="$.facebox.close(); return;" >' +_('Cancel') +'</span>\
                                        </strong> \
                                    </p>\
									</form> \
                            </div>'
                       )
                       $("#forgotpassword_popup_form").submit( function(param) {
                          username = $("#forgotpassword_popup_form #username").val()                          
                          if (username!='' ) {
                              GaasFactoryUser.forgotPassword(username, function(response) {
							  	  if (response.success == true) {
								  		$("#login_error").empty();
                                        $("#forgotpassword_popup").before(
                                            '<div id="success"  class="popedit" style="display:none">\
                                                <div class="success-smiley"><strong>:-)</strong><span>'+_("Password reset")+'</span></div>\
                                                <p class="form-intro context-info">'+_('Your new password has been sent to your e-mail address. Check your e-mails and come back soon.')+'</p>\
                                                <p class="field submit-field clear"> \
                                                    <strong> \
                                                        <span class="submit-input submit-green" onClick="$.facebox.close(); return;" >' +_('Close') +'</span>\
                                                    </strong> \
                                                </p>\
                                            </div>');
                                            
                                        $("#forgotpassword_popup").fadeOut("normal", function(){
                                              $("#success").fadeIn("normal")
                                        });
                                        
								  } else {
								  		$("#login_error").html('<p class="field invalid clear">' + _("An error occured") +' : ' +  response.error + '</p>')
								  }
                                  
                              }, function() {
                                  
                                  //alert('Login error');
                              })
                          }
                          return false; 
                       });
                    }
                }
            }();
            
