function easysignup() {
	this.checked = new Hash();

	this.userSelected = false;
	this.emailSelected = false;
	this.passSelected = false;
	this.bDaySelected = true;
	this.genderSelected = true;
	
	this.valEmail = false;
	this.valPassword = false;
	this.valUsername = false;
	this.valBday = false;
	this.valGender = false;
	
	this.registerUsernameField = 'registerUsername';
	this.registerEmailField = 'registerEmail';
	this.registerPasswordField = 'registerPassword';
	this.registerGenderField = 'selectGender';
	
	this.registerBday_year= 'bday_year';
	this.registerBday_month = 'bday_month';
	this.registerBday_day = 'bday_day';
	
	var self = this;

	//Check Email
	$(this.registerEmailField).observe('blur',function(e) {self.emailSelected=true;self.checkEmail(Event.element(e).value);});
	$(this.registerEmailField).observe('change',function(e){if(self.emailSelected){self.checkEmail(Event.element(e).value);}});
	$(this.registerEmailField).observe('keyup',function(e){if(self.emailSelected){self.checkEmail(Event.element(e).value);}});
	
	//Check Username
	$(this.registerUsernameField).observe('blur',function(e){self.userSelected=true;self.checkUser(Event.element(e).value);});
	$(this.registerUsernameField).observe('change',function(e){self.checkUser(Event.element(e).value);});
	$(this.registerUsernameField).observe('keyup',function(e){if ((e.keyCode != 9 && !self.userSelected) || self.userSelected){self.checkUser(Event.element(e).value);}});

	//Check Password
	$(this.registerPasswordField).observe('blur',function(e){self.passSelected=true;self.checkPass(Event.element(e).value);});
	$(this.registerPasswordField).observe('change',function(e){self.checkPass(Event.element(e).value);});
	$(this.registerPasswordField).observe('keyup',function(e){self.checkPass(Event.element(e).value);});
	
	//Check Birthday
	$(this.registerBday_year).observe('blur',function(e){this.bDaySelected=true;self.checkBday(Event.element(e).value);});
	$(this.registerBday_year).observe('change',function(e){self.checkBday(Event.element(e).value);});
	$(this.registerBday_month).observe('blur',function(e){self.checkBday(Event.element(e).value);});
	$(this.registerBday_month).observe('change',function(e){self.checkBday(Event.element(e).value);});
	$(this.registerBday_day).observe('blur',function(e){self.checkBday(Event.element(e).value);});
	$(this.registerBday_day).observe('change',function(e){self.checkBday(Event.element(e).value);});
	
	//Check Gender
	$(this.registerGenderField).observe('blur',function(e){this.bDaySelected=true;this.genderSelected=true;self.checkGender(Event.element(e).value);});
	$(this.registerGenderField).observe('change',function(e){self.checkGender(Event.element(e).value);});
}


easysignup.prototype.f = function(key){$(key).hide();}
easysignup.prototype.a = function(key){Effect.Appear(key,{duration:0.3});}
easysignup.prototype.e = function(r,k,e){if(r==k){if(!$(e).visible()){this.a(e);}}else{this.f(e);}}
easysignup.prototype.i = function(key){if($(key).hasClassName('valid')){$(key).removeClassName('valid');}} //Invalid Field: Remove valid class.
easysignup.prototype.v = function(key){if(!$(key).hasClassName('valid')){$(key).addClassName('valid');}} //Valid Field: Add valid class

easysignup.prototype.email = function(available,error) {
	var invalid = 'email_invalid';
	var enteremail = 'email_enter';
	
	if (available) {
		if($(invalid).visible()) { this.f(invalid); }
		if($(enteremail).visible()) { this.f(enteremail); }
		this.v(this.registerEmailField);
	} else {
		if (typeof(error) == 'undefined') { error = 'enteremail'; }
		this.e(error,'invalid',invalid); //Invalid is not available.
		this.e(error,'enteremail',enteremail); //Email is blank
		this.i(this.registerEmailField);
	}
	this.valEmail = available;
}

easysignup.prototype.pass = function(available,error) {
	var tooshort = 'password_amount';
	var enterpass = 'password_enter';
	
	if (available) {
		if($(tooshort).visible()) { this.f(tooshort); }
		if($(enterpass).visible()) { this.f(enterpass); }
		this.v(this.registerPasswordField);
	} else {
		if (typeof(error) == 'undefined') { error = 'enterpass'; }
		this.e(error,'tooshort',tooshort); //Password is too short
		this.e(error,'enterpass',enterpass); //Passsword is blank
		this.i(this.registerPasswordField);
	}
	this.valPassword = available;
}
easysignup.prototype.bday = function(available,error) {
	var bdaymin = 'bday_min';
	var bdayenter = 'bday_enter';

	if (available) {
		if($(bdaymin).visible()) { this.f(bdaymin); }
		if($(bdayenter).visible()) { this.f(bdayenter); }
		this.v(this.registerBday_year);
		this.v(this.registerBday_month);
		this.v(this.registerBday_day);
	} else {
		if (typeof(error) == 'undefined') { error = 'entergender'; }
		this.e(error,'bdaymin',bdaymin); //Not old enough
		this.e(error,'bdayenter',bdayenter); 
		
		this.i(this.registerBday_year);
		this.i(this.registerBday_month);
		this.i(this.registerBday_day);
	}
	this.valBday = available;
}

easysignup.prototype.gender = function(available,error) {
	var entergender = 'gender_enter';

	if (available) {
		if($(entergender).visible()) { this.f(entergender); }
		this.v(this.registerGenderField);
	} else {
		if (typeof(error) == 'undefined') { error = 'entergender'; }
		this.e(error,'entergender',entergender); //Select a Gender
		this.i(this.registerGenderField);
	}
	this.valGender = available;
}

easysignup.prototype.user = function(available,error) {
	var unavail = 'username_unavail';
	var enteruser = 'username_enter';
	var toosmall = 'username_small';
	var toolarge = 'username_large';
	var invalidchars = 'username_an';
	
	if (available) {
		if($(unavail).visible()) { this.f(unavail); }
		if($(enteruser).visible()) { this.f(enteruser); }
		if($(toosmall).visible()) { this.f(toosmall); }
		if($(toolarge).visible()) { this.f(toolarge); }
		if($(invalidchars).visible()) { this.f(invalidchars); }
		this.v(this.registerUsernameField);
	} else {
		if (typeof(error) == 'undefined') { error = 'enteruser'; }
		this.e(error,'unavail',unavail); //Username is not available.
		this.e(error,'enteruser',enteruser); //Username is blank
		this.e(error,'toosmall',toosmall); //Username is too small
		this.e(error,'toolarge',toolarge); //Username is too large
		this.e(error,'invalidchars',invalidchars); //Username has invalid characters
		this.i(this.registerUsernameField);
	}
	this.valUsername = available;
}

easysignup.prototype.ajax = function(username) {
	var self = this;
	
	var oldCheck = this.checked.get(username);
	if (typeof(oldCheck) == 'boolean') {
		if (oldCheck == true) { this.user(true); }
		else { this.user(false,'unavail'); }
		return;
	}
	
	new Ajax.Request('/ajax/checkusername/', {
		parameters: {'username': username},
		method: 'get',
		onSuccess: function(transport) {
			if(transport.responseText == 'TRUE') {
				self.user(true);
				self.checked.set(username,true);
			}
			else if (transport.responseText == 'FALSE') {
				self.user(false,'unavail');
				self.checked.set(username,false);
			} else {
				alert('The server responded with a invalid response, Please make sure your browser, anti-virus, or firewall is not blocking requests to the server.');
				self.user(false,'unavail');
			}
		},
		onFailure: function(transport) {
			alert('The server responded with a invalid response, Please make sure your browser, anti-virus, or firewall is not blocking requests to the server.');
			self.user(false,'unavail');
		}
	});
}

easysignup.prototype.checkUser = function(value) {
	if(typeof(value) == 'undefined' || value == ''){ this.user(false,'enteruser'); }
	else if(this.userSelected && value.length<4) { this.user(false,'toosmall'); }
	else if(value.length>32) { this.user(false,'toolarge'); }
	else if(!value.match(/^[._0-9A-Za-z-]+$/)) { this.user(false,'invalidchars'); }
	else if(value.length>3) { this.ajax(value); }
}

easysignup.prototype.checkEmail = function(value) {
	if (this.emailSelected && (typeof(value) == 'undefined' || value == '')) {
		this.email(false,'enteremail');
	}
	else if(value != '') {
		if (value.match(/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/)) {
			this.email(true);
			return true;
		}
		else {
			this.email(false,'invalid');
		}
	}
	return false;
}

easysignup.prototype.checkPass = function(value) {
	if (this.passSelected && (typeof(value) == 'undefined' || value == '')) {
		this.pass(false,'enterpass');
	}
	else if(value != '') {
		if(this.passSelected && value.length<6) {
			this.pass(false,'tooshort');
		}
		else if(value.length>5) {
			this.pass(true);
			return true;
		}
	}
	return false;
}

easysignup.prototype.checkGender = function(value) {
	if(value!='') {
		this.gender(true);
	} else {
		this.gender(false,'entergender');
	}
	return false;
}

easysignup.prototype.checkBday = function(value) {
	var bday_year = $(this.registerBday_year).value;
	var bday_month = $(this.registerBday_month).value;
	var bday_day = $(this.registerBday_day).value;
	
	if (bday_year>0 && bday_month>0 && bday_day>0) {
		var currenttime = new Date().getTime()/1000.0;
		var birthday = new Date(bday_month+'/'+bday_day+'/'+bday_year+' PST').getTime()/1000.0;
		var thirteen_years = 410227200;

		if (birthday<(currenttime-thirteen_years)){
			this.bday(true); //Is older then 13
			return true;
		}else{
			this.bday(false,'bdaymin'); //Is yonger then 13
		}
	} else if (this.bDaySelected && (bday_year==0 || bday_month==0 || bday_day==0)) {
		this.bday(false,'bdayenter');
	}
	return false;
}

/**********************************************************/
/*      	 	 	Evaluate Signup 2.0       		     */
/**********************************************************/
easysignup.prototype.evaluate = function() {
	this.userSelected = true;
	this.emailSelected = true;
	this.passSelected = true;
	this.bDaySelected = true;
	this.genderSelected = true;

	this.checkEmail($(this.registerEmailField).value);
	this.checkUser($(this.registerUsernameField).value);
	this.checkPass($(this.registerPasswordField).value);
	this.checkGender($(this.registerGenderField).value);	
	this.checkBday($(this.registerBday_year).value);
	this.checkBday($(this.registerBday_month).value);
	this.checkBday($(this.registerBday_day).value);
	
	if (!this.valUsername || !this.valEmail || !this.valPassword || !this.valGender || !this.valBday) { return; }

	$('quickSignup_1').hide();
	if (!$('quickSignup_2').visible()) Effect.Appear('quickSignup_2',{duration:0.3});
	return true;
}

/**********************************************************/
/*          		  Submit Signup Form     			  */
/**********************************************************/
easysignup.prototype.submitSignup = function() {
	if (!this.evaluate()) {
		$('quickSignup_2').hide();
		if (!$('quickSignup_1').visible()) Effect.Appear('quickSignup_1',{duration:0.3});
		return;
	}
	data = $('quickSignup').serialize(true);
	$('signupLoader').show();
	new Ajax.Request('/ajax/quickSignup.php', {
		asynchronous:true,
		evalScripts:true,
		parameters: data,
		method: 'post',
		onSuccess: function(transport) {
            try { pageTracker._trackPageview("/modules/sys/signupComplete" ); } catch(ex) { }
            
            data = new Hash({ username: $('registerUsername').value, password: $('registerPassword').value, anonlogin: '0', remember: '1', isLogin: 'TRUE' });
            data = data.toObject();
            new Ajax.Request('/sys/login/', {
                asynchronous:true,
                evalScripts:true,
                parameters: data,
                method: 'post',
                onSuccess: function(transport) {
                    try { pageTracker._trackPageview("/artician/SignUpComplete" ); } catch(ex) { }
                    window.location.href = 'http://www.artician.com/wizard/';
                },
                onFailure: function(transport) {
					$('signupLoader').hide();
                    new Ajax.Updater('welcomeSignup', '/modules/sys/signupComplete.php',{asynchronous:true, evalScripts:true});
                }
            });
		},
		onFailure: function(transport) {
			$('signupLoader').hide();
			newStatusMsg(transport.responseText,0,25);
		}
	});
}

var signup = null;
Event.domReady.add(function(){
	signup = new easysignup();
});

/**********************************************************/
/*          	  Toggle To Simhple Signup   	 		  */
/**********************************************************/
function beginSimpleSignup(){
	try { pageTracker._trackPageview("/artician/AjaxSignup" ); } catch(ex) { }
	Effect.Fade('whatIsArtician',{duration:0.3, afterFinish: function(){
		Effect.SlideDown('welcomeSignup',{duration:0.4});
		}
	});
}

/**********************************************************/
/*          			  Slideshow  	 				  */
/**********************************************************/
function start_slideshow(sfr, efr, delay) {
	setTimeout(switch_slides(sfr,sfr,efr, delay), delay);
}
function switch_slides(frame, sfr, efr, delay) {
	return (function() {
		Effect.Fade('ss' + frame,{afterFinish:function(){
		}}
	);
		if(frame == efr){frame = sfr;} 
		else {frame = frame + 1;}
		setTimeout("Effect.Appear('ss" + frame + "');", 850);
		setTimeout(switch_slides(frame, sfr, efr, delay), delay + 850);
	})
  }

/**********************************************************/
/*      		 	 	Reload Captcha       		     */
/**********************************************************/
function reloadCaptcha() {
	new Ajax.Request('/ajax/newcaptcha/', {
			method: 'get',
			onSuccess: function(transport) {
				html = '<img src="/ajax/captcha/'+transport.responseText+'.png" alt="CAPTCHA IMAGE"/>';
				$('captchaimage').innerHTML = html;
				$('authid').value = transport.responseText;
			}
	} );
}

//Check if captcha is empty
//if($('registerCaptcha').value == "") {
//	errorBool = true;
//	error += "Please enter the text shown in the image.\n";
//}