$(document).ready(function()
		{			
			var $lottoGameRegistration = $("#lottoGameRegistration");
			var $regErrorContainer = $(".error_message");
			var $registerForm = $("#lottoGameRegistration");
			var $loginForm = $(".login_content","#lottoGameRegistration");
			
			var checkAge = function() {				

				var lpad=function(sString, nTotalLen, sChar) {
					/*
					| Optional sChar, defaults to space
					*/
					if (typeof sChar == "undefined") sChar = " ";
					nLoop = 0;
					nTotalLen-=sString.length;
					if (nTotalLen < 0) nTotalLen = 0;
					for (nLoop; nLoop<nTotalLen; nLoop++) {
						sString = String(sChar) + sString;
					}
					return sString;
				}; //end lpad

				var yyyymmdd = null;
				var yyyy = $("select[name=dobYear]").val() || null;
				var mm	 = $("select[name=dobMonth]").val() || null;
				var dd	 = $("select[name=dobDay]").val() || null;

				if (yyyy != null && mm != null && dd != null)
				{
					yyyymmdd = yyyy+lpad(mm, 2, "0")+lpad(dd, 2, "0");
				}				
				var serverDate = SERVER_DATE.split("/");
				serverDate = serverDate[2]+lpad(serverDate[0], 2, "0")+lpad(serverDate[1], 2, "0");
				var age = (yyyymmdd) ? (serverDate - yyyymmdd) / 10000: null;
				
				return age;
			};
					
			$.validator.methods.notEqual = function(value, element, param) {								
				return value != param;
			};
			$.validator.methods.notContain = function(value, element, param) {								
				return (value.indexOf(param) == -1);
			};
			$.validator.methods.alphaLimited = function(value, element, param) {				
				var pattern=/[^a-zA-Z \.\'\-]+/g;
				var result=pattern.test(value);
				return !result;
			};
			$.validator.methods.alphaExtended = function(value, element, param) {				
				var pattern=/[^a-zA-Z0-9 \.\-\'#\\\/]+/g;
				var result=pattern.test(value);
				return !result;
			};
			
			//REGISTRATION BUTTON ONCLICK
			$(".regRegisterButton","#lottoGameRegistration")
				.click(function(e) {

					
					//Workaround due no nesting forms
					var register_handler = $registerForm.validate_obj({			
						rules: {																											
							R_Title: {
								required: true,
								notEqual: ''
							},
							R_FName: {
								required: true,
								alphaLimited: true
							},
							R_LName: {
								required: true,
								alphaLimited: true
							},
							R_Address1: {
								required: true,
								alphaExtended: true,
								notContain: '&',
								minlength: 4
							},
							R_City: {
								required: true,
								alphaExtended: true,
								notContain: '&'
							},
							R_State: {
								required: true,
								notEqual: ''								
							},
							R_Zip: {
								required: true,
								minlength: 5,
								maxlength: 5,
								number: true
							},
							R_Email: {
								required: true,
								email: true,
								notContain: '&'
							},
							R_EmailConfirm: {
								required: true,
								email: true,
								notContain: '&',
								equalTo: ".formEmail"
							},
							R_Password: {
								required: true,
								minlength: 3,
								notContain: '&'
							},
							R_PasswordConfirm: {
								required: true,
								notContain: '&',
								minlength: 3,
								equalTo: ".formPassword"
							}
							
						},
						messages: {
							R_Title: "Please select a title.",
							R_FName: {
								required: "Please enter a valid first name.",
								alphaLimited: "Please enter a valid firs tname."
							},
							R_LName: {
								required: "Please enter a valid last name.",
								alphaLimited: "Please enter a valid last name."
							},
							R_Address1: {
								required: "Please enter a valid address.",
								alphaExtended: "Please enter a valid address.",
								notContain: "Please enter a valid address.",
								minlength: "Your address must have a minimum of four characters."
							},
							R_City: {
								required: "Please enter a valid city.",
								alphaExtended: "Please enter a valid city.",
								notContain: "Please enter a valid city."
							},
							R_State: "Please select a state.",
							R_Zip: "Please enter a valid 5-digit zip code.",
							R_Email: {
								required: "Please enter a valid email address.",								
								email: "Please enter a valid email address.",
								notContain: "Please enter a valid email address."
							},
							R_EmailConfirm: {
								required: "Please confirm your email address.",
								email:"Please enter a valid email address.",
								notContain:"Please enter a valid email address.",
								equalTo: "Your email address and confirm email address doesn't match."
							},
							R_Password: {
								required: "Please enter a password.",								
								minlength: "Your password must contain a minimum of 3 characters.",
								notContain: "Your password contains invalid characters."
							},
							R_PasswordConfirm: {
								required: "Please confirm your password.",
								notContain: "Your password contains invalid characters.",
								equalTo: "Your password and confirm password don't match.",
								minlength: "Your password must contain a minimum of 3 characters."
							}
						},
						errorContainer: $regErrorContainer,
						errorLabelContainer: $regErrorContainer.find(".message ul"),
						wrapper: "li"

					});

					//Fix for IE6 & IE7
					if ($("body").hasClass("ie6") || $("body").hasClass("ie7"))
					{
						//$registerForm
						//	.find("input")
						//	.unbind();

						//$registerForm
						//	.parents("form:eq(0)")
						//	.data("events",[]);

					}

					$("#lottoGameRegistration").data("register_handler", register_handler);
					pch.lotto.forms.registerForm.clearErrorMessage();
					
					var $form = $registerForm;					
					
					if ($form.parents("form:eq(0)").validate().form() == true)
					{
						var emailAddress	= $form.find("input[name=R_Email]").val();
						var password		= $form.find("input[name=R_Password]").val();
						var title			= $form.find("select[name=R_Title]").val();
						var firstName		= $form.find("input[name=R_FName]").val();
						var lastName		= $form.find("input[name=R_LName]").val();
						var addressLine1	= $form.find("input[name=R_Address1]").val();
						var addressLine2	= $form.find("input[name=R_Address2]").val();
						var city			= $form.find("input[name=R_City]").val();
						var state			= $form.find("select[name=R_State]").val();
						var zipCode			= $form.find("input[name=R_Zip]").val();
						var phone			= '';
						var emailOptin		= $form.find("input[name=PrivacyPolicy]")[0].checked;
						emailOptin = (String(emailOptin).toLowerCase() == "true") ? "true": "false";
												
						var dob				= "";
						var dobMonth		= $form.find("select[name=dobMonth]").val() || null;
						var dobDay			= $form.find("select[name=dobDay]").val() || null;
						var dobYear			= $form.find("select[name=dobYear]").val() || null;
						if (dobMonth != null && dobDay != null && dobYear != null)
						{
							dob =  dobYear + "/" + dobMonth + "/" + dobDay;
						}
						else if (dobMonth == null && dobDay == null && dobYear == null)
						{
							//Do nothing allow empty dob to be passed.
						}
						else
						{
							//If partial of the dob is entered then all of it must be entered.
							pch.lotto.forms.registerForm.errorMessage(["Please enter a valid date of birth."]);
							return false;
						}

						//Is the user younger than min age
						var minAge = 14;
						var underAgeURL = "/Error/PageNotFound.aspx";
						var age = checkAge();
						if ((age < 14) && (age != null))
						{
							//redirect user to url
							window.location.href = underAgeURL;
							return false;
						}

						pch.lotto.webServices.CreateCustomer2(
							{
								'emailAddress': emailAddress,
								'password':		password,
								'title':		title,
								'firstName':	firstName,
								'lastName':		lastName,
								'addressLine1': addressLine1,
								'addressLine2': addressLine2,
								'city':			city,
								'state':		state,
								'zipCode':		zipCode,
								'phone':		phone,
								'dateofBirth':	dob,
								'emailOptin':	emailOptin,								
								'ipAddress':''
							},
							function(data, textStatus, XMLHttpRequest)
							{
								var userRegisteredWithoutPlayingGame = (pch.lotto.customerData.currGameCardIndex == pch.lotto.NO_GAME_PLAY) ? true: false;
								var responseCode = $(data).find("AccountResponseCodes").text();
								if (responseCode.toLowerCase() != "ok")
								{
									//alert("Error processing your information!\nResponse code: "+responseCode);
									pch.lotto.forms.registerForm.errorMessage(["Error processing your information!\nResponse code: "+responseCode]);
									return false;
								}
								else 
								{									
									//save customer data internally
									var hash =
									{
										'id': '',
										'title':		title,
										'firstName':	firstName,
										'lastName':		lastName,
										'emailAddress': emailAddress,
										'address1':		addressLine1,
										'address2':		addressLine2,
										'city':			city,
										'state':		state,
										'zip':			zipCode,
										'dob':			dob,
										'avatarID':		''
									};

									pch.lotto.customerData.save(hash);

									if (!userRegisteredWithoutPlayingGame)
									{

										//submit game card
										pch.lotto.webServices.SubmitEntry(
											{
												"contestId": pch.lotto.lottoGameCard[pch.lotto.customerData.currGameCardIndex].gameID, 
												"selectedNumbersAsString": myPicks.join(",")
											}
										);
										//TODO: Catch errors. What if numbers failed to submit?
									}

									//Hide Lotto Game Card
									lottoGameSubmitReg();

									if (!userRegisteredWithoutPlayingGame)
									{
										//show ad (next game is automatically shown after ad)
										lottoGameAnimateAd();
									}
									else
									{
										window.setTimeout("pch.lotto.buildCard()", 1000);
									}
								}
							}
						); //end CreateCustomer2

						
						//Tracking Code: eDialogConversion
						pch.lotto.trackingCode("OnLoginClickEvent");
						
						//Tracking Code: DFAConversion
						pch.lotto.trackingCode("DFA_EmailOptIn", emailOptin);						
					}

					e.stopPropagation();
					e.preventDefault();

				}); //end AJAX Submit Button
				
				//If disabled login form and user changed text enable login button
				$loginForm
					.find("input")
					.change(function() {
						$(".reg_login_button").removeAttr("disabled");
					});


				//LOGIN BUTTON ONCLICK
				$(".reg_login_button")
					.click(function(evnt) {
											
						//Prevent double clicking
						$(this).attr("disabled","disabled");

						//Work around due to no nesting forms
						var login_handler = $loginForm.validate_obj({
							rules: {
								L_Email: {
									notContain: '&',
									required: true,
									email: true
								},
								L_Password: {
									notContain: '&',
									required: true						
								}
							},
							messages: {
								L_Email: {
									required: "Please enter a valid email address.",
									notContain: "You have entered an invalid character."
								},
								L_Password: {
									required: "Please enter your password.",
									notContain: "You have entered an invalid character."
								}
							},
							errorContainer: $regErrorContainer,
							errorLabelContainer: $regErrorContainer.find(".message ul"),
							wrapper: "li"
						});

						$("#lottoGameRegistration").data("login_handler", login_handler);
						pch.lotto.forms.registerForm.clearErrorMessage();

						var $form = $loginForm;						

						if ($form.parents("form:eq(0)").validate().form() == true)
						{
							var emailAddress = $form.find("input[name=L_Email]").val();
							var password	 = $form.find("input[name=L_Password]").val();

							pch.lotto.webServices.Authenticate(
								{
									'emailAddress': emailAddress,
									'password': password
								},
										
								function(data)
								{
									var responseCode = $(data).find("AccountResponseCodes").text();									
									if (responseCode.toLowerCase() == "ok")
									{
											//User viewed registration form before game play
											var userRegisteredWithoutPlayingGame = (pch.lotto.customerData.currGameCardIndex == pch.lotto.NO_GAME_PLAY) ? true: false;

											//Hide Registration form
											lottoGameHideReg();
											
											if (userRegisteredWithoutPlayingGame)
											{
													pch.lotto.webServices.GetContestsPlayedByUser(
														function(){
															if (pch.lotto.customerData.gamesPlayed.length == pch.lotto.customerData.totalGames)
															{
																//User played all games
																pch.lotto.gameFlow.allDoneGameExit();
															}
															else
															{
																pch.lotto.buildCard();
															}
														}
													);
											}
											else
											{
													//Submit only if user hasn't played game already
													var submittedGameID = pch.lotto.lottoGameCard[pch.lotto.customerData.currGameCardIndex].gameID;
													var submitGameEntry = function(gamesPlayed) {
															var bSubmitEntry = true;

															$.each(pch.lotto.customerData.gamesPlayed, function(i) {
																	if (pch.lotto.customerData.gamesPlayed[i] == submittedGameID)
																	{
																		bSubmitEntry = false;
																		return false;
																	}
															});												
															
															if (bSubmitEntry)
															{
																pch.lotto.webServices.SubmitEntry(
																	{
																		"contestId": pch.lotto.lottoGameCard[pch.lotto.customerData.currGameCardIndex].gameID, 
																		"selectedNumbersAsString": myPicks.join(",")
																	}
																);
															}
															else
															{
																	//Advance to next game
																	pch.lotto.webServices._postSubmitEntryProcess(false);
															}
													}; //end submitGameEntry

													pch.lotto.webServices.GetContestsPlayedByUser(submitGameEntry);

											}//end if (userRegisteredWithoutPlayingGame)

											//Tracking Code: eDialogConversion
											pch.lotto.trackingCode("OnLoginClickEvent");
									}
									else
									{
											//Authenticate failed
											pch.lotto.forms.registerForm.errorMessage([responseCode]);
											$(".reg_login_button").removeAttr("disabled");
									}
								}
							);
						}
						else
						{
							//Form failed validation
							$(".reg_login_button").removeAttr("disabled");							
						}
					});


				//SHOW LOGIN FORM
				$(".loginBtn","#lottoGameRegistration")
					.click(function(evnt){						
						$("#register_content","#lottoGameRegistration")
							.hide();

						$(".ez_seal","#lottoGameRegistration")
							.hide();

						var err = $("#lottoGameRegistration").data("register_handler");
						if (typeof err != "undefined")
						{
							try {
								err.resetForm();
								var parentForm = "#"+err.currentForm.id;
								$(parentForm)
									.removeData("validator")
									.data("events",[]);								
							} catch(e) {}
						}

						$lottoGameRegistration
							.addClass("login_view");
						
						$(".login_content","#lottoGameRegistration")
							.show();
					});

				
				//SHOW REGISTRATION FORM
				$(".back_button","#lottoGameRegistration")
					.click(function(evnt){
						$(".login_content","#lottoGameRegistration")
							.hide();
						
						$lottoGameRegistration
							.removeClass("login_view");

						var err = $("#lottoGameRegistration").data("login_handler");
						if (typeof err != "undefined")
						{
							try {
								err.resetForm();
								var parentForm = "#"+err.currentForm.id;
								$(parentForm)
									.removeData("validator")
									.data("events",[]);								
							} catch(e) {}
						}

						$(".ez_seal","#lottoGameRegistration")
							.show();

						$("#register_content","#lottoGameRegistration")
							.show();
					});

				
				//User clicks to reset password
				$(".reset_password","#lottoGameRegistration")					
					.click(function(evnt){
						fLaunchForgotPassword();
						evnt.preventDefault();
					});															
		}
	);