if(!mt4pips) throw 'mt4pips library not loaded';

$.extend(mt4pips, {
	userauth : {
		init : function(){
			$('#header .top-nav a.log-in').click(function(){ mt4pips.userauth.login.show(); return false; });
			$('#header .top-nav a.sign-up').click(function(){ mt4pips.userauth.register.show(); return false; });

			$(document).bind('mt4pips-loginShown', function(){ mt4pips.userauth.login.bind(); });
			$(document).bind('mt4pips-forgotpwShown', function(){ mt4pips.userauth.forgotpw.bind(); });
			$(document).bind('mt4pips-registerShown', function(){ mt4pips.userauth.register.bind(); });
		},
		login : {
			container : null,
			show : function(){
				var timestamp = new Date().getTime();
				this.container = $('#modal-content');
				this.container.load(mt4pips.config.url+'/signin?t='+timestamp, function(){
					$(document).trigger('mt4pips-loginShown');
					$('#popup-modal').addClass('popup-signup').modal();
				});
			},
			bind : function(){
				// cancel button
				this.container.find('#btn-cancel').click(function(){ $.modal.close(); return false; });
				
				// sign in form
				this.container.find('form').submit(function(){
					var form = this;
					$.post($(form).attr('action'), $(form).serialize(), function(data, textStatus){
						if(data.error){
							if($(form).find('ul.error_list').length == 0){
								var li = $('<li></li>').html( data.error );
								$('<ul></ul>').addClass('error_list').html( li ).insertBefore( $(form).find('#login_email') );
							}else
								$(form).find('ul.error_list li').html( data.error );
							$(document).trigger('mt4pips-loginError');
						}else if(data.success){
							if(typeof(_kmq) != 'undefined') {
								_kmq.push(['record', "Existing user logs in"]);
							}
							$(document).trigger('mt4pips-loginSuccess');
							setTimeout(function(){window.location = data.success.url;},1000);
						}
					}, 'json');
					return false;
				});
				
				$(document).bind('mt4pips-loginSuccess', function(){
					var container = mt4pips.userauth.login.container;
					container.find('#ajaxWait').remove();
					container.html('<div id="mt4pips-loginSuccess"><h2>Logged in! Just a sec...</h2></div>');
					container.ajaxWait({ id: 'ajaxWait2' });
				});
				
				// forgot password link
				this.container.find('p.forgot a').click(function(){ mt4pips.userauth.forgotpw.show(); return false; });
				
				$(document).trigger('mt4pips-loginBound');
			}
		},
		forgotpw : {
			container : null,
			show : function(){
				this.container = $('#modal-content');
				this.container.load(mt4pips.config.url+'/forgot/password', function(){
					$(document).trigger('mt4pips-forgotpwShown');
					$('#popup-modal').addClass('popup-signup').modal();
				});
			},
			bind : function(){
				// forgot password form
				this.container.find('form').submit(function(){
					var form = this;
					$.post($(form).attr('action'), $(form).serialize(), function(data, textStatus){
						mt4pips.userauth.forgotpw.container.html(data);
						$(document).trigger('mt4pips-forgotpwShown');
					});
					return false;
				});
				// cancel the forgot password, go back to login
				this.container.find('#btn-cancel').click(function(){ mt4pips.userauth.login.show(); return false; });
				
				$(document).trigger('mt4pips-forgotpwBound');
			}
		},
		register : {
			container : null,
			pending_submit : false,
			show : function(){
				this.container = $('#modal-content');
				this.container.load(mt4pips.config.url+'/signup', function(){
					$(document).trigger('mt4pips-registerShown');
					$('#popup-modal').addClass('popup-signup').modal();
				});
			},
			validation : {
				messages: {
					'register[nickname]': {
						required: 'Please specify a nickname to go by.',
						rangelength: 'Your nickname should be between 5 and 40 characters.',
						nowhitespace: 'Sorry, spaces in your nickname aren\'t allowed.',
						alphanumeric: 'Just letters and basic puncuation are allowed in your nickname.',
						remote: 'Sorry, that nickname is already taken.'
					},
					'register[email]': {
						required: 'Please specify an email for your account.',
						email: 'Your email is not a valid address.',
						remote: 'Sorry, that email is already in use.'
					},
					'register[password]': {
						required: 'You must provide a password!'
					}
				},
				onkeyup: false,
				onfocusout: function(elem) {
					that_elem = elem;
					setTimeout(function() {
						mt4pips.userauth.register.delayedValidation(that_elem);
					}, 100);
				},
				errorPlacement: function(error, element) {
					var li = $('<li></li>').html( error );
					$('<ul></ul>').addClass('error_list').html( li ).insertBefore( element );
				}
			},
			delayedValidation: function(elem) {
				if(mt4pips.userauth.register.pending_submit == true) {
					mt4pips.userauth.register.pending_submit = false;
					return true;
				}
				
				if($(elem).val().length > 0)
					$(elem).valid();
				
				return true;
			},
			bind : function(){
				var opts = $.extend(this.validation, {
					rules: {
						'register[nickname]': {
							required: true,
							rangelength: [5, 40],
							nowhitespace: true,
							alphanumeric: true,
							remote: mt4pips.config.url+'/signup/validate/nickname'
						},
						'register[email]': {
							required: true,
							email: true,
							remote: mt4pips.config.url+'/signup/validate/email'
						},
						'register[password]': {
							required: true,
							minlength: 5
						},
						'register[confirm_password]': {
							required: true,
							minlength: 5,
							equalTo: '#register_password'
						}
					},
					submitHandler: function(form) {
						$.post($(form).attr('action'), $(form).serialize(), function(data,status){
							if(typeof(_kmq) != 'undefined') {
								_kmq.push(['record', "User signs up"]);
							}
							mt4pips.userauth.register.container.html(data);
							$(document).trigger('mt4pips-registerShown');
						});
					}
				});
				this.container.find('form').validate(opts);
			
				this.container.find('form #btn-signup').click(function(){
					mt4pips.userauth.register.pending_submit = true;
					return true;
				});

				$(document).trigger('mt4pips-registerBound');
			}
		}
	}
});

$(document).bind('mt4pips-headerLoaded', mt4pips.userauth.init);

