/*globals $, validation, races, alert, GB_showFullScreen */

$(function () {
	var tabContainers = $('div.tabs > div');
	tabContainers.hide().filter(':first').show();
	$('div.tabs ul.tabNavigation a').click(function () {
		tabContainers.hide();
		tabContainers.filter(this.hash).show();
		$('div.tabs ul.tabNavigation a').removeClass('selected');
		$(this).addClass('selected');
		return false;
	}).filter(':first').click();
});

var menu = {
	init: function () {
		$('#header ul#menu li ul').hide();
		$('#header ul#menu li').hover(
			function () {
				$(this).children('ul').show();
			},

			function () {
				$(this).children('ul').hide();
			}
		);
	}
};

var utility = {
	init: function () {
		utility.showNewsletter();
	},

	popupGreybox: function (title, url) {
		GB_showFullScreen(title, url);
	},

	stripNonNumeric: function (str) {
		str += '';
		var rgx = /^\d|\.|-$/;
		var out = '';
		var i;

		for (i = 0; i < str.length; i++) {
			if (rgx.test(str.charAt(i))) {
				if (!((str.charAt(i) == '.' && out.indexOf('.') != -1) ||
					(str.charAt(i) == '-' && out.length != 0))) {
					out += str.charAt(i);
				}
			}
		}
		return out;
	},

	showNewsletter: function () {
		$('#newsletterPopup').click(function () {
			$('#overlay').remove();
			var width = $('body').width();
			$('#overlay').height($('body').get(0).scrollHeight + 'px');
			$('#overlay').remove();
			var tellAFriendWidth = $('#newsletter').width();
			var left = (width - tellAFriendWidth) / 2;
			$('#newsletter').css('left', left);
			$('#newsletter').show();

			var overlay = '<div id="overlay" class="ui-widget-overlay" style="z-index: 250;"/>';
			$('body').append(overlay);
			$('html,body').animate({
				scrollTop: 0
			}, 1000);

			return false;
		});

		$('#newsletter #closeNewsletter').click(function () {
			$('#newsletter').hide();
			$('#overlay').remove();
			return false;
		});
	},

	faq: function () {
		$('.faq dd').hide();
		$('.faq dt').click(function () {
			$(this).next('dd').toggle();
		});
	}
};

var rotateBanner = {
	totalRaces: 0,
	currentMarker: 0,
	currentBanner: 0,

	init: function () {
		rotateBanner.totalRaces = races.length;
		$('#bannerLeft h1 a').text(races[0].name);
		$('#bannerLeft h2').text(races[0].location);
		//$('#bannerLeft h1 a').attr('href', races[0].url);
		$('#bannerLeft h1 a').attr('href', "/races/");
		if (races[0].begin == races[0].end) {
			$('#bannerLeft span').text(races[0].begin);
		} else {
			$('#bannerLeft span').text(races[0].begin + ' - ' + races[0].end);
		}
		$('#bannerLeft img').attr('src', races[0].imageurl);
		rotateBanner.rotate();
	},

	rotate: function () {
		if (rotateBanner.totalRaces > 1) {
			setInterval(function () {
				rotateBanner.updateBanner();
			}, 6000);
		}
	},

	updateBanner: function () {
		rotateBanner.currentMarker = rotateBanner.currentMarker + 1;
		rotateBanner.currentBanner = rotateBanner.currentBanner + 1;

		if (rotateBanner.currentMarker >= rotateBanner.totalRaces) {
			rotateBanner.currentMarker = 0;
		}

		/*if(rotateBanner.currentBanner >= rotateBanner.totalBanners){
		rotateBanner.currentBanner = 0;
		}*/
		$('#bannerLeft h1 a').text('');
		$('#bannerLeft span').text('');

		$('#bannerLeft img').fadeOut('fast', function () {
			if (races[rotateBanner.currentMarker].imageurl == '') {
				$(this).attr('src', '/webresources/images/banner0.jpg');
			} else {
				$(this).attr('src', races[rotateBanner.currentMarker].imageurl);
			}

			$(this).fadeIn('slow');
			$('#bannerLeft h1 a').text(races[rotateBanner.currentMarker].name);
			//$('#bannerLeft h1 a').attr('href', races[rotateBanner.currentMarker].url);
			$('#bannerLeft h1 a').attr('href', "/races/");
			$('#bannerLeft h2').text(races[rotateBanner.currentMarker].location);
			if (races[rotateBanner.currentMarker].begin == races[rotateBanner.currentMarker].end) {
				$('#bannerLeft span').text(races[rotateBanner.currentMarker].begin);
			} else {
				$('#bannerLeft span').text(races[rotateBanner.currentMarker].begin + ' - ' + races[rotateBanner.currentMarker].end);
			}
		});
	}
};

var pageTasks = {
	sameShippingAddress: function () {
		$('#sameShippingAddress').click(function () {
			if ($(this).attr('checked')) {
				$('#ctl00_ContentPlaceHolder1_ccName').attr('value', $('#ctl00_ContentPlaceHolder1_firstName').attr('value') + ' ' + $('#ctl00_ContentPlaceHolder1_lastName').attr('value'));
				$('#ctl00_ContentPlaceHolder1_ccAddress').attr('value', $('#ctl00_ContentPlaceHolder1_address').attr('value'));
				$('#ctl00_ContentPlaceHolder1_ccCity').attr('value', $('#ctl00_ContentPlaceHolder1_city').attr('value'));
				$('#ctl00_ContentPlaceHolder1_ccStateList').val($('#ctl00_ContentPlaceHolder1_stateList').val());
				$('#ctl00_ContentPlaceHolder1_ccZipCode').attr('value', $('#ctl00_ContentPlaceHolder1_zipCode').attr('value'));
			} else {
				$('#ctl00_ContentPlaceHolder1_ccName').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_ccAddress').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_ccCity').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_ccStateList').val(0);
				$('#ctl00_ContentPlaceHolder1_ccZipCode').attr('value', '');
			}
		});
	},

	sameShoppingShippingAddress: function () {
		$('#sameShoppingShippingAddress').click(function () {
			if ($(this).attr('checked')) {
				$('#ctl00_ContentPlaceHolder1_Name').attr('value', $('#ctl00_ContentPlaceHolder1_FirstName').attr('value') + ' ' + $('#ctl00_ContentPlaceHolder1_LastName').attr('value'));
				$('#ctl00_ContentPlaceHolder1_SAddress1').attr('value', $('#ctl00_ContentPlaceHolder1_Address1').attr('value'));
				$('#ctl00_ContentPlaceHolder1_SAddress2').attr('value', $('#ctl00_ContentPlaceHolder1_Address2').attr('value'));
				$('#ctl00_ContentPlaceHolder1_SCity').attr('value', $('#ctl00_ContentPlaceHolder1_City').attr('value'));
				$('#ctl00_ContentPlaceHolder1_SStatelist').val($('#ctl00_ContentPlaceHolder1_StateList').val());
				$('#ctl00_ContentPlaceHolder1_SZip').attr('value', $('#ctl00_ContentPlaceHolder1_PostalCode').attr('value'));
			} else {
				$('#ctl00_ContentPlaceHolder1_Name').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_SAddress1').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_SAddress2').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_SStatelist').val(0);
				$('#ctl00_ContentPlaceHolder1_SCity').attr('value', '');
				$('#ctl00_ContentPlaceHolder1_SZip').attr('value', '');
			}
		});
	},

	deactivateSubmitButton: function () {
		$('.submit').click(function () {
			$('.submit').css('display', 'none');
			$('#loader').removeClass('hidden');
		});
	}
};

var tooltip = {
	init: function () {
		$('.popup').click(function () {
			var id = $(this).attr('rel');
			$('#' + id).dialog({
				title: $(this).attr('title'),
				bgiframe: true,
				modal: true,
				closeOnEscape: true,
				overlay: {
					backgroundColor: '#000000',
					opacity: 0.5
				},
				buttons: {
					Cancel: function () {
						$(this).dialog('close');
					}
				}
			});
			$('#' + id).dialog('open');
		});
	}
};


var eventGallery = {
	page: 0,
	totalImages: 0,
	totalPages: 0,
	currentMarker: 0,

	init: function () {
		if ($('#galleryPreview').length > 0) {
			eventGallery.setFirstImage();
			eventGallery.activateThumbnails();
			eventGallery.paging();
			eventGallery.totalImages = $('#thumbnail ul img').length;
			eventGallery.totalPages = Math.ceil(eventGallery.totalImages / 6);
			$('.count').text('1 of ' + eventGallery.totalImages);
		}
	},

	setFirstImage: function () {
		var thumbPath = $('#thumbnail ul img:first').attr('src');
		var alt = $('#thumbnail ul img:first').attr('alt');
		$('#loader').css('display', '');
		eventGallery.loadImage(thumbPath, alt);
		eventGallery.checkPagingLinks();
	},

	checkPagingLinks: function () {
		if (eventGallery.page == 0) {
			$('#thumbnail #previous').addClass('disabled');
		} else if (eventGallery.page == eventGallery.totalPages - 1) {
			$('#thumbnail #next').addClass('disabled');
		} else {
			$('#thumbnail #previous').removeClass('disabled');
			$('#thumbnail #next').removeClass('disabled');
		}
	},

	paging: function () {
		$('#next').click(function () {
			var okToPage = eventGallery.getPagingStatus('next');
			if (okToPage) {
				$('#thumbnail ul').css('display', 'none');
				var currentTop = $('#thumbnail ul').css('top');
				var newTop = parseInt(currentTop, 10) - 220;
				eventGallery.page = eventGallery.page + 1;
				eventGallery.checkPagingLinks();
				$('#thumbnail ul').css('top', newTop + 'px');
				$('#thumbnail ul').show('drop', {
					direction: 'down'
				}, 500);
			}
			return false;
		});
		$('#previous').click(function () {
			var okToPage = eventGallery.getPagingStatus('previous');
			if (okToPage) {
				eventGallery.page = eventGallery.page - 1;
				eventGallery.checkPagingLinks();
				$('#thumbnail ul').css('display', 'none');
				var currentTop = $('#thumbnail ul').css('top');
				var newTop = parseInt(currentTop, 10) + 220;

				$('#thumbnail ul').css('top', newTop + 'px');
				$('#thumbnail ul').show('drop', {
					direction: 'up'
				}, 500);
			}
			return false;
		});
	},

	getPagingStatus: function (direction) {
		if (direction == 'next') {
			if (eventGallery.page < (eventGallery.totalPages - 1)) {
				return true;
			}
		} else if (direction == 'previous') {
			if (eventGallery.page > 0) {
				return true;
			}
		}

	},

	activateThumbnails: function () {
		$('#thumbnail ul').click(function (event) {
			var target = $(event.target);
			if ($(target).attr('nodeName').toLowerCase() == 'a') {
				target = $('img', target);
				event.preventDefault();
			}
			if ($(target).attr('nodeName').toLowerCase() == 'img') {
				var thumbPath = $(target).attr('src');
				var alt = $(target).attr('alt');
				$('#preview img:eq(1)').fadeOut('fast', function () {
					$('#loader').css('display', '');
				});
				eventGallery.currentMarker = $('#thumbnail ul img').index(target);
				eventGallery.loadImage(thumbPath, alt);
				return false;
			}
		});
	},

	loadImage: function (thumbPath, alt) {
		$('#preview img:eq(1)').fadeOut('fast', function () {
			$(this).remove();
		});
		var mediumPath = thumbPath.replace(/thumb/, 'medium');
		var img = new Image();
		$(img).load(function () {
			$(this).hide();
			$(this).fadeIn('slow', function () {

				$('#preview #loader').after(img);
				var imageWidth = $(this).width();
				var left = (700 - imageWidth) / 2;
				$('#preview p:first').text(alt);
				//$('#preview p').fadeIn('fast');
				$('.count').text(eventGallery.currentMarker + 1 + ' of ' + eventGallery.totalImages);
				$('#preview img:eq(1)').css('margin-left', left);
				$('#loader').css('display', 'none');
			});
		}).attr('src', mediumPath);
	}
};

var account = {
	statusMessage: '',

	init: function () {
		account.getSideBar();
		account.getUpcomingEvents();
		account.updateMessage();
	},

	updateMessage: function () {
		if (account.statusMessage != '') {
			$('#statusMessage').css('display', '');
			$('#statusMessage').html(account.statusMessage);
		}
	},

	getSideBar: function () {
		$.ajax({
			type: "POST",
			url: "/services/userinfo.asmx/GetSideBar",
			data: "{}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				account.populateSideBar(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message);
			}
		});
	},

	populateSideBar: function (userInfo) {
		$('#myLogin').html(userInfo.Email);
		$('#myNumber').html(userInfo.MemberNumber);
		$('#myExpDate').html(userInfo.MemberExpDate);
		$('#myDivision').html(userInfo.DefaultDivision);
		$('#myClass').html(userInfo.DefaultClass);
	},

	getUpcomingEvents: function () {
		$.ajax({
			type: "POST",
			url: "/services/userinfo.asmx/GetUpcomingEvents",
			data: "{'pageNumber':'1','pageSize':'100'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				account.populateEvents(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message);
			}
		});
	},

	populateEvents: function (userEvents) {
		if (userEvents.length == 0) {
			$('.display').css('display', 'none');
			$('#noEvents').css('display', '');
		} else {
			$('.display').css('display', '');
			$('#noEvents').css('display', 'none');
			$('.display tbody tr').remove();
			for (var i = 0; i < userEvents.length; i++) {
				var html = '';
				var href = '<a href="/races/' + userEvents[i].SeasonName + '/' + userEvents[i].Slug + '.aspx" title="' + userEvents[i].Name + '">' + userEvents[i].Name + '</a>';
				var reg = '';

				if (userEvents[i].IsRegistered) {
					reg = 'Registered';
				}
				else {
					reg = '<a href="/races/' + userEvents[i].SeasonName + '/' + userEvents[i].Slug + '/Register.aspx" title="Register for' + userEvents[i].Name + '">Register</a>';
				}

				html += (i % 2 == 0 ? '<tr class="alt">' : '<tr>');
				html += '<td>' + href + '</td>';
				html += '<td>' + userEvents[i].EventDate + '</td>';
				html += '<td>' + userEvents[i].Location + '</td>';
				html += '<td>' + reg + '</td>';
				html += '</tr>';

				$('.display tbody').append(html);
			}
		}
	},

	forgot: function () {
		account.submitEmail();
		$('.forgot').click(function () {
			$('#forgot').dialog({
				title: 'Retrieve your password',
				bgiframe: true,
				modal: true,
				closeOnEscape: true,
				overlay: {
					backgroundColor: '#000000',
					opacity: 0.5
				}
			});
			$('#forgot').dialog('open');
			return false;
		});
	},

	submitEmail: function () {
		$('#submitForgot').click(function () {
			$.ajax({
				type: "POST",
				url: "/services/userinfo.asmx/SendPassword",
				data: "{'email':'" + $('#email').attr('value') + "'}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: function (result) {
					if (result) {
						$('#forgot').dialog('close');
						$('#email').attr('value', '');
						$('#details h1').after('<ul class="information"><li>You password has been sent to the email account you entered.</li></ul>')
					}
					else {
						$('#forgot .form').before('<ul><li>The email you entered was not found in our system.</li></ul>');
					}
				},
				error: function (xhr, status, error) {
					var err = eval("(" + xhr.responseText + ")");
					alert(err.Message)
				}
			});
			return false;
		});
	}
};

var raceList = {
	currentPage: 1,
	lastPage: 1,
	column: 'Gender',
	direction: 'Asc',
	raceDate: '',

	init: function () {
		raceList.getRacerCount();
	},

	getRacerCount: function () {
		$.ajax({
			type: "POST",
			url: "/services/raceinfo.asmx/GetRacerCount",
			data: "{'raceKey':'" + raceList.key + "'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				$('#totalEntrants').text(result);
				raceList.populateRacerCount(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	populateRacerCount: function (count) {
		var currentDate = new Date();

		if (count >= 25) {
			raceList.getRacers(raceList.currentPage);
		}
		else {
			$('#entry_tab .pager').css('display', 'none');
			$('#entry_tab #raceEntrants').css('display', 'none');
			$('#entry_tab').append('<p>Race list is coming soon.</p>');
			$('#paging').css('display', 'none');
		}
		if (raceList.maxEntrants != 0 && currentDate < raceList.raceDate) {
			var nearFull = 0.8 * raceList.maxEntrants;
			if (count >= nearFull) {
				$('#nearlyFull').removeClass('hidden');
			}
		}
	},

	pageRacers: function (elem, pageNumber) {
		if (!$(elem).hasClass('disabled')) {
			raceList.getRacers(pageNumber);
		}
	},

	viewAllRacers: function () {
		if ($('#paging').hasClass('all')) {
			$('#paging').removeClass('all').addClass('page');
			$.ajax({
				type: "POST",
				url: "/services/raceinfo.asmx/GetAllRacers",
				data: "{'raceKey':'" + raceList.key + "', 'sortColumn':'" + raceList.column + "', 'sortDirection':'" + raceList.direction + "'}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: function (result) {
					raceList.populateRacers(result);
					$('.pager').css('visibility', 'hidden');

				},
				error: function (xhr, status, error) {
					var err = eval("(" + xhr.responseText + ")");
					alert(err.Message)
				}
			});

		} else {
			$('#paging').removeClass('page').addClass('all');
			raceList.getRacers(1);
			$('.pager').css('visibility', 'visible');
		}
	},

	getRacers: function (pageNumber) {
		raceList.currentPage = pageNumber;
		$.ajax({
			type: "POST",
			url: "/services/raceinfo.asmx/GetRacers",
			data: "{'raceKey':'" + raceList.key + "', 'pageSize':'5', 'pageNumber':'" + pageNumber + "', 'sortColumn':'" + raceList.column + "', 'sortDirection':'" + raceList.direction + "'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				raceList.populateRacers(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});

		$.ajax({
			type: "POST",
			url: "/services/raceinfo.asmx/GetRacerPageCount",
			data: "{'raceKey':'" + raceList.key + "', 'pageSize':'5'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				raceList.populateCount(result)
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	populateRacers: function (items) {
		$('#raceEntrants tbody tr').remove();

		if (items.length > 0) {
			var html = '';

			for (var i = 0; i < items.length; i++) {
				if (i % 2 == 0) {
					html += '<tr>';
				}
				else {
					html += '<tr class="alt">';
				}

				html += '<td>' + items[i].FullName + '</td>';
				html += '<td>' + items[i].ClassName + '</td>';
				html += '<td>' + items[i].Gender + '</td>';
				html += '<td>' + items[i].Age + '</td>';
				html += '</tr>';
			}

			$('#raceEntrants tbody').append(html);
		}
	},

	populateCount: function (result) {
		$('#pageList option').remove();
		for (var i = 1; i <= result; i++) {
			var html = '<option value="' + i + '">' + i + '</option>';
			$('#pageList').append(html);
		}
		$('#pageList').val(raceList.currentPage);

		raceList.lastPage = result;
		if (raceList.currentPage == 1) {
			$('#firstPage').attr('class', 'disabled');
			$('#prevPage').attr('class', 'disabled');
		}
		else {
			$('#firstPage').attr('class', '');
			$('#prevPage').attr('class', '');
		}

		if (raceList.currentPage == raceList.lastPage) {
			$('#lastPage').attr('class', 'disabled');
			$('#nextPage').attr('class', 'disabled');
		}
		else {
			$('#lastPage').attr('class', '');
			$('#nextPage').attr('class', '');
		}
	},

	sortProducts: function (name) {
		raceList.column = name;
		if (raceList.direction == 'Desc') {
			raceList.direction = 'Asc';
		} else {
			raceList.direction = 'Desc';
		}

		raceList.getRacers(raceList.currentPage);
	}
};

var loginUtility = {
	init: function () {
		//loginUtility.getStatus();
		loginUtility.getCart();
	},

	getCart: function () {
		$.ajax({
			type: "POST",
			url: "/services/userinfo.asmx/GetCart",
			data: "{}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				loginUtility.populateCart(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	populateCart: function (cart) {
		if (cart != 0) {
			$('#cart').append($('<li><a href="/cart/">Items in Cart: ' + cart + '</a></li>'));
		}
	},

	getStatus: function () {
		$.ajax({
			type: "POST",
			url: "/services/userinfo.asmx/GetLoginStatus",
			data: "{}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				loginUtility.populateLogin(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	populateLogin: function (firstName) {
		$('#utility li').remove();

		if (firstName.length != 0) {
			$('#utility').append($('<li class=name></li>').text('Welcome ' + firstName));
			$('#utility').append($('<li></li>').html('<a href="/account" title="My Account">My Account</a>'));
			$('#utility').append($('<li></li>').html('<a href="/signout.aspx" title="Logout">Logout</a>'));
		} else {
			$('#utility').append($('<li></li>').html('<a href="/signin.aspx" title="Login">Login</a>'));
		}

		//just check for the free stuff

		if (validation.checkEvent == true) {
			validation.checkEventType();
		}
	}
};


var validation = {
	div: '',

	init: function (div) {

		if (div != '') {
			validation.div = div;
			$('.required', div).blur(function () {
				validation.nonempty($(this));
			});

			$('.email', div).blur(function () {
				validation.email($(this));
			});

			$('.zipcode', div).blur(function () {
				validation.zipcode($(this));
			});

			$('.selection', div).blur(function () {
				validation.selection($(this));
			});

			$('.creditCard', div).blur(function () {
				validation.creditCard($(this));
			});
		}
		else {
			$('.required').blur(function () {
				validation.nonempty($(this));
			});

			$('.email').blur(function () {
				validation.email($(this));
			});

			$('.zipcode').blur(function () {
				validation.zipcode($(this));
			});

			$('.selection').blur(function () {
				validation.selection($(this));
			});

			$('.creditCard').blur(function () {
				validation.creditCard($(this));
			});
		}

		var numIssues = validation.submit_form();
		if (numIssues > 0) {
			return false;
		} else {
			return true;
		}
	},

	email: function (elem) {
		var re = /^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$/;
		var result = re.exec($(elem).attr('value'));
		if (result == null) {
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).after('<span class="message">You need to include a valid email</span>');
		} else {
			if ($('#utility li.name').length == 0) {
				$.ajax({
					type: "POST",
					url: "/services/userinfo.asmx/CheckEmail",
					data: "{'email':'" + $(elem).attr('value') + "'}",
					contentType: "application/json; charset=utf-8",
					dataType: "json",
					success: function (result) {
						if (result) {
							$(elem).after('<span class="message">This email has already been registered as a member</span>')
						}
						else {
							validation.clear(elem);
						}
					},
					error: function (xhr, status, error) {
						var err = eval("(" + xhr.responseText + ")");
						alert(err.Message)
					}
				})
			}
		}
	},

	zipcode: function (elem) {
		var re = /^\d{5}(-\d{4})?$/;
		var result = re.exec($(elem).attr('value'));
		if (result == null && $(elem).is(':enabled')) {
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).after('<span class="message">You need to include a valid zipcode</span>');
		} else {
			validation.clear(elem);
		}
	},

	nonempty: function (elem) {
		if ($(elem).attr('value') == '' && $(elem).is(':enabled')) {
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).after('<span class="message">This field cannot be empty</span>');
		} else {
			validation.clear(elem);
		}
	},

	selection: function (elem) {
		if ($(elem).val() == 0 && $(elem).is(':enabled')) {
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).after('<span class="message">You need to make a selection.</span>');
		} else {
			validation.clear(elem);
		}
	},

	terms: function (elem) {
		if ($('input', elem).attr('checked') == true) {
			$('input', elem).attr('checked', 'checked');
			validation.clear(elem);
		} else {
			$('input', elem).attr('checked', '');
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).parent('label').after('<span class="message">You need to agree to the waiver before continuing.</span>');
		}
	},

	creditCard: function (elem) {
		var ccNumb = $(elem).attr('value');
		var valid = "0123456789" // Valid digits in a credit card number
		var len = ccNumb.length; // The length of the submitted cc number
		var iCCN = parseInt(ccNumb); // integer of ccNumb
		var sCCN = ccNumb.toString(); // string of ccNumb
		sCCN = sCCN.replace(/^s+|s+$/g, ''); // strip spaces
		var iTotal = 0; // integer total set at zero
		var bNum = true; // by default assume it is a number
		var bResult = false; // by default assume it is NOT a valid cc
		var temp; // temp variable for parsing string
		var calc; // used for calculation of each digit
		for (var j = 0; j < len; j++) {
			temp = "" + sCCN.substring(j, j + 1);
			if (valid.indexOf(temp) == "-1") {
				bNum = false;
			}
		}
		if (!bNum) {
			bResult = false;
		}
		if ((len == 0) && (bResult)) {
			bResult = false;
		} else {
			if (len >= 15) {
				for (var i = len; i > 0; i--) { // LOOP throught the digits of the card
					calc = parseInt(iCCN) % 10; // right most digit
					calc = parseInt(calc); // assure it is an integer
					iTotal += calc; // running total of the card number as we loop - Do Nothing to first digit
					i--; // decrement the count - move to the next digit in the card
					iCCN = iCCN / 10; // subtracts right most digit from ccNumb
					calc = parseInt(iCCN) % 10; // NEXT right most digit
					calc = calc * 2; // multiply the digit by two
					switch (calc) {
						case 10:
							calc = 1;
							break; //5*2=10 & 1+0 = 1
						case 12:
							calc = 3;
							break; //6*2=12 & 1+2 = 3
						case 14:
							calc = 5;
							break; //7*2=14 & 1+4 = 5
						case 16:
							calc = 7;
							break; //8*2=16 & 1+6 = 7
						case 18:
							calc = 9;
							break; //9*2=18 & 1+8 = 9
						default:
							calc = calc; //4*2= 8 &   8 = 8  -same for all lower numbers
					}
					iCCN = iCCN / 10;
					iTotal += calc;
				}
				if ((iTotal % 10) == 0) {
					bResult = true;
				}
				else {
					bResult = false;
				}
			}
		}
		//if ($('#registrationFee').text().toLowerCase() != 'free' && $('#registrationFee').text().toLowerCase() != '$0.00') {

		if (!bResult && $(elem).is(':enabled')) {
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).after('<span class="message">You need to use a valid credit card.</span>');
		} else {
			validation.clear(elem);
		}
	},

	expirationMonth: function (elem) {
		var expMonth = $(elem).val();
		var expYear = $('.expYear').val();
		validation.expiration(expMonth, expYear);
	},

	expirationYear: function (elem) {
		var expMonth = $('.expMonth').val();
		var expYear = $(elem).val();
		validation.expiration(expMonth, expYear);
	},

	expiration: function (expMonth, expYear) {
		var date = new Date();
		var month = date.getMonth() + 1;
		var year = date.getFullYear();
		if ((expMonth < month) && (expYear < year)) {
			validation.clear(elem);
			$(elem).addClass('issue');
			$(elem).after('<span class="message">You need to use a valid credit card.</span>');
		}
	},

	clear: function (elem) {
		$(elem).removeClass('issue');
		$(elem).next('.message').remove();
		$(elem).parent('label').next('.message').remove();
	},

	submit_form: function () {
		if (validation.div != '') {
			$('.form input, .form textarea, .form select', validation.div).trigger('blur');
		} else {
			$('.form input, .form textarea, .form select').trigger('blur');
		}

		validation.terms($('.terms'));

		validation.checkEventType();
		if (validation.div != '') {
			var issues = $('.form .issue', validation.div).length;
		} else {
			var issues = $('.form .issue').length;
		}
		if (issues != 0) {
			$('.form .issue:eq(0)').focus();
			return issues;
		} else {
			return 0;
		}
	},

	checkEventType: function () {
		if ($('#utility li.name').length > 0) {
			$('#loginInfo').hide();
			if ($('.buyMisc input').length > 0) {
				if ($('.buyMisc input').attr('checked')) {
					if ($('#registrationFee').text().toLowerCase() == 'free' || $('#registrationFee').text().toLowerCase() == '0.00') {
						$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeAttr('disabled');
						$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeClass('disabled');
					}
				} else {
					if ($('#registrationFee').text().toLowerCase() == 'free' || $('#registrationFee').text().toLowerCase() == '0.00') {
						$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').attr('disabled', 'disabled');
						$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').addClass('disabled');
					}
				}
			} else {
				if ($('#registrationFee').text().toLowerCase() == 'free' || $('#registrationFee').text().toLowerCase() == '0.00') {
					$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').attr('disabled', 'disabled');
					$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').addClass('disabled');
				}
			}
		}
	}
};

var raceMetadata = {
	defaultDivision: 0,
	defaultClass: 0,

	init: function () {
		raceMetadata.defaultDivision = $('#ctl00_ContentPlaceHolder1_defaultDivision').attr('value');
		raceMetadata.defaultClass = $('#ctl00_ContentPlaceHolder1_defaultClass').attr('value');
		raceMetadata.setupEvents();
		raceMetadata.getDivisions();
		raceMetadata.buyMisc();

		//hackish way to set the first element that is not the select to be preselected for event registration
		setTimeout(function () {
			if (raceMetadata.selectFirst === true) {
				var secondOption = $('.divisionList option:eq(1)').attr('value');
				if (typeof (secondOption) !== 'undefined') {
					$('.divisionList').val(secondOption);
					$('.divisionList').trigger('change');
				}
			}
		}, 1000)

		if ($('#utility li.name').length > 0) {
			$('#loginInfo').hide();
		}

		if ($('#ctl00_ContentPlaceHolder1_miscFee').length > 0) {
			var miscFee = $('#ctl00_ContentPlaceHolder1_miscFee').attr('value');

			if (miscFee == "$0.00") {
				$('#misc').hide();
			}
		}

	},

	buyMisc: function () {
		$('.buyMisc input').click(function () {
			if ($(this).attr('checked')) {
				if ($('#registrationFee').text().toLowerCase() == 'free' || $('#registrationFee').text().toLowerCase() == '0.00') {
					$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeAttr('disabled');
					$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').removeClass('disabled');
				}
			}
			else {
				if ($('#registrationFee').text().toLowerCase() == 'free' || $('#registrationFee').text().toLowerCase() == '0.00') {
					$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').attr('disabled', 'disabled');
					$('#formRaceFee .required, #formRaceFee .email, #formRaceFee .zipcode, #formRaceFee .creditCard, #formRaceFee .selection').addClass('disabled');
				}
			}
		})
	},

	getDivisions: function () {
		if (raceMetadata.raceKey != undefined) {
			$.ajax({
				type: "POST",
				url: "/services/divisions.asmx/GetDivisionsByRace",
				data: "{'raceKey':'" + raceMetadata.raceKey + "'}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: function (result) {
					if (result.length > 0) {
						raceMetadata.populateDivisions(result);
					}
					else {
						$.ajax({
							type: "POST",
							url: "/services/divisions.asmx/GetDivisions",
							data: "{}",
							contentType: "application/json; charset=utf-8",
							dataType: "json",
							success: function (result) {
								raceMetadata.populateDivisions(result);
							},
							error: function (xhr, status, error) {
								var err = eval("(" + xhr.responseText + ")");
								alert(err.Message)
							}
						});
					}
				},
				error: function (xhr, status, error) {
					var err = eval("(" + xhr.responseText + ")");
					alert(err.Message)
				}
			});
		} else {
			$.ajax({
				type: "POST",
				url: "/services/divisions.asmx/GetDivisions",
				data: "{}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: function (result) {
					raceMetadata.populateDivisions(result);
				},
				error: function (xhr, status, error) {
					var err = eval("(" + xhr.responseText + ")");
					alert(err.Message)
				}
			});
		}
	},

	populateDivisions: function (divisions) {
		$('.divisionList').append($('<option value="0">Select...</option>'));
		for (var i = 0; i < divisions.length; i++) {
			$('.divisionList').append($('<option></option>').val(divisions[i].Key).html(divisions[i].Name));
		}
		$('.divisionList').val(raceMetadata.defaultDivision);
		raceMetadata.getClasses();
	},

	getClasses: function () {
		var division = $('.divisionList').val();
		$.ajax({
			type: "POST",
			url: "/services/divisions.asmx/GetClasses",
			data: "{'divisionKey':'" + division + "'}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				raceMetadata.populateClasses(result);
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	populateClasses: function (classes) {
		$('.classList option').remove();
		$('.classList').append($('<option value="0">Select...</option>'));
		for (var i = 0; i < classes.length; i++) {
			$('.classList').append($('<option></option>').val(classes[i].Key).html(classes[i].Name));
		}
		$('.classList').val(raceMetadata.defaultClass);
	},

	setupEvents: function () {
		$('.divisionList').change(function () {
			raceMetadata.getClasses();
		})
	},

	setStatus: function () {
		$('#ctl00_ContentPlaceHolder1_defaultClass').attr('value', $('.classList').val());
		$('#ctl00_ContentPlaceHolder1_defaultDivision').attr('value', $('.divisionList').val());
	}
};

var promo = {
	init: function () {
		$('.promoCode').blur(function () {
			var code = $(this).attr('value');
			if (code.length > 0) {
				$.ajax({
					type: "POST",
					url: "/services/raceinfo.asmx/GetDiscount",
					data: "{'promoCode':'" + code + "'}",
					contentType: "application/json; charset=utf-8",
					dataType: "json",
					success: function (result) {

						if (result > 0) {
							var memberFee = utility.stripNonNumeric($('#registrationFee').text());
							var nonMemberFee = utility.stripNonNumeric($('#nonMemberRegistrationFee').text());
							var memberFee = promo.memberFee;
							var nonMemberFee = promo.nonMemberFee;
							var newMemberFee = memberFee - (result * memberFee);
							var newNonMemberFee = nonMemberFee - (result * nonMemberFee);
							if (newMemberFee == 0) {
								$('#registrationFee').text('FREE');
							}
							else {
								$('#registrationFee').text('$' + newMemberFee.toFixed(2));
							}
							if (newNonMemberFee == 0) {
								$('#nonMemberRegistrationFee').text('FREE');
							}
							else {
								$('#nonMemberRegistrationFee').text('$' + newNonMemberFee.toFixed(2));
							}
							$('#promoMessage').remove();
							$('.promoCode').after('<span id="promoMessage">Your promo code has been applied.</span>');
						}
						else {
							$('#promoMessage').remove();
							$('.promoCode').after('<span id="promoMessage">You have used an invalid promo code.</span>');
						}
					},
					error: function (xhr, status, error) {
						var err = eval("(" + xhr.responseText + ")");
						alert(err.Message)
					}
				});
			}
		});
	}
};

var racePrice = {
	init: function () {
		$('.racePrice').change(function () {
			var id = $(this).attr('value');
			if (id.length > 0) {
				$.ajax({
					type: "POST",
					url: "/services/raceinfo.asmx/GetPricing",
					data: "{'Key':'" + id + "'}",
					contentType: "application/json; charset=utf-8",
					dataType: "json",
					success: function (result) {
						racePrice.populatePrice(result);
					},

					error: function (xhr, status, error) {
						var err = eval("(" + xhr.responseText + ")");
						alert(err.Message)
					}
				});
			}
		});
	},

	populatePrice: function (price) {
		$('#registrationFee').text('$' + price.MemberPrice.toFixed(2));
		$('#nonMemberRegistrationFee').text('$' + price.NonMemberPrice.toFixed(2));
		promo.memberFee = utility.stripNonNumeric($('#registrationFee').text());
		promo.nonMemberFee = utility.stripNonNumeric($('#nonMemberRegistrationFee').text());

		if ($('#utility li.name').length > 0) {
			if (price.MemberPrice.toFixed(2) == '0.00') {
				$('#raceFee input').each(function () {
					$(this).removeClass('required');
					$(this).attr('disabled', 'disabled');
				});

				$('#raceFee select').each(function () {
					if ($(this).attr('id') != 'ctl00_ContentPlaceHolder1_PriceList' && $(this).attr('id') != 'ctl00_ContentPlaceHolder1_MemberPriceList') {
						$(this).removeClass('required');
						$(this).attr('disabled', 'disabled');
					}
				});

				$('#paymentSection').hide();
			}
		} else {
			if (price.NonMemberPrice.toFixed(2) == '0.00') {
				$('#raceFee input').each(function () {
					$(this).removeClass('required');
					$(this).attr('disabled', 'disabled');
				});

				$('#raceFee select').each(function () {
					if ($(this).attr('id') != 'ctl00_ContentPlaceHolder1_PriceList' && $(this).attr('id') != 'ctl00_ContentPlaceHolder1_MemberPriceList') {
						$(this).removeClass('required');
						$(this).attr('disabled', 'disabled');
					}
				});

				$('#paymentSection').hide();
			}
		}
	}
};

function cancelGB_Window(){
	window.parent.window.parent.location.reload();
}


function closeGB_Window(){
	window.parent.window.parent.GB_hide();
}

var sponsorTags = {
	tagContainer: '#tags',
	hiddenTags: '#ctl00_ContentPlaceHolder1_Tags',
	listOfTags: '#listOfTags',
	selectedTags: '#selectedTags',

	init: function () {
		sponsorTags.getAllTags();
		sponsorTags.getCategoryTags();
		sponsorTags.saveCategoryTags();
		sponsorTags.deleteCategoryTag();
	},

	getAllTags: function () {
		$.ajax({
			type: "POST",
			url: "/services/sponsors.asmx/GetTags",
			data: "{}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				if (result > 0) {
					var allTags = [];
					for (var i = 0; i < result.length; i++) {
						allTags.push(result[i].Tag);
					}

					$(sponsorTags.selectedTags).autocomplete(allTags, {
						width: 170,
						maxItemsToShow: 4,
						highlight: false,
						multiple: true,
						multipleSeparator: " ",
						scroll: true,
						scrollHeight: 150
					});
				}
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	getCategoryTags: function () {
		var list = $(sponsorTags.hiddenTags).val();
		if (list.length > 0) {
			list = list.split(';');
			var lis = '';
			for (var i = 0; i < list.length; i++) {
				lis = lis + sponsorTags.buildTag(list[i]);
			}
			$(sponsorTags.listOfTags).append(lis);
		}
	},

	saveCategoryTags: function () {
		$(sponsorTags.selectedTag).keypress(function (event) {
			if (event.keyCode == 13) {
				var newTag = $.trim($(sponsorTags.selectedTags).val());
				$(sponsorTags.listOfTags).append(sponsorTags.buildTag(newTag));
				$(sponsorTags.selectedTags).val('');
				sponsorTags.updateHiddenTags();
				return false;
			}
		});
	},

	updateHiddenTags: function () {
		$(sponsorTags.hiddenTags).val('');
		$('li', sponsorTags.listOfTags).each(function () {
			$(sponsorTags.hiddenTags).val($(sponsorTags.hiddenTags).val() + $(this).text() + ';');
		})
	},

	deleteCategoryTag: function () {
		$(sponsorTags.listOfTags).click(function (event) {
			var target = $(event.target);
			if ($(target).attr('nodeName').toLowerCase() == 'img') {
				var parent = $(target).parents('li');
				if (parent.length > 0) {
					$(parent).remove();
					sponsorTags.updateHiddenTags();
				}
			}
			return false;
		})
	},

	buildTag: function (title) {
		return '<li>' + title + '<a href="#" class="delete"><img src="/webresources/images/icons/close.gif" alt="" /></a></li>';
	}
};

var raceTags = {
	tagContainer: '#tags',
	hiddenTags: '#ctl00_ContentPlaceHolder1_Tags',
	listOfTags: '#listOfTags',
	selectedTags: '#selectedTags',

	init: function () {
		raceTags.getAllTags();
		raceTags.getCategoryTags();
		raceTags.saveCategoryTags();
		raceTags.deleteCategoryTag();
	},

	getAllTags: function () {
		$.ajax({
			type: "POST",
			url: "/services/raceinfo.asmx/GetTags",
			data: "{}",
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			success: function (result) {
				if (result.length > 0) {
					var allTags = [];
					for (var i = 0; i < result.length; i++) {
						allTags.push(result[i].Tag);
					}

					$(raceTags.selectedTags).autocomplete(allTags, {
						width: 170,
						maxItemsToShow: 4,
						highlight: false,
						multiple: true,
						multipleSeparator: " ",
						scroll: true,
						scrollHeight: 150
					});
				}
			},
			error: function (xhr, status, error) {
				var err = eval("(" + xhr.responseText + ")");
				alert(err.Message)
			}
		});
	},

	getCategoryTags: function () {
		var list = $('#ctl00_ContentPlaceHolder1_Edit1_Tags').val();

		if (list != undefined) {
			if (list.length > 0) {
				list = list.split(';');
				var lis = '';
				for (var i = 0; i < list.length; i++) {
					lis = lis + raceTags.buildTag(list[i]);
				}
				$(raceTags.listOfTags).append(lis);
			}
		}
	},

	saveCategoryTags: function () {
		$(raceTags.selectedTag).keypress(function (event) {
			if (event.keyCode == 13) {
				var newTag = $.trim($(raceTags.selectedTags).val());
				$(raceTags.listOfTags).append(raceTags.buildTag(newTag));
				$(raceTags.selectedTags).val('');
				raceTags.updateHiddenTags();
				return false;
			}
		})
	},

	updateHiddenTags: function () {
		$('#ctl00_ContentPlaceHolder1_Edit1_Tags').val('');
		$('li', raceTags.listOfTags).each(function () {
			$('#ctl00_ContentPlaceHolder1_Edit1_Tags').val($('#ctl00_ContentPlaceHolder1_Edit1_Tags').val() + $(this).text() + ';');
		})
	},

	deleteCategoryTag: function () {
		$(raceTags.listOfTags).click(function (event) {
			var target = $(event.target);
			if ($(target).attr('nodeName').toLowerCase() == 'img') {
				var parent = $(target).parents('li');
				if (parent.length > 0) {
					$(parent).remove();
					raceTags.updateHiddenTags();
				}
			}
			return false;
		})
	},

	buildTag: function (title) {
		return '<li>' + title + '<a href="#" class="delete"><img src="/webresources/images/icons/close.gif" alt="" /></a></li>';
	}
};

$(document).ready(function () {
	//    if ($('#tabs').length > 0) {
	//        $('#tabs').tabs();
	//    }
	tooltip.init();
	promo.init();
	racePrice.init();
	utility.init();
	menu.init();

	$('#registerPage2').hide();

	$('a#Continue').click(function () {
		var goOn = validation.init('#registerPage1');
		if (goOn) {
			$('#registerPage1').hide('slow');
			$('#registerPage2').show('slow');
		}
	});

	$('a#Back').click(function () {
		$('#registerPage2').hide('slow');
		$('#registerPage1').show('slow');
	});

});
