// TODO: msg handling
$().ready(function() {

	$("#regform").validate({
		debug: true,
		submitHandler: function(form) {
			var params = {};

			$("#regform").find("input[type='text'], input[type='hidden'], input[type='password'], input[type=checkbox], option[selected], textarea").each(function() { params[this.name || this.parentNode.name] = this.value; });
			$("#regform").find("input[type=radio]").each(function() {if(this.checked) params[this.name || this.parentNode.name] = this.value});
			params.birthdate = params.b_year + "-" + (params.b_month.length == 1 ? '0' + params.b_month : params.b_month) + "-" + (params.b_day.length == 1 ? '0' + params.b_day : params.b_day);
			params.countrycode = params.country.split('-')[1];

			$.post(document.getElementById("regform").getAttribute("action"), params, function(data) {

			//  Response Ex. - {"newplayer":[{"transaction":[{"attributes":{"result":"ERROR"}}],"error":[{"value":"Invalid captcha.","attributes":{"nr":"10003"}}]}]}

			//console.log(data.newplayer);

			var _transaction_result = 'OK';

		    if(typeof data.newplayer[0].error != 'undefined') {
                if(data.newplayer[0].error[0].attributes.nr) {
                    _transaction_result = 'Error';
                    var _error_num = data.newplayer[0].error[0].attributes.nr;
                }
            }

			if (_transaction_result == "OK") {
					$("#regform").validate().resetForm();
					window.location.href = 'successful.html';
				}

			else if (_error_num != undefined) {
				document.getElementById("captcha_i").src="/imgs/freecap-130-20-28.png?&r=" + Math.random();
				document.getElementById("securitycode").value="";

				var msg = messages.errors.detected;

				var errors = {
					'8'  : {"username" : messages.username.regex},
                    '11'  : {"username" : messages.username.regex},
                    '15'  : {"password1" : messages.password1.notEqualTo},
                    '18' : {"username" : messages.username.exist},
                    '19' : {"email" : messages.email.exist},
                    '20' : {"birthdate" : messages.birthdate.invalid},
                    '21' : {"birthdate" : messages.birthdate.young},
                    '22' : {"birthdate" : messages.birthdate.old},
                    '25' : {"coupon" : messages.coupon.invalid},
                    '1100' : {"firstname" : messages.firstname.regex},
                    '1101' : {"firstname" : messages.lastname.regex},
                    '1102' : {"address" : messages.address.regex},
                    '1103' : {"city" : messages.city.regex},
                    '1104' : {"state" : messages.state.regex},
					'1106' : {"country" : messages.country.invalid},
                    '1105' : {"zip" : messages.zip.regex},
					'1107' : {"email" : messages.email.regex},
                    '1109' : {"phone" : messages.phone.regex},
                    '1112' : {"cellphone" : messages.cellphone.regex},
                    '1118' : {"coupon" : messages.coupon.invalid},
                    '10003' : {"securitycode" : messages.securitycode.invalid}
				};

				if (errors[_error_num]) {
						$("#regform").validate().showErrors(errors[_error_num]);

					}
					else {
						msg = messages.errors.internal;
					}

				$("#msgs").text(msg);

				}
				else {
					document.getElementById("captcha_i").src="/imgs/freecap-140-40-28.png?r=" + Math.random();
					document.getElementById("securitycode").value="";
					$("#msgs").text(messages.errors.internal);
				}

			}, "json");
			return false;
		},
		rules: {
			firstname: {
				required: true,
				/*regex: /^[^\d_\.@#\$\/'&\+<>\(\)\*`;\!\?]{1,40}$/*/
				regex: /^[a-zA-Z\d]{1,40}$/
			},
			lastname: {
				required: true,
				/*regex: /^[^\d_\.@#\$\/'&\+<>\(\)\*`;\!\?]{1,40}$/*/
				regex: /^[a-zA-Z\d]{1,40}$/
			},
			address: {
				required: true,
				rangelength: [2, 160]
			},
			city: {
				required: true,
				regex: /^[\w ]{2,40}$/i
			},
			state: {
				regex: /^[a-z\- ]{0,20}$/i
			},
			zip: {
				required: true,
				regex: /^[\w\d\-\s\\]{4,12}$/
			},
			username: {
				required: true,
				/*regex: /^[\w0-9\.@#\$\/'&\+<>\(\)\*`;\!\?]{5,32}$/i*/
				regex: /^[a-zA-Z\d]{5,20}$/i
			},
			phone: {
				required: true,
				regex: /^[\d\s\(\)\-+\.]{4,20}$/
			},
			cellphone: {
				required: true,
				regex: /^[\d\s\(\)\-+\.]{4,20}$/
			},
			password1: {
				required: true,
				regex: /^[0-9a-z]{5,10}$/i,
				notEqualTo: "#username"
			},
			password2: {
				required: true,
				regex: /^[0-9a-z]{5,10}$/i,
				equalTo: "#password1"
			},
			securitycode: {
				required: true,
				regex: /^[\w\d]{4}$/
			},
			email: {
				required: true,
				regex: /^[\w\d\-\+\.]+@[\w\d\-\.]+$/
			},
			agree: {
				required: true
			},
			age18: {
				required: true
			},
			sex: {
				required: true
			}
		},
		messages: messages,

		errorPlacement: function(error, element) {
			if (element.is(":radio"))
				error.appendTo(element.parent());
			else if (element.is(":checkbox"))
				error.appendTo (element.parent());
			else
				error.appendTo(element.parent());
		},

		success: function(label) {
			label.html("<![CDATA[ ]]>").addClass("checked");
		}
	});

	$("#username").focus(function() {
		var firstname = $("#firstname").val();
		var lastname = $("#lastname").val();
		if(firstname && lastname && !this.value) {
			this.value = firstname + lastname;
		}
	});

	$("#country").change(function() {
		var prefix = this.value.split("-")[0];
		document.getElementById('p_prefix').innerHTML = '+' + prefix;
		document.getElementById('m_prefix').innerHTML = '+' + prefix;
	});

	var form_date = $('#b_day');
	var form_month = $('#b_month');
	var form_year = $('#b_year');
	var datepicker = {
		vars: {
			daysINmonth: '',
			month: '',
			year: ''
		},
		onchange: function(){
			form_month.change(function(){
				datepicker.setvars();
				datepicker.daysSet(datepicker.vars.daysINmonth);
			});
			form_year.change(function(){
				datepicker.setvars();
				datepicker.daysSet(datepicker.vars.daysINmonth);
			});
		},
		daysSet: function(num){
			var _days = $(form_date);
			$('option:disabled', _days).each(function(){
				$(this).removeAttr('disabled');
			});
			var i = 0;
			for (i=num; i<=31; i++){
				$('option:eq('+i+')', _days).attr('disabled', 'disabled');
			}
			if($(form_date).val() > num){
				var selNum = num -1;
				$('option:eq('+selNum+')', _days).attr('selected','selected');
			}
		},
		setvars: function(){
			datepicker.vars.month = form_month.val();
			datepicker.vars.year = form_year.val();
			datepicker.vars.daysINmonth = datepicker.countDaysInMonth(datepicker.vars.month, datepicker.vars.year);
		},
		countDaysInMonth: function(month,year){
			var m = [31,28,31,30,31,30,31,31,30,31,30,31];
			if (month != 2) return m[month - 1];
			if (year%4 != 0) return m[1];
			if (year%100 == 0 && year%400 != 0) return m[1];
			return m[1] + 1;
		},
		init: function(){
			datepicker.setvars();
			datepicker.onchange();
			datepicker.daysSet(datepicker.vars.daysINmonth);
		}
	};
	//this control date birth select
	datepicker.init();

});


jQuery.validator.addMethod("regex", function(value, element, param) {
	return param.test(value);
}, "Invalid format");


jQuery.validator.addMethod("notEqualTo", function(value, element, param) {
	return $(param).val()?(value != $(param).val()):(value != param);
}, "error");

