missing = new Array();
message = new Array();

function display_errors(page)
{
	var error_count = missing.length - 1;
	var total_errors = missing.length;
	var i=0;
	var html= '';
	var error_div = document.getElementById('js_form_errors');

	for (i=0; i<=error_count; i++)
	{
		var field = missing[i];
		var error = message[i];
		html += 'Error: ' + error + '<br/>';
	}

	missing.splice(0,total_errors);
	message.splice(0,total_errors);

	error_div.innerHTML = html;
	fadeIn(error_div,0.5);
}

function clear_errors()
{
	var error_div = document.getElementById('js_form_errors');
	error_div.style.display = 'none';
	error_div.innerHTML = '';
}

function submit_page_1()
{
	validate_signup_form('page_1');
	var error_count = missing.length;
	if(error_count > 0)
	{
		display_errors('page_1');
	}
	else
	{
		change_page('page_1','page_2');
	}

	// hide intro and login box
	document.getElementById('signup_intro').style.display = 'none';
	document.getElementById('signup_login').style.display = 'none';
}

function submit_page_2()
{
	validate_signup_form('page_2');
	var error_count = missing.length;
	if(error_count > 0)
	{
		display_errors('page_2');
	}
	else
	{
		get_verify_page();
	}
}

function submit_page_3()
{
	create_new_user();
}

function change_page(current_page,new_page)
{
	var p1 = document.getElementById(current_page);
	var p2 = document.getElementById(new_page);

	clear_errors();
	fadeOut(current_page,0.5);
	p1.style.display = 'none';
	fadeIn(new_page,0.5);

	//change step
	document.getElementById('step'+current_page.substr(current_page.length-1,1)).className = 'done';
	document.getElementById('step'+new_page.substr(new_page.length-1,1)).className = 'on';
}

function check_username()
{
	var username = document.getElementById('username').value;
	if(username_char_check(username))
	{
		var url = '/pages/signup/validate_username.php?username=' + escape(username);
		new Ajax(url, {onComplete:redraw_username_div}).request();
	}
	else
	{
		document.getElementById('username_div').innerHTML = 'Username is not valid.  Only numbers, letters, dashes and underscores are allowed. <a href="javascript:check_username();">Try again.</a>';
	}
}

function username_char_check(username)
{
	if (/^[a-zA-Z0-9-_]+$/.test(username)) //Valid
	{
		return(true);
	}
	else
	{
	    return(false);
	}
}

function confirm_password_input(pwd, pwdConf)
{
	match = pwd.value.indexOf(pwdConf.value);
    if (match == -1) {
        pwd.style.background = "#fa7d6e";
        pwdConf.style.background = "#fa7d6e";
    }
    else if ((pwd.value.length > 5) && (pwd.value.length == pwdConf.value.length)) {
        pwd.style.background = "#7dfa6e";
        pwdConf.style.background = "#7dfa6e";
    }
    else if (match == 0) {
        pwd.style.background = "#ffffff";
        pwdConf.style.background = "#ffffff";
    }
}

function reset_confirm_password(pwd, pwdConf)
{
    pwd.style.background = "#ffffff";
    pwdConf.style.background = "#ffffff";
    pwdConf.value = '';
}

function redraw_username_div(request)
{
	var response = request;
	if(response == 'available')
	{
		var msg = "Congratulations! That username is available!";
	}
	else if(response == 'exists')
	{
		var msg = "Sorry, that username already exists.";
	}
	else if(response == 'invalid')
	{
		var msg = "Sorry, that is an invalid username.";
	}
	else
	{
		var msg = "There was an error processing your request."
	}

	var output = msg + ' <a href="javascript:check_username();">Try another username.</a>';

	var e1 = document.getElementById('username_div');
	var e2 = document.getElementById('username_response_div');

	e2.innerHTML = output;

	fadeOut('username_div',0.25);
	e1.style.display = 'none';
	fadeIn('username_response_div',0.25);
}

function validate_signup_form(page_name)
{
	if(page_name == 'page_1' || page_name == 'all')
	{
		if(!validate_email())
		{
    		i = missing.length;
        	missing[i] = 'email';
        	message[i] = 'Email is invalid.  Without a valid email address, you\'ll be unable to complete the signup process';
		}

		if(!validate_username())
		{
    		i = missing.length;
        	missing[i] = 'username';
        	message[i] = 'Username is invalid. Only numbers, letters, dashes and underscores are allowed.';
		}

		if(!validate_password())
		{
			i = missing.length;
        	missing[i] = 'register_password';
        	message[i] = 'Password invalid.  Password must be between 6 and 15 characters and consist of letters and numbers only.';
		}

		if(!validate_confirmation_password())
		{
			i = missing.length;
        	missing[i] = 'confirm_password';
        	message[i] = 'Password Confirmation does not match Password.';
		}

		if(!validate_agree())
		{
			i = missing.length;
        	missing[i] = 'agree';
        	message[i] = 'Please check the I agree button to indicate that you have read and understand our privacy policy';
		}

	}

	if(page_name == 'page_2' || page_name == 'all')
	{
		if(!validate_first_name())
		{
			i = missing.length;
			missing[i] = 'first_name';
			message[i] = 'First Name is a required field.';
		}

		if(!validate_last_name())
		{
			i = missing.length;
			missing[i] = 'last_name';
			message[i] = 'Last Name is a required field.';
		}

		if(!validate_country())
		{
    		i = missing.length;
    		missing[i] = 'country';
    		message[i] = 'Country is a required field';
		}

		if(!validate_postal_code())
		{
    	    i = missing.length;
    		missing[i] = 'postal_code';
    		message[i] = 'Please enter a valid US zip code.';
		}

		if(!validate_gender())
		{
    		i = missing.length;
    		missing[i] = 'gender';
    		message[i] = 'Gender is a required field';
		}

		if(!validate_dob_month())
		{
			i = missing.length;
			missing[i] = 'dob_Month';
			message[i] = 'Month is a required field.';
		}

		if(!validate_dob_day())
		{
			i = missing.length;
			missing[i] = 'dob_Day';
			message[i] = 'Day is a required field.';
		}

		if(!validate_dob_year())
		{
			i = missing.length;
			missing[i] = 'dob_Year';
			message[i] = 'Year is a required field.';
		}

		if(!validate_age())
		{
			i = missing.length;
			missing[i] = 'dob_Month';
			message[i] = 'You must be at least thirteen years old to register.';
		}
	}
}


/*

Here are the functions that actually do the regex checks, etc.

*/
function validate_email()
{
    if (!/^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/.test(document.signup_form.email.value))
    {
        return(false);
    }
    else
    {
    	return(true);
    }
}

function validate_username()
{
    if (!/^[a-zA-Z0-9\-\_]{2,15}$/.test(document.signup_form.username.value))
    {
        return(false);
    }
    else
    {
    	return(true);
    }
}



function validate_password()
{
	if (!/^[a-zA-Z0-9]{6,15}$/.test(document.signup_form.register_password.value))
	{
        return(false);
    }
    else
    {
    	return(true);
    }
}

function validate_confirmation_password()
{
    if (document.signup_form.register_password.value != document.signup_form.confirm_password.value)
    {
        return(false);
    }
    else
    {
    	return(true);
    }
}

function validate_agree()
{
    if (!document.signup_form.agree.checked)
    {
    	return(false);
    }
    else
    {
    	return(true);
    }
}

function validate_first_name()
{
	if(!/^[a-zA-Z\s]{1,30}$/.test(document.signup_form.first_name.value))
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

function validate_last_name()
{
	if(!/^[a-zA-Z\s]{1,30}$/.test(document.signup_form.last_name.value))
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

function validate_country()
{
	if(!/^[A-Z]{2}$/.test(document.signup_form.country.value))
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

function validate_postal_code()
{
	if(document.signup_form.country.value == 'US')
	{
		if(!/^\d{5}$/.test(document.signup_form.postal_code.value))
		{
			return(false);
		}
		else
		{
			return(true);
		}
	}
	else
	{
		return(true);
	}
}

function validate_gender()
{
	if(document.signup_form.gender.value == 'MALE' || document.signup_form.gender.value == 'FEMALE')
	{
		return(true);
	}
	else
	{
		return(false);
	}
}

function validate_dob_month()
{
	if(!/^\d{1,2}$/.test(document.signup_form.dob_Month.value))
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

function validate_dob_day()
{
	if(!/^\d{1,2}$/.test(document.signup_form.dob_Day.value))
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

function validate_dob_year()
{
	if(!/^\d{4}$/.test(document.signup_form.dob_Year.value))
	{
		return(false);
	}
	else
	{
		return(true);
	}
}

function validate_age()
{
	return(true);
	/*
	var year = document.signup_form.dob_Year.value;
	var month = document.signup_form.dob_Month.value;
	var day = document.signup_form.dob_Day.value;
	
	if(thirteenCheck(year,month,day))
	{
		return(true);
	}
	else
	{
		return(false);	
	}
	*/
}


//We run the data through PHP sanitizing functions before displaying the summary screen.
function get_verify_page()
{
	var url = '/pages/signup/review_account_details.php';
	var post_body=Form.serialize('signup_form');

	new Ajax(url,{postBody : post_body, onComplete : display_verify_page}).request();
}

function display_verify_page(request)
{
	var html = request;
	var p3 = document.getElementById('page_3');

	p3.innerHTML = html;
	change_page('page_2','page_3');
}

function create_new_user()
{
	var url = '/pages/signup/create_user.php';
	var post_body=Form.serialize('signup_form');

	new Ajax(url,{postBody : post_body, onComplete : display_new_user_results}).request();
}

function display_new_user_results(request)
{
	var html = request;
	var p4 = document.getElementById('page_4');

	p4.innerHTML = html;
	change_page('page_3','page_4');
}

function submit_recover_password()
{
	var url = '/pages/misc/ajax_recover_password.php';
	var post_body=Form.serialize('recover_form');
	
	new Ajax(url,{postBody: post_body, onComplete: display_recover_results}).request();
}

function display_recover_results(request)
{
	var response = request;
	var el1 = document.getElementById('recover_form_div');
	var el2 = document.getElementById('recover_success');
	var el3 = document.getElementById('recover_success_close');
	
	el2.setHTML(response);
	if ($chk(el3)) el3.injectInside(el2).setStyle('display','block');
	
	fadeOut(el1,0.5);
	el1.style.display = 'none';
	fadeIn(el2,0.5);
}

function thirteenCheck(yearDob,monthDob,dayDob)
{
        var now = new Date();
        var yearNow = now.getFullYear();
        var monthNow = now.getMonth();
        var dateNow = now.getDate();

        if (monthNow >= monthDob)
            var monthAge = monthNow - monthDob;
        else {
            yearAge--;
            var monthAge = 12 + monthNow -monthDob;
        }

        if (dateNow >= dateDob)
            var dateAge = dateNow - dateDob;
        else {
            monthAge--;
            var dateAge = 31 + dateNow - dateDob;

            if (monthAge < 0) {
                monthAge = 11;
                yearAge--;
            }
        }

        if(yearAge < 13)
        {
            return false;
        }


       return true;
}
