$(function(){
	// If the registration page is passed a game ID, change the background to match the game.
    //if(g){$('body,html').css({background:"#000 url(/_img/reg_bgd_"+g+".jpg) top center no-repeat fixed"});}

	// Bind our form to be submitted via Ajax
    $('#userReg').ajaxForm({beforeSubmit:validateSubmission,success:handleResponse});

    $("#dob_month").change(function(){
        setDays($(this).val());
    });
	
	$('#submit_register_form,#checkUserID,#checkNickname').focus(function() {
		$(this).css({"outline":"1px dotted #AAA"});
	}).blur(function() {
		$(this).css({"outline":"none"});
	});
});


function showTerms(){
	$('#tou_eula_box').html('<div id="terms" class="eula_tos"></div>');
	$('#terms').hide().load('/tou_text.php').fadeIn();
}

function showEula(){
	$('#tou_eula_box').html('<div id="eula" class="eula_tos"></div>');
	$('#eula').hide().load('/eula_text.php').fadeIn();
}

// Removes leading, trailing and multiple spaces
function trim(s) {
	s = s.replace(/(^\s*)|(\s*$)/gi,"");
	s = s.replace(/[ ]{2,}/gi," ");
	s = s.replace(/\n /,"\n");
	return s;
}

// Validate username
function validateUserId(field, userId) {
	
	if (!userId) { var userId = "";} else { var userId = trim(userId); }
    
    // no upper case
	var hasUpper = /[A-Z]/;
	if (field == "userId" && hasUpper.test(userId))
		return TEXT18;
	
	// special characters
	if (field == "userId" && !checkIt(userId, 1))
		return TEXT4;
	
	// length
	if (field == "userId" && !/^.{6,15}$/.test(userId))
		return TEXT53;
    
	// ok
	return "valid";
}

// Validate email address
function validateEmail(field1){
	// If this field contains special characters or does not match a valid email format... 
    var re = /^[\w-]+([\.\+][\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/;
	var email = trim(field1);

	if (checkIt(email,3) && re.test(email))
		return "valid";
	else
		return TEXT9; // 'Please enter a valid Email.';
}

// Validate password
function validatePassword(field1, field2){

	// If field2 is not passed to the function, create it now with default value
    if(!field2) { var field2 = "";}

    if(field2!=""){
        // If field2 has a value, but field1 does not...
		if(field1=="")
			return TEXT10; // 'Please enter your password twice.';
        // If field1 and field2 do not match...
		if(field1!=field2)
			return TEXT11; // 'Passwords do not match. Please try again.';
	}
    
    // If this field contains special characters, return an error
	if(!checkIt(field1,2))
		return TEXT12; // 'Special characters are not allowed in your password.';
    
    var validLength = /^.{6,12}$/;
	if(!validLength.test(field1))
		return TEXT14; // 'Password must contain a combination of X-Y letters and numbers.';
    
    // If this field does not contain a number, return an error
    var hasNumber = /\d/;
	if(!hasNumber.test(field1))
		return TEXT13;

	// If this field does not contain a number, return an error
    var hasLetter = /[a-zA-Z]/;
	if(!hasLetter.test(field1))
		return TEXT14;

    // If we get this far, the field must be valid
	return "valid";
}

function setDays(month) {
    //var selectDays=document.userReg.dob_day;
    if(month==4||month==6||month==9||month==11)
        maxDays = 30;
    else if(month==2)
        maxDays = 29;
    else
        maxDays = 31;
    //selectDays.options.length=0;
	
	$('#dob_day option').not('option:first').each(function() {
		$(this).remove();
	});
	for(var i=1;i<=maxDays;i++){
		var day=i;
        if(day<10){day='0'+day;}
		var options = '<option value="'+day+'">'+day+'</option>';
		$('#dob_day').append(options);
	}
    //if(month==" "){selectDays.options[selectDays.options.length]=new Option(TEXT19,'');}
    // if(month!=null){
        // selectDays.options[0]=new Option(TEXT19,'');
        // $('#dob_day option:first').addClass('firstOption');
        // for(var i=1;i<=maxDays;i++){
            // var day=i;
            // if(day<10){day='0'+day;}
            // selectDays.options[selectDays.options.length]=new Option(day,day);
        // }
    // }
}

function leapYear(thisYear) {
    if (thisYear % 4 == 0) return true;
    if (thisYear % 100 == 0) return false;
    if (thisYear % 400 == 0) return true;               
    return false;
}

function checkDOB(mo,day,yr) {
    if(mo==4||mo==6||mo==9||mo==11)
        maxDays=30;
    else if(mo==2)
        maxDays=29;
    else
        maxDays=31;
	var curTime = new Date();
	var curDay = curTime.getDate();
	var curMo = curTime.getMonth() + 1;
	var curYr = curTime.getFullYear();
	
	if( (mo==2 && day==29 && leapYear(yr)==false) ||
	  (day==null || day=='') ||
	  (maxDays==30 && day>30) ||
	  (maxDays==29 && day>29) ||
	  (maxDays==31 && day>31) ||
	  (mo>=curMo && day>=curDay && yr==curYr) ||
	  (mo>curMo && yr==curYr)) {
		// Reset Year selectbox to the first option
		document.userReg.dob_year.options[0].selected=true;
		return TEXT15; // 'Please enter a valid birthdate.';
	}
	else if (mo == '' || day == '' || yr == '')
		return TEXT33;
	else{
        return "valid";
    }
}

function validateSubmission() {

	var empty_fields_msg = '';
	var form_valid = true;
	
	////////////////////////////////////////
	// validate each required input field
	////////////////////////////////////////
	if ($('#email').val() == '') {
		empty_fields_msg += '&bull; '+TEXT29+'<br />';
		$('#email_msg').html(TEXT30);
	}
	else {
		var res = validateEmail($('#email').val());
		if (res != 'valid') {
			$('#email_msg').removeClass('reg_field_success').addClass('reg_field_error').html(res);
			empty_fields_msg += '&bull; '+TEXT29+'<br />';
			form_valid = false;
		}
		else
			$('#email_msg').removeClass('reg_field_error').addClass('reg_field_success').html(TEXT31);
	}
	
	if ($('#pwd1').val() == '') {
		empty_fields_msg += '&bull; '+TEXT23+'<br />';
		$('#pwd1_msg').html(TEXT24);
	}
	else if ($('#pwd1').val() != $('#pwd2').val()) {
		$('#pwd1_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT25);
		empty_fields_msg += '&bull; '+TEXT23+'<br />';
		form_valid = false;
	}
	else {
		var res = validatePassword($('#pwd1').val(),$('#pwd2').val());
		if (res != 'valid') {
			$('#pwd1_msg').removeClass('reg_field_success').addClass('reg_field_error').html(res);
			empty_fields_msg += '&bull; '+TEXT23+'<br />';
			form_valid = false;
		}
		else
			$('#pwd1_msg').removeClass('reg_field_error').addClass('reg_field_success').html(TEXT26);
	}
	
	if ($('#pwd2').val() == '') {
		empty_fields_msg += '&bull; '+TEXT27+'<br />';
		$('#pwd2_msg').html(TEXT51);
	}
	else if ($('#pwd2').val() != $('#pwd1').val()) {
		$('#pwd2_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT25);
		empty_fields_msg += '&bull; '+TEXT27+'<br />';
		form_valid = false;
	}
	else {
		var res = validatePassword($('#pwd1').val(),$('#pwd2').val());
		if (res != 'valid') {
			$('#pwd2_msg').removeClass('reg_field_success').addClass('reg_field_error').html(res);
			empty_fields_msg += '&bull; '+TEXT27+'<br />';
			form_valid = false;
		}
		else
			$('#pwd2_msg').removeClass('reg_field_error').addClass('reg_field_success').html(TEXT28);
	}
	
	if ($('#dob_month').val() == '' || $('#dob_day').val() == '' || $('#dob_year').val() == '') {
		empty_fields_msg += '&bull; '+TEXT52+'<br />';
		$('#birthdate_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT33);
	}
	else {
		var res = checkDOB($('#dob_month').val(),$('#dob_day').val(),$('#dob_year').val());
		if (res != 'valid') {
			$('#birthdate_msg').removeClass('reg_field_success').addClass('reg_field_error').html(res);
			empty_fields_msg += '&bull;  '+TEXT52+'<br />';
			form_valid = false;
		}
		else
			$('#birthdate_msg').removeClass('reg_field_error').addClass('reg_field_success').html(TEXT34);
	}
	
	if ($('#userId').val() == '') {
		empty_fields_msg += '&bull; '+TEXT17+'<br />';
		$('#userId_msg').html(TEXT18);
	}
	else {
		var res = validateUserId('userId', $('#userId').val(), $('#nickname').val());
		if (res != 'valid') {
			if (res == 'GIVEUSERSUGGESTIONS')
				res = TEXT5;
			$('#userId_msg').removeClass('reg_field_success').addClass('reg_field_error').html(res);
			empty_fields_msg += '&bull; '+TEXT17+'<br />';
			form_valid = false;
		}
		else
			$('#userId_msg').removeClass('reg_field_error').addClass('reg_field_success').html(TEXT19);
	}
	
	if (jQuery.trim($('#keystring').val()) == '') {
		empty_fields_msg += '&bull; '+TEXT43+'<br />';
		$('#captcha_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT44);
	}
	else
		$('#captcha_msg').removeClass('reg_field_error').addClass('reg_field_success').html(TEXT45);
	
	if ($('#agreement').is(':checked')) {
	
	}
	else
		empty_fields_msg += '&bull; '+TEXT46+'<br />';
	////////////////////////////////////////
		
	// empty fields
	if (empty_fields_msg != '') {
		$('#empty_fields_msg').html(TEXT47 + '<br />' + empty_fields_msg).show();
		window.location = '#errors';
		return false;
	}
	// other field specific errors
	else if (!form_valid)
		return false;
	// all is good to go
	else
		$('#empty_fields_msg').hide();
	
	$('#submit_register_form').hide();
	$('#loading').show();
	
    return true;

    // FIXME: these lines were an emergency fix to disable registration. I'm removing it to re-enable registration,
    // we should consider how we could better reuse this code in the future
	//$('#response').html('We are currently undergoing maintenance. Please try to register again later.').addClass("error").fadeIn();
    //return false;
}

/**
 * Refreshes the captcha code by appending additional text to the URL (avoid a cache hit)
 */
function refreshCaptcha() {
    var captcha = $('img[id^=keycode]');

    if(captcha.length === 0) {
        return;
    }

    captcha.attr('src', captcha.filter(':first').attr('src') + Math.floor(Math.random() * 10));
    $('#keystring').val('');
}

function handleResponse(response) {
    refreshCaptcha();
    var returnVal = jQuery.trim(unescape(response));
	var show_generic_msg = false;
	var bad_field_msg = '';
	
	// by default, set all field messages to success
	//$('#userId_msg, #nickname_msg').addClass('reg_field_success').html('Valid.');
	
	if (returnVal.search(/CAPTCHA/) != -1) {
		var msg = returnVal.substring(7);
		bad_field_msg += '&bull; '+TEXT43+'<br />';
		$('#captcha_msg').removeClass('reg_field_success').addClass('reg_field_error').html(msg);
	}
    else if (returnVal.search(/EMAIL1/) != -1) {
		bad_field_msg += '&bull; '+TEXT29+'<br />';
		$('#email_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT48); // 'That email address is invalid or already in use.'
	}
	else if (returnVal.search(/EMAIL2/) != -1) {
		bad_field_msg += '&bull; '+TEXT29+'<br />';
		$('#email_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT49); // 'Our system does not support addresses from that email provider. Try Gmail, Yahoo! Mail or Hotmail.'
	}
	else if (returnVal.search(/USERID/) != -1) {
		bad_field_msg += '&bull; '+TEXT17+'<br />';
		var msg = returnVal.substring(6);
		$('#userId_msg').removeClass('reg_field_success').addClass('reg_field_error').html(msg);
	}
	else if (returnVal.search(/NICKNAME/) != -1) {
		bad_field_msg += '&bull; '+TEXT20+'<br />';
		var msg = returnVal.substring(8);
		$('#nickname_msg').removeClass('reg_field_success').addClass('reg_field_error').html(msg);
	}
	else if (returnVal.search(/EMAIL/) != -1) {
		var msg = returnVal.substring(5);
		bad_field_msg += '&bull; '+TEXT29+'<br />';
		$('#email_msg').removeClass('reg_field_success').addClass('reg_field_error').html(msg);
	}
	else if (returnVal.search(/PASSWORD/) != -1) {
		var msg = returnVal.substring(8);
		bad_field_msg += '&bull; '+TEXT23+'<br />';
		$('#pwd1_msg').removeClass('reg_field_success').addClass('reg_field_error').html(msg);
	}
	else if (returnVal.search(/DOB/) != -1) {
		var msg = returnVal.substring(3);
		bad_field_msg += '&bull; '+TEXT52+'<br />';
		$('#birthdate_msg').removeClass('reg_field_success').addClass('reg_field_error').html(msg);
	}
	else
		var show_generic_msg = true;
	
	// if there is an error, user must re-enter captcha
	if (!show_generic_msg) {
		if (bad_field_msg.search(/CAPTCHA/) == -1)
			bad_field_msg += '&bull; '+TEXT43+'<br />';
		$('#captcha_msg').removeClass('reg_field_success').addClass('reg_field_error').html(TEXT44);
	}
	
	// show the field specific error message
	if (bad_field_msg != '') {
		$('#empty_fields_msg').html(TEXT47 + '<br />' + bad_field_msg).show();
		window.location = '#errors';
		$('#submit_register_form').show();
		$('#loading').hide();
	}
	// show generic error message that does not field specific
	else if (returnVal.indexOf("window.location") == -1 && show_generic_msg) {
		$('#empty_fields_msg').html(returnVal).show();
		window.location = '#errors';
		$('#submit_register_form').show();
		$('#loading').hide();
	}
	// if was a redirect was render the JS window.location on the page for it to execute
	else if (show_generic_msg) {
		$('#empty_fields_msg').html(returnVal).show();
	}
}
