var Signup = function() {
	
	this.ERR_MISSING_PARAMS = 'Please complete all fields.';
	this.ERR_BAD_USERNAME = 'Your username may only contain letters and numbers.';
	this.ERR_USERNAME_LENGTH = 'Your url must be between 3 and 30 characters in length.';
	this.ERR_MUST_AGGEE = 'You must agree to the Terms of Service.';
	this.ERR_PW_MUST_MATCH = 'Hmm, those passwords don\'t seen to match.';
	this.ERR_BETA_KEY = 'That doesn\'t appear to be a valid beta key.';
	this.ERR_DUP_USERNAME = 'Sorry, that url is not available. Please try another.';
	this.ERR_DUP_EMAIL = 'There is already an account with that email address.';
	this.ERR = 'Sorry, we are unable to process your request at this time.';
	this.BANNED_FB_UID = 'You cannot register with that Facebook user.';
	
	this.init = function() {
		if ($('signup')) {
			$('signup').observe('submit', 
				function(event) {
					event.stop();
					BF_Signup.signup();
				}
			);
		}
		
		if ($('username')) {
			$('username').observe('keyup',function(){ 
				$('bf_url_field').show();
				$('bf_url').update('http://buzzfeed.com/' + this.value);
			});
		}
		
		$$('div.field input').each(function(el){
			el.observe('focus',function(){
				el.parentNode.parentNode.addClassName('focused');
			});				
			el.observe('blur',function(){
				el.parentNode.parentNode.removeClassName('focused');
			});	
		});
		
		
	}
	
	this.signup = function() {
		$('message').update(this.ERR_MISSING_PARAMS);
		$('message').removeClassName('error');
		
		var name = $F('name').strip();
		var email = $F('bfe').strip();
		var username = $F('username').strip();
		var pw1 = $F('pw1').strip();
		var pw2 = $F('pw2').strip();
		var agreed = false;
		if($('agree').checked) {
			agreed = true;
		}
		var key = $F('key').strip();
		if(! name || ! email || ! username || ! pw1 || ! pw2 || ! key) {
			$('message').innerHTML = this.ERR_MISSING_PARAMS;
			$('message').addClassName('error');
		} else if (! username.match(/^[a-zA-Z0-9]+$/)) {
			$('message').innerHTML = this.ERR_BAD_USERNAME;
			$('message').addClassName('error');
		} else if ( username.size < 3 || username.size > 30 ) {
			$('message').innerHTML = this.ERR_USERNAME_LENGTH;
			$('message').addClassName('error');		
		} else if(pw1 != pw2) {
			$('message').innerHTML = this.ERR_PW_MUST_MATCH;			
			$('message').addClassName('error');
		} else if(! agreed) {
			$('message').innerHTML = this.ERR_MUST_AGGEE;			
			$('message').addClassName('error');			
		} else {
			var rr = function(resp) {
				BF_Signup.response(resp);
			}
			var er = function(resp) {
				BF_Signup.err(resp);
			}
			var params = { name: name, username: username, pw: pw1, email: email, key: key}
			$('submit').disabled = true; 
			new Ajax.Request('/buzzfeed/beta_signup', {method: 'get', parameters: params, onSuccess: rr, onFailure: er});			
		}
	}
	
	this.response = function(resp) {
		$('submit').disabled = false; 
		
		try {
			obj = eval('(' + resp.responseText + ')');
			if(! obj || ! obj.status) {
				this.err();			
			} else {
				if(obj.status == 'success') {
					$('success').show();
					$('signup').hide();					
				} else {
					if(obj.message == 'bad beta key') {
						$('message').innerHTML = this.ERR_BETA_KEY;
						$('message').addClassName('error');
					} else if(obj.message == 'duplicate username') {
						$('message').innerHTML = this.ERR_DUP_USERNAME;
						$('message').addClassName('error');
					} else if(obj.message == 'duplicate email') {
						if ( Facebook.uid ) {
							$('message').innerHTML = this.BANNED_FB_UID;
						}
						else {
							$('message').innerHTML = this.ERR_DUP_EMAIL;
						}
						$('message').addClassName('error');
					} else {
						this.err();
					}
				}
			}
		} catch(e) {
			console.error(e);
			this.err();
		}	
	}
	
	this.err = function() {
		$('submit').disabled = false; 		
		$('message').innerHTML = this.ERR;			
		$('message').addClassName('error');		
	}
	
}

var BF_Signup = new Signup();
Event.observe(window, 'load', function() {
	BF_Signup.init();
});
