var Register = {
	did_submit:false,
	status_messages:0,
	type:'user',
	add_member:function(element) {
		var x = ($('members').childElements().length/2)+1;
		$('members').appendChild(new Element('input',{class:'hint',id:'register_member_first_'+x,name:'member_first['+x+']',onblur:'Container.toggle_hint(this.id,true,\'First Name\');',onfocus:'Container.toggle_hint(this.id,false,\'First Name\');',type:'text',value:'First Name'}));
		$('members').appendChild(new Element('input',{class:'hint',id:'register_member_last_'+x,name:'member_last['+x+']',onblur:'Container.toggle_hint(this.id,true,\'Last Name\');',onfocus:'Container.toggle_hint(this.id,false,\'Last Name\');',type:'text',value:'Last Name'}));
	},
	add_error:function(message,element,element_2) {
		if(message) {
			var shown = false;
			element.up('fieldset').childElements().each(function(e) {
				if(e.nodeName=='P'&&(e.innerHTML=='- '+message)) {
					shown = true;
					return true;
				}
			});
			if(!shown) { element.up('fieldset').insert('<p>- '+message+'</p>'); }
		}
		element.setStyle({background:'#ebbcbc',borderColor:'#900',color:'#900'});
		if(element_2) { element_2.setStyle({background:'#ebbcbc',borderColor:'#900',color:'#900'}); }
	},
	remove_error:function(messages,element,element_2) {
		element.setStyle({background:'#bcebbc',borderColor:'#090',color:'#090'});
		if(element_2) { element_2.setStyle({background:'#bcebbc',borderColor:'#090',color:'#090'}); }
		var count = messages.length;
		element.up('fieldset').childElements().each(function(e) {
			if(e.nodeName=='P') {
				for(m=0;m<count;++m) {
					if(e.nodeName=='P'&&(e.innerHTML=='- '+messages[m])) {
						e.remove();
						return true;
					}
				}
			}
		});
		return true;
	},
	validate:function() {
		// Name
		var error = false;
		var default_values = {
			firstname:'Your First Name',
			lastname:'Your Last Name',
			email:'Your Email Address',
			username:'Preferred Username',
			groupname:'Your Group\'s Name'
		};
		var alert_messages = {
			firstname:[
				'Please provide a first name.',
				'First name must have at least 2 characters.',
				'First name cannot exceed 40 characters.'
			],
			lastname:[
				'Please provide a last name.',
				'Last name must have at least 2 characters.',
				'Last name cannot exceed 40 characters.'
			],
			groupname:[
				'Please provide a group name.',
				'Group name must have at least 2 characters.',
				'Group name cannot exceed 255 characters.'
			]
		};
		if(Register.type==='user') {
			field = ['firstname','lastname'];
			for(i=0;i<2;++i) {
				this.remove_error(alert_messages[field[i]],$('register_'+field[i]));
				if(!$('register_'+field[i]).value||$('register_'+field[i]).value==default_values[field[i]]) {
					this.add_error(alert_messages[field[i]][0],$('register_'+field[i]));
					error = true;
				}
				else if($('register_'+field[i]).value.length<2) {
					this.add_error(alert_messages[field[i]][1],$('register_'+field[i]));
					error = true;
				}
				else if($('register_'+field[i]).value.length>40) {
					this.add_error(alert_messages[field[i]][2],$('register_'+field[i]));
					error = true;
				}
			}
			
			// Gender
			alert_messages = ['Please select your gender.'];
			this.remove_error(alert_messages,$('register_gender_male'),$('register_gender_femail'));
			if(Register.type=='user'&&!$('register_gender_male').checked&&!$('register_gender_female').checked) {
				this.add_error(alert_messages[0],$('register_gender_male'),$('register_gender_female'));
				error = true;
			}
		}
		else {
			field = ['groupname'];
			this.remove_error(alert_messages[field[0]],$('register_'+field[0]));
			if(!$('register_'+field[0]).value||$('register_'+field[0]).value==default_values[field[0]]) {
				this.add_error(alert_messages[field[0]][0],$('register_'+field[0]));
				error = true;
			}
			else if($('register_'+field[0]).value.length<2) {
				this.add_error(alert_messages[field[0]][1],$('register_'+field[0]));
				error = true;
			}
			else if($('register_'+field[0]).value.length>255) {
				this.add_error(alert_messages[field[0]][2],$('register_'+field[0]));
				error = true;
			}
		}
		
		// Email
		if($('register_email').value!=default_values['email']) { $('register_email').value = $('register_email').value.replace(/ /g,''); }
		alert_messages = [
			'Please enter a valid email address.',
			'Email cannot exceed 250 characters.',
			'Sorry, but your email does not appear to be valid.',
			'Sorry, but that email is already in use.'
		];
		this.remove_error(alert_messages,$('register_email'));
		if(!$('register_email').value||$('register_email').value==default_values['email']) {
			this.add_error(alert_messages[0],$('register_email'));
			error = true;
		}
		else if($('register_email').value.length>=250) {
			this.add_error(alert_messages[1],$('register_email'));
			error = true;
		}
		else if(!$('register_email').value.match(/^[\d\w\/+!=#|$?%{^&}*`'~-][\d\w\/\.+!=#|$?%{^&}*`'~-]*@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/ig)||$('register_email').value.indexOf('..')!=-1||$('register_email').value.indexOf(".@")!=-1) {
			this.add_error(alert_messages[2],$('register_email'));
			error = true;
		}
		else {
			new Ajax.Request(engineURL,{
				method:'post',parameters:{ control:'register',value:$('register_email').value },onComplete:function(transport) {
					if(transport.responseText==1) {
						Register.add_error('Sorry, but that email is already in use.',$('register_email'));
						error = true;
					}
				}
			});
		} 
		
		// Username
		if($('register_username').value!=default_values['username']) { $('register_username').value = $('register_username').value.replace(/ /g,''); }
		alert_messages = [
			'Please enter your desired username.',
			'Username must have at least 4 characters.',
			'Username cannot exceed 20 characters.',
			'Sorry, but your username contains invalid characters. (Numbers, Letters, and underscores only).',
			'Sorry, but that username is already in use or is denied.'
		];
		this.remove_error(alert_messages,$('register_username'));
		if(!$('register_username').value||$('register_username').value==default_values['username']) {
			this.add_error(alert_messages[0],$('register_username'));
			error = true;
		}
		else if($('register_username').value.length<4) {
			this.add_error(alert_messages[1],$('register_username'));
			error = true;
		}
		else if($('register_username').value.length>20) {
			this.add_error(alert_messages[2],$('register_username'));
			error = true;
		}
		else if(!$('register_username').value.match(/^([a-z0-9_]+)$/ig)) {
			this.add_error(alert_messages[3],$('register_username'));
			error = true;
		}
		else {
			new Ajax.Request(engineURL, {
				method:'post',parameters:{ control:'register',value:$('register_username').value },onComplete:function(transport) {
					if(transport.responseText==1) {
						Register.add_error('Sorry, but that username is already in use.',$('register_username'));
						error = true;
					}
				}
			});
		}
		
		// Password
		alert_messages = [
			'Please enter a password.',
			'Please confirm your password.',
			'Password must be at least 5 characters.',
			'Password cannot exceed 40 characters.',
			'Please make the confirmation password matches your password.'
		];
		this.remove_error(alert_messages,$('register_password'),$('register_password_confirm'));
		if(!$('register_password').value) {
			this.add_error(alert_messages[0],$('register_password'));
			error = true;
		}
		else if(!$('register_password_confirm').value) {
			this.add_error(alert_messages[1],$('register_password_confirm'));
			error = true;
		}
		else if($('register_password').value.length<5) {
			this.add_error(alert_messages[2],$('register_password'),$('register_password_confirm'));
			error = true;
		}
		else if($('register_password').value.length>40) {
			this.add_error(alert_messages[3],$('register_password'),$('register_password_confirm'));
			error = true;
		}
		else if($('register_password').value!=$('register_password_confirm').value) {
			this.add_error(alert_messages[4],$('register_password'),$('register_password_confirm'));
			error = true;
		}
		
		// Country
		alert_messages = ['Please select your country.'];
		this.remove_error(alert_messages,$('register_country'));
		if($('register_country').selectedIndex=='0') {
			this.add_error(alert_messages[0],$('register_country'));
			error = true;
		}
		
		// Birth
		var date = [
			'month',
			'day',
			'year'
		];
		for(i=0;i<3;++i) {
			this.remove_error(['Please select your birth '+date[i]+'.'],$('register_'+date[i]));
			if($('register_'+date[i]).selectedIndex=='0') {
				this.add_error('Please select your birth '+date[i]+'.',$('register_'+date[i]));
				error = true;
			}
		}
		
		// Captcha
		alert_messages = ['Invalid Captcha, please confirm that you are a human being.'];
		this.remove_error(alert_messages,$('recaptcha_response_field'));
		if(!$('recaptcha_response_field').value||$('recaptcha_response_field').value.length<1) {
			this.add_error(alert_messages[0],$('recaptcha_response_field'));
			error = true;
		}
		
		// Submit
		if(!error) {
			$('content_register').submit();
			return false;
		}
		return true;
	}
};
var RecaptchaOptions = {theme:'white'};
Event.observe(window,'load',function(load){
	if($$('#register_usertype_group_label > input')[0].checked==true){set_user_type('group');}
	else{$$('#register_usertype_individual_label > input')[0].checked=true;set_user_type();}
	$('register_usertype_individual_label').addClassName('type_selected').observe('click',function(event){set_user_type();});
	$('register_usertype_group_label').observe('click',function(event){set_user_type('group');});
});

function set_user_type(user_type) {
	switch(user_type) {
		case 'group':
			$('register_usertype_individual_label').removeClassName('type_selected');
			$('register_usertype_group_label').addClassName('type_selected');
			$('register_month_label').update('Founded:');
			var show = ['fs_groupname','fs_groupmembers'];
			var hide = ['fs_name','fs_gender'];
			var count = hide.length;
			for(i=0;i<count;++i) { if($(hide[i])) { $(hide[i]).hide(); } }
			var count = show.length;
			for(i=0;i<count;++i) { if($(show[i])) { $(show[i]).show(); } }
			Register.type = 'group';
			$('register_type').value = 'group';
			break;
		default:
			$('register_usertype_individual_label').addClassName('type_selected');
			$('register_usertype_group_label').removeClassName('type_selected');
			$('register_month_label').update('Birthday:');
			var hide = ['fs_groupname','fs_groupmembers'];
			var show = ['fs_name','fs_gender'];
			var count = hide.length;
			for(i=0;i<count;++i) { if($(hide[i])) { $(hide[i]).hide(); } }
			var count = show.length;
			for(i=0;i<count;++i) { if($(show[i])) { $(show[i]).show(); } }
			Register.type = 'user';
			$('register_type').value = 'user';
	}
}