$(document).ready(function() {	
	errorsToClear = [];

	$('#dp_signin').find('.submit_button').click(function() {
		if(!$(this).hasClass('disabled')){
			$('#dp_signin').find('.errors').hide();
														  
			if (errorsToClear.length > 0) {
				correctFields(errorsToClear);
			}
			
			var l_asErrorMsgs = validateLogin('dps_');
		
			if (l_asErrorMsgs.length > 0) {
				showErrorMsgs('dp_signin', l_asErrorMsgs);
				return false;
			}
			else {
				var qs = '';
				qs += '&email='+encodeURIComponent($('#dps_email').val());
				qs += '&password='+encodeURIComponent($('#dps_password').val());
				qs += '&remember-me='+$('#dps_remember').attr('checked');
				doAjax('aooak_signin', qs, 'dp_signin');
				
				$(this).addClass('disabled');
			}
		}
	});
	

	$('#dp_create').find('.submit_button').click(function() {
		if(!$(this).hasClass('disabled')){
			$('#dp_create').find('.errors').hide();
			if (errorsToClear.length > 0) {
				correctFields(errorsToClear);

			}
	
			var l_asErrorMsgs = validateRegistration('dpc_');
			if (l_asErrorMsgs.length > 0) {

				showErrorMsgs('dp_create', l_asErrorMsgs);
				return false;
			}
			else {
			
				var l_sOptIn = '';
				if ($('#dpc_newsletter').attr('checked')){ l_sOptIn = 'on'; }	

				var l_sGender = '';
				l_sGender = ($('input[name=gender]:checked').val());
				
				var qs = '';
				qs += '&email='+encodeURIComponent($('#dpc_email').val());
				qs += '&firstName='+encodeURIComponent($('#dpc_firstName').val());		
				qs += '&password='+encodeURIComponent($('#dpc_password').val());	
				qs += '&lastName='+encodeURIComponent($('#dpc_lastName').val());	
				qs += '&password2='+encodeURIComponent($('#dpc_password2').val()); 
				qs += '&zip='+encodeURIComponent($('#dpc_zip').val());		
				qs += '&birthDay='+encodeURIComponent($('#dpc_day').val());
				qs += '&birthMonth='+encodeURIComponent($('#dpc_month').val());
				qs += '&birthYear='+encodeURIComponent($('#dpc_year').val());
				qs += '&gender='+l_sGender;
				qs += '&optIn='+l_sOptIn;

				doAjax('aooak_register', qs, 'dp_create');
				
				$(this).addClass('disabled');
			}
		}
	});
	
	
	function doAjax(p_sAction, p_sQueryString, p_sType){
		$.ajax({
			type: 'POST',
			url: '/promotions/aooak/request/',
			data: 'a='+p_sAction+p_sQueryString,
			dataType: 'html',
			success: function(p_sMsg) {
						if (p_sMsg) {
							handleDSMAjaxResponse(p_sMsg, p_sType);
						}
			}
		});

		return false;
	}
	
	
	function handleDSMAjaxResponse(p_sJsonResponse, p_sType){
		var l_xResponse = $.parseJSON(p_sJsonResponse);
		
		if (p_sType == 'dp_signin') {
			$('#dp_signin_submit').removeClass('disabled');
		}
		else if (p_sType == 'dp_create') {
			$('#dp_create').find('.submit_button').removeClass('disabled');
		}

		// If Signin / Registration was successful, redirect to Softcoin
		if (l_xResponse["success"]) {
			if (p_sType == 'dp_create') {
				_xTracking.onAccountCreated();
			}
			
			window.location = l_xResponse['redirect_url'];
		} 
		else {
			var _xErrors = $('#'+p_sType).find('.errors').empty();
			for (var i in l_xResponse) {
				if (l_xResponse[i]) {
					_xErrors.show().append('<li>' + l_xResponse[i] + '</li>');
				}
			}
		}
		
	}
	
});


var l_xErrorMsgs = {
	'email'		: { 'en' : 'Email Address is in an invalid format.'},
	'password'	: { 'en' : 'Password must be between 6 and 16 alphanumeric characters.'},
	'confirm_pw': { 'en' : 'Password and confirmation must match.'},
	'first_name' : {'en' : 'First Name must be between 3 and 30 characters a-z.'},
	'last_name'	: { 'en' : 'Last Name must be between 2 and 30 characters a-z.'},
	'birthday'	: { 'en' : 'Please enter a valid birth month, day, and year.'},
	'zip'		: { 'en' : 'Zip code must be 5 numbers.'}, 
	'gender'	: { 'en' : 'Please choose a gender.'}			
};



// ----------------------- Validation Functions ------------------------------	
	function validateLogin(p_sPrefix) {
		var l_asInvalidFieldIds = [];
		var r_asErrorMsgs = [];
		if (/[_a-zaA-Z0-9-]+([.+_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+([.a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})/.test($('#'+p_sPrefix+'email').val()) == false || 
		   (/[a-zA-Z0-9]{6,16}/.test($('#'+p_sPrefix+'password').val()) == false)) {
			r_asErrorMsgs.push("Email or Password Invalid.");
			l_asInvalidFieldIds.push(p_sPrefix+'email', p_sPrefix+'password');
			highlightFields(l_asInvalidFieldIds);
		}

		return r_asErrorMsgs;
	}

	function validateRegistration(p_sPrefix) {
		var l_asInvalidFieldIds = [];
		var r_asErrorMsgs = [];
		
		// Email
		if ((/^[_a-zA-Z0-9-]+([.+_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+([.a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$/.test($('#'+p_sPrefix+'email').val()) == false)) {
			r_asErrorMsgs.push(l_xErrorMsgs['email'][g_sLangAbbrev]);
			l_asInvalidFieldIds.push(p_sPrefix+'email');
		}

		// Password
		if (/^[a-zA-Z0-9]{6,16}$/.test($('#'+p_sPrefix+'password').val()) == false) {
			r_asErrorMsgs.push(l_xErrorMsgs['password'][g_sLangAbbrev]);	
			l_asInvalidFieldIds.push(p_sPrefix+'password', p_sPrefix+'password2');
		}
		if ($('#'+p_sPrefix+'password').val() != $('#'+p_sPrefix+'password2').val()) {
			r_asErrorMsgs.push(l_xErrorMsgs['confirm_pw'][g_sLangAbbrev]);	
			l_asInvalidFieldIds.push(p_sPrefix+'password2');
		}		

		// Birthday
		if ((/^(0[1-9]|1[012]|[1-9])$/.test($('#'+p_sPrefix+'month').val()) == false) || (/^(0[1-9]|[12][0-9]|3[01]|[1-9])$/.test($('#'+p_sPrefix+'day').val()) == false) || (/^[0-9]{4}$/.test($('#'+p_sPrefix+'year').val()) == false)) {
			r_asErrorMsgs.push(l_xErrorMsgs['birthday'][g_sLangAbbrev]);
			l_asInvalidFieldIds.push(p_sPrefix+'month', p_sPrefix+'day', p_sPrefix+'year');
		}

		// Name
		if ((/^[a-zA-Z]{1}[-\'a-zA-Z ]{0,28}[a-zA-Z]{1}$/.test($('#'+p_sPrefix+'firstName').val()) == false)) {
			r_asErrorMsgs.push(l_xErrorMsgs['first_name'][g_sLangAbbrev]);		
			l_asInvalidFieldIds.push(p_sPrefix+'firstName');
		}
		if ((/^[a-zA-Z]{1}[-\'a-zA-Z ]{0,27}[a-zA-Z]{1}$/.test($('#'+p_sPrefix+'lastName').val()) == false)) {
			r_asErrorMsgs.push(l_xErrorMsgs['last_name'][g_sLangAbbrev]);
			l_asInvalidFieldIds.push(p_sPrefix+'lastName');
		}

		
		// Zip Code
		if ((/^[0-9]{5}$/.test($('#'+p_sPrefix+'zip').val()) == false)) {
			r_asErrorMsgs.push(l_xErrorMsgs['zip'][g_sLangAbbrev]); 
			l_asInvalidFieldIds.push(p_sPrefix+'zip');
		}
	
		// Gender
		if (!$('input[name=gender]:checked').val()) {
			r_asErrorMsgs.push(l_xErrorMsgs['gender'][g_sLangAbbrev]); 
			l_asInvalidFieldIds.push(p_sPrefix+'gender');
		}

		
		highlightFields(l_asInvalidFieldIds);
	
		return r_asErrorMsgs;
	}
	

	function showErrorMsgs(p_sFormName, p_asErrorMsgs) {
		if (p_asErrorMsgs.length == 0) return;
		var $_xErrorsList;
		
		$_xErrorsList = $('#'+p_sFormName).find('.errors').empty();
		
		for (var i=0; i < p_asErrorMsgs.length; i++) {
			$_xErrorsList.show().append('<li>' + p_asErrorMsgs[i] + '</li>');
		};
	}

	
	function correctFields(cFields) {
		var i;
		for (i = 0; i < cFields.length; i++) {
			fieldId = cFields[i];
			$('#'+fieldId).parent('.input_holder').removeClass('error');
			
		}
		errorsToClear = [];
	}
	
	function highlightFields(p_asInvalidFieldIds) {
		var i;
		for(i = 0; i < p_asInvalidFieldIds.length; i++) {   
			$('#'+p_asInvalidFieldIds[i]).parent('.input_holder').addClass('error');
			errorsToClear.push(p_asInvalidFieldIds[i]);
		}
	}

